<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?action=history&amp;feed=atom&amp;title=Houdini_VEX</id>
	<title>Houdini VEX - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?action=history&amp;feed=atom&amp;title=Houdini_VEX"/>
	<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;action=history"/>
	<updated>2026-04-29T18:15:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=860&amp;oldid=prev</id>
		<title>Bernie: /* Visualize parameter */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=860&amp;oldid=prev"/>
		<updated>2025-07-29T12:31:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Visualize parameter&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:31, 29 July 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Remap curve ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://i.imgur.com/Kh9phrT.png&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Edit the point placement along the length of a (parametric) curve using a remap curve&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vector uv;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;int prim;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;xyzdist(0,@P,prim,uv);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;float umapped = chramp(&quot;remap&quot;,uv[0]);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uv[0] = umapped;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;@P = primuv(0,&quot;P&quot;,prim,uv);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Visualize parameter ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Visualize parameter ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Why look at the animation editor when you can have a shittier version in the viewport. Don&amp;#039;t ask questions, it helped me.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Why look at the animation editor when you can have a shittier version in the viewport. Don&amp;#039;t ask questions, it helped me.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=826&amp;oldid=prev</id>
		<title>Bernie: /* Connect random points by direction */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=826&amp;oldid=prev"/>
		<updated>2024-06-07T10:07:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Connect random points by direction&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:07, 7 June 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l71&quot;&gt;Line 71:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 71:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Alternatively read from point value (like injecting a sharp change of direction)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Alternatively read from point value (like injecting a sharp change of direction)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Give preference to an axis (imagine a tightly wound spiral) so that it still works and doesn&amp;#039;t pick up weird points&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Give preference to an axis (imagine a tightly wound spiral) so that it still works and doesn&amp;#039;t pick up weird points&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Give priorities to points that have confidence in the previous points, remove them from the available point list (would correct the example in my video)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=825&amp;oldid=prev</id>
		<title>Bernie: /* List of things to Read */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=825&amp;oldid=prev"/>
		<updated>2024-06-05T13:52:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;List of things to Read&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:52, 5 June 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l378&quot;&gt;Line 378:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 378:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== List of things to Read ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== List of things to Read ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * Jake rice primUvs / split / greeble: https://github.com/jakericedesigns/Poly-Splitting-Blog&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  * Jake rice primUvs / split / greeble: https://github.com/jakericedesigns/Poly-Splitting-Blog&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; * Un-catmullclarking https://dspace5.zcu.cz/bitstream/11025/6630/1/Laquentin.pdf&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Get primitive angles==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Get primitive angles==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=805&amp;oldid=prev</id>
		<title>Bernie: /* Oriented bounding box matrix transform */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=805&amp;oldid=prev"/>
		<updated>2024-04-25T12:49:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Oriented bounding box matrix transform&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:49, 25 April 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l414&quot;&gt;Line 414:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 414:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Oriented bounding box matrix transform ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Oriented bounding box matrix transform ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(2024 edit: I think this is broken I will look into it, in the meantime there is a labs sop that does the same thing, better)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Applying https://vimeo.com/214584753 with wrangle: rotates points with given perpendicular vectors&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Applying https://vimeo.com/214584753 with wrangle: rotates points with given perpendicular vectors&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;expects oriented BB from &amp;#039;box&amp;#039; as a second input&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;expects oriented BB from &amp;#039;box&amp;#039; as a second input&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=776&amp;oldid=prev</id>
		<title>Bernie: a</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=776&amp;oldid=prev"/>
		<updated>2024-03-22T11:49:36Z</updated>

		<summary type="html">&lt;p&gt;a&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:49, 22 March 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l256&quot;&gt;Line 256:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 256:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if( findattribvalcount(1,&amp;quot;prim&amp;quot;,&amp;quot;name&amp;quot;,name) &amp;lt; 1 ){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if( findattribvalcount(1,&amp;quot;prim&amp;quot;,&amp;quot;name&amp;quot;,name) &amp;lt; 1 ){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         removeprim(0,i,1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         removeprim(0,i,1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In case of points, let&#039;s say you split the stream, froze one bit at one frame, deleted a few particles, duplicated that setup a few times, here&#039;s one way to take the original stream and only remove particles that don&#039;t exist in the second input (i have special id called uid) &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for(int i=0;i&amp;lt;npoints(0);i++){&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    int uid = point(0,&quot;uid&quot;,i);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if( findattribvalcount(1,&quot;point&quot;,&quot;uid&quot;,uid) &amp;lt; 1 ){&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        removepoint(0,i,1);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=683&amp;oldid=prev</id>
		<title>Bernie: /* Visualize parameter */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=683&amp;oldid=prev"/>
		<updated>2023-04-17T09:46:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Visualize parameter&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:46, 17 April 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l5&quot;&gt;Line 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//second input of detail wrangle should be &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;frozeen &lt;/del&gt;frame, &amp;#039;parm&amp;#039; channel is a path to the parm you want to see graphed, which can be an expression&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;//second input of detail wrangle should be &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;frozen &lt;/ins&gt;frame, &amp;#039;parm&amp;#039; channel is a path to the parm you want to see graphed, which can be an expression&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;vector curPos;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;vector curPos;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;vector scalept(vector normalizedpt){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;vector scalept(vector normalizedpt){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     vector bs = getbbox_size(1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     vector bs = getbbox_size(1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     float size = max(bs[0],max(bs[1],bs[2]));&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     float size = max(bs[0],max(bs[1],bs[2]))&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/3&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     vector bb = getbbox_center(1);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     vector bb = getbbox_center(1);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return ((normalizedpt-{.5,-.1,0})*size+bb);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return ((normalizedpt-{.5,-.1,0})*size+bb);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l25&quot;&gt;Line 25:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 25:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     int newpoint = addpoint(0,scalept(pos));&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     int newpoint = addpoint(0,scalept(pos));&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     append(pts,newpoint);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     append(pts,newpoint);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(i==@Frame){&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(i&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;+start&lt;/ins&gt;==@Frame){&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         curPos = pos;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         curPos = pos;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=667&amp;oldid=prev</id>
		<title>Bernie: /* Visualize parameter */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Houdini_VEX&amp;diff=667&amp;oldid=prev"/>
		<updated>2023-03-14T14:14:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Visualize parameter&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Visualize parameter ==&lt;br /&gt;
Why look at the animation editor when you can have a shittier version in the viewport. Don&amp;#039;t ask questions, it helped me.&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/T5kLfEM.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//second input of detail wrangle should be frozeen frame, &amp;#039;parm&amp;#039; channel is a path to the parm you want to see graphed, which can be an expression&lt;br /&gt;
&lt;br /&gt;
vector curPos;&lt;br /&gt;
//---graph--&lt;br /&gt;
&lt;br /&gt;
vector scalept(vector normalizedpt){&lt;br /&gt;
    vector bs = getbbox_size(1);&lt;br /&gt;
    float size = max(bs[0],max(bs[1],bs[2]));&lt;br /&gt;
    vector bb = getbbox_center(1);&lt;br /&gt;
    return ((normalizedpt-{.5,-.1,0})*size+bb);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int start = `$FSTART`;&lt;br /&gt;
int end = `$FEND`;&lt;br /&gt;
int pts[] = {};&lt;br /&gt;
for(int i=0;i&amp;lt;end-start+1;i++){&lt;br /&gt;
    float val = ch(chs(&amp;#039;parm&amp;#039;),float(i+start)*@TimeInc);&lt;br /&gt;
    vector pos = set(float(i)/(end-start),val,0);&lt;br /&gt;
    int newpoint = addpoint(0,scalept(pos));&lt;br /&gt;
    append(pts,newpoint);&lt;br /&gt;
    if(i==@Frame){&lt;br /&gt;
        curPos = pos;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
addprim(0,&amp;quot;polyline&amp;quot;,pts);&lt;br /&gt;
&lt;br /&gt;
//-----------&lt;br /&gt;
&lt;br /&gt;
pts  = {};&lt;br /&gt;
float y = chf(&amp;#039;yMax&amp;#039;);&lt;br /&gt;
int ptA =  addpoint(0,scalept(set(0.0,y,0)));&lt;br /&gt;
int ptB =  addpoint(0,scalept(set(1.0,y,0)));&lt;br /&gt;
append(pts,ptA);&lt;br /&gt;
append(pts,ptB);&lt;br /&gt;
addprim(0,&amp;quot;polyline&amp;quot;,pts);&lt;br /&gt;
&lt;br /&gt;
//---x-------&lt;br /&gt;
&lt;br /&gt;
pts  = {};&lt;br /&gt;
ptA =  addpoint(0,scalept(curPos+set(-.01,-.01,0)));&lt;br /&gt;
ptB =  addpoint(0,scalept(curPos+set(.01,.01,0)));&lt;br /&gt;
append(pts,ptA);&lt;br /&gt;
append(pts,ptB);&lt;br /&gt;
int line = addprim(0,&amp;quot;polyline&amp;quot;,pts);&lt;br /&gt;
setprimattrib(0, &amp;#039;Cd&amp;#039;, line, set(1,0,0), &amp;#039;set&amp;#039;);&lt;br /&gt;
pts  = {};&lt;br /&gt;
ptA =  addpoint(0,scalept(curPos+set(.01,-.01,0)));&lt;br /&gt;
ptB =  addpoint(0,scalept(curPos+set(-.01,.01,0)));&lt;br /&gt;
append(pts,ptA);&lt;br /&gt;
append(pts,ptB);&lt;br /&gt;
line = addprim(0,&amp;quot;polyline&amp;quot;,pts);&lt;br /&gt;
setprimattrib(0, &amp;#039;Cd&amp;#039;, line, set(1,0,0), &amp;#039;set&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect random points by direction ==&lt;br /&gt;
&lt;br /&gt;
WIP-ish but was enough for what I needed might polish later (I did add some error checking though why the fuck...)&lt;br /&gt;
&lt;br /&gt;
This code takes two points or two group of points (of equal size) and attemps to connect points that are in the direction of a,b pairs given a maximum cone angle. This can be useful if you have randomly sorted points and the &amp;#039;&amp;#039;Connect Adjacent Pieces&amp;#039;&amp;#039; + &amp;#039;&amp;#039;Find Shortest Path&amp;#039;&amp;#039; SOPSs arent doing what you want. Which was my case, or I might have over-engineered something stupid.&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/uBQPOSL.gif&lt;br /&gt;
&lt;br /&gt;
TBD:&lt;br /&gt;
* Allow for adaptive cone width (if you get increasingly sharper &amp;#039;turns&amp;#039;)&lt;br /&gt;
* Alternatively read from point value (like injecting a sharp change of direction)&lt;br /&gt;
* Give preference to an axis (imagine a tightly wound spiral) so that it still works and doesn&amp;#039;t pick up weird points&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    int a[],b[],bigAssPointsArray[];&lt;br /&gt;
    vector dirs[];&lt;br /&gt;
    vector posA,posB;&lt;br /&gt;
    &lt;br /&gt;
// channel values values hit the button to create --&amp;gt;&lt;br /&gt;
    string grp = chs(&amp;#039;group&amp;#039;);&lt;br /&gt;
    float dist = ch(&amp;#039;max_search_distance&amp;#039;);     // 1&lt;br /&gt;
    float cone = radians(ch(&amp;#039;cone_degrees&amp;#039;));   // 10       &lt;br /&gt;
    int iterations = chi(&amp;#039;iteration&amp;#039;);          // 4&lt;br /&gt;
    // V use direction if no second set of point(s) found: &lt;br /&gt;
    vector dir = normalize(chv(&amp;#039;start_dir&amp;#039;));   // 1 0 0&lt;br /&gt;
&lt;br /&gt;
// grp cleaning&lt;br /&gt;
    string error = &amp;#039;&amp;#039;;&lt;br /&gt;
    if(grp != &amp;#039;&amp;#039;){&lt;br /&gt;
        //if we found groups:&lt;br /&gt;
        if(find(grp,&amp;#039; &amp;#039;)&amp;gt;0){&lt;br /&gt;
            //if there is more than one it means we have two separate lists (or two points)&lt;br /&gt;
            string grps[] = split(grp,&amp;#039; &amp;#039;,1);&lt;br /&gt;
            if(len(grps)&amp;gt;2){&lt;br /&gt;
                error = &amp;#039;more than two groups found!&amp;#039;;&lt;br /&gt;
            }else{&lt;br /&gt;
                a = expandpointgroup(0,grps[0],&amp;quot;ordered&amp;quot;);&lt;br /&gt;
                b = expandpointgroup(0,grps[1],&amp;quot;ordered&amp;quot;);&lt;br /&gt;
                if(len(a)!=len(b)){&lt;br /&gt;
                    error = &amp;#039;the two groups have different point counts&amp;#039;;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }else{&lt;br /&gt;
            b = expandpointgroup(0,grp,&amp;quot;ordered&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }else{&lt;br /&gt;
        error = &amp;#039;at least group or point needed&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    if(error!=&amp;#039;&amp;#039;){&lt;br /&gt;
        error(error);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// do the work&lt;br /&gt;
    &lt;br /&gt;
    if(len(a)==0){&lt;br /&gt;
        //no second group, fill directions array with initial start dir&lt;br /&gt;
        for(int i = 0 ; i &amp;lt; len(b) ; i ++){&lt;br /&gt;
            append(dirs,dir);&lt;br /&gt;
        }&lt;br /&gt;
    }else{&lt;br /&gt;
        //if there are two destinct groups, create a vector array with initial directions&lt;br /&gt;
        for(int i = 0 ; i &amp;lt; len(b) ; i ++){&lt;br /&gt;
            posA = point( 0 , &amp;#039;P&amp;#039; , a[i] );&lt;br /&gt;
            posB = point( 0 , &amp;#039;P&amp;#039; , b[i] );&lt;br /&gt;
            vector direction = normalize(posB-posA);&lt;br /&gt;
            append(dirs,direction);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for(int j=0 ; j&amp;lt;len(b) ; j++){&lt;br /&gt;
        //for every point of the second group start finding out if there are points in the dir direction&lt;br /&gt;
        posB = point(0,&amp;#039;P&amp;#039;,b[j]);&lt;br /&gt;
        dir = dirs[j];&lt;br /&gt;
        if(len(a)&amp;gt;0){&lt;br /&gt;
            append(bigAssPointsArray,a[j]);&lt;br /&gt;
        }&lt;br /&gt;
        append(bigAssPointsArray,b[j]);&lt;br /&gt;
        for(int i=1; i&amp;lt;=iterations;i++){&lt;br /&gt;
            int points_found[] = pccone_radius(0,&amp;quot;P&amp;quot;,&amp;quot;none&amp;quot;,0.0,posB,dir,cone,dist,2);&lt;br /&gt;
            if(len(points_found)==1){&lt;br /&gt;
                //if nothing is found during the point cloud cone search, color the last point and break forloop&lt;br /&gt;
                setpointattrib(0,&amp;quot;Cd&amp;quot;,points_found[0],{1,0,0},&amp;quot;set&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            }else{&lt;br /&gt;
                //we found a point ! use it for the next iteration&lt;br /&gt;
                int chosenpoint = points_found[1];&lt;br /&gt;
                append(bigAssPointsArray,chosenpoint);&lt;br /&gt;
                posA = posB;&lt;br /&gt;
                posB = point(0,&amp;quot;P&amp;quot;,chosenpoint);&lt;br /&gt;
                dir = normalize(posB - posA);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /* we finished the max iterations, we could add the poly prim in the&lt;br /&gt;
        for loop but houdini doesn&amp;#039;t like it ? And no way to have multi&lt;br /&gt;
        dimensional array so let&amp;#039;s fill up a big ass one and split with&lt;br /&gt;
        a non-existing point number -1 */&lt;br /&gt;
            &lt;br /&gt;
        append(bigAssPointsArray,-1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
//build the poly lines&lt;br /&gt;
    int pointsArray[] = {};&lt;br /&gt;
    int pr = addprim(0,&amp;#039;polyline&amp;#039;);&lt;br /&gt;
    for(int i=0;i&amp;lt;len(bigAssPointsArray)-1;i++){&lt;br /&gt;
        int pt = bigAssPointsArray[i];&lt;br /&gt;
        if(pt == -1){&lt;br /&gt;
            pr = addprim(0,&amp;#039;polyline&amp;#039;);&lt;br /&gt;
        }else{&lt;br /&gt;
            int newpt = addpoint(0,pt);&lt;br /&gt;
            addvertex(0,pr,pt);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Radial sort ==&lt;br /&gt;
=== sorting ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector bbcenter = getpointbbox_center(0);&lt;br /&gt;
float dx = bbcenter.x-@P.x;&lt;br /&gt;
float dz = bbcenter.z-@P.z;&lt;br /&gt;
@angle = atan2(dx,dz); //radians&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then sort sop&lt;br /&gt;
=== Galaxy like animation with particles ===&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/ZyzlOia.gif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector bbcenter = set(0,0,0);&lt;br /&gt;
float dx = bbcenter.x-@P.x;&lt;br /&gt;
float dz = bbcenter.z-@P.z;&lt;br /&gt;
float mag = distance(@P,bbcenter);&lt;br /&gt;
@angle = atan2(dx,dz); //radians&lt;br /&gt;
&lt;br /&gt;
float ringmult = snoise(@P);&lt;br /&gt;
ringmult = fit(ringmult,-1,1,.8,1.6);&lt;br /&gt;
&lt;br /&gt;
@t=ringmult;&lt;br /&gt;
@angle += @Time * fit(rand(@ptnum),0,1,.5,.75) * 1 / pow(mag,ch(&amp;#039;exp&amp;#039;)) * ringmult;&lt;br /&gt;
&lt;br /&gt;
@P.x = cos(@angle) * mag;&lt;br /&gt;
@P.z = sin(@angle) * mag;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gradient Lattice ==&lt;br /&gt;
Simple XYZ&amp;lt;&amp;gt;splines deformer &lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/M1XaRdH.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector bb = relbbox(0,@P);&lt;br /&gt;
vector m = getbbox_min(0);&lt;br /&gt;
vector M = getbbox_max(0);&lt;br /&gt;
@P.x = lerp(m.x,M.x,chramp(&amp;quot;x&amp;quot;, bb.r));&lt;br /&gt;
@P.y = lerp(m.y,M.y,chramp(&amp;quot;y&amp;quot;, bb.g));&lt;br /&gt;
@P.z = lerp(m.z,M.z,chramp(&amp;quot;z&amp;quot;, bb.b));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Move points to sdf surface ==&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/cDlX1px.gif&lt;br /&gt;
&lt;br /&gt;
The second input is a number of iterations to refine the stickiness&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//move points towards the surface of the sdf using gradient&lt;br /&gt;
vector p = @P;&lt;br /&gt;
int max = chi(&amp;#039;max&amp;#039;);&lt;br /&gt;
for(int i=0;i&amp;lt;max;i++){&lt;br /&gt;
    vector noise = vector(noise(p)) - .5;&lt;br /&gt;
    noise *= ch(&amp;#039;noise&amp;#039;) ;&lt;br /&gt;
    float reach = volumesample(1,0,p+noise);&lt;br /&gt;
    p -= normalize(volumegradient(1,0,p+noise))*reach*(1.0*(i+1)/max)*ch(&amp;#039;mult&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
@P = p;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remove geometry that isn&amp;#039;t in the other stream== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;better edit&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;: keeping the code below if I have an edge case but it&amp;#039;s faster (?) or at least clearer to use idtoprim() or idtopoint(), example here: [[Houdini_Stupid_Questions#How_do_I_work_on_two_objects_that_don&amp;#039;t_have_the_same_number_of_points/prims|How do I work on two objects that don&amp;#039;t have the same number of points/prims?]]&lt;br /&gt;
&lt;br /&gt;
For each prim check that it exists in the second input, if not, delete.&lt;br /&gt;
&lt;br /&gt;
I use this when I have proxy geometry which I have deleted and need the same deletion on the hirez packed geo (so I can use the transform pieces) as shown in the image below&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/zp4sYEe.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for(int i=0;i&amp;lt;nprimitives(0);i++){&lt;br /&gt;
    string name = prim(0,&amp;quot;name&amp;quot;,i);&lt;br /&gt;
    if( findattribvalcount(1,&amp;quot;prim&amp;quot;,&amp;quot;name&amp;quot;,name) &amp;lt; 1 ){&lt;br /&gt;
        removeprim(0,i,1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remove duplicate prims== &lt;br /&gt;
Only keep a single instance of a primitive that has specific attribute values on its corresponding points (think constraints):&lt;br /&gt;
&lt;br /&gt;
Walkthrough:&lt;br /&gt;
* We first retrieve the prim&amp;#039;s points&amp;#039; values and merge them&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//in a prim wrangle&lt;br /&gt;
int pt_ids[] = sort(primpoints(0,@primnum));&lt;br /&gt;
string point_A = point(0,&amp;quot;name&amp;quot;,pt_ids[0]);&lt;br /&gt;
string point_B = point(0,&amp;quot;name&amp;quot;,pt_ids[1]);&lt;br /&gt;
s@linkedpoints = join(sort(array(point_A,point_B)),&amp;quot;+&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* We sort prims by that concatenated attribute (like &amp;quot;nameA+nameB&amp;quot;)&lt;br /&gt;
&amp;#039;Sort&amp;#039; sop by prim attribute &amp;quot;linkedpoints&amp;quot;&lt;br /&gt;
* We finally go through the prims and look if the preceding prim already has that attribute value. If so, we deleted the prim&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//in a detail wrangle&lt;br /&gt;
string previous_linkedpoints = prim(0,&amp;quot;linkedpoints&amp;quot;,0);&lt;br /&gt;
for(int i=1;i&amp;lt;nprimitives(0);i++){&lt;br /&gt;
     string current_linkedpoints = prim(0,&amp;quot;linkedpoints&amp;quot;,i);&lt;br /&gt;
     if( current_linkedpoints == previous_linkedpoints ){&lt;br /&gt;
        removeprim(0,i,1);&lt;br /&gt;
     }&lt;br /&gt;
     previous_linkedpoints = current_linkedpoints;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hanging wire (parabola/catanery)==&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/GDzkzii.png https://i.imgur.com/1Wg0G53.gif&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Catenary&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// takes points and creates hanging &amp;#039;wire&amp;#039; points between said points, using the catenery formula.  &lt;br /&gt;
// Use in a detail wrangle, make sure to hit the &amp;#039;Create spare parameter on the right &amp;gt;&amp;#039; and add &lt;br /&gt;
// values like curve factor 3 and Rez 10 &lt;br /&gt;
&lt;br /&gt;
vector pts[];&lt;br /&gt;
int data[];&lt;br /&gt;
&lt;br /&gt;
float curve = ch(&amp;#039;curve_factor&amp;#039;);                        // &amp;gt; 0, gets close to a flat line when you go above 5  &lt;br /&gt;
int rez = chi(&amp;#039;rez&amp;#039;);                                    //number of points to create between given points (assumes the points are at uniform-ish distances)&lt;br /&gt;
rez+=1;&lt;br /&gt;
&lt;br /&gt;
vector firstpointpos = point(0,&amp;#039;P&amp;#039;,0);&lt;br /&gt;
append(pts,firstpointpos);&lt;br /&gt;
append(data,1);&lt;br /&gt;
removepoint(0,0); &lt;br /&gt;
&lt;br /&gt;
//go through initial points and append catenary coordinates to array with given resolution&lt;br /&gt;
for(int i=1;i&amp;lt;npoints(0);i++){&lt;br /&gt;
    vector a = point(0,&amp;#039;P&amp;#039;,i-1);&lt;br /&gt;
    vector b = point(0,&amp;#039;P&amp;#039;,i);&lt;br /&gt;
    for(int j=1;j&amp;lt;rez;j++){&lt;br /&gt;
        float lerpV = j*1.0/rez;                         // ( 0 &amp;lt; lerpV &amp;lt; 1 ) &lt;br /&gt;
        vector mix = lerp(a,b,lerpV);&lt;br /&gt;
        mix.y = mix.y + curve * cosh((lerpV-.5)/curve);&lt;br /&gt;
        mix.y -= curve * cosh(-.5/curve);&lt;br /&gt;
        append(pts,mix);&lt;br /&gt;
        append(data,0);&lt;br /&gt;
    }&lt;br /&gt;
    append(pts,b);&lt;br /&gt;
    append(data,1);&lt;br /&gt;
    removepoint(0,i);                                   //delete original point&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//create points by reading array, adding group attributes as we go&lt;br /&gt;
&lt;br /&gt;
int newpts[] = {}; &lt;br /&gt;
for (int k = 0; k&amp;lt;len(pts);k++){&lt;br /&gt;
    int newpoint = addpoint(0,pts[k]);&lt;br /&gt;
    append(newpts,newpoint);&lt;br /&gt;
    setpointgroup(0, &amp;quot;original&amp;quot;, newpoint, data[k], &amp;quot;set&amp;quot;);&lt;br /&gt;
    if(data[k]){&lt;br /&gt;
        setpointattrib(0,&amp;quot;Cd&amp;quot;,newpoint,{1,0,0});    &lt;br /&gt;
    }else{&lt;br /&gt;
        setpointattrib(0,&amp;quot;Cd&amp;quot;,newpoint,{0,0,1});    &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//join with polyline&lt;br /&gt;
addprim(0,&amp;quot;polyline&amp;quot;,newpts);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Torus / Helix (Toroidal Helical Coil)==&lt;br /&gt;
https://i.imgur.com/R0QNZx9.png&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
float t = 1.0*@elemnum/@numelem ;&lt;br /&gt;
&lt;br /&gt;
float completion = ch(&amp;#039;completion&amp;#039;) * 2 * $PI;&lt;br /&gt;
float coils = ch(&amp;#039;coils&amp;#039;);&lt;br /&gt;
float R = ch(&amp;#039;outerRadius&amp;#039;);&lt;br /&gt;
float r = ch(&amp;#039;innerRadius&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
float u = t * completion * coils ;&lt;br /&gt;
float v = t * completion ;&lt;br /&gt;
&lt;br /&gt;
float x = cos(v)*(R+r*cos(u));&lt;br /&gt;
float y = sin(v)*(R+r*cos(u));&lt;br /&gt;
float z = r * sin(u);&lt;br /&gt;
&lt;br /&gt;
@P = set(x,y,z);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List of things to Read ==&lt;br /&gt;
 * Jake rice primUvs / split / greeble: https://github.com/jakericedesigns/Poly-Splitting-Blog&lt;br /&gt;
&lt;br /&gt;
== Get primitive angles==&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/s3TEwHc.png&lt;br /&gt;
&lt;br /&gt;
Calculates the minimum angle (sharp) of each triangle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//if each prim = triangle&lt;br /&gt;
&lt;br /&gt;
//get the 3 prim points&lt;br /&gt;
int pp[] = primpoints(0,@primnum);&lt;br /&gt;
&lt;br /&gt;
//grab their positions&lt;br /&gt;
vector a = point(0,&amp;quot;P&amp;quot;,pp[0]);&lt;br /&gt;
vector b = point(0,&amp;quot;P&amp;quot;,pp[1]);&lt;br /&gt;
vector c = point(0,&amp;quot;P&amp;quot;,pp[2]);&lt;br /&gt;
&lt;br /&gt;
//get the vectors to calculate angle&lt;br /&gt;
vector ab = b-a;&lt;br /&gt;
vector ac = c-a;&lt;br /&gt;
vector cb = b-c;&lt;br /&gt;
&lt;br /&gt;
//get angles from law of cosines: arccos(Ab.Ac) where Ab and Ac are normalized vectors&lt;br /&gt;
float angleA = degrees(acos(dot(normalize(ab),normalize(ac))));&lt;br /&gt;
float angleB = degrees(acos(dot(normalize(-ab),normalize(-cb))));&lt;br /&gt;
float angleC = 180-angleA-angleB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//@angleC = degrees(acos(dot(normalize(-ac),normalize(cb))));&lt;br /&gt;
//@angletotal = @angleA+@angleB+@angleC; // &amp;lt;-- should always be 180!&lt;br /&gt;
&lt;br /&gt;
@minAngle = min(angleA,min(angleB,angleC));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oriented bounding box matrix transform ==&lt;br /&gt;
Applying https://vimeo.com/214584753 with wrangle: rotates points with given perpendicular vectors&lt;br /&gt;
expects oriented BB from &amp;#039;box&amp;#039; as a second input&lt;br /&gt;
&lt;br /&gt;
http://i.imgur.com/29RqKNQ.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector p0 = point(1,&amp;quot;P&amp;quot;,0);&lt;br /&gt;
vector p3 = point(1,&amp;quot;P&amp;quot;,3);&lt;br /&gt;
vector p4 = point(1,&amp;quot;P&amp;quot;,4);&lt;br /&gt;
&lt;br /&gt;
vector x = normalize(p3-p0);&lt;br /&gt;
vector z = normalize(p4-p0);&lt;br /&gt;
vector y = cross(x,z);&lt;br /&gt;
&lt;br /&gt;
matrix m = set(x[0],x[1],x[2],0,y[0],y[1],y[2],0,z[0],z[1],z[2],0,0,0,0,0);&lt;br /&gt;
@P = invert (m)*@P;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Plexus like effect==&lt;br /&gt;
http://imgur.com/o81IHkV.png&lt;br /&gt;
&lt;br /&gt;
Full copypastable code on http://pastebin.com/raw/nB9GLeiZ&lt;br /&gt;
&lt;br /&gt;
Trails can be done with the entagma tutorial: http://www.entagma.com/creating-geometry-with-vex/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//create an attribute on prims that will store the unique hash so we can remove duplicates later on&lt;br /&gt;
if(!hasprimattrib(0,&amp;#039;hash&amp;#039;))&lt;br /&gt;
{&lt;br /&gt;
    addprimattrib(0,&amp;#039;hash&amp;#039;, 0, &amp;#039;int&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//fetch the neighbours in an array&lt;br /&gt;
int neighbours[] = nearpoints(0, @P, ch(&amp;#039;radius&amp;#039;), (chi(&amp;#039;neighbours&amp;#039;)+1) )[1:];&lt;br /&gt;
int neighbourCount = len(neighbours);&lt;br /&gt;
&lt;br /&gt;
//only create triangles if there&amp;#039;s more than one neighbour&lt;br /&gt;
if (neighbourCount &amp;gt; 1)&lt;br /&gt;
{&lt;br /&gt;
    //for each neighbour, create all possible triangles with current point (ie for &amp;#039;a&amp;#039; and b,c,d =&amp;gt; abc abd acd)&lt;br /&gt;
    for(int i=0;i&amp;lt;neighbourCount;i++)&lt;br /&gt;
    {       &lt;br /&gt;
        for(int j=i+1;j&amp;lt;neighbourCount;j++)&lt;br /&gt;
        {&lt;br /&gt;
            //create an array with the 3 current points to create a triangle&lt;br /&gt;
            int sortPoints[];&lt;br /&gt;
            sortPoints[0] = @ptnum;&lt;br /&gt;
            sortPoints[1] = neighbours[i];&lt;br /&gt;
            sortPoints[2] = neighbours[j];&lt;br /&gt;
            sortPoints = sort(sortPoints);&lt;br /&gt;
            &lt;br /&gt;
            //create triangle&lt;br /&gt;
            int prim = addprim(0,&amp;#039;poly&amp;#039;);&lt;br /&gt;
            addvertex(0,prim,sortPoints[0]);&lt;br /&gt;
            addvertex(0,prim,sortPoints[1]);&lt;br /&gt;
            addvertex(0,prim,sortPoints[2]);&lt;br /&gt;
            &lt;br /&gt;
            //generate a &amp;#039;hash&amp;#039; of the triangle prim, so we can remove duplicates later on&lt;br /&gt;
            //for points 1,3,0 it will be hash(013) --&amp;gt; 67429030&lt;br /&gt;
            int rhash = random_ihash(atoi(itoa(sortPoints[0])+itoa(sortPoints[1])+itoa(sortPoints[2])));&lt;br /&gt;
            setprimattrib(0, &amp;#039;hash&amp;#039;, prim, rhash, &amp;#039;set&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
</feed>