<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ldraw.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=OrionP</id>
	<title>LDraw.org Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ldraw.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=OrionP"/>
	<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/wiki/Special:Contributions/OrionP"/>
	<updated>2026-04-05T19:45:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Primitives_Reference&amp;diff=6924</id>
		<title>Primitives Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Primitives_Reference&amp;diff=6924"/>
		<updated>2023-12-19T17:19:11Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;LDraw Primitives Reference&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page is a source of reference for the LDraw primitives in the \LDraw\p directory. Primitives are defined as highly re-usable components of LEGO parts modelled for LDraw.&lt;br /&gt;
They serve several purposes :&lt;br /&gt;
&lt;br /&gt;
* To speed up parts authoring by providing a library of components which can be incorporated into several parts&lt;br /&gt;
* To allow rendering software to make substitutions of curved components&lt;br /&gt;
&lt;br /&gt;
Within this reference material the available primitives are categorised into:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each section contains an overview of the characteristics common to all primitives within that category. Primitives are grouped into classes within each category - one class of primitive serving a similar purpose at different sizes or resolutions. For each class of primitive, a brief description of the purpose of the primitive is provided, with notes on its co-ordinate origin, default size and rules for scaling. A list of the available primitives is shown.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XYZaxes.png|200px|middle|alt=Axes]]An understanding of the orientation of the co-ordinate axes is essential for authoring a part for LDraw. For reference within this page the axes and their direction is shown in this diagram.&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rectilinear primitives==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nomenclature&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Boxes are named boxF, with F representing the number of faces a box has. The suffix E represents the number of edges removed.&lt;br /&gt;
&lt;br /&gt;
F and E are may followed by an additional letter. The hyphen is removed if F is accompanied by a modifier.&lt;br /&gt;
&lt;br /&gt;
Face modifiers:&lt;br /&gt;
&lt;br /&gt;
* o - faces are opposite to each other&lt;br /&gt;
* t - faces are all touching each other (usually, it&#039;s implied, but box4t.dat is a thing)&lt;br /&gt;
* u - missing faces form a U-shape&lt;br /&gt;
&lt;br /&gt;
Edge letters:&lt;br /&gt;
&lt;br /&gt;
* p - groups of edges are parallel to each other&lt;br /&gt;
* a - some missing faces have no adjacent edges&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scaling and orientation&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
These rectilinear elements may be scaled in the {x}, {y} and {z} dimensions to make elements of any size. For example&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;40 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;rect.dat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
would generate a 80LDu x 40LDu rectangle in the {x,z} plane.&lt;br /&gt;
&lt;br /&gt;
Although the default orientation of the rect.dat primitive is in the {x,z} plane the LDraw language allows for this to be transformed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;40 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;rect.dat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
would generate a 80LDu x 40LDu rectangle in the {y,z} plane.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;40 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;rect.dat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
would generate a 80LDu x 40LDu rectangle in the {x,y} plane.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
=== Two dimensional ===&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;triangle.dat&#039;&#039;&#039; || &#039;&#039;&#039;Triangle with all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:triangle.png|200px|thumb|alt=Triangle]]&lt;br /&gt;
|| This primitive represents a isosceles right triangle in the {x,z} plane and the three edges that bound it. Its origin is at the tip of the right angle and by default has a size of 1LDu in each of the {x} and {z} dimensions. To avoid matrix arithmetic problems in some renderers, the third dimension ({y} in the default orientation) must be given a non-zero scaling factor.&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;triangle.dat  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;rect.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect.png|200px|thumb|alt=Rect]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane and the four edges that bound it. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 3 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect3.png|200px|thumb|alt=Rect3]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but excludes one edge {-z}. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 2 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect2p.png|200px|thumb|alt=Rect2p]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but excludes two parallel edges ({+x} and {-x}). Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect2a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 2 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect2a.png|200px|thumb|alt=Rect2a]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but excludes two adjacent edges ({-x} and {-z}). Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect1.png|200px|thumb|alt=Rect1]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but include only the one {+x} edge. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions.  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;recte3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Empty rectangle with three edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:recte3.png|200px|thumb|alt=Recte3]]&lt;br /&gt;
|| This primitive represents three edges of a rectangle in the {x,z} plane. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;recte4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Empty rectangle with all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:recte4.png|200px|thumb|alt=Recte4]]&lt;br /&gt;
|| This primitive represents the four edges of a rectangle in the {x,z} plane. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
=== Three dimensional ===&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;box.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with all faces and edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box.png|200px|thumb|alt=Box]]&lt;br /&gt;
|| This primitive is used to define a cuboid. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the three dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box0.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with no faces and edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box0.png|200px|thumb|alt=Box0]]&lt;br /&gt;
|| This primitive is used to define the frame a cuboid. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the three dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces and all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5.png|200px|thumb|alt=Box5]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces without 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-1.png|200px|thumb|alt=Box5-1]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and one edge {-z} of that. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces without 2 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-2p.png|200px|thumb|alt=Box5-2p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and two of the four edges surrounding that. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces without top edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-4a.png|200px|thumb|alt=Box5-4a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and the four edges surrounding that. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-12.png|200px|thumb|alt=Box5-12]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and all edges. Its primary use is for sticker parts. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Box4 overview&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[File:Box4_Overview.PNG|thumb|600px|left|alt=Box4 Overview]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 parallel faces and all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4.png|200px|thumb|alt=Box4]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4o4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 parallel faces without bottom edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4o4a.png|200px|thumb|alt=Box4o4a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing the edges of the bottom face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4o8a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 parallel faces without top and bottom edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4o8a.png|200px|thumb|alt=Box4o8a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing the edges of the top and bottom face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4t.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent and all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4t.png|200px|thumb|alt=Box4t]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and front {-z} faces, but with all its edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-1.png|200px|thumb|alt=Box4-1]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and the edge between those faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 faces without two opposite top edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-2p.png|200px|thumb|alt=Box4-2p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing two edges of the top face - the intersection of the two missing faces and the opposite edge. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-3p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 faces without three parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-3p.png|200px|thumb|alt=Box4-3p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces and missing three edges of the missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 4 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-4a.png|200px|thumb|alt=Box4-4a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and all the edges of the missing front face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-5a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 5 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-5a.png|200px|thumb|alt=Box4-5a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and all the edges at the top and the bottom of the missing front face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 7 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-7a.png|200px|thumb|alt=Box4-7a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and all the edges of both missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-12.png|200px|thumb|alt=Box4-12]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and excludes all the edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing 3 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-3.png|200px|thumb|alt=Box3-3]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing three edges of the missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-5a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 4 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-5a.png|200px|thumb|alt=Box3-5a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces and includes the three internal edges and the outer edges except those on the left {-z}. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing 7 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-7a.png|200px|thumb|alt=Box3-7a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces and includes the three internal edges but only the outer edges at the top (-y). Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-9a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing 9 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-9a.png|200px|thumb|alt=Box3-9a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces and includes only the three internal edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-12.png|200px|thumb|alt=Box3-12]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces but excludes all edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Box3u overview&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[File:Box3u_Overview.PNG|thumb|600px|left|alt=Box3u Overview]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 2 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u2p.png|200px|thumb|alt=Box3u2p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the top edges of the left {-x} and right {+x} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u4p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 4 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u4p.png|200px|thumb|alt=Box3u4p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the topand bottom edges of the left {-x} and right {+x} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u4a.png|200px|thumb|alt=Box3u4a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the edges of the missing top face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u5p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 5 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u5p.png|200px|thumb|alt=Box3u5p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the top edge of the left {-x} face and all edges of the right {+x} face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 6 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u6.png|200px|thumb|alt=Box3u6]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the top and bottom edges of the right {+x} face and all edges of the left {-x} face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u6a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 4 adjacent and 2 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u6a.png|200px|thumb|alt=Box3u6a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the top edges and the bottom edges of the missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 7 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u7a.png|200px|thumb|alt=Box3u7a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the edges of the missing top (-y) and right (+x) faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u8p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 8 edges (in two parallel groups)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u8p.png|200px|thumb|alt=Box3u8p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the edges of the left {-x} and right {+x} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u10p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces in a &#039;U&#039; shape, missing 10 edges (all except those between the faces)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u10p.png|200px|thumb|alt=Box3u10p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the edges except the two betweenthe faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 parallel faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u12.png|200px|thumb|alt=Box3u12]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;boxjcyl4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Box truncated by cylinder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:boxjcyl4.png|200px|thumb|alt=Boxjcyl4]]&lt;br /&gt;
|| This suite of primitives are used to model the intersection between a box and cylinders of different radii. The box has a fixed width of 2LDu and the cylinder radius is denoted by the r in the filename.&lt;br /&gt;
&lt;br /&gt;
Currently available primitives :&lt;br /&gt;
Regular resolution (boxjcylr) : 4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 5 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-5.png|200px|thumb|alt=Box2-5]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges which do not bound the included faces. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 7 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-7.png|200px|thumb|alt=Box2-7]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces and those along the left {-x} and right {+x} sides. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 9 edges (all except those connected to the {+x}, {+y}, {+z} vertex)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-9.png|200px|thumb|alt=Box2-9]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces and those along the right {+x} sides. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-9p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 9 edges (all except three parallel edges)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-9p.png|200px|thumb|alt=Box2-9p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces and those parallel to that. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-11.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 11 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-11.png|200px|thumb|alt=Box2-11]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3.png|200px|thumb|alt=Tri3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} and bottom {+y} faces but including all edges. The left {-x} and front {-z} faces are perpendicular. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3-1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3-1.png|200px|thumb|alt=Tri3-1]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} and bottom {+y} faces and excludes the top edge of the hypotenuse. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3-3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism missing 3 faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3-3.png|200px|thumb|alt=Tri3-3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} and bottom {+y} faces and excludes all top edges. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3a1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 adjacent faces missing 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3a1.png|200px|thumb|alt=Tri3a1]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} face, the face at the hypotenuse as well as the top edge at the hypotenuse. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3a3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 adjacent faces missing 3 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3a3.png|200px|thumb|alt=Tri3a3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} face, the face at the hypotenuse and excludes all top edges. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3a4&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 adjacent faces missing 4 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3a4.png|200px|thumb|alt=Tri3a4]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} face, the face at the hypotenuse and excludes all edges at the hypotenuse. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3u1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces missing 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3u1.png|200px|thumb|alt=Tri3u1]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the left {-x} and front {-z} faces. Its origin is the right-angle corner of the top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3u3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces missing 3 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3u3.png|200px|thumb|alt=Tri3u3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the left {-x} and front {-z} faces, the edge where they would join and one edge of each of the triangles. Its origin is the right-angle corner of the top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 2 square faces and 2 triangular faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri4.png|200px|thumb|alt=Tri4]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the face at the hypotenuse. Its origin is the right-angle corner of the top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Curved primitives==&lt;br /&gt;
&lt;br /&gt;
LDraw represents curved surfaces as polygons. For circular components two series of primitives are provided.&lt;br /&gt;
&lt;br /&gt;
All the circular primitives are orientated in the {x,z} plane with their origin at the centre of the circle and a default radius of 1 LDu. Primitives are provided for complete circles and for commonly used fractions of a complete circle. Where the naming convention includes a prefix of the form n-f this indicates the fraction (n/f) of the circle drawn by the primitive. Where this fraction is less than an entire circle, the primitive starts at {+x,0} and progresses in a conterclockwise direction when viewed from above {-y}.&lt;br /&gt;
&lt;br /&gt;
To avoid rounding errors, it is preferable to use existing fractional circular primitives, or create a new primitive, rather than rotate an existing primitive by anything other than 90 or 180 degrees. For example, use 3-16XXXX.dat rather than combining 1-8XXXX.dat with 1-16XXXX.dat rotated by 22.5 degreees.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px mode=&amp;quot;nolines&amp;quot;&amp;gt;&lt;br /&gt;
XZaxes.png&lt;br /&gt;
1-8disc.png&lt;br /&gt;
1-4disc.png&lt;br /&gt;
2-4disc.png&lt;br /&gt;
3-4disc.png&lt;br /&gt;
4-4disc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To avoid matrix arithmetic problems in some renderers, the third dimension ({y} in the default orientation) of two-dimensional primitives must be given a non-zero scaling factor.&lt;br /&gt;
LDraw circles are normally formed of 16-sided polygons (hexdecagons) - the regular resolution. For larger elements, where scaling-up of hexadecagons would give too angular an appearance, a series of high resolution primitives based on a 48-sided polygon are available. These may also be used for parts not well suited to a 16-fold symmetry.&lt;br /&gt;
&lt;br /&gt;
These circular elements may be scaled by the same factor in both the {x} and {z} dimensions to make circular elements of greater or less than 1LDu radius. For example&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4-4edge.dat&lt;br /&gt;
&lt;br /&gt;
would generate a circle in the {x,z} plane with a radius of 3LDu.&lt;br /&gt;
&lt;br /&gt;
They may also be scaled asymmetrically in the x and z dimension to make ellipses.&lt;br /&gt;
&lt;br /&gt;
Although the default orientation is in the {x,z} plane the LDraw language allows for these to be transformed&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4-4edge.dat&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;would generate a circle in the {y,z} plane&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4-4edge.dat&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;would generate a circle in the {x,y} plane&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Two dimensional=== &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Circular 2D Overview&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[File:Circular_2D_Overview.PNG|thumb|600px|left|alt=Circular 2D Overview]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fedge.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular line segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4edge.png|200px|thumb|alt=4-4Edge]]&lt;br /&gt;
|| This suite of primitives are used for edges which comprise an entire or part circle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 9-16, 5-8, 11-16, 3-4, 13-16, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48, 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 7-24, 5-16, 1-3, 3-8, 19-48, 5-12, 7-16, 11-24, 2-4, 5-8, 2-3, 3-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 2-4, 3-8, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fdisc.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular disc sector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4disc.png|200px|thumb|alt=4-4disc]]&lt;br /&gt;
|| This suite of primitives are used for surfaces which comprise an entire or part circle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 5-8, 11-16, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-24, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 1-4, 1-3, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 2-4, 3-4, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fchrd.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular disc segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-4chrd.png|200px|thumb|alt=1-4chrd]]&lt;br /&gt;
|| This suite of primitives are used for surfaces which comprise part of a circle enclosed by the arc of its circumference and its chord. Note that the bounding circle in the image is for context only - only the grey segment is generated by the 1-4chrd primitive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16 (see note), 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 5-8, 3-4, 13-16, 7-8&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48 (see note) 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 7-24, 5-16, 1-3, 3-8, 19-48, 5-12, 7-16, 11-24, 2-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-8, 2-4&lt;br /&gt;
&lt;br /&gt;
Note: The regular resolution 1-16chrd.dat and high resolution 1-48chrd are special cases, see Primitive Substitution Adapters below for more information&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fndis.dat&#039;&#039;&#039; || &#039;&#039;&#039;Inverse of circular disc sector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4ndis.png|200px|thumb|alt=4-4ndisc]]&lt;br /&gt;
|| This suite of primitives pad their matching n-fdisc.dat primitives out to the bounding square. They are used to integrate circular elements into rectilinear elements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 1-3, 7-16, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-4, 2-4, 3-4, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-ftang.dat&#039;&#039;&#039; || &#039;&#039;&#039;Tangential ring segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-4tang.png|200px|thumb|alt=1-4tang]]&lt;br /&gt;
|| This suite of primitives are used to pad a 16-sided polygon to a circumscribing 16-sided polygon whose edges are tangential to the inner polygon. Note that the bounding circle in the image is for context only - only the black segment is generated by the 1-4tang primitive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-ftndis.dat&#039;&#039;&#039; || &#039;&#039;&#039;Disc negative truncated&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-8tndis.png|200px|thumb|alt=1-8tndis]]&lt;br /&gt;
|| [[File:Tndis-example.png|200px|right|alt=Tndis-example]]&lt;br /&gt;
This suite of primitives are used to used to integrate circular elements into rectilinear elements. These pad their matching n-fdisc.dat primitives out to the bounding rectangle, spanning from x = 1 to the minimal x value of the matching primitive. Note that the bounding circle in the image is for context only - only the black segment is generated by the 1-8tndis primitive. The image on the right showes the difference between tang, tndis and ndis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 5-48, 1-24, 1-16, 1-8&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-faring.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular adaptor ring segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:2-4aring.png|200px|thumb|alt=2-4aring]]&lt;br /&gt;
||This suite of primitives are used to interface between high resolution (48-segment) circular primitives and normal resolution (16-segment) circluar primitives. Note that the bounding circle in the image is for context only - only the black segment is generated by the 2-4aring primitive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;1-16chrd.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;1-48chrd.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-fering.dat&#039;&#039;&#039; || &#039;&#039;&#039;Primitive Substitution Adapters&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4edge.png|200px|thumb|alt=4-4edge]]&lt;br /&gt;
||  This suite of primitives are used correct for gaps that form between curved primitives and normal geometry in editors that utilize primitive substitution. This is a special case used on the inside of a curved primitive where it joins geometry that cannot make use of a curved primitive. The chrd files themselves are simply a reference to empty.dat, which under normal circumstances does not draw anything. However, in tools that support primitive substitution, the curved primitive it is attached to would normally in this case create a gap when rendered using more than 16 points to form a circle. In that case, the substituted version of these normally empty primitives would fill in the gap between the curve and the other geometry.&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;see&amp;quot; these primitives, the editor in use must utilize primitive substitution. Then one of the following can be done:&lt;br /&gt;
&lt;br /&gt;
* set the curve quality to a level high enough to see the gaps reappear&lt;br /&gt;
* For LDView 4.4 or later, in the Model Tree dialog, you can search for them (for example, &amp;quot;ering&amp;quot;), and if you have it set to highlight, then when you select one, it will be highlighted in the 3D view.&lt;br /&gt;
* Manually recolor the primitive in question to a color that contrasts with the colors that surround it&lt;br /&gt;
&lt;br /&gt;
Note that the bounding circle in the image is for context only - there are no actual geometry producing lines contained in these files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16chrd, 1-4ering, 1-8ering, 3-16ering, 2-4ering, 4-4ering&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48chrd&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fringr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-frinrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-ffrinr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-ffrirr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;nn-ffrir.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;ringr.dat (deprecated name)&amp;lt;br&amp;gt;ringrr.dat (deprecated name) || &#039;&#039;&#039;Circular ring segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4ring1.png|200px|thumb|alt=1-4ring1]]&lt;br /&gt;
|| This suite of primitives are used to generate circular rings or part rings. The numeric suffix r in the filename indicates the inner radius of the ring - the outer radius is 1LDu greater. For example a n-f4-4ring4 primitive would create a ring with an inner radius of 4LDu and an outer radius of 5LDu.&lt;br /&gt;
&lt;br /&gt;
Note: The correct nomenclature is to use the full word &amp;quot;ring&amp;quot;. All newly created ring primitives must use &amp;quot;ring&amp;quot;. Due to the fact that too many files would be affected, it was decided to keep the current official &amp;quot;rin&amp;quot; primitives in the library. All files using &amp;quot;ri&amp;quot; have been moved, to use &amp;quot;ring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-16rin1, 1-8ring1, 3-16rin1, 1-4ring1, 5-16ring1, 3-8ring1, 7-16rin1, 2-4ring1, 9-16ring1, 5-8ring1, 3-4ring1, 7-8ring1, 4-4ring1&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-16rin2, 1-8ring2, 3-16rin2, 1-4ring2, 5-16rin2, 3-8ring2, 7-16ring2, 2-4ring2, 5-8ring2, 3-4ring2, 7-8ring2, 4-4ring2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-16rin3, 1-8ring3, 3-16rin3, 1-4ring3, 5-16rin3, 3-8ring3, 7-16rin3, 2-4ring3, 5-8ring3, 3-4ring3, 7-8ring3, 4-4ring3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-16rin4, 1-8ring4, 3-16rin4, 1-4ring4, 5-16ring4, 3-8ring4, 7-16rin4, 2-4ring4, 5-8ring4, 3-4ring4, 4-4ring4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-8ring5, 3-16rin5, 1-4ring5, 5-16rin5, 3-8ring5, 2-4ring5, 3-4ring5, 4-4ring5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 1-16ring6, 1-8ring6, 3-16rin6, 1-4ring6, 3-8ring6, 7-16ring6, 2-4ring6, 5-8ring6, 3-4ring6, 4-4ring6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-8ring7, 3-16rin7, 1-4ring7, 5-16ring7, 3-8ring7, 7-16ring7, 2-4ring7, 3-4ring7, 4-4ring7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-16ring8, 1-8ring8, 3-16rin8, 1-4ring8, 5-16ring8, 3-8ring8, 7-16ring8, 2-4ring8, 3-4ring8, 7-8ring8, 4-4ring8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 1-16ring9, 1-8ring9, 3-16rin9, 1-4ring9, 5-16ring9, 3-8ring9, 7-16ring9, 2-4ring9, 3-4ring9, 7-8ring9, 4-4ring9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-8rin10, 3-16ring10, 1-4rin10, 3-8rin10, 2-4rin10, 5-8ring10, 3-4rin10, 4-4rin10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-16ring11, 1-8ring11, 3-16ring11, 1-4rin11, 7-16ring11, 2-4rin11, 4-4rin11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-8ring12, 3-16ring12, 1-4rin12, 5-16ring12, 3-8rin12, 2-4rin12, 7-8rin12, 4-4rin12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-8ring13, 3-16ring13, 1-4rin13, 5-16ring13, 3-8rin13, 2-4rin13, 4-4rin13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 3-16ring14, 1-4rin14, 2-4rin14, 3-4rin14, 4-4rin14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-8rin15, 3-16ring15, 1-4rin15, 3-8rin15, 2-4rin15, 7-8rin15, 4-4rin15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 1-8ring16, 1-4rin16, 3-8rin16, 2-4rin16, 3-4ring16, 7-8rin16, 4-4rin16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 1-8rin17, 1-4rin17, 5-16ring17, 3-8ring17, 7-16ring17, 2-4rin17, 4-4rin17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 1-16ring18, 1-8rin18, 1-4rin18, 3-8rin18, 2-4rin18, 4-4rin18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-16ring19, 1-8rin19, 3-16ring19, 1-4rin19, 3-8ring19, 2-4ring19, 3-4ring19, 4-4rin19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-4rin20, 2-4rin20, 4-4rin20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 1-4ring21, 3-8ring21, 4-4rin21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 1-16ring22, 3-16ring22, 2-4rin22, 3-4rin22, 4-4rin22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-16ring23, 1-8rin23, 1-4rin23, 2-4rin23, 4-4rin23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-16ring24, 3-16ring24, 1-4rin24, 3-8rin24, 2-4rin24, 4-4rin24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 1-4ring25, 2-4rin25, 4-4rin25&amp;lt;br&amp;gt;&lt;br /&gt;
r=26: 1-4ring26, 2-4ring26, 4-4rin26&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 1-8ring27, 4-4ring27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-8ring28, 1-4rin28, 2-4ring28, 4-4ring28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 1-4ring29, 3-8ring29, 2-4ring29, 3-4ring29, 4-4rin29&amp;lt;br&amp;gt;&lt;br /&gt;
r=30: 2-4rin30, 4-4rin30&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 2-4ring31, 4-4rin31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 1-8ring32, 2-4ring32, 4-4rin32&amp;lt;br&amp;gt;&lt;br /&gt;
r=33: 1-8ring33, 1-4ring33, 4-4rin33&amp;lt;br&amp;gt;&lt;br /&gt;
r=34: 1-8ring34, 1-4rin34, 4-4rin34&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 1-8ring35, 4-4ring35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 1-4ring36, 4-4rin36&amp;lt;br&amp;gt;&lt;br /&gt;
r=37: 3-8ring37, 2-4ring37, 4-4rin37&amp;lt;br&amp;gt;&lt;br /&gt;
r=38: 1-4rin38, 4-4rin38&amp;lt;br&amp;gt;&lt;br /&gt;
r=39: 1-16ring39, 1-8rin39, 3-16ring39, 1-4rin39, 7-8rin39, 4-4rin39&amp;lt;br&amp;gt;&lt;br /&gt;
r=40: 1-4ring40, 7-8rin40, 4-4rin40&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 4-4ring41&amp;lt;br&amp;gt;&lt;br /&gt;
r=42: 2-4ring42&amp;lt;br&amp;gt;&lt;br /&gt;
r=43: 2-4ring43, 4-4rin43&amp;lt;br&amp;gt;&lt;br /&gt;
r=44: 2-4ring44, 4-4rin44&amp;lt;br&amp;gt;&lt;br /&gt;
r=45: 2-4ring45, 4-4rin45&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 2-4ring46, 4-4rin46&amp;lt;br&amp;gt;&lt;br /&gt;
r=47: 4-4rin47&amp;lt;br&amp;gt;&lt;br /&gt;
r=48: 1-4rin48, 4-4rin48&amp;lt;br&amp;gt;&lt;br /&gt;
r=49: 1-4rin49, 4-4ring49&amp;lt;br&amp;gt;&lt;br /&gt;
r=50: 1-4rin50, 4-4rin50&amp;lt;br&amp;gt;&lt;br /&gt;
r=51: 4-4rin51&amp;lt;br&amp;gt;&lt;br /&gt;
r=52: 2-4rin52, 4-4rin52&amp;lt;br&amp;gt;&lt;br /&gt;
r=53: 3-16ring53&amp;lt;br&amp;gt;&lt;br /&gt;
r=55: 2-4ring55&amp;lt;br&amp;gt;&lt;br /&gt;
r=57: 1-16ring57, 1-4ring57, 4-4rin57&amp;lt;br&amp;gt;&lt;br /&gt;
r=61: 4-4ring61&amp;lt;br&amp;gt;&lt;br /&gt;
r=66: 1-4ring66, 4-4ring66&amp;lt;br&amp;gt;&lt;br /&gt;
r=67: 1-4ring67&amp;lt;br&amp;gt;&lt;br /&gt;
r=68: 4-4ring68&amp;lt;br&amp;gt;&lt;br /&gt;
r=70: 1-16ring70, 1-8ring70, 3-16ring70, 2-4ring70, 4-4ring70&amp;lt;br&amp;gt;&lt;br /&gt;
r=71: 4-4ring71&amp;lt;br&amp;gt;&lt;br /&gt;
r=77: 4-4rin77&amp;lt;br&amp;gt;&lt;br /&gt;
r=78: 4-4rin78&amp;lt;br&amp;gt;&lt;br /&gt;
r=79: 1-4ring79, 4-4rin79&amp;lt;br&amp;gt;&lt;br /&gt;
r=80: 3-16ring80&amp;lt;br&amp;gt;&lt;br /&gt;
r=81: 4-4ring81&amp;lt;br&amp;gt;&lt;br /&gt;
r=85: 4-4rin85&amp;lt;br&amp;gt;&lt;br /&gt;
r=88: 4-4ring88&amp;lt;br&amp;gt;&lt;br /&gt;
r=95: 4-4ring95&amp;lt;br&amp;gt;&lt;br /&gt;
r=97: 4-4ring97&amp;lt;br&amp;gt;&lt;br /&gt;
r=101: 4-4ring101&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-24ring1, 1-12rin1, 1-8ring1, 1-6ring1, 3-16ring1, 11-48ring1, 1-4ring1, 5-16ring1, 7-16ring1, 2-4ring1, 4-4ring1.dat&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-24ring2, 1-16ring2, 1-12rin2, 5-48ring2, 1-8ring2, 1-6ring2, 3-16ring2, 5-24ring2, 1-4ring2, 1-3ring2, 3-8ring2, 7-16ring2, 2-4ring2, 19-24ring2, 7-8ring2, 4-4ring2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-24rin3, 1-16rin3, 1-12ring3, 1-8ring3, 7-48ring3, 1-6ring3, 5-24ring3, 1-4ring3, 1-3ring3, 7-16rin3, 2-4ring3, 4-4ring3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-24rin4, 1-12ring4, 5-48rin4, 1-8ring4, 7-48ring4, 5-24ring4, 1-4ring4, 7-24rin4, 2-4ring4, 4-4ring4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-24rin5, 1-12rin5, 5-48ring5, 1-8ring5, 7-48rin5, 1-6ring5, 5-24ring5, 1-4ring5, 2-4ring5, 4-4ring5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 1-48rin6, 1-24rin6, 1-16ring6, 1-12rin6, 1-8ring6, 1-6ring6, 5-24ring6, 1-4ring6, 2-4ring6, 5-6ring6, 4-4ring6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-24rin7, 1-16ring7, 1-8ring7, 7-48ring7, 1-6ring7, 3-16rin7, 5-24rin7, 1-4ring7, 2-3ring7, 3-4ring7, 4-4ring7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-16rin8, 1-12rin8, 1-8ring8, 7-48ring8, 1-6ring8, 3-16rin8, 5-24ring8, 1-4ring8, 11-24ring8, 4-4ring8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 1-48rin9, 1-24rin9, 1-12rin9, 5-48rin9, 1-8ring9, 5-24rin9, 11-48ring9, 1-6ring9, 1-4ring9, 1-3ring9, 2-4ring9, 4-4ring9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-24ring10, 1-16ring10, 1-12ring10, 5-48ring10, 1-8ring10, 7-48ring10, 1-6ring10, 5-24ring10, 1-4rin10, 2-4ring10, 4-4rin10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-24ring11, 1-16ring11, 1-8ring11, 7-48ring11, 3-16ring11, 1-4rin11, 7-16ring11, 2-4rin11, 4-4rin11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-12ring12, 1-8ring12, 1-4ring12, 1-6rin12, 2-4rin12, 4-4rin12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-16ring13, 1-12ring13, 1-8ring13, 1-6rin13, 5-24ring13, 1-4rin13, 5-12ring13, 11-24ring13, 3-4rin13, 4-4rin13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 1-24ring14, 1-16ring14, 1-12ring14, 1-8rin14, 1-6rin14, 3-16ring14, 1-4rin14, 3-8ring14, 5-12ring14, 3-4rin14, 4-4rin14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-48ring15, 1-24ring15, 1-16ring15, 1-12ring15, 1-8ring15, 1-6ring15, 3-16ring15, 5-24ring15, 1-4rin15, 2-4ring15, 4-4rin15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 1-16ring16, 1-8rin16, 7-48ring16, 1-6rin16, 1-4rin16, 7-16ring16, 2-4rin16, 3-4rin16, 5-6rin16, 4-4rin16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 1-16ring17, 1-12ring17, 1-6rin17, 5-24ring17, 1-4rin17, 1-3rin17, 2-4rin17, 4-4rin17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 1-16ring18, 7-48ring18, 1-6rin18, 5-24ring18, 1-4rin18, 4-4rin18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-24ring19, 1-16ring19, 1-12ring19, 5-48ring19, 1-8ring19, 1-6rin19, 11-48ring19, 1-4rin19, 2-4rin19, 4-4rin19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-12ring20, 1-8rin20, 5-24ring20, 11-48ring20, 1-4rin20, 4-4rin20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 1-16ring21, 11-48ring21, 1-4rin21, 4-4rin21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 1-12ring22, 11-48ring22, 1-4rin22, 4-4rin22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-4rin23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-24ring24, 1-12ring24, 5-24ring24, 1-4rin24, 4-4rin24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 3-16ring25, 1-4rin25, 4-4rin25&amp;lt;br&amp;gt;&lt;br /&gt;
r=26: 1-4rin26, 4-4rin26&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 1-4rin27, 4-4rin27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-8rin28, 5-24ring28, 11-48ring28, 1-4ring28, 4-4rin28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 1-24ring29, 1-16ring29, 1-12ring29, 5-48ring29, 7-48ring29, 1-6ring29, 3-16ring29, 11-48ring29, 1-4rin29, 5-24ring29, 4-4rin29&amp;lt;br&amp;gt;&lt;br /&gt;
r=30: 1-24ring30, 1-16ring30, 1-4rin30, 3-8ring30, 4-4rin30&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 1-4rin31, 2-4rin31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 5-48ring32, 1-4rin32, 2-4ring32&amp;lt;br&amp;gt;&lt;br /&gt;
r=33: 5-24ring33, 1-4rin33, 4-4rin33&amp;lt;br&amp;gt;&lt;br /&gt;
r=34: 7-48ring34, 5-24ring34, 11-48ring34, 1-4rin34, 2-4ring34, 4-4rin34&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 1-24ring35, 1-16ring35, 1-8rin35, 5-24ring35, 1-4rin35, 4-4ring35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 1-8ring36, 1-4rin36, 1-3ring36, 4-4ring36&amp;lt;br&amp;gt;&lt;br /&gt;
r=37: 1-8ring37, 1-4rin37, 2-4ring37, 4-4rin37&amp;lt;br&amp;gt;&lt;br /&gt;
r=38: 1-12ring38, 1-6ring38, 1-4rin38, 4-4ring38&amp;lt;br&amp;gt;&lt;br /&gt;
r=39: 1-24ring39, 1-16ring39, 1-12ring39, 5-48ring39, 1-8rin39, 7-48ring39, 1-6ring39, 3-16ring39, 1-4rin39, 2-4ring39, 4-4ring39&amp;lt;br&amp;gt;&lt;br /&gt;
r=40: 1-4rin40, 11-48ring40, 2-4ring40&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 1-8ring41, 1-4rin41, 4-4rin41&amp;lt;br&amp;gt;&lt;br /&gt;
r=42: 1-12ring42, 1-6ring42, 4-4rin42&amp;lt;br&amp;gt;&lt;br /&gt;
r=43: 1-48ring43, 1-16ring43, 1-12ring43, 1-6ring43, 4-4ring43&amp;lt;br&amp;gt;&lt;br /&gt;
r=44: 4-4ring44&amp;lt;br&amp;gt;&lt;br /&gt;
r=45: 1-4rin45, 4-4ring45&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 1-4ring46&amp;lt;br&amp;gt;&lt;br /&gt;
r=47: 1-6rin47, 1-4ring47, 4-4rin47&amp;lt;br&amp;gt;&lt;br /&gt;
r=48: 7-48ring48, 1-4rin48, 2-4ring48&amp;lt;br&amp;gt;&lt;br /&gt;
r=49: 1-24ring49, 1-16ring49, 1-4ring49, 4-4rin49&amp;lt;br&amp;gt;&lt;br /&gt;
r=50: 1-6rin50, 3-16ring50, 4-4rin50&amp;lt;br&amp;gt;&lt;br /&gt;
r=51: 1-4rin51&amp;lt;br&amp;gt;&lt;br /&gt;
r=52: 11-24ring52, 4-4rin52&amp;lt;br&amp;gt;&lt;br /&gt;
r=53: 1-8ring53, 3-16ring53, 4-4rin53&amp;lt;br&amp;gt;&lt;br /&gt;
r=54: 4-4rin54&amp;lt;br&amp;gt;&lt;br /&gt;
r=55: 2-4ring55&amp;lt;br&amp;gt;&lt;br /&gt;
r=56: 1-12ring56, 1-8rin56&amp;lt;br&amp;gt;&lt;br /&gt;
r=57: 1-4ring57, 4-4ring57&amp;lt;br&amp;gt;&lt;br /&gt;
r=59: 1-24ring59, 1-16ring59, 1-12ring59&amp;lt;br&amp;gt;&lt;br /&gt;
r=60: 1-24ring60, 1-16ring60&amp;lt;br&amp;gt;&lt;br /&gt;
r=63: 1-4rin63&amp;lt;br&amp;gt;&lt;br /&gt;
r=64: 1-4rin64&amp;lt;br&amp;gt;&lt;br /&gt;
r=65: 1-4rin65&amp;lt;br&amp;gt;&lt;br /&gt;
r=69: 5-24ring69&amp;lt;br&amp;gt;&lt;br /&gt;
r=70: 1-4rin70&amp;lt;br&amp;gt;&lt;br /&gt;
r=71: 1-4rin71, 4-4ring71&amp;lt;br&amp;gt;&lt;br /&gt;
r=77: 4-4ring77&amp;lt;br&amp;gt;&lt;br /&gt;
r=78: 1-12ring78&amp;lt;br&amp;gt;&lt;br /&gt;
r=79: 1-4ring79&amp;lt;br&amp;gt;&lt;br /&gt;
r=80: 7-48ring80, 1-6ring80&amp;lt;br&amp;gt;&lt;br /&gt;
r=81: 4-4ring81&amp;lt;br&amp;gt;&lt;br /&gt;
r=82: 1-4rin82&amp;lt;br&amp;gt;&lt;br /&gt;
r=83: 1-4rin83&amp;lt;br&amp;gt;&lt;br /&gt;
r=84: 1-8ring84&amp;lt;br&amp;gt;&lt;br /&gt;
r=85: 4-4ring85&amp;lt;br&amp;gt;&lt;br /&gt;
r=88: 4-4ring88&amp;lt;br&amp;gt;&lt;br /&gt;
r=90: 11-48ring90&amp;lt;br&amp;gt;&lt;br /&gt;
r=95: 2-4ring95&amp;lt;br&amp;gt;&lt;br /&gt;
r=96: 1-4ring96&amp;lt;br&amp;gt;&lt;br /&gt;
r=97: 4-4rin97&amp;lt;br&amp;gt;&lt;br /&gt;
r=99: 1-6ring99, 4-4ring99&amp;lt;br&amp;gt;&lt;br /&gt;
r=100: 1-24ring100, 4-4ring100&amp;lt;br&amp;gt;&lt;br /&gt;
r=130: 4-4ring130&amp;lt;br&amp;gt;&lt;br /&gt;
r=160: 2-4ring160&amp;lt;br&amp;gt;&lt;br /&gt;
r=179: 1-4ring179&amp;lt;br&amp;gt;&lt;br /&gt;
r=240: 2-4ring240&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
r=2 : 2-4ring2, 4-4ring2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3 : 1-4ring3, 4-4ring3&amp;lt;br&amp;gt;&lt;br /&gt;
r=6 : 4-4ring6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7 : 4-4ring7&amp;lt;br&amp;gt;&lt;br /&gt;
r=11 : 4-4ring11&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
=== Three dimensional ===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcyli.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-fcyli2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cyli.png |200px|thumb|alt=4-4cyli]]&lt;br /&gt;
||This suite of primitives are used to generate cylinders or part cylinders. These are provided in two forms - with conditional lines (n-fcyli) or without conditional lines (n-fcyli2). In almost all circumstances the &amp;quot;cyli&amp;quot; version should be used. The &amp;quot;cyli2&amp;quot; versions are for very special cases and their use for the rounded corners of stickers is no longer appropriate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - with conditional lines (n-fcyli):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 9-16, 5-8, 11-16, 3-4, 13-16, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48, 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 7-24, 5-16, 1-3, 3-8, 5-12, 7-16, 11-24, 2-4, 5-8, 2-3, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-8, 2-4, 4-4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - without conditional lines (n-fcyli2):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-8, 3-16, 1-4, 5-16, 2-4, 3-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-8, 3-16, 1-4, 3-8, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylo.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder with Open End&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cylo.png |200px|thumb|alt=4-4cylo]]&lt;br /&gt;
||This suite of primitives are used to generate cylinders or part cylinders with edges around the lower and upper surfaces.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 9-16, 5-8, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48, 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 1-3, 3-8, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-8, 2-4, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylc.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fcylc2.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fcylc3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder with Closed End&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cylc.png |200px|thumb|alt=4-4cylc]]&lt;br /&gt;
||This suite of primitives are used to generate cylinders or part cylinders with the upper surface closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - with conditional lines and top edge line (n-fcylc):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-4, 3-8, 2-4, 3-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - without conditional lines or top or bottom edge line (n-fcylc2):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - with conditional lines, but without top and bottom edge lines (n-fcylc3):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcyls.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fcyls2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by an angled plane&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:2-4cyls.png |200px|thumb|alt=2-4cyls]]&lt;br /&gt;
[[File:3-8cyls.png |200px|thumb|alt=3-8cyls]]&lt;br /&gt;
&lt;br /&gt;
||These primitives are used to generate cylinders or part cylinders which are truncated by a plane which is not perpendicular to the axis of the cylinder. The default angle of the plane is 45 degress.&lt;br /&gt;
&lt;br /&gt;
These primitives are notoriously difficult to describe and the user is encouraged to experiment in order to gain a full understanding of their geometry. One technique is to open the primitive in LDPE and choose random colours. Selecting Show Axes also helps.&lt;br /&gt;
&lt;br /&gt;
The 2-4cyls.dat primitive is orientated with the perpendicular bounding plane at the top {-y} and the angled bounding plane at the bottom {+y}. In common with the other 2-4xxxx.dat primitives, the {+z} semicircle is represented. By default the truncation plane is y=x-1. The 1-4cyls.dat and 3-8cyls.dat primitives are sub-sections of 2-4cyls.dat&lt;br /&gt;
&lt;br /&gt;
The 1-4cyls2.dat primitive is orientated with the perpendicular bounding plane at the top {-y} and the angled bounding plane at the bottom {+y}. Unlike the other 1-4xxxx.dat primitives, the {-x,+z} quadrant is represented. The truncation plane is y=x.&lt;br /&gt;
&lt;br /&gt;
The following observations may help :&lt;br /&gt;
&lt;br /&gt;
1-4cyls and 1-4cyls2 are complements. If you put them together correctly they make a 1-4cyli.&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls.dat&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;-1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 -1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls2.dat&lt;br /&gt;
&lt;br /&gt;
1-4cyls2 is actually hidden in 2-4cyls, which could be constructed like&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls.dat&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 -1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyli.dat&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls2.dat&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-8cyls, 3-16cyls, 1-4cyls, 3-8cyls, 2-4cyls, 4-4cyls, 1-8cyls2, 3-16cys2, 1-4cyls2&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-4cyls, 1-4cyls2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylse.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by an angled plane with angled edge included&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cylse.png |200px|thumb|alt=4-4cylse]]&lt;br /&gt;
||This suite of primitives are similar to the n-fcyls primitive, but with the edge along the angled plane included.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;cyljrxs.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by another cylinder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Cylj4x8.png |200px|thumb|alt=cylj4x8]]&lt;br /&gt;
||This suite of primitives are used to model the intersection between two cylinders of different radii.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Currently available primitives:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (rxs): 4x6, 4x7, 4x8, 4x9, 4x10, 5x9&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylrsphs.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by a sphere&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cyl1sph2.png |200px|thumb|alt=4-4cyl1sph2]]&lt;br /&gt;
||This suite of primitives are used to model the intersection between a cylinder and a sphere of a different radius.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Currently available primitives:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution 1:2 (n-f): 4-4cyl1sph2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fconr.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fconrr.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cone&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4con1.png |200px|thumb|alt=4-4con1]]&lt;br /&gt;
||This suite of primitives are used to generate circular cones or part cones. The numeric suffix r in the filename indicates the inner radius of the cone - the outer radius is 1LDu greater. By default the cone is 1LDu high in the {+y} dimension with the origin at the centre of the outer diameter. For example a n-fcone4 primitive would create a cone with an inner radius of 4LDu and an outer radius of 5LDu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f)(r):&amp;lt;br&amp;gt;&lt;br /&gt;
r=0: 1-4con0, 2-4con0, 4-4con0&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-16con1, 1-8con1, 3-16con1, 1-4con1, 2-4con1, 4-4con1&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-8con2, 3-16con2, 1-4con2, 2-4con2, 4-4con2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-8con3, 1-4con3, 2-4con3, 7-8con3, 4-4con3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-4con4, 3-8con4, 2-4con4, 4-4con4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-4con5, 4-4con5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 1-4con6, 3-8con6, 4-4con6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-4con7, 3-8con7, 2-4con7, 4-4con7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-4con8, 2-4con8, 4-4con8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 3-16con9, 1-4con9, 3-8con9, 4-4con9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-8con10, 1-4con10, 2-4con10, 4-4con10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-4con11, 2-4con11, 4-4con11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-4con12, 3-8con12, 2-4con12, 4-4con12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-4con13, 2-4con13, 4-4con13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 1-4con14, 4-4con14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-4con15, 2-4con15, 4-4con15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 4-4con16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 4-4con17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 1-4con18, 4-4con18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-8con19, 1-4con19, 2-4con19, 4-4con19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-8con20, 3-8con20, 4-4con20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 4-4con21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 4-4con22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-4con23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-4con24, 4-4con24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 4-4con25&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 1-4con27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-8con28, 1-4con28, 4-4con28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 4-4con29&amp;lt;br&amp;gt;&lt;br /&gt;
r=30: 4-4con30&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 1-4con31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 4-4con32&amp;lt;br&amp;gt;&lt;br /&gt;
r=33: 4-4con33&amp;lt;br&amp;gt;&lt;br /&gt;
r=34: 3-8con34&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 4-4con35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 4-4con36&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 4-4con41&amp;lt;br&amp;gt;&lt;br /&gt;
r=42: 4-4con42&amp;lt;br&amp;gt;&lt;br /&gt;
r=43: 4-4con43&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 4-4con46&amp;lt;br&amp;gt;&lt;br /&gt;
r=47: 4-4con47&amp;lt;br&amp;gt;&lt;br /&gt;
r=48: 4-4con48&amp;lt;br&amp;gt;&lt;br /&gt;
r=61: 4-4con61&amp;lt;br&amp;gt;&lt;br /&gt;
r=80: 4-4con80&amp;lt;br&amp;gt;&lt;br /&gt;
r=81: 4-4con81&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High resolution (n-f)(r):&amp;lt;br&amp;gt;&lt;br /&gt;
r=0: 4-4con0&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-4con1, 4-4con1&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-4con2, 5-12con2, 4-4con2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-4con3, 5-24con3, 4-4con3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-12con4, 1-6con4, 1-4con4, 4-4con4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-12con5, 1-8con5, 1-6con5, 1-4con5, 4-4con5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 5-48con6, 1-8con6, 1-4con6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-24con7, 1-12con7, 1-6con7, 4-4con7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-6con8, 1-4con8, 4-4con8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 1-16col9, 5-48con9, 1-8con9, 5-24con9, 1-4con9, 4-4con9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-24con10, 5-24con10, 4-4con10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-16con11, 1-8con11, 1-4con11, 4-4con11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-24con12, 5-48con12, 1-8con12, 5-24con12, 1-4con12, 4-4con12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-6con13, 1-4con13, 4-4con13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 1-24con14, 5-24con14, 1-4con14, 3-8con14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-8con15, 1-4con15, 4-4con15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 1-24con16, 1-6con16, 5-24con16, 1-4con16, 3-8con16, 4-4con16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 1-6con17, 4-4con17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 4-4con18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-16con19, 3-16con19, 1-4con19, 4-4con19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-16con20, 4-4con20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 1-4con21, 4-4con21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 4-4con22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-4con23, 4-4con23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-24con24, 1-16con24, 1-12con24, 1-4con24, 4-4con24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 1-4con25, 4-4con25&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 4-4con27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-4con28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 5-48con29&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 1-4con32&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 1-6con31, 4-4con31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 1-4con32&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 4-4con35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 1-4con36, 4-4con36&amp;lt;br&amp;gt;&lt;br /&gt;
r=38: 1-4con38&amp;lt;br&amp;gt;&lt;br /&gt;
r=39: 1-4con39, 4-4con39&amp;lt;br&amp;gt;&lt;br /&gt;
r=40: 1-4con40&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 1-4con41, 4-4con41&amp;lt;br&amp;gt;&lt;br /&gt;
r=45: 1-6con45&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 1-6con46&amp;lt;br&amp;gt;&lt;br /&gt;
r=52: 1-4con52&amp;lt;br&amp;gt;&lt;br /&gt;
r=54: 4-4con54&amp;lt;br&amp;gt;&lt;br /&gt;
r=64: 4-4con64&amp;lt;br&amp;gt;&lt;br /&gt;
r=70: 4-4con70&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tffirrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &#039;&#039;&#039;tfforrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &#039;&#039;&#039;tffqrrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &#039;&#039;&#039;rfforrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &#039;&#039;&#039;rfforrrrr.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular torus&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:T02i2000.png |200px|thumb|alt=T02i2000.png]]&lt;br /&gt;
[[File:T02o2000.png |200px|thumb|alt=T02o2000.png]]&lt;br /&gt;
[[File:T02q1765.png |200px|thumb|alt=T02q1765.png]]&lt;br /&gt;
&lt;br /&gt;
||This suite of primitives are used to generate circular torus sections. By default all these primitives produce a torus with a major radius of 1LDu, so typically need to be scaled up in the {x} and {z} dimensions. The first character denotes whether the minor radius is smaller than (tff primitives) or larger than the major radius (rff primitives). The latter are termed reverse ratio tori. The second and third characters of the filename ff denotes the sweep of torus, as an inverse fraction (01=1/1, 02=1/2, 04=1/4, 08=1/8, 16=1/16, 32=1/32, 48=1/48). The fourth character denotes the section of a torus (i=inner, o=outer, q=tube - the combination of 2 inner and 2 outer sections). Inner sections are not possible for reverse ratio tori.&lt;br /&gt;
&lt;br /&gt;
For regular tori, the last four characters of the file name rrrr denote the torus minor radius in LDu (1333=0.1333, 3333=0.3333), with the special designation &#039;unit&#039; unsed to indicate a radius of 1.0000.&lt;br /&gt;
For reverse ratio tori named like rfforrrr.dat, the last four characters of the file name rrrr represent torus minor radius with an implied decimal point after the first digit (1500=1.5, 4600=4.6). For reverse ratio tori named like rfforrrrr.dat, the last five characters of the file name rrrrr represent torus minor radius with an implied decimal point after the first two digits (11000=11.0).&lt;br /&gt;
&lt;br /&gt;
These diagrams (based on an idea of Paul Easter&#039;s) illustrate the relationship of the torus primitives to the major and minor radii.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=nolines widths=&amp;quot;200px&amp;quot;&amp;gt;&lt;br /&gt;
torusi.png|Regular inner torus&lt;br /&gt;
toruso.png|Regular outer torus&lt;br /&gt;
torusro.png| Reverse ratio outer torus&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available regular torus primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (ff)(rrrr):&amp;lt;br&amp;gt;&lt;br /&gt;
Inner:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01i0702, t01i0714, t01i0769, t01i1579, t01i1667, t01i2000, t01i3261, t01i3333, t01i3600, t01i5556, t01i6000&amp;lt;br&amp;gt;&lt;br /&gt;
::t02i1111, t02i2000, t02i2258, t02i4000&amp;lt;br&amp;gt;&lt;br /&gt;
::t04i0462, t04i0625, t04i0857, t04i1111, t04i1304, t04i1333, t04i1429, t04i1765, t04i2000, t04i2258, t04i2500, t04i2667, t04i3333, t04i4167, t04i5000, t04i6381&amp;lt;br&amp;gt;&lt;br /&gt;
::t08i0909, t08i2000&amp;lt;br&amp;gt;&lt;br /&gt;
::t16i0909, t16i2000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Outer:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01o0556, t01o0625, t01o0667, t01o0714, t01o1154, t01o1250, t01o1429, t01o1579, t01o2222, t01o2500, t01o3333, t01o3571, t01o3750, t01o3810, t01o3889, t01o4000&amp;lt;br&amp;gt;&lt;br /&gt;
::t02o0526, t02o1111, t02o1176, t02o2000, t02o3333&amp;lt;br&amp;gt;&lt;br /&gt;
::t04o0462, t04o0625, t04o0833, t04o0857, t04o1111, t04o1250, t04o1304, t04o1333, t04o1429, t04o1538, t04o1667, t04o1765, t04o1905, t04o2000, t04o2500, t04o2667, t04o3077, t04o3333, t04o3750, t04o4167, t04o5000, t04o6250, t04o6667, ::t04o7000, t04o7500, t04o8750, t04o8889&amp;lt;br&amp;gt;&lt;br /&gt;
::t08o0727, t08o0909, t08o2000, t08o6250&amp;lt;br&amp;gt;&lt;br /&gt;
::t16o0909, t16o1429, t16o2000, t16o6250&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tube:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01q0702, t01q1429&amp;lt;br&amp;gt;&lt;br /&gt;
::t02q3333, t02q5455&amp;lt;br&amp;gt;&lt;br /&gt;
::t04q0625, t04q1000, t04q1316, t04q1538, t04q2500, t04q2857, t04q3030, t04q3333, t04q3529, t04q3750, t04q4000, t04q5000, t04q5455, t04q7143, t04q7500, t04q9231&amp;lt;br&amp;gt;&lt;br /&gt;
::t08q4000, t08q5000, t08q7500&amp;lt;br&amp;gt;&lt;br /&gt;
::t16q4000, t16q5000, t16q7500&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (ff)(rrrr):&amp;lt;br&amp;gt;&lt;br /&gt;
Inner:&amp;lt;br&amp;gt;&lt;br /&gt;
::t04i0455&amp;lt;br&amp;gt;&lt;br /&gt;
::t12i8333&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Outer:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01o2000&amp;lt;br&amp;gt;&lt;br /&gt;
::t04o0455, t04o2000&amp;lt;br&amp;gt;&lt;br /&gt;
::t08o0625, t08o2500&amp;lt;br&amp;gt;&lt;br /&gt;
::t12o0349, t12o0625&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tube:&amp;lt;br&amp;gt;&lt;br /&gt;
::t06q5000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Currently available reverse ratio torus primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
::r04o1000, r04o1333, r04o1375, r04o1500, r04o2000, r04o3000, r04o4600&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
::r04o11000&amp;lt;br&amp;gt;&lt;br /&gt;
::r08o2000, r08o11000&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;s&amp;gt;1-4ccyli.dat&amp;lt;/s&amp;gt;&#039;&#039;&#039; || &#039;&#039;&#039;&amp;lt;s&amp;gt;Circular torus&amp;lt;/s&amp;gt; (obsolete)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:T04q4000.png |200px|thumb|alt=T04q4000]]&lt;br /&gt;
||This single primitive pre-dates the creation of the tffirrrr and tfforrrr suite of primitives and will not be augmented. It produces a quarter torus with a major radius of 2.5Ldu and a tube radius of 1LDu.&lt;br /&gt;
&lt;br /&gt;
It is superceded by t04q4000.dat.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fsphe.dat&#039;&#039;&#039; || &#039;&#039;&#039;Sphere section&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:8-8sphe.png |200px|thumb|alt=8-8sphe]]&lt;br /&gt;
|| This primitive represents a sphere, centered at the origin {0,0,0} of radius 1 LDu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-8, 2-8, 4-8, 8-8&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 2-8, 4-8, 8-8&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;1-8sphc.dat&#039;&#039;&#039; || &#039;&#039;&#039;Spherical corner&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-8sphc.png |200px|thumb|alt=1-8sphc]]&lt;br /&gt;
||This primitive represents one octant (eighth) of a sphere, centered at the origin {0,0,0} of radius 1.414, truncated by the sides of a cube with a vertex at {1,1,1}. The boundaries of the resulting surface are circular and fit with 1-4edge.dat.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fedgh.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cylinder Helical Edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Placeholder.png |200px|thumb|alt=Placeholder]]&lt;br /&gt;
||This primitive represents ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 3-16, 1-8, 1-4&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylh.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cylinder Helical&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Placeholder.png |200px|thumb|alt=Placeholder]]&lt;br /&gt;
||This primitive represents ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 3-16, 1-8, 1-4&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Technic primitives==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic axle primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives represent various components of the technic axle and its matching hole. They are orientated in the {x,z} plane. Except where noted below, and in the {y} dimension only, these primitives must not be scaled.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axle.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle section&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;| [[File:Axle.png|200px|thumb|alt=Axle]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of technic axle, including its ends. It may be scaled in the {y} dimension to produce an axle of any length.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axleend.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:axleend.png|200px|thumb|alt=Axleend]]&lt;br /&gt;
||This primitive is used to produce the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - closed&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehole.png|200px|thumb|alt=Axlehole]]&lt;br /&gt;
||This primitive produces a technic axle hole with the disc ends and all sides. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - side edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol2.png|200px|thumb|alt=Axlehol2]]&lt;br /&gt;
||This primitive produces the edges at the ends of the &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - tooth outer edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol3.png|200px|thumb|alt=Axlehol3]]&lt;br /&gt;
||This primitive produces the outer edges of the teeth of a technic axle hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - open one side&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol4.png|200px|thumb|alt=Axlehol4]]&lt;br /&gt;
||This primitive produces a technic axle hole with one side omitted. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - open two opposite sides&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol5.png|200px|thumb|alt=Axlehol5]]&lt;br /&gt;
||This primitive produces a technic axle hole with two opposite sides omitted. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole tooth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol6.png|200px|thumb|alt=Axlehol6]]&lt;br /&gt;
||This primitive represents one tooth of a technic axle hole. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - sides&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol7.png|200px|thumb|alt=Axlehol7]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of outer sides of a technic axle. It may be scaled in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole perimeter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol8.png|200px|thumb|alt=Axlehol8]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of technic axle, without any ends. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - tooth inner edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol9.png|200px|thumb|alt=Axlehol9]]&lt;br /&gt;
||This primitive produces the inner edges of the &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axleho10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - tooth surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axleho10.png|200px|thumb|alt=Axleho10]]&lt;br /&gt;
||This primitive is used to produce the fill the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle to the bounding circle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;Axlehol0.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Axle Hole Hint&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol0.png|200px|thumb|alt=Axlehol0]]&lt;br /&gt;
||This file is an invisible &amp;quot;axlehole&amp;quot; that can be used to hint irregular axleholes that cannot be modeled with conventional axlehole primitives. To use: add an axle.dat in your part, apply position and scaling so that it fills the axlehole, and substitute it with this primitive.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the bounding axle sction in the image is for context only - there are no actual geometry producing lines contained in these files. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic axle hole reduced===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;| [[File:Axl2hole.png|200px|thumb|alt=Axl2hole]]&lt;br /&gt;
||This primitive produces a technic axle hole with reduced teeth including the disc ends and all edges. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - side edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol2.png|200px|thumb|alt=Axl2hol2]]&lt;br /&gt;
||This primitive produces the edges at the ends of the &amp;quot;plus-shaped&amp;quot; reduced technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - tooth outer edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol3.png|200px|thumb|alt=Axl2hol3]]&lt;br /&gt;
||This primitive produces the outer edges of the teeth of a reduced technic axle hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - perimeter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol8.png|200px|thumb|alt=Axl2hol8]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of reduced technic axle, without any ends. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - tooth inner edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol9.png|200px|thumb|alt=Axl2hol9]]&lt;br /&gt;
||This primitive produces the inner edges of the reduced &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2ho10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - tooth surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2ho10.png|200px|thumb|alt=Axl2ho10]]&lt;br /&gt;
||This primitive used to produce the fill the &amp;quot;plus-shaped&amp;quot; cross section of a reduced technic axle to the bounding circle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2end.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - end surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2end.png|200px|thumb|alt=Axl2end]]&lt;br /&gt;
||This primitive is used to produce the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle hole reduced.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic axle hole semi-reduced===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Axl3hole.png|200px|thumb|alt=Axl3hole]]&lt;br /&gt;
||This primitive produces a technic axle hole with semi-reduced teeth including the disc ends and all edges. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol2.dat&#039;&#039;&#039; || &#039;&#039;&#039; 	Technic axle hole semi-reduced - side edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol2.png|200px|thumb|alt=Axl3hol2]]&lt;br /&gt;
||This primitive produces the edges at the ends of the &amp;quot;plus-shaped&amp;quot; semi-reduced technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - tooth outer edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol3.png|200px|thumb|alt=Axl3hol3]]&lt;br /&gt;
||This primitive produces the outer edges of the teeth of a semi-reduced technic axle hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced tooth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol6.png|200px|thumb|alt=Axl3hol6]]&lt;br /&gt;
||This primitive represents the teeth of a semi-reduced technic axle hole. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - perimeter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol8.png|200px|thumb|alt=Axl3hol8]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of semi-reduced technic axle, without any ends. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - tooth inner edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol9.png|200px|thumb|alt=Axl3hol9]]&lt;br /&gt;
||This primitive produces the inner edges of the semi-reduced &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3ho10.dat&#039;&#039;&#039; || &#039;&#039;&#039; 	Technic axle hole semi-reduced - tooth surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3ho10.png|200px|thumb|alt=Axl3ho10]]&lt;br /&gt;
|| 	This primitive used to produce the fill the &amp;quot;plus-shaped&amp;quot; cross section of a semi-reduced technic axle to the bounding circle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3end.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - end surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3end.png|200px|thumb|alt=Axl3end]]&lt;br /&gt;
||This primitive is used to produce the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle hole semi-reduced.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Special Technic axle primitive===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlebeam.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Axle Truncated to fit Technic Beam End Surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Axlebeam.png|200px|thumb|alt=Axlebeam]]&lt;br /&gt;
||This primitive produces the tip of an axle to be used between a cylinder of 9 LDu radius and an axle primitive.&lt;br /&gt;
&lt;br /&gt;
Usage example:&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 -10 9 0 0 0 0 -9 0 20 0 2-4cyli.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 axlebeam.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 -20 0 1 0 0 0 10 0 0 0 1 axlehol8.dat&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlesphe.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle - truncated to fit ball joint&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlesphe.png|200px|thumb|alt=Axlesphe]]&lt;br /&gt;
||This primitive produces the tip of an axle, truncated to fit a 12.81 LDu radius sphere.&lt;br /&gt;
&lt;br /&gt;
Usage example:&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 12.81 0 0 0 0 12.81 0 -12.81 0 8-8sphe.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 axlesphe.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 -20 0 1 0 0 0 7.19 0 0 0 1 axlehol8.dat&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axles.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Sloped&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axles.png|200px|thumb|alt=Axles]]&lt;br /&gt;
||This primitive produces the tip of an axle, truncated by a slope with the height of 1 LDu. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlecap.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Endcap&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlecap.png|200px|thumb|alt=Axlecap]]&lt;br /&gt;
||This primitive produces the beveled tip of an axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlecaph.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Endcap with Hole 4D&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlecaph.png|200px|thumb|alt=Axlecaph]]&lt;br /&gt;
||This primitive produces the beveled tip of an axle with a center hole of 2 LDu radius.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlecaph2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Endcap with Hole 5D&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlecaph2.png|200px|thumb|alt=Axlecaph2]]&lt;br /&gt;
||This primitive produces the beveled tip of an axle with a center hole of 2.5 LDu radius.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axleconnect.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Axle to Connector Hole Perpendicular Joint 0.5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axleconnect.png|200px|thumb|alt=Axleconnect]]&lt;br /&gt;
||This primitive produces a right angle connection between an axle and a Technic connector hole.&lt;br /&gt;
&lt;br /&gt;
Usage example:&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 axleconnect.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 -1 0 0 0 1 0 0 0 1 axleconnect.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 connhole.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 -30 0 0 -1 -1 0 0 0 20 0 axle.dat&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic castellated bush primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are various representations of the castellated technic bush. They are orientated with the technic axle hole along the {y} axis and must not be scaled.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushlock.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - long teeth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Bushlock.png|200px|thumb|alt=Bushlock]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushloc2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - regular teeth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bushloc2.png|200px|thumb|alt=Bushloc2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushloc3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - regular teeth indented&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bushloc3.png|200px|thumb|alt=Bushloc3]]&lt;br /&gt;
||This primitive differs from bushloc2.dat in that the teeth are indented in four places to allow it to fit between four adjacent studs.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushloc4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - short teeth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bushloc4.png|200px|thumb|alt=Bushloc4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;steerend.dat&#039;&#039;&#039; || &#039;&#039;&#039;Curved end to technic 1xn plate with 16-tooth castellation on underside&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Steerend.png|200px|thumb|alt=Steerend]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic bush primtives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are usd to construct technic bush parts.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic bush with collar at one end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot; |[[File:Bush.png|200px|thumb|alt=Bush]]&lt;br /&gt;
||&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush0.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic bush without end collars&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bush0.png|200px|thumb|alt=Bush0]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic bush collar quarter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bush1.png|200px|thumb|alt=Bush1]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Bush End 0.25&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bush2.png|200px|thumb|alt=Bush2]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic connector primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are used to contruct technic connector pegs. They are orientated with the technic axle hole along the {y} axis and must not be scaled.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot; |[[File:Connect.png|200px|thumb|alt=Connect]]&lt;br /&gt;
||&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long without collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect2.png|200px|thumb|alt=Connect2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - short with collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect3.png|200px|thumb|alt=Connect3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - short without collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect4.png|200px|thumb|alt=Connect4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar and slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect5.png|200px|thumb|alt=Connect5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar and notches&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect6.png|200px|thumb|alt=Connect6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with rectangular centre hole and thin (frictionless) ribs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect7.png|200px|thumb|alt=Connect7]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar and blind hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect8.png|200px|thumb|alt=Connect8]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin 1.0 without Base Collar and Rectangular Centre Hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect10.png|200px|thumb|alt=Connect10]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Rectangular Hole and Short Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar1.png|200px|thumb|alt=Connectcollar1]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Small Rectangular Hole and Short Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar2.png|200px|thumb|alt=Connectcollar2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Rectangular Hole and Long Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar3.png|200px|thumb|alt=Connectcollar3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Small Rectangular Hole and Long Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar4.png|200px|thumb|alt=Connectcollar4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Round Hole and Short Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar5.png|200px|thumb|alt=Connectcollar5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectslit1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Long Middle Slit Half with Rectangular Hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectslit1.png|200px|thumb|alt=Connectslit1]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectslit2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Long Middle Slit Half with Small Rectangular Hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectslit2.png|200px|thumb|alt=Connectslit2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric.png|200px|thumb|alt=Confric]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long without collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric2.png|200px|thumb|alt=Confric2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with rectangular centre hole and collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric3.png|200px|thumb|alt=Confric3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with collar and blind hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric4.png|200px|thumb|alt=Confric4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with collar and slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric5.png|200px|thumb|alt=Confric5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long without collar with slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric6.png|200px|thumb|alt=Confric6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - middle section with collar and slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric8.png|200px|thumb|alt=Confric8]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - middle section slotted with unsplit base collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric9.png|200px|thumb|alt=Confric9]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic connector hole primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are used to contruct technic connector peg holes. They are orientated with the technic axle hole along the {y} axis. They must not be scaled in the {x} or {z} dimensions, but the peghole and npeghol families of primitives may be scaled in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connhole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Connhole.png|200px|thumb|alt=Connhole]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes in 20LDu wide Technic beams.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connhol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long with extended end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connhol2.png|200px|thumb|alt=Connhol2]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes in 20LDu wide Technic parts with an extended indentation.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connhol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long with only one end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connhol3.png|200px|thumb|alt=Connhol3]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes for use in Technic parts with a narrow beam section.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;beamhole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long with extension to adjacent hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Beamhole.png|200px|thumb|alt=Beamhole]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes at the end of 20LDu wide Technic beams.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;beamhol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole short with extension to adjacent hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Beamhol2.png|200px|thumb|alt=Beamhol2]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes at the end of 10LDu wide Technic beams.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole.png|200px|thumb|alt=Peghole]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 180 degrees - long&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole2.png|200px|thumb|alt=Peghole2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 90 degrees&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole3.png|200px|thumb|alt=Peghole3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 180 degrees - short&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole4.png|200px|thumb|alt=Peghole4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 180 degrees - medium&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole5.png|200px|thumb|alt=Peghole5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - end extended&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole6.png|200px|thumb|alt=Peghole6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole negative without top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghole.png|200px|thumb|alt=Npeghole]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole negative with top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol2.png|200px|thumb|alt=Npeghol2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to connector hole negative without top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol3.png|200px|thumb|alt=Npeghol3]]&lt;br /&gt;
||This primitive is designed to fill the gap between an axlehol4 or axlehol5 primitive and a Technic peg hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to connector hole negative without top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol3.png|200px|thumb|alt=Npeghol3]]&lt;br /&gt;
||This primitive is designed to fill the gap between an axlehol4 or axlehol5 primitive and a Technic peg hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol3a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole / Axle Hole Negative without Top Surface Extensions without One Edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol3a.png|200px|thumb|alt=Npeghol3a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to connector hole negative with top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol4.png|200px|thumb|alt=Npeghol4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to axle hole negative with top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol5.png|200px|thumb|alt=Npeghol5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to axle hole negative quarter for beams&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6.png|200px|thumb|alt=Npeghol6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6a.png|200px|thumb|alt=Npeghol6a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6b.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25 with Middle Tab&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6b.png|200px|thumb|alt=Npeghol6b]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6c.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25 without One Edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6c.png|200px|thumb|alt=Npeghol6c]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6d.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25 without Extension&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6d.png|200px|thumb|alt=Npeghol6d]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.5 without Top Surface Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol7.png|200px|thumb|alt=Npeghol7]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.5 with Top Surface Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol7a.png|200px|thumb|alt=Npeghol7a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 1 Half without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol8.png|200px|thumb|alt=Npeghol8]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 2 with Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol9.png|200px|thumb|alt=Npeghol9]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 2 without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol10.png|200px|thumb|alt=Npeghol10]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol11.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol11.png|200px|thumb|alt=Npeghol11]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole with Extended Perimeter (One Side) and Surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol12.png|200px|thumb|alt=Npeghol12]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol13.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole with Extended Perimeter (Two Sides) and Surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol13.png|200px|thumb|alt=Npeghol13]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;s&amp;gt;&#039;&#039;&#039;npeghol15.dat&#039;&#039;&#039;&amp;lt;/s&amp;gt; || &amp;lt;s&amp;gt;&#039;&#039;&#039;~Technic Peg Hole Corner 0.25 (Obsolete)&#039;&#039;&#039;&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol15.png|200px|thumb|alt=Npeghol15]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol15b.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Corner with Wide Tabs on 1 Side 0.125&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol15b.png|200px|thumb|alt=Npeghol15b]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;s&amp;gt;&#039;&#039;&#039;npeghol16.dat&#039;&#039;&#039;&amp;lt;/s&amp;gt; || &amp;lt;s&amp;gt;&#039;&#039;&#039;~Technic Peg Hole Corner 0.125 (Obsolete)&#039;&#039;&#039;&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol16.png|200px|thumb|alt=Npeghol16]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;s&amp;gt;&#039;&#039;&#039;npeghol17.dat&#039;&#039;&#039;&amp;lt;/s&amp;gt; || &amp;lt;s&amp;gt;&#039;&#039;&#039;~Technic Peg Hole Negative with Cut Corners (Obsolete)&#039;&#039;&#039;&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol17.png|200px|thumb|alt=Npeghol17]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol18.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Corner 0.125 Without Lower Faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol18.png|200px|thumb|alt=Npeghol18]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol18a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Corner 0.125 without Faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol18a.png|200px|thumb|alt=Npeghol18a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol19.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 3 Top Half without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol19.png|200px|thumb|alt=Npeghol19]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol20.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 4 without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol20.png|200px|thumb|alt=Npeghol20]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Primitives_Reference&amp;diff=6923</id>
		<title>Primitives Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Primitives_Reference&amp;diff=6923"/>
		<updated>2023-12-19T17:13:59Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;LDraw Primitives Reference&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page is a source of reference for the LDraw primitives in the \LDraw\p directory. Primitives are defined as highly re-usable components of LEGO parts modelled for LDraw.&lt;br /&gt;
They serve several purposes :&lt;br /&gt;
&lt;br /&gt;
* To speed up parts authoring by providing a library of components which can be incorporated into several parts&lt;br /&gt;
* To allow rendering software to make substitutions of curved components&lt;br /&gt;
&lt;br /&gt;
Within this reference material the available primitives are categorised into:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each section contains an overview of the characteristics common to all primitives within that category. Primitives are grouped into classes within each category - one class of primitive serving a similar purpose at different sizes or resolutions. For each class of primitive, a brief description of the purpose of the primitive is provided, with notes on its co-ordinate origin, default size and rules for scaling. A list of the available primitives is shown.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XYZaxes.png|200px|middle|alt=Axes]]An understanding of the orientation of the co-ordinate axes is essential for authoring a part for LDraw. For reference within this page the axes and their direction is shown in this diagram.&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rectilinear primitives==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nomenclature&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Boxes are named boxF, with F representing the number of faces a box has. The suffix E represents the number of edges removed.&lt;br /&gt;
&lt;br /&gt;
F and E are may followed by an additional letter. The hyphen is removed if F is accompanied by a modifier.&lt;br /&gt;
&lt;br /&gt;
Face modifiers:&lt;br /&gt;
&lt;br /&gt;
* o - faces are opposite to each other&lt;br /&gt;
* t - faces are all touching each other (usually, it&#039;s implied, but box4t.dat is a thing)&lt;br /&gt;
* u - missing faces form a U-shape&lt;br /&gt;
&lt;br /&gt;
Edge letters:&lt;br /&gt;
&lt;br /&gt;
* p - groups of edges are parallel to each other&lt;br /&gt;
* a - some missing faces have no adjacent edges&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scaling and orientation&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
These rectilinear elements may be scaled in the {x}, {y} and {z} dimensions to make elements of any size. For example&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;40 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;rect.dat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
would generate a 80LDu x 40LDu rectangle in the {x,z} plane.&lt;br /&gt;
&lt;br /&gt;
Although the default orientation of the rect.dat primitive is in the {x,z} plane the LDraw language allows for this to be transformed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;40 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;rect.dat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
would generate a 80LDu x 40LDu rectangle in the {y,z} plane.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;40 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;rect.dat&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
would generate a 80LDu x 40LDu rectangle in the {x,y} plane.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
=== Two dimensional ===&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;triangle.dat&#039;&#039;&#039; || &#039;&#039;&#039;Triangle with all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:triangle.png|200px|thumb|alt=Triangle]]&lt;br /&gt;
|| This primitive represents a isosceles right triangle in the {x,z} plane and the three edges that bound it. Its origin is at the tip of the right angle and by default has a size of 1LDu in each of the {x} and {z} dimensions. To avoid matrix arithmetic problems in some renderers, the third dimension ({y} in the default orientation) must be given a non-zero scaling factor.&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 20&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;triangle.dat  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;rect.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect.png|200px|thumb|alt=Rect]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane and the four edges that bound it. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 3 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect3.png|200px|thumb|alt=Rect3]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but excludes one edge {-z}. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 2 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect2p.png|200px|thumb|alt=Rect2p]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but excludes two parallel edges ({+x} and {-x}). Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect2a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 2 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect2a.png|200px|thumb|alt=Rect2a]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but excludes two adjacent edges ({-x} and {-z}). Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;rect1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Rectangle with 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:rect1.png|200px|thumb|alt=Rect1]]&lt;br /&gt;
|| This primitive represents a rectangle in the {x,z} plane but include only the one {+x} edge. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions.  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;recte3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Empty rectangle with three edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:recte3.png|200px|thumb|alt=Recte3]]&lt;br /&gt;
|| This primitive represents three edges of a rectangle in the {x,z} plane. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;recte4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Empty rectangle with all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:recte4.png|200px|thumb|alt=Recte4]]&lt;br /&gt;
|| This primitive represents the four edges of a rectangle in the {x,z} plane. Its origin is at its centre and by default has a size of 2LDu in each of the {x} and {z} dimensions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
=== Three dimensional ===&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;box.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with all faces and edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box.png|200px|thumb|alt=Box]]&lt;br /&gt;
|| This primitive is used to define a cuboid. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the three dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box0.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with no faces and edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box0.png|200px|thumb|alt=Box0]]&lt;br /&gt;
|| This primitive is used to define the frame a cuboid. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the three dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces and all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5.png|200px|thumb|alt=Box5]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces without 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-1.png|200px|thumb|alt=Box5-1]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and one edge {-z} of that. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces without 2 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-2p.png|200px|thumb|alt=Box5-2p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and two of the four edges surrounding that. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces without top edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-4a.png|200px|thumb|alt=Box5-4a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and the four edges surrounding that. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box5-12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 5 faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box5-12.png|200px|thumb|alt=Box5-12]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} face and all edges. Its primary use is for sticker parts. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Box4 overview&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[File:Box4_Overview.PNG|thumb|600px|left|alt=Box4 Overview]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 parallel faces and all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4.png|200px|thumb|alt=Box4]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4o4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 parallel faces without bottom edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4o4a.png|200px|thumb|alt=Box4o4a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing the edges of the bottom face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4o8a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 parallel faces without top and bottom edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4o8a.png|200px|thumb|alt=Box4o8a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing the edges of the top and bottom face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4t.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent and all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4t.png|200px|thumb|alt=Box4t]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and front {-z} faces, but with all its edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-1.png|200px|thumb|alt=Box4-1]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and the edge between those faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 faces without two opposite top edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-2p.png|200px|thumb|alt=Box4-2p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing two edges of the top face - the intersection of the two missing faces and the opposite edge. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-3p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 faces without three parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-3p.png|200px|thumb|alt=Box4-3p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces and missing three edges of the missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 4 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-4a.png|200px|thumb|alt=Box4-4a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and all the edges of the missing front face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-5a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 5 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-5a.png|200px|thumb|alt=Box4-5a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and all the edges at the top and the bottom of the missing front face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 7 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-7a.png|200px|thumb|alt=Box4-7a]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and all the edges of both missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box4-12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box4-12.png|200px|thumb|alt=Box4-12]]&lt;br /&gt;
||This primitive represents a cuboid missing the top {-y} and front {-z} faces and excludes all the edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing 3 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-3.png|200px|thumb|alt=Box3-3]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and bottom {+y} faces, and missing three edges of the missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-5a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 4 adjacent faces missing 4 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-5a.png|200px|thumb|alt=Box3-5a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces and includes the three internal edges and the outer edges except those on the left {-z}. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing 7 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-7a.png|200px|thumb|alt=Box3-7a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces and includes the three internal edges but only the outer edges at the top (-y). Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-9a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing 9 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-9a.png|200px|thumb|alt=Box3-9a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces and includes only the three internal edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3-12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3-12.png|200px|thumb|alt=Box3-12]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z} and left {-x} faces but excludes all edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Box3u overview&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[File:Box3u_Overview.PNG|thumb|600px|left|alt=Box3u Overview]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u2p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 2 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u2p.png|200px|thumb|alt=Box3u2p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the top edges of the left {-x} and right {+x} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u4p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 4 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u4p.png|200px|thumb|alt=Box3u4p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the topand bottom edges of the left {-x} and right {+x} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u4a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 adjacent faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u4a.png|200px|thumb|alt=Box3u4a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the edges of the missing top face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u5p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 5 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u5p.png|200px|thumb|alt=Box3u5p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the top edge of the left {-x} face and all edges of the right {+x} face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 6 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u6.png|200px|thumb|alt=Box3u6]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the top and bottom edges of the right {+x} face and all edges of the left {-x} face. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u6a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 4 adjacent and 2 parallel edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u6a.png|200px|thumb|alt=Box3u6a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the top edges and the bottom edges of the missing faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 7 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u7a.png|200px|thumb|alt=Box3u7a]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes the edges of the missing top (-y) and right (+x) faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u8p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces missing 8 edges (in two parallel groups)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u8p.png|200px|thumb|alt=Box3u8p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the edges of the left {-x} and right {+x} faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u10p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 faces in a &#039;U&#039; shape, missing 10 edges (all except those between the faces)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u10p.png|200px|thumb|alt=Box3u10p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the edges except the two betweenthe faces. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box3u12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 3 parallel faces missing all edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box3u12.png|200px|thumb|alt=Box3u12]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y} and left {-x} and right {+x} faces and excludes all the edges. Its origin is the centre of the (missing) top face and by default has a size of 2LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;boxjcyl4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Box truncated by cylinder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:boxjcyl4.png|200px|thumb|alt=Boxjcyl4]]&lt;br /&gt;
|| This suite of primitives are used to model the intersection between a box and cylinders of different radii. The box has a fixed width of 2LDu and the cylinder radius is denoted by the r in the filename.&lt;br /&gt;
&lt;br /&gt;
Currently available primitives :&lt;br /&gt;
Regular resolution (boxjcylr) : 4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 5 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-5.png|200px|thumb|alt=Box2-5]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges which do not bound the included faces. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 7 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-7.png|200px|thumb|alt=Box2-7]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces and those along the left {-x} and right {+x} sides. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 9 edges (all except those connected to the {+x}, {+y}, {+z} vertex)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-9.png|200px|thumb|alt=Box2-9]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces and those along the right {+x} sides. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-9p.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 9 edges (all except three parallel edges)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-9p.png|200px|thumb|alt=Box2-9p]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces and those parallel to that. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;box2-11.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cuboid with 2 adjacent faces missing 11 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:box2-11.png|200px|thumb|alt=Box2-11]]&lt;br /&gt;
|| This primitive represents a cuboid missing the top {-y}, front {-z}, left {-x} and right {+x} faces and excludes all the edges except that at the join between the two faces. Its origin is the centre of the cuboid and by default has a size of 2LDu in each of the {x}, {y} and {z} dimensions.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3.png|200px|thumb|alt=Tri3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} and bottom {+y} faces but including all edges. The left {-x} and front {-z} faces are perpendicular. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3-1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3-1.png|200px|thumb|alt=Tri3-1]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} and bottom {+y} faces and excludes the top edge of the hypotenuse. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3-3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism missing 3 faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3-3.png|200px|thumb|alt=Tri3-3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} and bottom {+y} faces and excludes all top edges. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3a1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 adjacent faces missing 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3a1.png|200px|thumb|alt=Tri3a1]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} face, the face at the hypotenuse as well as the top edge at the hypotenuse. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3a3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 adjacent faces missing 3 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3a3.png|200px|thumb|alt=Tri3a3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} face, the face at the hypotenuse and excludes all top edges. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3a4&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 adjacent faces missing 4 adjacent edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3a4.png|200px|thumb|alt=Tri3a4]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the top {-y} face, the face at the hypotenuse and excludes all edges at the hypotenuse. Its origin is the right-angle corner of the (missing) top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3u1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces missing 1 edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3u1.png|200px|thumb|alt=Tri3u1]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the left {-x} and front {-z} faces. Its origin is the right-angle corner of the top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri3u3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 3 faces missing 3 edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri3u3.png|200px|thumb|alt=Tri3u3]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the left {-x} and front {-z} faces, the edge where they would join and one edge of each of the triangles. Its origin is the right-angle corner of the top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tri4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Right-angled triangular prism with 2 square faces and 2 triangular faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:tri4.png|200px|thumb|alt=Tri4]]&lt;br /&gt;
|| This primitive represents a triangular prism missing the face at the hypotenuse. Its origin is the right-angle corner of the top face and by default has a size of 1LDu in each of the {x} and {z} dimensions and 1LDu in the {y} dimension.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Curved primitives==&lt;br /&gt;
&lt;br /&gt;
LDraw represents curved surfaces as polygons. For circular components two series of primitives are provided.&lt;br /&gt;
&lt;br /&gt;
All the circular primitives are orientated in the {x,z} plane with their origin at the centre of the circle and a default radius of 1 LDu. Primitives are provided for complete circles and for commonly used fractions of a complete circle. Where the naming convention includes a prefix of the form n-f this indicates the fraction (n/f) of the circle drawn by the primitive. Where this fraction is less than an entire circle, the primitive starts at {+x,0} and progresses in a conterclockwise direction when viewed from above {-y}.&lt;br /&gt;
&lt;br /&gt;
To avoid rounding errors, it is preferable to use existing fractional circular primitives, or create a new primitive, rather than rotate an existing primitive by anything other than 90 or 180 degrees. For example, use 3-16XXXX.dat rather than combining 1-8XXXX.dat with 1-16XXXX.dat rotated by 22.5 degreees.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px mode=&amp;quot;nolines&amp;quot;&amp;gt;&lt;br /&gt;
XZaxes.png&lt;br /&gt;
1-8disc.png&lt;br /&gt;
1-4disc.png&lt;br /&gt;
2-4disc.png&lt;br /&gt;
3-4disc.png&lt;br /&gt;
4-4disc.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To avoid matrix arithmetic problems in some renderers, the third dimension ({y} in the default orientation) of two-dimensional primitives must be given a non-zero scaling factor.&lt;br /&gt;
LDraw circles are normally formed of 16-sided polygons (hexdecagons) - the regular resolution. For larger elements, where scaling-up of hexadecagons would give too angular an appearance, a series of high resolution primitives based on a 48-sided polygon are available. These may also be used for parts not well suited to a 16-fold symmetry.&lt;br /&gt;
&lt;br /&gt;
These circular elements may be scaled by the same factor in both the {x} and {z} dimensions to make circular elements of greater or less than 1LDu radius. For example&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4-4edge.dat&lt;br /&gt;
&lt;br /&gt;
would generate a circle in the {x,z} plane with a radius of 3LDu.&lt;br /&gt;
&lt;br /&gt;
They may also be scaled asymmetrically in the x and z dimension to make ellipses.&lt;br /&gt;
&lt;br /&gt;
Although the default orientation is in the {x,z} plane the LDraw language allows for these to be transformed&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4-4edge.dat&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;would generate a circle in the {y,z} plane&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4-4edge.dat&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;would generate a circle in the {x,y} plane&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Two dimensional=== &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Circular 2D Overview&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[File:Circular_2D_Overview.PNG|thumb|600px|left|alt=Circular 2D Overview]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fedge.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular line segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4edge.png|200px|thumb|alt=4-4Edge]]&lt;br /&gt;
|| This suite of primitives are used for edges which comprise an entire or part circle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 9-16, 5-8, 11-16, 3-4, 13-16, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48, 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 7-24, 5-16, 1-3, 3-8, 19-48, 5-12, 7-16, 11-24, 2-4, 5-8, 2-3, 3-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 2-4, 3-8, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fdisc.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular disc sector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4disc.png|200px|thumb|alt=4-4disc]]&lt;br /&gt;
|| This suite of primitives are used for surfaces which comprise an entire or part circle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 5-8, 11-16, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-24, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 1-4, 1-3, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 2-4, 3-4, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fchrd.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular disc segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-4chrd.png|200px|thumb|alt=1-4chrd]]&lt;br /&gt;
|| This suite of primitives are used for surfaces which comprise part of a circle enclosed by the arc of its circumference and its chord. Note that the bounding circle in the image is for context only - only the grey segment is generated by the 1-4chrd primitive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16 (see note), 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 5-8, 3-4, 13-16, 7-8&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48 (see note) 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 7-24, 5-16, 1-3, 3-8, 19-48, 5-12, 7-16, 11-24, 2-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-8, 2-4&lt;br /&gt;
&lt;br /&gt;
Note: The regular resolution 1-16chrd.dat and high resolution 1-48chrd are special cases, see Primitive Substitution Adapters below for more information&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fndis.dat&#039;&#039;&#039; || &#039;&#039;&#039;Inverse of circular disc sector&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4ndis.png|200px|thumb|alt=4-4ndisc]]&lt;br /&gt;
|| This suite of primitives pad their matching n-fdisc.dat primitives out to the bounding square. They are used to integrate circular elements into rectilinear elements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 1-3, 7-16, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-4, 2-4, 3-4, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-ftang.dat&#039;&#039;&#039; || &#039;&#039;&#039;Tangential ring segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-4tang.png|200px|thumb|alt=1-4tang]]&lt;br /&gt;
|| This suite of primitives are used to pad a 16-sided polygon to a circumscribing 16-sided polygon whose edges are tangential to the inner polygon. Note that the bounding circle in the image is for context only - only the black segment is generated by the 1-4tang primitive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-ftndis.dat&#039;&#039;&#039; || &#039;&#039;&#039;Disc negative truncated&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-8tndis.png|200px|thumb|alt=1-8tndis]]&lt;br /&gt;
|| [[File:Tndis-example.png|200px|right|alt=Tndis-example]]&lt;br /&gt;
This suite of primitives are used to used to integrate circular elements into rectilinear elements. These pad their matching n-fdisc.dat primitives out to the bounding rectangle, spanning from x = 1 to the minimal x value of the matching primitive. Note that the bounding circle in the image is for context only - only the black segment is generated by the 1-8tndis primitive. The image on the right showes the difference between tang, tndis and ndis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 5-48, 1-24, 1-16, 1-8&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-faring.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular adaptor ring segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:2-4aring.png|200px|thumb|alt=2-4aring]]&lt;br /&gt;
||This suite of primitives are used to interface between high resolution (48-segment) circular primitives and normal resolution (16-segment) circluar primitives. Note that the bounding circle in the image is for context only - only the black segment is generated by the 2-4aring primitive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;1-16chrd.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;1-48chrd.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-fering.dat&#039;&#039;&#039; || &#039;&#039;&#039;Primitive Substitution Adapters&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4edge.png|200px|thumb|alt=4-4edge]]&lt;br /&gt;
||  This suite of primitives are used correct for gaps that form between curved primitives and normal geometry in editors that utilize primitive substitution. This is a special case used on the inside of a curved primitive where it joins geometry that cannot make use of a curved primitive. The chrd files themselves are simply a reference to empty.dat, which under normal circumstances does not draw anything. However, in tools that support primitive substitution, the curved primitive it is attached to would normally in this case create a gap when rendered using more than 16 points to form a circle. In that case, the substituted version of these normally empty primitives would fill in the gap between the curve and the other geometry.&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;see&amp;quot; these primitives, the editor in use must utilize primitive substitution. Then one of the following can be done:&lt;br /&gt;
&lt;br /&gt;
* set the curve quality to a level high enough to see the gaps reappear&lt;br /&gt;
* For LDView 4.4 or later, in the Model Tree dialog, you can search for them (for example, &amp;quot;ering&amp;quot;), and if you have it set to highlight, then when you select one, it will be highlighted in the 3D view.&lt;br /&gt;
* Manually recolor the primitive in question to a color that contrasts with the colors that surround it&lt;br /&gt;
&lt;br /&gt;
Note that the bounding circle in the image is for context only - there are no actual geometry producing lines contained in these files.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16chrd, 1-4ering, 1-8ering, 3-16ering, 2-4ering, 4-4ering&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48chrd&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fringr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-frinrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-ffrinr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-ffrirr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;nn-ffrir.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;ringr.dat (deprecated name)&amp;lt;br&amp;gt;ringrr.dat (deprecated name) || &#039;&#039;&#039;Circular ring segment&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4ring1.png|200px|thumb|alt=1-4ring1]]&lt;br /&gt;
|| This suite of primitives are used to generate circular rings or part rings. The numeric suffix r in the filename indicates the inner radius of the ring - the outer radius is 1LDu greater. For example a n-f4-4ring4 primitive would create a ring with an inner radius of 4LDu and an outer radius of 5LDu.&lt;br /&gt;
&lt;br /&gt;
Note: The correct nomenclature is to use the full word &amp;quot;ring&amp;quot;. All newly created ring primitives must use &amp;quot;ring&amp;quot;. Due to the fact that too many files would be affected, it was decided to keep the current official &amp;quot;rin&amp;quot; primitives in the library. All files using &amp;quot;ri&amp;quot; have been moved, to use &amp;quot;ring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-16rin1, 1-8ring1, 3-16rin1, 1-4ring1, 5-16ring1, 3-8ring1, 7-16rin1, 2-4ring1, 9-16ring1, 5-8ring1, 3-4ring1, 7-8ring1, 4-4ring1&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-16rin2, 1-8ring2, 3-16rin2, 1-4ring2, 5-16rin2, 3-8ring2, 7-16ring2, 2-4ring2, 5-8ring2, 3-4ring2, 7-8ring2, 4-4ring2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-16rin3, 1-8ring3, 3-16rin3, 1-4ring3, 5-16rin3, 3-8ring3, 7-16rin3, 2-4ring3, 5-8ring3, 3-4ring3, 7-8ring3, 4-4ring3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-16rin4, 1-8ring4, 3-16rin4, 1-4ring4, 5-16ring4, 3-8ring4, 7-16rin4, 2-4ring4, 5-8ring4, 3-4ring4, 4-4ring4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-8ring5, 3-16rin5, 1-4ring5, 5-16rin5, 3-8ring5, 2-4ring5, 3-4ring5, 4-4ring5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 1-16ring6, 1-8ring6, 3-16rin6, 1-4ring6, 3-8ring6, 7-16ring6, 2-4ring6, 5-8ring6, 3-4ring6, 4-4ring6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-8ring7, 3-16rin7, 1-4ring7, 5-16ring7, 3-8ring7, 7-16ring7, 2-4ring7, 3-4ring7, 4-4ring7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-16ring8, 1-8ring8, 3-16rin8, 1-4ring8, 5-16ring8, 3-8ring8, 7-16ring8, 2-4ring8, 3-4ring8, 7-8ring8, 4-4ring8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 1-16ring9, 1-8ring9, 3-16rin9, 1-4ring9, 5-16ring9, 3-8ring9, 7-16ring9, 2-4ring9, 3-4ring9, 7-8ring9, 4-4ring9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-8rin10, 3-16ring10, 1-4rin10, 3-8rin10, 2-4rin10, 5-8ring10, 3-4rin10, 4-4rin10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-16ring11, 1-8ring11, 3-16ring11, 1-4rin11, 7-16ring11, 2-4rin11, 4-4rin11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-8ring12, 3-16ring12, 1-4rin12, 5-16ring12, 3-8rin12, 2-4rin12, 7-8rin12, 4-4rin12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-8ring13, 3-16ring13, 1-4rin13, 5-16ring13, 3-8rin13, 2-4rin13, 4-4rin13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 3-16ring14, 1-4rin14, 2-4rin14, 3-4rin14, 4-4rin14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-8rin15, 3-16ring15, 1-4rin15, 3-8rin15, 2-4rin15, 7-8rin15, 4-4rin15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 1-8ring16, 1-4rin16, 3-8rin16, 2-4rin16, 3-4ring16, 7-8rin16, 4-4rin16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 1-8rin17, 1-4rin17, 5-16ring17, 3-8ring17, 7-16ring17, 2-4rin17, 4-4rin17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 1-16ring18, 1-8rin18, 1-4rin18, 3-8rin18, 2-4rin18, 4-4rin18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-16ring19, 1-8rin19, 3-16ring19, 1-4rin19, 3-8ring19, 2-4ring19, 3-4ring19, 4-4rin19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-4rin20, 2-4rin20, 4-4rin20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 1-4ring21, 3-8ring21, 4-4rin21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 1-16ring22, 3-16ring22, 2-4rin22, 3-4rin22, 4-4rin22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-16ring23, 1-8rin23, 1-4rin23, 2-4rin23, 4-4rin23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-16ring24, 3-16ring24, 1-4rin24, 3-8rin24, 2-4rin24, 4-4rin24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 1-4ring25, 2-4rin25, 4-4rin25&amp;lt;br&amp;gt;&lt;br /&gt;
r=26: 1-4ring26, 2-4ring26, 4-4rin26&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 1-8ring27, 4-4ring27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-8ring28, 1-4rin28, 2-4ring28, 4-4ring28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 1-4ring29, 3-8ring29, 2-4ring29, 3-4ring29, 4-4rin29&amp;lt;br&amp;gt;&lt;br /&gt;
r=30: 2-4rin30, 4-4rin30&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 2-4ring31, 4-4rin31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 1-8ring32, 2-4ring32, 4-4rin32&amp;lt;br&amp;gt;&lt;br /&gt;
r=33: 1-8ring33, 1-4ring33, 4-4rin33&amp;lt;br&amp;gt;&lt;br /&gt;
r=34: 1-8ring34, 1-4rin34, 4-4rin34&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 1-8ring35, 4-4ring35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 1-4ring36, 4-4rin36&amp;lt;br&amp;gt;&lt;br /&gt;
r=37: 3-8ring37, 2-4ring37, 4-4rin37&amp;lt;br&amp;gt;&lt;br /&gt;
r=38: 1-4rin38, 4-4rin38&amp;lt;br&amp;gt;&lt;br /&gt;
r=39: 1-16ring39, 1-8rin39, 3-16ring39, 1-4rin39, 7-8rin39, 4-4rin39&amp;lt;br&amp;gt;&lt;br /&gt;
r=40: 1-4ring40, 7-8rin40, 4-4rin40&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 4-4ring41&amp;lt;br&amp;gt;&lt;br /&gt;
r=42: 2-4ring42&amp;lt;br&amp;gt;&lt;br /&gt;
r=43: 2-4ring43, 4-4rin43&amp;lt;br&amp;gt;&lt;br /&gt;
r=44: 2-4ring44, 4-4rin44&amp;lt;br&amp;gt;&lt;br /&gt;
r=45: 2-4ring45, 4-4rin45&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 2-4ring46, 4-4rin46&amp;lt;br&amp;gt;&lt;br /&gt;
r=47: 4-4rin47&amp;lt;br&amp;gt;&lt;br /&gt;
r=48: 1-4rin48, 4-4rin48&amp;lt;br&amp;gt;&lt;br /&gt;
r=49: 1-4rin49, 4-4ring49&amp;lt;br&amp;gt;&lt;br /&gt;
r=50: 1-4rin50, 4-4rin50&amp;lt;br&amp;gt;&lt;br /&gt;
r=51: 4-4rin51&amp;lt;br&amp;gt;&lt;br /&gt;
r=52: 2-4rin52, 4-4rin52&amp;lt;br&amp;gt;&lt;br /&gt;
r=53: 3-16ring53&amp;lt;br&amp;gt;&lt;br /&gt;
r=55: 2-4ring55&amp;lt;br&amp;gt;&lt;br /&gt;
r=57: 1-16ring57, 1-4ring57, 4-4rin57&amp;lt;br&amp;gt;&lt;br /&gt;
r=61: 4-4ring61&amp;lt;br&amp;gt;&lt;br /&gt;
r=66: 1-4ring66, 4-4ring66&amp;lt;br&amp;gt;&lt;br /&gt;
r=67: 1-4ring67&amp;lt;br&amp;gt;&lt;br /&gt;
r=68: 4-4ring68&amp;lt;br&amp;gt;&lt;br /&gt;
r=70: 1-16ring70, 1-8ring70, 3-16ring70, 2-4ring70, 4-4ring70&amp;lt;br&amp;gt;&lt;br /&gt;
r=71: 4-4ring71&amp;lt;br&amp;gt;&lt;br /&gt;
r=77: 4-4rin77&amp;lt;br&amp;gt;&lt;br /&gt;
r=78: 4-4rin78&amp;lt;br&amp;gt;&lt;br /&gt;
r=79: 1-4ring79, 4-4rin79&amp;lt;br&amp;gt;&lt;br /&gt;
r=80: 3-16ring80&amp;lt;br&amp;gt;&lt;br /&gt;
r=81: 4-4ring81&amp;lt;br&amp;gt;&lt;br /&gt;
r=85: 4-4rin85&amp;lt;br&amp;gt;&lt;br /&gt;
r=88: 4-4ring88&amp;lt;br&amp;gt;&lt;br /&gt;
r=95: 4-4ring95&amp;lt;br&amp;gt;&lt;br /&gt;
r=97: 4-4ring97&amp;lt;br&amp;gt;&lt;br /&gt;
r=101: 4-4ring101&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-24ring1, 1-12rin1, 1-8ring1, 1-6ring1, 3-16ring1, 11-48ring1, 1-4ring1, 5-16ring1, 7-16ring1, 2-4ring1, 4-4ring1.dat&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-24ring2, 1-16ring2, 1-12rin2, 5-48ring2, 1-8ring2, 1-6ring2, 3-16ring2, 5-24ring2, 1-4ring2, 1-3ring2, 3-8ring2, 7-16ring2, 2-4ring2, 19-24ring2, 7-8ring2, 4-4ring2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-24rin3, 1-16rin3, 1-12ring3, 1-8ring3, 7-48ring3, 1-6ring3, 5-24ring3, 1-4ring3, 1-3ring3, 7-16rin3, 2-4ring3, 4-4ring3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-24rin4, 1-12ring4, 5-48rin4, 1-8ring4, 7-48ring4, 5-24ring4, 1-4ring4, 7-24rin4, 2-4ring4, 4-4ring4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-24rin5, 1-12rin5, 5-48ring5, 1-8ring5, 7-48rin5, 1-6ring5, 5-24ring5, 1-4ring5, 2-4ring5, 4-4ring5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 1-48rin6, 1-24rin6, 1-16ring6, 1-12rin6, 1-8ring6, 1-6ring6, 5-24ring6, 1-4ring6, 2-4ring6, 5-6ring6, 4-4ring6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-24rin7, 1-16ring7, 1-8ring7, 7-48ring7, 1-6ring7, 3-16rin7, 5-24rin7, 1-4ring7, 2-3ring7, 3-4ring7, 4-4ring7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-16rin8, 1-12rin8, 1-8ring8, 7-48ring8, 1-6ring8, 3-16rin8, 5-24ring8, 1-4ring8, 11-24ring8, 4-4ring8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 1-48rin9, 1-24rin9, 1-12rin9, 5-48rin9, 1-8ring9, 5-24rin9, 11-48ring9, 1-6ring9, 1-4ring9, 1-3ring9, 2-4ring9, 4-4ring9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-24ring10, 1-16ring10, 1-12ring10, 5-48ring10, 1-8ring10, 7-48ring10, 1-6ring10, 5-24ring10, 1-4rin10, 2-4ring10, 4-4rin10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-24ring11, 1-16ring11, 1-8ring11, 7-48ring11, 3-16ring11, 1-4rin11, 7-16ring11, 2-4rin11, 4-4rin11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-12ring12, 1-8ring12, 1-4ring12, 1-6rin12, 2-4rin12, 4-4rin12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-16ring13, 1-12ring13, 1-8ring13, 1-6rin13, 5-24ring13, 1-4rin13, 5-12ring13, 11-24ring13, 3-4rin13, 4-4rin13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 1-24ring14, 1-16ring14, 1-12ring14, 1-8rin14, 1-6rin14, 3-16ring14, 1-4rin14, 3-8ring14, 5-12ring14, 3-4rin14, 4-4rin14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-48ring15, 1-24ring15, 1-16ring15, 1-12ring15, 1-8ring15, 1-6ring15, 3-16ring15, 5-24ring15, 1-4rin15, 2-4ring15, 4-4rin15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 1-16ring16, 1-8rin16, 7-48ring16, 1-6rin16, 1-4rin16, 7-16ring16, 2-4rin16, 3-4rin16, 5-6rin16, 4-4rin16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 1-16ring17, 1-12ring17, 1-6rin17, 5-24ring17, 1-4rin17, 1-3rin17, 2-4rin17, 4-4rin17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 1-16ring18, 7-48ring18, 1-6rin18, 5-24ring18, 1-4rin18, 4-4rin18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-24ring19, 1-16ring19, 1-12ring19, 5-48ring19, 1-8ring19, 1-6rin19, 11-48ring19, 1-4rin19, 2-4rin19, 4-4rin19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-12ring20, 1-8rin20, 5-24ring20, 11-48ring20, 1-4rin20, 4-4rin20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 1-16ring21, 11-48ring21, 1-4rin21, 4-4rin21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 1-12ring22, 11-48ring22, 1-4rin22, 4-4rin22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-4rin23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-24ring24, 1-12ring24, 5-24ring24, 1-4rin24, 4-4rin24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 3-16ring25, 1-4rin25, 4-4rin25&amp;lt;br&amp;gt;&lt;br /&gt;
r=26: 1-4rin26, 4-4rin26&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 1-4rin27, 4-4rin27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-8rin28, 5-24ring28, 11-48ring28, 1-4ring28, 4-4rin28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 1-24ring29, 1-16ring29, 1-12ring29, 5-48ring29, 7-48ring29, 1-6ring29, 3-16ring29, 11-48ring29, 1-4rin29, 5-24ring29, 4-4rin29&amp;lt;br&amp;gt;&lt;br /&gt;
r=30: 1-24ring30, 1-16ring30, 1-4rin30, 3-8ring30, 4-4rin30&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 1-4rin31, 2-4rin31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 5-48ring32, 1-4rin32, 2-4ring32&amp;lt;br&amp;gt;&lt;br /&gt;
r=33: 5-24ring33, 1-4rin33, 4-4rin33&amp;lt;br&amp;gt;&lt;br /&gt;
r=34: 7-48ring34, 5-24ring34, 11-48ring34, 1-4rin34, 2-4ring34, 4-4rin34&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 1-24ring35, 1-16ring35, 1-8rin35, 5-24ring35, 1-4rin35, 4-4ring35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 1-8ring36, 1-4rin36, 1-3ring36, 4-4ring36&amp;lt;br&amp;gt;&lt;br /&gt;
r=37: 1-8ring37, 1-4rin37, 2-4ring37, 4-4rin37&amp;lt;br&amp;gt;&lt;br /&gt;
r=38: 1-12ring38, 1-6ring38, 1-4rin38, 4-4ring38&amp;lt;br&amp;gt;&lt;br /&gt;
r=39: 1-24ring39, 1-16ring39, 1-12ring39, 5-48ring39, 1-8rin39, 7-48ring39, 1-6ring39, 3-16ring39, 1-4rin39, 2-4ring39, 4-4ring39&amp;lt;br&amp;gt;&lt;br /&gt;
r=40: 1-4rin40, 11-48ring40, 2-4ring40&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 1-8ring41, 1-4rin41, 4-4rin41&amp;lt;br&amp;gt;&lt;br /&gt;
r=42: 1-12ring42, 1-6ring42, 4-4rin42&amp;lt;br&amp;gt;&lt;br /&gt;
r=43: 1-48ring43, 1-16ring43, 1-12ring43, 1-6ring43, 4-4ring43&amp;lt;br&amp;gt;&lt;br /&gt;
r=44: 4-4ring44&amp;lt;br&amp;gt;&lt;br /&gt;
r=45: 1-4rin45, 4-4ring45&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 1-4ring46&amp;lt;br&amp;gt;&lt;br /&gt;
r=47: 1-6rin47, 1-4ring47, 4-4rin47&amp;lt;br&amp;gt;&lt;br /&gt;
r=48: 7-48ring48, 1-4rin48, 2-4ring48&amp;lt;br&amp;gt;&lt;br /&gt;
r=49: 1-24ring49, 1-16ring49, 1-4ring49, 4-4rin49&amp;lt;br&amp;gt;&lt;br /&gt;
r=50: 1-6rin50, 3-16ring50, 4-4rin50&amp;lt;br&amp;gt;&lt;br /&gt;
r=51: 1-4rin51&amp;lt;br&amp;gt;&lt;br /&gt;
r=52: 11-24ring52, 4-4rin52&amp;lt;br&amp;gt;&lt;br /&gt;
r=53: 1-8ring53, 3-16ring53, 4-4rin53&amp;lt;br&amp;gt;&lt;br /&gt;
r=54: 4-4rin54&amp;lt;br&amp;gt;&lt;br /&gt;
r=55: 2-4ring55&amp;lt;br&amp;gt;&lt;br /&gt;
r=56: 1-12ring56, 1-8rin56&amp;lt;br&amp;gt;&lt;br /&gt;
r=57: 1-4ring57, 4-4ring57&amp;lt;br&amp;gt;&lt;br /&gt;
r=59: 1-24ring59, 1-16ring59, 1-12ring59&amp;lt;br&amp;gt;&lt;br /&gt;
r=60: 1-24ring60, 1-16ring60&amp;lt;br&amp;gt;&lt;br /&gt;
r=63: 1-4rin63&amp;lt;br&amp;gt;&lt;br /&gt;
r=64: 1-4rin64&amp;lt;br&amp;gt;&lt;br /&gt;
r=65: 1-4rin65&amp;lt;br&amp;gt;&lt;br /&gt;
r=69: 5-24ring69&amp;lt;br&amp;gt;&lt;br /&gt;
r=70: 1-4rin70&amp;lt;br&amp;gt;&lt;br /&gt;
r=71: 1-4rin71, 4-4ring71&amp;lt;br&amp;gt;&lt;br /&gt;
r=77: 4-4ring77&amp;lt;br&amp;gt;&lt;br /&gt;
r=78: 1-12ring78&amp;lt;br&amp;gt;&lt;br /&gt;
r=79: 1-4ring79&amp;lt;br&amp;gt;&lt;br /&gt;
r=80: 7-48ring80, 1-6ring80&amp;lt;br&amp;gt;&lt;br /&gt;
r=81: 4-4ring81&amp;lt;br&amp;gt;&lt;br /&gt;
r=82: 1-4rin82&amp;lt;br&amp;gt;&lt;br /&gt;
r=83: 1-4rin83&amp;lt;br&amp;gt;&lt;br /&gt;
r=84: 1-8ring84&amp;lt;br&amp;gt;&lt;br /&gt;
r=85: 4-4ring85&amp;lt;br&amp;gt;&lt;br /&gt;
r=88: 4-4ring88&amp;lt;br&amp;gt;&lt;br /&gt;
r=90: 11-48ring90&amp;lt;br&amp;gt;&lt;br /&gt;
r=95: 2-4ring95&amp;lt;br&amp;gt;&lt;br /&gt;
r=96: 1-4ring96&amp;lt;br&amp;gt;&lt;br /&gt;
r=97: 4-4rin97&amp;lt;br&amp;gt;&lt;br /&gt;
r=99: 1-6ring99, 4-4ring99&amp;lt;br&amp;gt;&lt;br /&gt;
r=100: 1-24ring100, 4-4ring100&amp;lt;br&amp;gt;&lt;br /&gt;
r=130: 4-4ring130&amp;lt;br&amp;gt;&lt;br /&gt;
r=160: 2-4ring160&amp;lt;br&amp;gt;&lt;br /&gt;
r=179: 1-4ring179&amp;lt;br&amp;gt;&lt;br /&gt;
r=240: 2-4ring240&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
r=2 : 2-4ring2, 4-4ring2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3 : 1-4ring3, 4-4ring3&amp;lt;br&amp;gt;&lt;br /&gt;
r=6 : 4-4ring6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7 : 4-4ring7&amp;lt;br&amp;gt;&lt;br /&gt;
r=11 : 4-4ring11&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
=== Three dimensional ===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcyli.dat&#039;&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;&#039;n-fcyli2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cyli.png |200px|thumb|alt=4-4cyli]]&lt;br /&gt;
||This suite of primitives are used to generate cylinders or part cylinders. These are provided in two forms - with conditional lines (n-fcyli) or without conditional lines (n-fcyli2). In almost all circumstances the &amp;quot;cyli&amp;quot; version should be used. The &amp;quot;cyli2&amp;quot; versions are for very special cases and their use for the rounded corners of stickers is no longer appropriate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - with conditional lines (n-fcyli):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 9-16, 5-8, 11-16, 3-4, 13-16, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48, 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 7-24, 5-16, 1-3, 3-8, 5-12, 7-16, 11-24, 2-4, 5-8, 2-3, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-8, 2-4, 4-4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - without conditional lines (n-fcyli2):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-8, 3-16, 1-4, 5-16, 2-4, 3-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-8, 3-16, 1-4, 3-8, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylo.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder with Open End&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cylo.png |200px|thumb|alt=4-4cylo]]&lt;br /&gt;
||This suite of primitives are used to generate cylinders or part cylinders with edges around the lower and upper surfaces.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-8, 3-16, 1-4, 5-16, 3-8, 7-16, 2-4, 9-16, 5-8, 3-4, 7-8, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-48, 1-24, 1-16, 1-12, 5-48, 1-8, 7-48, 1-6, 3-16, 5-24, 11-48, 1-4, 1-3, 3-8, 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): 1-4, 3-8, 2-4, 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylc.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fcylc2.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fcylc3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder with Closed End&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cylc.png |200px|thumb|alt=4-4cylc]]&lt;br /&gt;
||This suite of primitives are used to generate cylinders or part cylinders with the upper surface closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - with conditional lines and top edge line (n-fcylc):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-16, 1-4, 3-8, 2-4, 3-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 2-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - without conditional lines or top or bottom edge line (n-fcylc2):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives - with conditional lines, but without top and bottom edge lines (n-fcylc3):&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-4, 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 4-4&amp;lt;br&amp;gt;&lt;br /&gt;
Low resolution (n-f): None&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcyls.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fcyls2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by an angled plane&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:2-4cyls.png |200px|thumb|alt=2-4cyls]]&lt;br /&gt;
[[File:3-8cyls.png |200px|thumb|alt=3-8cyls]]&lt;br /&gt;
&lt;br /&gt;
||These primitives are used to generate cylinders or part cylinders which are truncated by a plane which is not perpendicular to the axis of the cylinder. The default angle of the plane is 45 degress.&lt;br /&gt;
&lt;br /&gt;
These primitives are notoriously difficult to describe and the user is encouraged to experiment in order to gain a full understanding of their geometry. One technique is to open the primitive in LDPE and choose random colours. Selecting Show Axes also helps.&lt;br /&gt;
&lt;br /&gt;
The 2-4cyls.dat primitive is orientated with the perpendicular bounding plane at the top {-y} and the angled bounding plane at the bottom {+y}. In common with the other 2-4xxxx.dat primitives, the {+z} semicircle is represented. By default the truncation plane is y=x-1. The 1-4cyls.dat and 3-8cyls.dat primitives are sub-sections of 2-4cyls.dat&lt;br /&gt;
&lt;br /&gt;
The 1-4cyls2.dat primitive is orientated with the perpendicular bounding plane at the top {-y} and the angled bounding plane at the bottom {+y}. Unlike the other 1-4xxxx.dat primitives, the {-x,+z} quadrant is represented. The truncation plane is y=x.&lt;br /&gt;
&lt;br /&gt;
The following observations may help :&lt;br /&gt;
&lt;br /&gt;
1-4cyls and 1-4cyls2 are complements. If you put them together correctly they make a 1-4cyli.&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls.dat&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;-1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 -1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls2.dat&lt;br /&gt;
&lt;br /&gt;
1-4cyls2 is actually hidden in 2-4cyls, which could be constructed like&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls.dat&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 -1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyli.dat&lt;br /&gt;
&lt;br /&gt;
1 16&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 0 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 1 0&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;0 0 1&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1-4cyls2.dat&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-8cyls, 3-16cyls, 1-4cyls, 3-8cyls, 2-4cyls, 4-4cyls, 1-8cyls2, 3-16cys2, 1-4cyls2&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 1-4cyls, 1-4cyls2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylse.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by an angled plane with angled edge included&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cylse.png |200px|thumb|alt=4-4cylse]]&lt;br /&gt;
||This suite of primitives are similar to the n-fcyls primitive, but with the edge along the angled plane included.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 4-4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;cyljrxs.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by another cylinder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Cylj4x8.png |200px|thumb|alt=cylj4x8]]&lt;br /&gt;
||This suite of primitives are used to model the intersection between two cylinders of different radii.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Currently available primitives:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (rxs): 4x6, 4x7, 4x8, 4x9, 4x10, 5x9&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylrsphs.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cylinder truncated by a sphere&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4cyl1sph2.png |200px|thumb|alt=4-4cyl1sph2]]&lt;br /&gt;
||This suite of primitives are used to model the intersection between a cylinder and a sphere of a different radius.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Currently available primitives:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution 1:2 (n-f): 4-4cyl1sph2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fconr.dat&#039;&#039;&#039; &amp;lt;br&amp;gt; &#039;&#039;&#039;n-fconrr.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular cone&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:4-4con1.png |200px|thumb|alt=4-4con1]]&lt;br /&gt;
||This suite of primitives are used to generate circular cones or part cones. The numeric suffix r in the filename indicates the inner radius of the cone - the outer radius is 1LDu greater. By default the cone is 1LDu high in the {+y} dimension with the origin at the centre of the outer diameter. For example a n-fcone4 primitive would create a cone with an inner radius of 4LDu and an outer radius of 5LDu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f)(r):&amp;lt;br&amp;gt;&lt;br /&gt;
r=0: 1-4con0, 2-4con0, 4-4con0&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-16con1, 1-8con1, 3-16con1, 1-4con1, 2-4con1, 4-4con1&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-8con2, 3-16con2, 1-4con2, 2-4con2, 4-4con2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-8con3, 1-4con3, 2-4con3, 7-8con3, 4-4con3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-4con4, 3-8con4, 2-4con4, 4-4con4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-4con5, 4-4con5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 1-4con6, 3-8con6, 4-4con6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-4con7, 3-8con7, 2-4con7, 4-4con7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-4con8, 2-4con8, 4-4con8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 3-16con9, 1-4con9, 3-8con9, 4-4con9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-8con10, 1-4con10, 2-4con10, 4-4con10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-4con11, 2-4con11, 4-4con11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-4con12, 3-8con12, 2-4con12, 4-4con12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-4con13, 2-4con13, 4-4con13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 1-4con14, 4-4con14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-4con15, 2-4con15, 4-4con15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 4-4con16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 4-4con17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 1-4con18, 4-4con18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-8con19, 1-4con19, 2-4con19, 4-4con19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-8con20, 3-8con20, 4-4con20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 4-4con21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 4-4con22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-4con23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-4con24, 4-4con24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 4-4con25&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 1-4con27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-8con28, 1-4con28, 4-4con28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 4-4con29&amp;lt;br&amp;gt;&lt;br /&gt;
r=30: 4-4con30&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 1-4con31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 4-4con32&amp;lt;br&amp;gt;&lt;br /&gt;
r=33: 4-4con33&amp;lt;br&amp;gt;&lt;br /&gt;
r=34: 3-8con34&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 4-4con35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 4-4con36&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 4-4con41&amp;lt;br&amp;gt;&lt;br /&gt;
r=42: 4-4con42&amp;lt;br&amp;gt;&lt;br /&gt;
r=43: 4-4con43&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 4-4con46&amp;lt;br&amp;gt;&lt;br /&gt;
r=47: 4-4con47&amp;lt;br&amp;gt;&lt;br /&gt;
r=48: 4-4con48&amp;lt;br&amp;gt;&lt;br /&gt;
r=61: 4-4con61&amp;lt;br&amp;gt;&lt;br /&gt;
r=80: 4-4con80&amp;lt;br&amp;gt;&lt;br /&gt;
r=81: 4-4con81&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
High resolution (n-f)(r):&amp;lt;br&amp;gt;&lt;br /&gt;
r=0: 4-4con0&amp;lt;br&amp;gt;&lt;br /&gt;
r=1: 1-4con1, 4-4con1&amp;lt;br&amp;gt;&lt;br /&gt;
r=2: 1-4con2, 5-12con2, 4-4con2&amp;lt;br&amp;gt;&lt;br /&gt;
r=3: 1-4con3, 5-24con3, 4-4con3&amp;lt;br&amp;gt;&lt;br /&gt;
r=4: 1-12con4, 1-6con4, 1-4con4, 4-4con4&amp;lt;br&amp;gt;&lt;br /&gt;
r=5: 1-12con5, 1-8con5, 1-6con5, 1-4con5, 4-4con5&amp;lt;br&amp;gt;&lt;br /&gt;
r=6: 5-48con6, 1-8con6, 1-4con6&amp;lt;br&amp;gt;&lt;br /&gt;
r=7: 1-24con7, 1-12con7, 1-6con7, 4-4con7&amp;lt;br&amp;gt;&lt;br /&gt;
r=8: 1-6con8, 1-4con8, 4-4con8&amp;lt;br&amp;gt;&lt;br /&gt;
r=9: 1-16col9, 5-48con9, 1-8con9, 5-24con9, 1-4con9, 4-4con9&amp;lt;br&amp;gt;&lt;br /&gt;
r=10: 1-24con10, 5-24con10, 4-4con10&amp;lt;br&amp;gt;&lt;br /&gt;
r=11: 1-16con11, 1-8con11, 1-4con11, 4-4con11&amp;lt;br&amp;gt;&lt;br /&gt;
r=12: 1-24con12, 5-48con12, 1-8con12, 5-24con12, 1-4con12, 4-4con12&amp;lt;br&amp;gt;&lt;br /&gt;
r=13: 1-6con13, 1-4con13, 4-4con13&amp;lt;br&amp;gt;&lt;br /&gt;
r=14: 1-24con14, 5-24con14, 1-4con14, 3-8con14&amp;lt;br&amp;gt;&lt;br /&gt;
r=15: 1-8con15, 1-4con15, 4-4con15&amp;lt;br&amp;gt;&lt;br /&gt;
r=16: 1-24con16, 1-6con16, 5-24con16, 1-4con16, 3-8con16, 4-4con16&amp;lt;br&amp;gt;&lt;br /&gt;
r=17: 1-6con17, 4-4con17&amp;lt;br&amp;gt;&lt;br /&gt;
r=18: 4-4con18&amp;lt;br&amp;gt;&lt;br /&gt;
r=19: 1-16con19, 3-16con19, 1-4con19, 4-4con19&amp;lt;br&amp;gt;&lt;br /&gt;
r=20: 1-16con20, 4-4con20&amp;lt;br&amp;gt;&lt;br /&gt;
r=21: 1-4con21, 4-4con21&amp;lt;br&amp;gt;&lt;br /&gt;
r=22: 4-4con22&amp;lt;br&amp;gt;&lt;br /&gt;
r=23: 1-4con23, 4-4con23&amp;lt;br&amp;gt;&lt;br /&gt;
r=24: 1-24con24, 1-16con24, 1-12con24, 1-4con24, 4-4con24&amp;lt;br&amp;gt;&lt;br /&gt;
r=25: 1-4con25, 4-4con25&amp;lt;br&amp;gt;&lt;br /&gt;
r=27: 4-4con27&amp;lt;br&amp;gt;&lt;br /&gt;
r=28: 1-4con28&amp;lt;br&amp;gt;&lt;br /&gt;
r=29: 5-48con29&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 1-4con32&amp;lt;br&amp;gt;&lt;br /&gt;
r=31: 1-6con31, 4-4con31&amp;lt;br&amp;gt;&lt;br /&gt;
r=32: 1-4con32&amp;lt;br&amp;gt;&lt;br /&gt;
r=35: 4-4con35&amp;lt;br&amp;gt;&lt;br /&gt;
r=36: 1-4con36, 4-4con36&amp;lt;br&amp;gt;&lt;br /&gt;
r=38: 1-4con38&amp;lt;br&amp;gt;&lt;br /&gt;
r=39: 1-4con39, 4-4con39&amp;lt;br&amp;gt;&lt;br /&gt;
r=40: 1-4con40&amp;lt;br&amp;gt;&lt;br /&gt;
r=41: 1-4con41, 4-4con41&amp;lt;br&amp;gt;&lt;br /&gt;
r=45: 1-6con45&amp;lt;br&amp;gt;&lt;br /&gt;
r=46: 1-6con46&amp;lt;br&amp;gt;&lt;br /&gt;
r=52: 1-4con52&amp;lt;br&amp;gt;&lt;br /&gt;
r=54: 4-4con54&amp;lt;br&amp;gt;&lt;br /&gt;
r=64: 4-4con64&amp;lt;br&amp;gt;&lt;br /&gt;
r=70: 4-4con70&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;tffirrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &#039;&#039;&#039;tfforrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &#039;&#039;&#039;tffqrrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &#039;&#039;&#039;rfforrrr.dat&#039;&#039;&#039;&amp;lt;br&amp;gt; &#039;&#039;&#039;rfforrrrr.dat&#039;&#039;&#039; || &#039;&#039;&#039;Circular torus&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:T02i2000.png |200px|thumb|alt=T02i2000.png]]&lt;br /&gt;
[[File:T02o2000.png |200px|thumb|alt=T02o2000.png]]&lt;br /&gt;
[[File:T02q1765.png |200px|thumb|alt=T02q1765.png]]&lt;br /&gt;
&lt;br /&gt;
||This suite of primitives are used to generate circular torus sections. By default all these primitives produce a torus with a major radius of 1LDu, so typically need to be scaled up in the {x} and {z} dimensions. The first character denotes whether the minor radius is smaller than (tff primitives) or larger than the major radius (rff primitives). The latter are termed reverse ratio tori. The second and third characters of the filename ff denotes the sweep of torus, as an inverse fraction (01=1/1, 02=1/2, 04=1/4, 08=1/8, 16=1/16, 32=1/32, 48=1/48). The fourth character denotes the section of a torus (i=inner, o=outer, q=tube - the combination of 2 inner and 2 outer sections). Inner sections are not possible for reverse ratio tori.&lt;br /&gt;
&lt;br /&gt;
For regular tori, the last four characters of the file name rrrr denote the torus minor radius in LDu (1333=0.1333, 3333=0.3333), with the special designation &#039;unit&#039; unsed to indicate a radius of 1.0000.&lt;br /&gt;
For reverse ratio tori named like rfforrrr.dat, the last four characters of the file name rrrr represent torus minor radius with an implied decimal point after the first digit (1500=1.5, 4600=4.6). For reverse ratio tori named like rfforrrrr.dat, the last five characters of the file name rrrrr represent torus minor radius with an implied decimal point after the first two digits (11000=11.0).&lt;br /&gt;
&lt;br /&gt;
These diagrams (based on an idea of Paul Easter&#039;s) illustrate the relationship of the torus primitives to the major and minor radii.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=nolines widths=&amp;quot;200px&amp;quot;&amp;gt;&lt;br /&gt;
torusi.png|Regular inner torus&lt;br /&gt;
toruso.png|Regular outer torus&lt;br /&gt;
torusro.png| Reverse ratio outer torus&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available regular torus primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (ff)(rrrr):&amp;lt;br&amp;gt;&lt;br /&gt;
Inner:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01i0702, t01i0714, t01i0769, t01i1579, t01i1667, t01i2000, t01i3261, t01i3333, t01i3600, t01i5556, t01i6000&amp;lt;br&amp;gt;&lt;br /&gt;
::t02i1111, t02i2000, t02i2258, t02i4000&amp;lt;br&amp;gt;&lt;br /&gt;
::t04i0462, t04i0625, t04i0857, t04i1111, t04i1304, t04i1333, t04i1429, t04i1765, t04i2000, t04i2258, t04i2500, t04i2667, t04i3333, t04i4167, t04i5000, t04i6381&amp;lt;br&amp;gt;&lt;br /&gt;
::t08i0909, t08i2000&amp;lt;br&amp;gt;&lt;br /&gt;
::t16i0909, t16i2000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Outer:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01o0556, t01o0625, t01o0667, t01o0714, t01o1154, t01o1250, t01o1429, t01o1579, t01o2222, t01o2500, t01o3333, t01o3571, t01o3750, t01o3810, t01o3889, t01o4000&amp;lt;br&amp;gt;&lt;br /&gt;
::t02o0526, t02o1111, t02o1176, t02o2000, t02o3333&amp;lt;br&amp;gt;&lt;br /&gt;
::t04o0462, t04o0625, t04o0833, t04o0857, t04o1111, t04o1250, t04o1304, t04o1333, t04o1429, t04o1538, t04o1667, t04o1765, t04o1905, t04o2000, t04o2500, t04o2667, t04o3077, t04o3333, t04o3750, t04o4167, t04o5000, t04o6250, t04o6667, ::t04o7000, t04o7500, t04o8750, t04o8889&amp;lt;br&amp;gt;&lt;br /&gt;
::t08o0727, t08o0909, t08o2000, t08o6250&amp;lt;br&amp;gt;&lt;br /&gt;
::t16o0909, t16o1429, t16o2000, t16o6250&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tube:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01q0702, t01q1429&amp;lt;br&amp;gt;&lt;br /&gt;
::t02q3333, t02q5455&amp;lt;br&amp;gt;&lt;br /&gt;
::t04q0625, t04q1000, t04q1316, t04q1538, t04q2500, t04q2857, t04q3030, t04q3333, t04q3529, t04q3750, t04q4000, t04q5000, t04q5455, t04q7143, t04q7500, t04q9231&amp;lt;br&amp;gt;&lt;br /&gt;
::t08q4000, t08q5000, t08q7500&amp;lt;br&amp;gt;&lt;br /&gt;
::t16q4000, t16q5000, t16q7500&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (ff)(rrrr):&amp;lt;br&amp;gt;&lt;br /&gt;
Inner:&amp;lt;br&amp;gt;&lt;br /&gt;
::t04i0455&amp;lt;br&amp;gt;&lt;br /&gt;
::t12i8333&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Outer:&amp;lt;br&amp;gt;&lt;br /&gt;
::t01o2000&amp;lt;br&amp;gt;&lt;br /&gt;
::t04o0455, t04o2000&amp;lt;br&amp;gt;&lt;br /&gt;
::t08o0625, t08o2500&amp;lt;br&amp;gt;&lt;br /&gt;
::t12o0349, t12o0625&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tube:&amp;lt;br&amp;gt;&lt;br /&gt;
::t06q5000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Currently available reverse ratio torus primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
::r04o1000, r04o1333, r04o1375, r04o1500, r04o2000, r04o3000, r04o4600&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution:&amp;lt;br&amp;gt;&lt;br /&gt;
::r04o11000&amp;lt;br&amp;gt;&lt;br /&gt;
::r08o2000, r08o11000&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;s&amp;gt;1-4ccyli.dat&amp;lt;/s&amp;gt;&#039;&#039;&#039; || &#039;&#039;&#039;&amp;lt;s&amp;gt;Circular torus&amp;lt;/s&amp;gt; (obsolete)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:T04q4000.png |200px|thumb|alt=T04q4000]]&lt;br /&gt;
||This single primitive pre-dates the creation of the tffirrrr and tfforrrr suite of primitives and will not be augmented. It produces a quarter torus with a major radius of 2.5Ldu and a tube radius of 1LDu.&lt;br /&gt;
&lt;br /&gt;
It is superceded by t04q4000.dat.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fsphe.dat&#039;&#039;&#039; || &#039;&#039;&#039;Sphere section&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:8-8sphe.png |200px|thumb|alt=8-8sphe]]&lt;br /&gt;
|| This primitive represents a sphere, centered at the origin {0,0,0} of radius 1 LDu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 1-8, 2-8, 4-8, 8-8&amp;lt;br&amp;gt;&lt;br /&gt;
High resolution (n-f): 2-8, 4-8, 8-8&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;1-8sphc.dat&#039;&#039;&#039; || &#039;&#039;&#039;Spherical corner&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:1-8sphc.png |200px|thumb|alt=1-8sphc]]&lt;br /&gt;
||This primitive represents one octant (eighth) of a sphere, centered at the origin {0,0,0} of radius 1.414, truncated by the sides of a cube with a vertex at {1,1,1}. The boundaries of the resulting surface are circular and fit with 1-4edge.dat.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fedgh.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cylinder Helical Edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Placeholder.png |200px|thumb|alt=Placeholder]]&lt;br /&gt;
||This primitive represents ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 3-16, 1-8, 1-4&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;n-fcylh.dat&#039;&#039;&#039; || &#039;&#039;&#039;Cylinder Helical&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Placeholder.png |200px|thumb|alt=Placeholder]]&lt;br /&gt;
||This primitive represents ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Currently available primitives:&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Regular resolution (n-f): 3-16, 1-8, 1-4&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Technic primitives==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic axle primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives represent various components of the technic axle and its matching hole. They are orientated in the {x,z} plane. Except where noted below, and in the {y} dimension only, these primitives must not be scaled.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axle.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle section&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;| [[File:Axle.png|200px|thumb|alt=Axle]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of technic axle, including its ends. It may be scaled in the {y} dimension to produce an axle of any length.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axleend.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:axleend.png|200px|thumb|alt=Axleend]]&lt;br /&gt;
||This primitive is used to produce the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - closed&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehole.png|200px|thumb|alt=Axlehole]]&lt;br /&gt;
||This primitive produces a technic axle hole with the disc ends and all sides. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - side edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol2.png|200px|thumb|alt=Axlehol2]]&lt;br /&gt;
||This primitive produces the edges at the ends of the &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - tooth outer edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol3.png|200px|thumb|alt=Axlehol3]]&lt;br /&gt;
||This primitive produces the outer edges of the teeth of a technic axle hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - open one side&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol4.png|200px|thumb|alt=Axlehol4]]&lt;br /&gt;
||This primitive produces a technic axle hole with one side omitted. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - open two opposite sides&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol5.png|200px|thumb|alt=Axlehol5]]&lt;br /&gt;
||This primitive produces a technic axle hole with two opposite sides omitted. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole tooth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol6.png|200px|thumb|alt=Axlehol6]]&lt;br /&gt;
||This primitive represents one tooth of a technic axle hole. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - sides&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol7.png|200px|thumb|alt=Axlehol7]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of outer sides of a technic axle. It may be scaled in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole perimeter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol8.png|200px|thumb|alt=Axlehol8]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of technic axle, without any ends. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlehol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - tooth inner edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol9.png|200px|thumb|alt=Axlehol9]]&lt;br /&gt;
||This primitive produces the inner edges of the &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axleho10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole - tooth surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axleho10.png|200px|thumb|alt=Axleho10]]&lt;br /&gt;
||This primitive is used to produce the fill the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle to the bounding circle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;Axlehol0.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Axle Hole Hint&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlehol0.png|200px|thumb|alt=Axlehol0]]&lt;br /&gt;
||This file is an invisible &amp;quot;axlehole&amp;quot; that can be used to hint irregular axleholes that cannot be modeled with conventional axlehole primitives. To use: add an axle.dat in your part, apply position and scaling so that it fills the axlehole, and substitute it with this primitive.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the bounding axle sction in the image is for context only - there are no actual geometry producing lines contained in these files. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic axle hole reduced===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;| [[File:Axl2hole.png|200px|thumb|alt=Axl2hole]]&lt;br /&gt;
||This primitive produces a technic axle hole with reduced teeth including the disc ends and all edges. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - side edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol2.png|200px|thumb|alt=Axl2hol2]]&lt;br /&gt;
||This primitive produces the edges at the ends of the &amp;quot;plus-shaped&amp;quot; reduced technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - tooth outer edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol3.png|200px|thumb|alt=Axl2hol3]]&lt;br /&gt;
||This primitive produces the outer edges of the teeth of a reduced technic axle hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - perimeter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol8.png|200px|thumb|alt=Axl2hol8]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of reduced technic axle, without any ends. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2hol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - tooth inner edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2hol9.png|200px|thumb|alt=Axl2hol9]]&lt;br /&gt;
||This primitive produces the inner edges of the reduced &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2ho10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - tooth surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2ho10.png|200px|thumb|alt=Axl2ho10]]&lt;br /&gt;
||This primitive used to produce the fill the &amp;quot;plus-shaped&amp;quot; cross section of a reduced technic axle to the bounding circle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl2end.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole reduced - end surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl2end.png|200px|thumb|alt=Axl2end]]&lt;br /&gt;
||This primitive is used to produce the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle hole reduced.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic axle hole semi-reduced===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Axl3hole.png|200px|thumb|alt=Axl3hole]]&lt;br /&gt;
||This primitive produces a technic axle hole with semi-reduced teeth including the disc ends and all edges. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol2.dat&#039;&#039;&#039; || &#039;&#039;&#039; 	Technic axle hole semi-reduced - side edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol2.png|200px|thumb|alt=Axl3hol2]]&lt;br /&gt;
||This primitive produces the edges at the ends of the &amp;quot;plus-shaped&amp;quot; semi-reduced technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - tooth outer edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol3.png|200px|thumb|alt=Axl3hol3]]&lt;br /&gt;
||This primitive produces the outer edges of the teeth of a semi-reduced technic axle hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced tooth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol6.png|200px|thumb|alt=Axl3hol6]]&lt;br /&gt;
||This primitive represents the teeth of a semi-reduced technic axle hole. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - perimeter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol8.png|200px|thumb|alt=Axl3hol8]]&lt;br /&gt;
||This primitive comprises a 1LDu long section of semi-reduced technic axle, without any ends. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3hol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - tooth inner edges&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3hol9.png|200px|thumb|alt=Axl3hol9]]&lt;br /&gt;
||This primitive produces the inner edges of the semi-reduced &amp;quot;plus-shaped&amp;quot; technic axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3ho10.dat&#039;&#039;&#039; || &#039;&#039;&#039; 	Technic axle hole semi-reduced - tooth surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3ho10.png|200px|thumb|alt=Axl3ho10]]&lt;br /&gt;
|| 	This primitive used to produce the fill the &amp;quot;plus-shaped&amp;quot; cross section of a semi-reduced technic axle to the bounding circle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axl3end.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle hole semi-reduced - end surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axl3end.png|200px|thumb|alt=Axl3end]]&lt;br /&gt;
||This primitive is used to produce the &amp;quot;plus-shaped&amp;quot; cross section of a technic axle hole semi-reduced.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Special Technic axle primitive===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlebeam.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Axle Truncated to fit Technic Beam End Surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Axlebeam.png|200px|thumb|alt=Axlebeam]]&lt;br /&gt;
||This primitive produces the tip of an axle to be used between a cylinder of 9 LDu radius and an axle primitive.&lt;br /&gt;
&lt;br /&gt;
Usage example:&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 -10 9 0 0 0 0 -9 0 20 0 2-4cyli.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 axlebeam.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 -20 0 1 0 0 0 10 0 0 0 1 axlehol8.dat&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlesphe.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic axle - truncated to fit ball joint&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlesphe.png|200px|thumb|alt=Axlesphe]]&lt;br /&gt;
||This primitive produces the tip of an axle, truncated to fit a 12.81 LDu radius sphere.&lt;br /&gt;
&lt;br /&gt;
Usage example:&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 12.81 0 0 0 0 12.81 0 -12.81 0 8-8sphe.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 axlesphe.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 -20 0 1 0 0 0 7.19 0 0 0 1 axlehol8.dat&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axles.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Sloped&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axles.png|200px|thumb|alt=Axles]]&lt;br /&gt;
||This primitive produces the tip of an axle, truncated by a slope with the height of 1 LDu. It may be scaled in the {y} dimension as necessary.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlecap.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Endcap&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlecap.png|200px|thumb|alt=Axlecap]]&lt;br /&gt;
||This primitive produces the beveled tip of an axle.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlecaph.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Endcap with Hole 4D&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlecaph.png|200px|thumb|alt=Axlecaph]]&lt;br /&gt;
||This primitive produces the beveled tip of an axle with a center hole of 2 LDu radius.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axlecaph2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Axle Endcap with Hole 5D&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axlecaph2.png|200px|thumb|alt=Axlecaph2]]&lt;br /&gt;
||This primitive produces the beveled tip of an axle with a center hole of 2.5 LDu radius.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;axleconnect.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Axle to Connector Hole Perpendicular Joint 0.5&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Axleconnect.png|200px|thumb|alt=Axleconnect]]&lt;br /&gt;
||This primitive produces a right angle connection between an axle and a Technic connector hole.&lt;br /&gt;
&lt;br /&gt;
Usage example:&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 axleconnect.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 -1 0 0 0 1 0 0 0 1 axleconnect.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 0 1 0 0 0 1 0 0 0 1 connhole.dat&amp;lt;br&amp;gt;&lt;br /&gt;
1 16 0 0 -30 0 0 -1 -1 0 0 0 20 0 axle.dat&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic castellated bush primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are various representations of the castellated technic bush. They are orientated with the technic axle hole along the {y} axis and must not be scaled.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushlock.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - long teeth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Bushlock.png|200px|thumb|alt=Bushlock]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushloc2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - regular teeth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bushloc2.png|200px|thumb|alt=Bushloc2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushloc3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - regular teeth indented&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bushloc3.png|200px|thumb|alt=Bushloc3]]&lt;br /&gt;
||This primitive differs from bushloc2.dat in that the teeth are indented in four places to allow it to fit between four adjacent studs.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bushloc4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic 16-tooth castellation - short teeth&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bushloc4.png|200px|thumb|alt=Bushloc4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;steerend.dat&#039;&#039;&#039; || &#039;&#039;&#039;Curved end to technic 1xn plate with 16-tooth castellation on underside&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Steerend.png|200px|thumb|alt=Steerend]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic bush primtives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are usd to construct technic bush parts.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic bush with collar at one end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot; |[[File:Bush.png|200px|thumb|alt=Bush]]&lt;br /&gt;
||&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush0.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic bush without end collars&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bush0.png|200px|thumb|alt=Bush0]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic bush collar quarter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bush1.png|200px|thumb|alt=Bush1]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;bush2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Bush End 0.25&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Bush2.png|200px|thumb|alt=Bush2]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic connector primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are used to contruct technic connector pegs. They are orientated with the technic axle hole along the {y} axis and must not be scaled.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot; |[[File:Connect.png|200px|thumb|alt=Connect]]&lt;br /&gt;
||&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long without collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect2.png|200px|thumb|alt=Connect2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - short with collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect3.png|200px|thumb|alt=Connect3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - short without collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect4.png|200px|thumb|alt=Connect4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar and slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect5.png|200px|thumb|alt=Connect5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar and notches&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect6.png|200px|thumb|alt=Connect6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with rectangular centre hole and thin (frictionless) ribs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect7.png|200px|thumb|alt=Connect7]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector - long with collar and blind hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect8.png|200px|thumb|alt=Connect8]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connect10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin 1.0 without Base Collar and Rectangular Centre Hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connect10.png|200px|thumb|alt=Connect10]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Rectangular Hole and Short Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar1.png|200px|thumb|alt=Connectcollar1]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Small Rectangular Hole and Short Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar2.png|200px|thumb|alt=Connectcollar2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Rectangular Hole and Long Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar3.png|200px|thumb|alt=Connectcollar3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Small Rectangular Hole and Long Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar4.png|200px|thumb|alt=Connectcollar4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectcollar5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Collar Half with Round Hole and Short Slit&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectcollar5.png|200px|thumb|alt=Connectcollar5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectslit1.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Long Middle Slit Half with Rectangular Hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectslit1.png|200px|thumb|alt=Connectslit1]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connectslit2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Pin Long Middle Slit Half with Small Rectangular Hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connectslit2.png|200px|thumb|alt=Connectslit2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric.png|200px|thumb|alt=Confric]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long without collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric2.png|200px|thumb|alt=Confric2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with rectangular centre hole and collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric3.png|200px|thumb|alt=Confric3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with collar and blind hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric4.png|200px|thumb|alt=Confric4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long with collar and slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric5.png|200px|thumb|alt=Confric5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - long without collar with slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric6.png|200px|thumb|alt=Confric6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - middle section with collar and slot&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric8.png|200px|thumb|alt=Confric8]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;confric9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector with friction - middle section slotted with unsplit base collar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Confric9.png|200px|thumb|alt=Confric9]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;text-align:right; width: 100%;&amp;quot;&lt;br /&gt;
|[[#top|Return to top]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
===Technic connector hole primitives===&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
These primitives are used to contruct technic connector peg holes. They are orientated with the technic axle hole along the {y} axis. They must not be scaled in the {x} or {z} dimensions, but the peghole and npeghol families of primitives may be scaled in the {y} dimension.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connhole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 200px;&amp;quot;|[[File:Connhole.png|200px|thumb|alt=Connhole]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes in 20LDu wide Technic beams.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connhol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long with extended end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connhol2.png|200px|thumb|alt=Connhol2]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes in 20LDu wide Technic parts with an extended indentation.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;connhol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long with only one end&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Connhol3.png|200px|thumb|alt=Connhol3]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes for use in Technic parts with a narrow beam section.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;beamhole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole long with extension to adjacent hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Beamhole.png|200px|thumb|alt=Beamhole]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes at the end of 20LDu wide Technic beams.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;beamhol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic beam hole short with extension to adjacent hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Beamhol2.png|200px|thumb|alt=Beamhol2]]&lt;br /&gt;
||This primitive is used for Technic connector peg holes at the end of 10LDu wide Technic beams.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole.png|200px|thumb|alt=Peghole]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 180 degrees - long&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole2.png|200px|thumb|alt=Peghole2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 90 degrees&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole3.png|200px|thumb|alt=Peghole3]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 180 degrees - short&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole4.png|200px|thumb|alt=Peghole4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - 180 degrees - medium&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole5.png|200px|thumb|alt=Peghole5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;peghole6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole - end extended&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Peghole6.png|200px|thumb|alt=Peghole6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghole.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole negative without top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghole.png|200px|thumb|alt=Npeghole]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol2.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic connector hole negative with top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol2.png|200px|thumb|alt=Npeghol2]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to connector hole negative without top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol3.png|200px|thumb|alt=Npeghol3]]&lt;br /&gt;
||This primitive is designed to fill the gap between an axlehol4 or axlehol5 primitive and a Technic peg hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol3.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to connector hole negative without top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol3.png|200px|thumb|alt=Npeghol3]]&lt;br /&gt;
||This primitive is designed to fill the gap between an axlehol4 or axlehol5 primitive and a Technic peg hole.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol3a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole / Axle Hole Negative without Top Surface Extensions without One Edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol3a.png|200px|thumb|alt=Npeghol3a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol4.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to connector hole negative with top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol4.png|200px|thumb|alt=Npeghol4]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol5.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to axle hole negative with top surface extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol5.png|200px|thumb|alt=Npeghol5]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic peg hole to axle hole negative quarter for beams&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6.png|200px|thumb|alt=Npeghol6]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6a.png|200px|thumb|alt=Npeghol6a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6b.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25 with Middle Tab&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6b.png|200px|thumb|alt=Npeghol6b]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6c.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25 without One Edge&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6c.png|200px|thumb|alt=Npeghol6c]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol6d.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.25 without Extension&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol6d.png|200px|thumb|alt=Npeghol6d]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol7.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.5 without Top Surface Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol7.png|200px|thumb|alt=Npeghol7]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol7a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative 0.5 with Top Surface Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol7a.png|200px|thumb|alt=Npeghol7a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol8.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 1 Half without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol8.png|200px|thumb|alt=Npeghol8]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol9.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 2 with Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol9.png|200px|thumb|alt=Npeghol9]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol10.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 2 without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol10.png|200px|thumb|alt=Npeghol10]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol11.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 3&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol11.png|200px|thumb|alt=Npeghol11]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol12.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole with Extended Perimeter (One Side) and Surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol12.png|200px|thumb|alt=Npeghol12]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol13.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole with Extended Perimeter (Two Sides) and Surface&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol13.png|200px|thumb|alt=Npeghol13]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;s&amp;gt;&#039;&#039;&#039;npeghol15.dat&#039;&#039;&#039;&amp;lt;/s&amp;gt; || &amp;lt;s&amp;gt;&#039;&#039;&#039;~Technic Peg Hole Corner 0.25 (Obsolete)&#039;&#039;&#039;&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol15.png|200px|thumb|alt=Npeghol15]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol15b.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Corner with Wide Tabs on 1 Side 0.125&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol15b.png|200px|thumb|alt=Npeghol15b]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;s&amp;gt;&#039;&#039;&#039;npeghol16.dat&#039;&#039;&#039;&amp;lt;/s&amp;gt; || &amp;lt;s&amp;gt;&#039;&#039;&#039;~Technic Peg Hole Corner 0.125 (Obsolete)&#039;&#039;&#039;&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol16.png|200px|thumb|alt=Npeghol16]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;s&amp;gt;&#039;&#039;&#039;npeghol17.dat&#039;&#039;&#039;&amp;lt;/s&amp;gt; || &amp;lt;s&amp;gt;&#039;&#039;&#039;~Technic Peg Hole Negative with Cut Corners (Obsolete)&#039;&#039;&#039;&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol17.png|200px|thumb|alt=Npeghol17]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol18.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Corner 0.125 Without Lower Faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol18.png|200px|thumb|alt=Npeghol18]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol18a.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Corner 0.125 without Faces&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol18a.png|200px|thumb|alt=Npeghol18a]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol19.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 3 Top Half without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol19.png|200px|thumb|alt=Npeghol19]]&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;npeghol20.dat&#039;&#039;&#039; || &#039;&#039;&#039;Technic Peg Hole Negative for Alternate Beam Type 4 without Extensions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Npeghol20.png|200px|thumb|alt=Npeghol20]]&lt;br /&gt;
||&lt;br /&gt;
|}&lt;br /&gt;
bleep&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_To_Add_Unofficial_Parts_to_BrickLink_Studio&amp;diff=6544</id>
		<title>How To Add Unofficial Parts to BrickLink Studio</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_To_Add_Unofficial_Parts_to_BrickLink_Studio&amp;diff=6544"/>
		<updated>2023-07-06T19:39:00Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Navigate to the Parts Tracker home page (https://library.ldraw.org/tracker/)&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-1.png]]&lt;br /&gt;
* Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save the zip file&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-2.png]]&lt;br /&gt;
* Press Windows Key + E&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial1.png]]&lt;br /&gt;
* Type %appdata% in the address bar&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial2.png]]&lt;br /&gt;
* Click on the AppData folder in the address bar&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial3.png]]&lt;br /&gt;
* Open the Local Folder in AppData&lt;br /&gt;
* Find the Stud.io folder and open it&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial4.png]]&lt;br /&gt;
* Press Ctrl + Shift + N to create a new folder in Stud.io. Name it CustomParts&lt;br /&gt;
* If you are using the complete unofficial parts zip file from the Part Tracker, unzip ldrawunf.zip into the CustomParts folder&lt;br /&gt;
* Otherwise press Ctrl + Shift + N to create a new folder in CustomParts. Name it parts. Place the unofficial part in the parts folder&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_To_Add_Unofficial_Parts_to_BrickLink_Studio&amp;diff=6532</id>
		<title>How To Add Unofficial Parts to BrickLink Studio</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_To_Add_Unofficial_Parts_to_BrickLink_Studio&amp;diff=6532"/>
		<updated>2022-01-11T22:07:22Z</updated>

		<summary type="html">&lt;p&gt;OrionP: Created page with &amp;quot;* Press Windows Key + E  File:Unofficial1.png * Type %appdata% in the address bar  File:Unofficial2.png * Click on the AppData folder in the address bar  File:Unoffi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Press Windows Key + E&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial1.png]]&lt;br /&gt;
* Type %appdata% in the address bar&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial2.png]]&lt;br /&gt;
* Click on the AppData folder in the address bar&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial3.png]]&lt;br /&gt;
* Open the Local Folder in AppData&lt;br /&gt;
* Find the Stud.io folder and open it&lt;br /&gt;
&lt;br /&gt;
[[File:Unofficial4.png]]&lt;br /&gt;
* Press Ctrl + Shift + N to create a new folder in Stud.io. Name it CustomParts&lt;br /&gt;
* If you are using the complete unofficial parts zip file from the Part Tracker, unzip ldrawunf.zip into the CustomParts folder&lt;br /&gt;
* Otherwise press Ctrl + Shift + N to create a new folder in CustomParts. Name it parts. Place the unofficial part in the parts folder&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unofficial4.png&amp;diff=6531</id>
		<title>File:Unofficial4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unofficial4.png&amp;diff=6531"/>
		<updated>2022-01-11T22:00:32Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unofficial2.png&amp;diff=6530</id>
		<title>File:Unofficial2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unofficial2.png&amp;diff=6530"/>
		<updated>2022-01-11T22:00:12Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unofficial3.png&amp;diff=6529</id>
		<title>File:Unofficial3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unofficial3.png&amp;diff=6529"/>
		<updated>2022-01-11T22:00:03Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unofficial1.png&amp;diff=6528</id>
		<title>File:Unofficial1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unofficial1.png&amp;diff=6528"/>
		<updated>2022-01-11T21:59:51Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6527</id>
		<title>How to Add Unofficial Parts in LDCad</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6527"/>
		<updated>2021-12-29T20:34:23Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short tutorial on how to add unofficial parts to LDCad&lt;br /&gt;
&lt;br /&gt;
Step 1: Navigate to the Parts Tracker home page (https://www.ldraw.org/library/tracker/)&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-1.png]]&lt;br /&gt;
&lt;br /&gt;
Step 2: Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save the zip file in your LDraw folder&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-2.png]]&lt;br /&gt;
&lt;br /&gt;
Step 3: Open LDCad and navigate to Prefs -&amp;gt; LDraw -&amp;gt; Search (library) Paths&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-3.png]] [[File:unoff-4.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-5.png]]&lt;br /&gt;
&lt;br /&gt;
Step 4: Click on the entry labelled &amp;quot;Official&amp;quot; in the &amp;quot;Search Order&amp;quot; box&lt;br /&gt;
&lt;br /&gt;
Step 5: Click the New button&lt;br /&gt;
&lt;br /&gt;
Step 6: Click on the new entry that was just created&lt;br /&gt;
&lt;br /&gt;
Step 7: Click the &amp;quot;Unofficial library&amp;quot; radio button&lt;br /&gt;
&lt;br /&gt;
Step 8: Click &amp;quot;Browse Archive&amp;quot; button, navigate to where you save the ldrawunf.zip file and double click it. The path should appear in the text box next to &amp;quot;Location&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Step 9: Click &amp;quot;Accept&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will have to restart LDCad for it to reload the library files. Unofficial files will have &amp;quot;UnOff&amp;quot; overlayed on the image in the part picker.&lt;br /&gt;
&lt;br /&gt;
As always: these are unofficial parts. They may be incomplete, or inaccurate, and it is possible that when they are officially released they may be changed in ways that could mess up any model you use them in. This is far more likely for Held parts than Certified parts.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6526</id>
		<title>How to Add Unofficial Parts in LDCad</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6526"/>
		<updated>2021-12-29T18:49:52Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short tutorial on how to add unofficial parts to LDCad&lt;br /&gt;
&lt;br /&gt;
Step 1: Navigate to the Parts Tracker home page (https://www.ldraw.org/library/tracker/)&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-1.png]]&lt;br /&gt;
&lt;br /&gt;
Step 2: Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save the zip file in your LDraw folder&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-2.png]]&lt;br /&gt;
&lt;br /&gt;
Step 3: Open LDCad and navigate to Prefs -&amp;gt; LDraw -&amp;gt; Search (library) Paths&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-3.png]] [[File:unoff-4.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-5.png]]&lt;br /&gt;
&lt;br /&gt;
Step 4: Click the New button&lt;br /&gt;
&lt;br /&gt;
Step 5: Click on the new entry that was just created&lt;br /&gt;
&lt;br /&gt;
Step 6: Click the &amp;quot;Unofficial library&amp;quot; radio button&lt;br /&gt;
&lt;br /&gt;
Step 7: Click &amp;quot;Browse Archive&amp;quot; button, navigate to where you save the ldrawunf.zip file and double click it. The path should appear in the text box next to &amp;quot;Location&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Step 8: Click &amp;quot;Accept&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will have to restart LDCad for it to reload the library files. Unofficial files will have &amp;quot;UnOff&amp;quot; overlayed on the image in the part picker.&lt;br /&gt;
&lt;br /&gt;
As always: these are unofficial parts. They may be incomplete, or inaccurate, and it is possible that when they are officially released they may be changed in ways that could mess up any model you use them in. This is far more likely for Held parts than Certified parts.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unoff-5.png&amp;diff=6525</id>
		<title>File:Unoff-5.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unoff-5.png&amp;diff=6525"/>
		<updated>2021-12-29T18:45:51Z</updated>

		<summary type="html">&lt;p&gt;OrionP: How to Add Unofficial Parts in LDCad‎‎ Step 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
How to Add Unofficial Parts in LDCad‎‎ Step 5&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unoff-4.png&amp;diff=6524</id>
		<title>File:Unoff-4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unoff-4.png&amp;diff=6524"/>
		<updated>2021-12-29T18:45:31Z</updated>

		<summary type="html">&lt;p&gt;OrionP: How to Add Unofficial Parts in LDCad‎‎ Step 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
How to Add Unofficial Parts in LDCad‎‎ Step 4&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unoff-3.png&amp;diff=6523</id>
		<title>File:Unoff-3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unoff-3.png&amp;diff=6523"/>
		<updated>2021-12-29T18:45:04Z</updated>

		<summary type="html">&lt;p&gt;OrionP: How to Add Unofficial Parts in LDCad‎‎ Step 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
How to Add Unofficial Parts in LDCad‎‎ Step 3&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6522</id>
		<title>How to Add Unofficial Parts in LDCad</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6522"/>
		<updated>2021-12-29T18:44:10Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short tutorial on how to add unofficial parts to LDCad&lt;br /&gt;
&lt;br /&gt;
Step 1: Navigate to the Parts Tracker home page (https://www.ldraw.org/library/tracker/)&lt;br /&gt;
[[File:unoff-1.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Step 2: Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save the zip file in your LDraw folder&lt;br /&gt;
[[File:unoff-2.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Step 3: Open LDCad and navigate to Prefs -&amp;gt; LDraw -&amp;gt; Search (library) Paths&lt;br /&gt;
[[File:unoff-3.png|thumb]] [[File:unoff-4.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-5.png|thumb]]&lt;br /&gt;
Step 4: Click the New button&lt;br /&gt;
&lt;br /&gt;
Step 5: Click on the new entry that was just created&lt;br /&gt;
&lt;br /&gt;
Step 6: Click the &amp;quot;Unofficial library&amp;quot; radio button&lt;br /&gt;
&lt;br /&gt;
Step 7: Click &amp;quot;Browse Archive&amp;quot; button, navigate to where you save the ldrawunf.zip file and double click it. The path should appear in the text box next to &amp;quot;Location&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Step 8: Click &amp;quot;Accept&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will have to restart LDCad for it to reload the library files. Unofficial files will have &amp;quot;UnOff&amp;quot; overlayed on the image in the part picker.&lt;br /&gt;
&lt;br /&gt;
As always: these are unofficial parts. They may be incomplete, or inaccurate, and it is possible that when they are officially released they may be changed in ways that could mess up any model you use them in. This is far more likely for Held parts than Certified parts.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6521</id>
		<title>How to Add Unofficial Parts in LDCad</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6521"/>
		<updated>2021-12-29T18:42:41Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short tutorial on how to add unofficial parts to LDCad&lt;br /&gt;
&lt;br /&gt;
Step 1: Navigate to the Parts Tracker home page (https://www.ldraw.org/library/tracker/)&lt;br /&gt;
[[File:unoff-1.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Step 2: Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save the zip file in your LDraw folder&lt;br /&gt;
[[File:unoff-2.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Step 3: Open LDCad and navigate to Prefs -&amp;gt; LDraw -&amp;gt; Search (library) Paths&lt;br /&gt;
[[File:unoff-3.png|thumb]] [[File:unoff-4.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[File:unoff-5.png|thumb]]&lt;br /&gt;
Step 4: Click the New button&lt;br /&gt;
&lt;br /&gt;
Step 5: Click on the new entry that was just created&lt;br /&gt;
&lt;br /&gt;
Step 6: Click the &amp;quot;Unofficial library&amp;quot; radio button&lt;br /&gt;
&lt;br /&gt;
Step 7: Click &amp;quot;Browse Archive&amp;quot; button, navigate to where you save the ldrawunf.zip file and double click it. The path should appear in the text box next to &amp;quot;Location&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Step 8: Click &amp;quot;Accept&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will have to restart LDCad for it to reload the library files. Unofficial files will have &amp;quot;UnOff&amp;quot; overlayed on the image in the part picker.&lt;br /&gt;
&lt;br /&gt;
As always: these are unofficial parts. They may be incomplete, or inaccurate, and it is possible that when they are officially released they may be changed in ways that could mess up any model you use them in. This is far more likely for Held parts than Certified parts.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unoff-2.png&amp;diff=6520</id>
		<title>File:Unoff-2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unoff-2.png&amp;diff=6520"/>
		<updated>2021-12-29T18:38:23Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to Add Unofficial Parts in LDCad Step 2&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Unoff-1.png&amp;diff=6519</id>
		<title>File:Unoff-1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Unoff-1.png&amp;diff=6519"/>
		<updated>2021-12-29T18:36:26Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to Add Unofficial Files in LDCad Step 1&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6518</id>
		<title>How to Add Unofficial Parts in LDCad</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=How_to_Add_Unofficial_Parts_in_LDCad&amp;diff=6518"/>
		<updated>2021-12-29T18:32:02Z</updated>

		<summary type="html">&lt;p&gt;OrionP: Created page with &amp;quot;A short tutorial on how to add unofficial parts to LDCad  Step 1: Navigate to the Parts Tracker home page  Step 2: Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A short tutorial on how to add unofficial parts to LDCad&lt;br /&gt;
&lt;br /&gt;
Step 1: Navigate to the Parts Tracker home page&lt;br /&gt;
&lt;br /&gt;
Step 2: Click on the &amp;quot;Download All Unofficial Files&amp;quot; link and save the zip file in your LDraw folder&lt;br /&gt;
&lt;br /&gt;
Step 3: Open LDCad and navigate to Prefs -&amp;gt; LDraw -&amp;gt; Search (library) Paths&lt;br /&gt;
&lt;br /&gt;
Step 4: Click the New button&lt;br /&gt;
&lt;br /&gt;
Step 5: Click on the new entry that was just created&lt;br /&gt;
&lt;br /&gt;
Step 6: Click the &amp;quot;Unofficial library&amp;quot; radio button&lt;br /&gt;
&lt;br /&gt;
Step 7: Click &amp;quot;Browse Archive&amp;quot; button, navigate to where you save the ldrawunf.zip file and double click it. The path should appear in the text box next to &amp;quot;Location&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Step 8: Click &amp;quot;Accept&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will have to restart LDCad for it to reload the library files. Unofficial files will have &amp;quot;UnOff&amp;quot; overlayed on the image in the part picker.&lt;br /&gt;
&lt;br /&gt;
As always: these are unofficial parts. They may be incomplete, or inaccurate, and it is possible that when they are officially released they may be changed in ways that could mess up any model you use them in. This is far more likely for Held parts than Certified parts.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=LDraw.org_Wiki&amp;diff=6505</id>
		<title>LDraw.org Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=LDraw.org_Wiki&amp;diff=6505"/>
		<updated>2020-09-08T03:45:40Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Main-home.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to the LDraw.org Wiki!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This wiki exists to provide a user-editable resource for tutorials, articles etc.&lt;br /&gt;
related to the [[LDraw]] System of Tools.&lt;br /&gt;
&lt;br /&gt;
It is not intended to replace the [https://www.ldraw.org Documentation section on ldraw.org], but to supplement it in a more interactive manner.&lt;br /&gt;
&lt;br /&gt;
If you want to discuss LDraw topics, please use the [[LDraw Forum]] instead.&lt;br /&gt;
&lt;br /&gt;
== Where to Start Reading? ==&lt;br /&gt;
&lt;br /&gt;
Different options exist to browse through this Wiki:&lt;br /&gt;
* The articles in this Wiki are organized in [[categories]]. You can browse them top-down by starting at the &amp;quot;mother of all categories&amp;quot;, the [[Main Index]].&lt;br /&gt;
* Use the full-text search in the top right search box.&lt;br /&gt;
* Look at the [[Special:Allpages|list of all articles]].&lt;br /&gt;
* Start at one of the most interesting categories:&lt;br /&gt;
&lt;br /&gt;
::::{|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[LDraw.org]]&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[Software]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[LDraw Files Syntax]]&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[Terms]] &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[Help]]&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[Tutorials]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em;  padding: 20px;&amp;quot;| [[Books]]&lt;br /&gt;
|style=&amp;quot;font-size: 1.5em; padding: 20px;&amp;quot;| [[Part Collections]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=LDraw.org_Wiki&amp;diff=6504</id>
		<title>LDraw.org Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=LDraw.org_Wiki&amp;diff=6504"/>
		<updated>2020-09-08T03:43:13Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Main-home.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to the LDraw.org Wiki!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This wiki exists to provide a user-editable resource for tutorials, articles etc.&lt;br /&gt;
related to the [[LDraw]] System of Tools.&lt;br /&gt;
&lt;br /&gt;
It is not intended to replace the [https://www.ldraw.org Documentation section on ldraw.org], but to supplement it in a more interactive manner.&lt;br /&gt;
&lt;br /&gt;
If you want to discuss LDraw topics, please use the [[LDraw Forum]] instead.&lt;br /&gt;
&lt;br /&gt;
== Where to Start Reading? ==&lt;br /&gt;
&lt;br /&gt;
Different options exist to browse through this Wiki:&lt;br /&gt;
* The articles in this Wiki are organized in [[categories]]. You can browse them top-down by starting at the &amp;quot;mother of all categories&amp;quot;, the [[Main Index]].&lt;br /&gt;
* Use the full-text search in the top right search box.&lt;br /&gt;
* Look at the [[Special:Allpages|list of all articles]].&lt;br /&gt;
* Start at one of the most interesting categories:&lt;br /&gt;
&lt;br /&gt;
::::{|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[LDraw.org]]&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[Software]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[LDraw Files Syntax]]&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[Terms]] &lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[Help]]&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[Tutorials]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[Books]]&lt;br /&gt;
|style=&amp;quot;font-size: 2em; padding: 20px;&amp;quot;| [[Part Collections]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=File:Main-home.png&amp;diff=6503</id>
		<title>File:Main-home.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=File:Main-home.png&amp;diff=6503"/>
		<updated>2020-09-08T03:39:49Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Tutorials_on_Other_Servers&amp;diff=6247</id>
		<title>Tutorials on Other Servers</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Tutorials_on_Other_Servers&amp;diff=6247"/>
		<updated>2019-05-24T10:31:54Z</updated>

		<summary type="html">&lt;p&gt;OrionP: Moved from LDraw main site&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;Welcome to the LDraw.org tutorials section. Here you can learn techniques to enhance your proficiency with various programs of the LDraw System Of Tools. Easy to follow step by step instructions teach you everything from using software programs to creating stunning renderings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The tutorial section is constructed in a unique way to allow for easy expansion and addition of topics. We always have someone working on a new tutorial for LDraw.org. Courses are divided up into the following categories:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{anchor anchor=&amp;quot;modeling&amp;quot; text=&amp;quot;Modeling&amp;quot;}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{anchor anchor=&amp;quot;rendering&amp;quot; text=&amp;quot;Rendering&amp;quot;}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{anchor anchor=&amp;quot;building_instuctions&amp;quot; text=&amp;quot;Building Instuctions&amp;quot;}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{anchor anchor=&amp;quot;parts_authoring&amp;quot; text=&amp;quot;Parts Authoring&amp;quot;}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Within those categories there are levels - beginner, intermediate, and advanced. For more information on contributing to the tutorials section at LDraw.org, see the {anchor anchor=&amp;quot;help out_write_tutorials_for_ldraw_org&amp;quot; text=&amp;quot;bottom of the page&amp;quot;}.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;ui block header&amp;quot; id=&amp;quot;modeling&amp;quot;&amp;gt;Modeling&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Learn the essentials of putting your LEGO models into the LDraw format using a variety of LDraw-based editing programs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Beginner Modeling&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;ldraw_aioi&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/ldraw/aioi1-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;LDraw All-In-One-Installer tutorial&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Use the LDraw All-In-One-Installer, in short AIOI, if you want a quick and easy way to install the LDraw Parts Library and many of the popular 3rd party tools as well. In this tutorial written by Willy Tschager you&#039;ll get an overview on the differnent screens shown by the AIOI as well as some background information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;omrize&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;omr_compliance&amp;quot;&amp;gt;Preparing a MPD file for Official Model Repository compliance&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Preparing a model to follow the Official Model Repository specifications can be a daunting task, as there are many little details to take care of. Philippe &amp;quot;Philo&amp;quot;Hurbain guides you through the process.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;manuall_installation_advice&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/install1-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Manual installation advice for the LDraw Parts Library and MLCad&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This tutorial by Willy Tschager will teach you how to set up manually a simple LDraw system with the MLCad editor and the LDraw Parts Library.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;digital_building_with_mlcad&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/basic1-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Digital building with MLCad&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This tutorial will teach you the basics to build digital models in MLCad. Furthermore it will show you tips and tricks and help with troubleshooting problems you might encounter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;changing_MLCads_language_interface&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/language-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Changing MLCad&#039;s language interface&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Tutorial on how to change the default language MLCad displays by Willy Tschager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;mlcad_ini_file_for_the_minifig_generator&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/mlcad_ini-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;MLCad.ini file for the Minifig Generator&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The MLCad.ini file tells the program - among other things - which parts are available in MLCad&#039;s and Bricksmith&#039;s minifigure generator.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Intermediate Modeling&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;how_to_easily_rotate_a_group_of_parts_in_mlcad&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/easyrotation-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;How to easily rotate a group of parts in MLCad&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Willy Tschager shows you an alternative, more visual approach to rotate a group of parts around a common self-defined rotation point using a helper part created for the purpose.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;using_lsynth_via_mlcad&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/lsynth/tutorial-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Using LSynth via MLCad&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Tutorial on how setup and run LSynth through MLCad&#039;s interface by Willy Tschager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Advanced Modeling&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;advanced_digital_building&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/advanced1-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Advanced digital building with MLCad&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Everything you always wanted to know about Buffer-Exchange and MPD - Multipart Documents (but were afraid to ask). In this tutorial Willy Tschager teachs you advanced techniques to build digital models in MLCad. Furthermore he will show you tips and tricks and help with troubleshooting problems you might encounter. The tutorial is based on MLCad 3.4.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;unofficial_parts&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/mlcad/unofficial1-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Adding unofficial LDraw parts to MLCad&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This tutorial will teach you how to add not yet certified LDraw parts to MLCad&#039;s parts library. It also covers other programs of the LDraw System of Tools and how they deal with unofficial parts. The tutorial is based on MLCad 3.4.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;how_to_build_a_formula_1_race_car_with_virtual_bricks&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://wiki.ldraw.org/index.php?title=Scaling_Down&amp;quot;&amp;gt;How to build a Formula 1 race car with virtual bricks&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Luca Rusconi teaches you how to scale down a Formula 1 race car using official information about the chassis dimensions, the shape and geometry of the suspensions, the engine configuration, etc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;ui block header&amp;quot; id=&amp;quot;rendering&amp;quot;&amp;gt;Rendering&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Orient yourself with the many complexities of creating high quality rendered models and scenes of your LDraw creations.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Intermediate Rendering&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;quick_rendering_a_model_with_ldview_using_a_batch_file&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/ldview-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Quick rendering a model with LDView using a batch file&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A tutorial on how to make a batch file to quick render a model in LDview by Willy Tschager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Advanced Rendering&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;building_an_army&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;article/440.html&amp;quot;&amp;gt;Building an army&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Philip Heinrich teaches you how to create a winner for LDraw&#039;s Scene of the Month contest.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;ui block header&amp;quot; id=&amp;quot;building_instuctions&amp;quot;&amp;gt;Building Instructions&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Learning how to make building instructions so others can have fun with your models.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Beginner Building Instuctions&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;helper_files_for_building_instruction_images&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/ldraw/helper-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Helper files for building instruction images&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Ever wonder how to add &amp;quot;arrows&amp;quot;, &amp;quot;dotted lines&amp;quot; and numbers to your building instructions? Obtain the tools from Willy Tschager&#039;s web site to build like the pros.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;working_with_lpub&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;https://sites.google.com/site/workingwithlpub/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Working with LPub&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A tutorial by Jaco van der Molen explaining how to work with LPub to make instructions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;creating_building_instructions_using_LPub&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.eurobricks.com/forum/index.php?showtopic=83642&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Creating Building Instructions using LPub&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A step-by-step guide to creating your own instructions using LPub. It includes a short guide which walks through the basics of producing a set of instructions, as well as a full guide with more details on the main steps and features of LPub.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;ui block header&amp;quot; id=&amp;quot;parts_authoring&amp;quot;&amp;gt;Parts Authoring&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Learn how to create your own LDraw parts and how to submit them to the Parts Tracker for inclusion in our official updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Beginner Parts Authoring&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;bits_and_pieces&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.holly-wood.it/ldraw/authoring-en.html&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Bits and Pieces&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Here&#039;s a crash course by Willy Tschager in LDraw part authoring. Learn that you don&#039;t have to be a math guru or hack your way through a jungle of ones or zeros.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;reviewing_parts_for_ldraw&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://www.l3go.bugge.com/articles/Reviewing-parts-tutorial.shtml&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Reviewing parts for LDraw&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Niels Bugge dives into the nuts&#039;n&#039;bolts of part reviewing and gives clues to ease the work of the reviewers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;avoiding_tjunctions_in_ldraw_parts&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;http://wiki.ldraw.org/index.php?title=Avoiding_T-Junctions&amp;quot;&amp;gt;Avoiding T-junctions in LDraw parts&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Travis Cobbs explains what T-Junctions in LDraw parts are and how you can avoid them.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Intermediate Parts Authoring&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;h5 id=&amp;quot;edger_tutorial&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;external&amp;quot; href=&amp;quot;http://philohome.com/isecalc/edger.htm&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Edger tutorial&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Tutorial describing the use of Lee Gaiteri&#039;s Edger, an optional lines calculator (tutorial written by J.C. Tchang)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3 class=&amp;quot;ui block header&amp;quot; id=&amp;quot;help out_write_tutorials_for_ldraw_org&amp;quot;&amp;gt;Help Out! Write tutorials for LDraw.org&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;We&#039;re looking for more good tutorials for the site to help out our new users and users who want to learn more. If you enjoy using the LDraw System Of Tools, this would be a great way to give back to the community! Tutorials only take an evening or two to write, so you&#039;re not killing yourself with a time commitment. The other cool thing is, no web skills are needed to write. Write your tutorial in plain text format, spacing out paragraphs, and zip up any images you create when you send it in. If this sounds like something you would like to do, drop the webmasters a line and let them know. Thanks!&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5995</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5995"/>
		<updated>2018-11-30T22:13:08Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap generic meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CYL meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLP meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_FGR meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_GEN meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
* pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
* box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
* cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
* cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
* sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5994</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5994"/>
		<updated>2018-11-30T22:12:17Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap fingers meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CYL meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLP meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_FGR meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
* pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
* box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
* cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
* cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
* sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5993</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5993"/>
		<updated>2018-11-30T22:11:50Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap clip meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CYL meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLP meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
* pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
* box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
* cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
* cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
* sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5992</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5992"/>
		<updated>2018-11-30T22:11:27Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap cylinder meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CYL meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
* pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
* box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
* cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
* cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
* sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5991</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5991"/>
		<updated>2018-11-30T22:10:23Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap generic meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
* pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
* box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
* cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
* cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
* sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5990</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5990"/>
		<updated>2018-11-30T22:09:03Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap cylinder meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5989</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5989"/>
		<updated>2018-11-30T22:08:27Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap cylinder meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
* ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
* YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
* none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
* cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
* R: Round.&lt;br /&gt;
* A: Axle.&lt;br /&gt;
* S: Square.&lt;br /&gt;
* _L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
* L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
* none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
* one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
* two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
* A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
* B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5988</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5988"/>
		<updated>2018-11-30T22:05:23Z</updated>

		<summary type="html">&lt;p&gt;OrionP: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5987</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5987"/>
		<updated>2018-11-30T22:03:10Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap generic meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5986</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5986"/>
		<updated>2018-11-30T22:02:36Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap fingers meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
|-&lt;br /&gt;
| seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5985</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5985"/>
		<updated>2018-11-30T22:01:57Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap clip meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
|-&lt;br /&gt;
| length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5984</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5984"/>
		<updated>2018-11-30T22:01:07Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap fingers meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5983</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5983"/>
		<updated>2018-11-30T22:00:51Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap clip meta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5982</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5982"/>
		<updated>2018-11-30T21:54:03Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The snap cylinder meta */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
|-&lt;br /&gt;
| slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5981</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5981"/>
		<updated>2018-11-30T21:52:55Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The SNAP_INCL meta */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5980</id>
		<title>Part Snapping Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Part_Snapping_Language_Extension&amp;diff=5980"/>
		<updated>2018-11-30T21:52:16Z</updated>

		<summary type="html">&lt;p&gt;OrionP: Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
===Part snapping metas===&lt;br /&gt;
&lt;br /&gt;
Part snapping metas are currently exclusively used combined with shadow library files in order to add extra information to LDraw part files. This information is needed by LDCad to calculate possible &#039;LEGO like&#039; part placement positions.&lt;br /&gt;
&lt;br /&gt;
These metas basically describe hotspots and their shapes which then will be used to test against each other while adding a new part to the current model. This will be done for all snap info on both the source and destination brick(s) in order to find the best / closest match (e.g. an axle pin into a beam hole).&lt;br /&gt;
&lt;br /&gt;
====The SNAP_CLEAR meta====&lt;br /&gt;
&lt;br /&gt;
The clear meta is used to flush all or part of the inherited snap information gathered for the current part file so far. This meta might be needed to replace inherited information in order to extend it or increase its detail. Like e.g. information obtained from an axle primitive because that primitive is used as part of a bigger shape inside this file.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_CLEAR [id=axleHole]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Used to only clear information obtained from snap info using the given freely named ID. Leave it empty to clear all information for the current part.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The SNAP_INCL meta====&lt;br /&gt;
&lt;br /&gt;
The include meta is used to add the information from another shadow library file to this part too. This is done non recursively.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of the included information / object.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation transformation to apply to the included information / object.&lt;br /&gt;
| scale&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Optional scaling vector to apply to the included information / object&lt;br /&gt;
|-&lt;br /&gt;
| ref&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|  &lt;br /&gt;
| Reference to the source shadow library file. Must only use local part references.&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement / inclusion of the referenced file. The grid uses the orientation stated in the ori parameter. As LDraw part data is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around its pos parameter use: C 4 C 8 20 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====The snap cylinder meta====&lt;br /&gt;
&lt;br /&gt;
The cylinder meta is the main workhorse among the snap info metas. This because it describes holes and pens which is what LEGO is all about. If you take a good look at some LEGO bricks you&#039;ll notice all of them have similar interlocking holes and pens. The only real difference between them are the diameters and pattern of the hole/pens shapes (like the side of a key). It is this information that the cylinder meta tries to capture in order to calculate matching pairs.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| Optional identifier which can be used in clear metas to optionally drop this meta&#039;s information in higher level parts using it.&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| optional group identifier. Can be used to limit potential matches to only snap info having the same group string. Can be used to prevent unwanted matches when very complicated shapes are involved e.g. click rotation holes etc.&lt;br /&gt;
|-&lt;br /&gt;
| pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| Position of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| Orientation of this shape.&lt;br /&gt;
|-&lt;br /&gt;
| scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| &lt;br /&gt;
Defines how scaled references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If scaling is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
YOnly: The information will only be inherited if scaling is limited to the Y-axis, if X and or Z is scaled the info will not be inherited.&lt;br /&gt;
&lt;br /&gt;
ROnly: The information will only be inherited if scaling is limited to the cylinder&#039;s radius (usually x and z) given its done symmetrical. If the info is scaled in any other way it will not be inherited.&lt;br /&gt;
&lt;br /&gt;
YandR: The information will only be inherited if YOnly or ROnly rules apply.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mirror&lt;br /&gt;
| enum&lt;br /&gt;
| cor&lt;br /&gt;
| &lt;br /&gt;
Defines how mirrored references to the master (official) part should be handled information inheritance wise. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: If mirroring is detected this information will not be inherited by the higher level part.&lt;br /&gt;
&lt;br /&gt;
cor: If mirroring is detected the snap information will be corrected by flipping one of the radius axis&#039;.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Sets the gender of the cylinder shape M for male (pen) and F for female (hole).&lt;br /&gt;
|-&lt;br /&gt;
| secs&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Describes the shape of the hole (along the neg Y-axis) or pen by a sequence of shape variants, radius&#039;s and lengths. The info must be given in blocks of: shapeVariant radius length where shapeVariant must be one of the following:&lt;br /&gt;
&lt;br /&gt;
R: Round.&lt;br /&gt;
&lt;br /&gt;
A: Axle.&lt;br /&gt;
&lt;br /&gt;
S: Square.&lt;br /&gt;
&lt;br /&gt;
_L: Flexible radius wise extension to the previous block&#039;s specs. This will be needed for e.g. the tip of an technic connector pin. Although it is slightly larger it allows for (temporary) compression while sliding the pin inside e.g. a beam hole.&lt;br /&gt;
&lt;br /&gt;
L_: Same as _L but as an extension to the next section instead of the previous one.&lt;br /&gt;
&lt;br /&gt;
For example a plain stud can be described using a single block: R 8 4 while a technic beam hole needs three: R 8 2 R 6 16 R 8 2.&lt;br /&gt;
&lt;br /&gt;
caps&lt;br /&gt;
| enum&lt;br /&gt;
| one&lt;br /&gt;
| &lt;br /&gt;
Defines the ends of the shape, must be one of the following:&lt;br /&gt;
&lt;br /&gt;
none: The shape is open ended. e.g. a male axle or female beam hole.&lt;br /&gt;
&lt;br /&gt;
one: The shape has one closed ending, which one depends on the gender. For male shapes it will be A (bottom) and for female shapes it will be B (top).&lt;br /&gt;
&lt;br /&gt;
two: The shape is closed (blocked) at both sides. e.g. the male bar of a minifig suitcase handle.&lt;br /&gt;
&lt;br /&gt;
A: The bottom is closed / blocked. e.g. a stud.&lt;br /&gt;
&lt;br /&gt;
B: The top is closed / blocked. e.g. an anti stud.&lt;br /&gt;
&lt;br /&gt;
grid&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a grid pattern to use for multiple placement of this cylindrical shape. The grid uses the orientation stated in the ori parameter. As all snap info is Y-axis orientated only the X and Z grid stepping values need to be given like so:&lt;br /&gt;
&lt;br /&gt;
Xcnt Zcnt Xstep Zstep for example: 4 8 20 20 which could be used to make a 4x8 grid of e.g. studs.&lt;br /&gt;
&lt;br /&gt;
Optionally each count value can be preceded by a C character indicating the grid should be centered on that axis. If no C is given the axis will add to the pos parameter. For example to center the 4x8 grid around it&#039;s pos parameter use: C 4 C 8 20 20&lt;br /&gt;
&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Indicates if this cylinder shape should be centered at its position or not.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| &lt;br /&gt;
Indicates if this cylinder shape should be considered &#039;smooth&#039; enough to make sliding of matching parts possible. If ether part of a matched pair of snap info metas has the slide option set to true the user will be able to slide them together. If not it will just &#039;snap&#039;.&lt;br /&gt;
&lt;br /&gt;
Be careful while setting this option as it can cause unwanted sliding of e.g. a stud inside an anti stud. In practice it is best to limit the slide=true value to things you know will slide most of the time (e.g. clips, bush and gear parts etc).&lt;br /&gt;
&lt;br /&gt;
====The snap clip meta====&lt;br /&gt;
&lt;br /&gt;
The clip meta is used to describe all clip like shapes. Clips are always of the female gender and will be tested against male cylinder shapes.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
| 4.0&lt;br /&gt;
| Inner radius of the clip while in rest.&lt;br /&gt;
length&lt;br /&gt;
| float&lt;br /&gt;
| 8.0&lt;br /&gt;
| Length or width of the clip&#039;s (partial) hole.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
slide&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap fingers meta====&lt;br /&gt;
&lt;br /&gt;
The fingers meta is used to describe all the interlocking finger like shapes. finger shapes will only be tested among them selves.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
genderOfs&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| Indicates the gender of the first finger of the shape, must be ether M for male or F for female.&lt;br /&gt;
seq&lt;br /&gt;
| float array&lt;br /&gt;
|  &lt;br /&gt;
| Defines the width of each finger by a sequence of floats.&lt;br /&gt;
radius&lt;br /&gt;
| float&lt;br /&gt;
|  &lt;br /&gt;
| Outer radius of the finger (tip). these are usually beveled and thus the main snapping parameter.&lt;br /&gt;
center&lt;br /&gt;
| boolean&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
&lt;br /&gt;
====The snap generic meta====&lt;br /&gt;
&lt;br /&gt;
The generic meta is used to describe very oddly shaped things which in practice only have a few counter parts. Things like electric plugs and window glass etc.&lt;br /&gt;
&lt;br /&gt;
Matching is done only among generic metas themselves based on the group name alone. But the bounding information will influence the best candidate selection when multiple pairs are located closely together.&lt;br /&gt;
&lt;br /&gt;
‘‘‘Example’’’&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
‘‘‘Properties’’’&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
ID&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
group&lt;br /&gt;
| string&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
pos&lt;br /&gt;
| vector&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
ori&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
|  &lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
gender&lt;br /&gt;
| enum&lt;br /&gt;
| male&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
bounding&lt;br /&gt;
| mixed array&lt;br /&gt;
|  &lt;br /&gt;
| &lt;br /&gt;
Defines a bounding shape which will be used in the &#039;best pair candidate&#039; calculations. Is needed because the positional alone will might cause unwanted matches otherwise. There are several types of bounding shapes, namely:&lt;br /&gt;
&lt;br /&gt;
pnt: Single point / no bounding box, no extra info needed.&lt;br /&gt;
&lt;br /&gt;
box: Box defined by its following x, y, and z radius&#039;, for example: box 10 8 10&lt;br /&gt;
&lt;br /&gt;
cube: Cube defined by a following (half) size, for example: cube 8&lt;br /&gt;
&lt;br /&gt;
cyl: Cylinder defined by a following radius and length, for example: cyl 8 20&lt;br /&gt;
&lt;br /&gt;
sph: Sphere defined by a following radius, for example: sph 8&lt;br /&gt;
&lt;br /&gt;
scale&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;br /&gt;
mirror&lt;br /&gt;
| enum&lt;br /&gt;
| none&lt;br /&gt;
| See cylinder meta.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5979</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5979"/>
		<updated>2018-11-30T19:03:28Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* Spring Content METAs */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path Content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_CAP META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_ANCHOR META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_SKIN META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| donCol&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use with the given donor part.&lt;br /&gt;
|-&lt;br /&gt;
| donOri&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
| &lt;br /&gt;
| Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
|-&lt;br /&gt;
| donPart&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
|-&lt;br /&gt;
| donYSize&lt;br /&gt;
| unit&lt;br /&gt;
| 100%&lt;br /&gt;
| This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
|-&lt;br /&gt;
| donCen&lt;br /&gt;
| enum&lt;br /&gt;
| absCen	&lt;br /&gt;
| Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
* partCen: Use the part origin.&lt;br /&gt;
* absCen: Use the absolute center of the part.&lt;br /&gt;
* absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
* absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| donCenYOfs&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
|-&lt;br /&gt;
| donFinScale&lt;br /&gt;
| enum&lt;br /&gt;
| fitDon2Seg	&lt;br /&gt;
| Controls how the donor is scaled before placement in a segment. It must be set to one of the following:&lt;br /&gt;
* none: No additional scaling.&lt;br /&gt;
* fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
|-&lt;br /&gt;
| donPlace&lt;br /&gt;
| enum&lt;br /&gt;
| refsDyn	&lt;br /&gt;
| Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
* refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
* refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
* deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
|-&lt;br /&gt;
| donYAlign&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
|-&lt;br /&gt;
| donInline&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
|-&lt;br /&gt;
| segSize&lt;br /&gt;
| unit&lt;br /&gt;
| 100%&lt;br /&gt;
| Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
|-&lt;br /&gt;
| segSizeTol&lt;br /&gt;
| unit&lt;br /&gt;
| 5%&lt;br /&gt;
| Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
|-&lt;br /&gt;
| segsCnt&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
|-&lt;br /&gt;
| segsGrp&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
|-&lt;br /&gt;
| segsMaxMerge&lt;br /&gt;
| integer&lt;br /&gt;
| 1&lt;br /&gt;
| In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only useful when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
|-&lt;br /&gt;
| segsMrgAng&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
|-&lt;br /&gt;
| segsEdgeDelKind&lt;br /&gt;
| enum&lt;br /&gt;
| keepFirstLeft	&lt;br /&gt;
| Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
* keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
* keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
* keepAll: Remove nothing, keep them all.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_LENGTH META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| lenTarget&lt;br /&gt;
| unit&lt;br /&gt;
| 0&lt;br /&gt;
| The maximum allowed path length this meta can be used for.&lt;br /&gt;
|-&lt;br /&gt;
| lenMargin&lt;br /&gt;
| unit&lt;br /&gt;
| 0&lt;br /&gt;
| The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
|-&lt;br /&gt;
| partName&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
|-&lt;br /&gt;
| partDescr&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
| Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spring Content METAs ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !SPRING_ lines a LDraw compliant editor will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The SPRING_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this point to one of the automatic groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
* start: This point represents the start or bottom of the spring.&lt;br /&gt;
* end: This point represents the end or top of the spring.&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and location of this spring point.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The SPRING_CAP META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the automatic groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
* start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
* end: This cap connects to the end or top of the spring.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use for this cap part.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and location of this cap part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
|}&lt;br /&gt;
==== The SPRING_ANCHOR META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the automatic groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
* start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
* end: This cap connects to the end or top of the spring.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and location of this anhor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The SPRING_SECTION META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SPRING_SECTION [windingCnt=5] [proportion=1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| windingCnt&lt;br /&gt;
| float&lt;br /&gt;
| 5.0&lt;br /&gt;
| Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
|-&lt;br /&gt;
| proportion&lt;br /&gt;
| integer&lt;br /&gt;
| 1	&lt;br /&gt;
| Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5978</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5978"/>
		<updated>2018-11-30T18:17:18Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* Spring content META */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path Content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_CAP META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_ANCHOR META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_SKIN META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| donCol&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use with the given donor part.&lt;br /&gt;
|-&lt;br /&gt;
| donOri&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
| &lt;br /&gt;
| Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
|-&lt;br /&gt;
| donPart&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
|-&lt;br /&gt;
| donYSize&lt;br /&gt;
| unit&lt;br /&gt;
| 100%&lt;br /&gt;
| This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
|-&lt;br /&gt;
| donCen&lt;br /&gt;
| enum&lt;br /&gt;
| absCen	&lt;br /&gt;
| Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
* partCen: Use the part origin.&lt;br /&gt;
* absCen: Use the absolute center of the part.&lt;br /&gt;
* absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
* absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| donCenYOfs&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
|-&lt;br /&gt;
| donFinScale&lt;br /&gt;
| enum&lt;br /&gt;
| fitDon2Seg	&lt;br /&gt;
| Controls how the donor is scaled before placement in a segment. It must be set to one of the following:&lt;br /&gt;
* none: No additional scaling.&lt;br /&gt;
* fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
|-&lt;br /&gt;
| donPlace&lt;br /&gt;
| enum&lt;br /&gt;
| refsDyn	&lt;br /&gt;
| Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
* refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
* refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
* deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
|-&lt;br /&gt;
| donYAlign&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
|-&lt;br /&gt;
| donInline&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
|-&lt;br /&gt;
| segSize&lt;br /&gt;
| unit&lt;br /&gt;
| 100%&lt;br /&gt;
| Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
|-&lt;br /&gt;
| segSizeTol&lt;br /&gt;
| unit&lt;br /&gt;
| 5%&lt;br /&gt;
| Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
|-&lt;br /&gt;
| segsCnt&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
|-&lt;br /&gt;
| segsGrp&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
|-&lt;br /&gt;
| segsMaxMerge&lt;br /&gt;
| integer&lt;br /&gt;
| 1&lt;br /&gt;
| In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only useful when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
|-&lt;br /&gt;
| segsMrgAng&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
|-&lt;br /&gt;
| segsEdgeDelKind&lt;br /&gt;
| enum&lt;br /&gt;
| keepFirstLeft	&lt;br /&gt;
| Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
* keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
* keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
* keepAll: Remove nothing, keep them all.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_LENGTH META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| lenTarget&lt;br /&gt;
| unit&lt;br /&gt;
| 0&lt;br /&gt;
| The maximum allowed path length this meta can be used for.&lt;br /&gt;
|-&lt;br /&gt;
| lenMargin&lt;br /&gt;
| unit&lt;br /&gt;
| 0&lt;br /&gt;
| The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
|-&lt;br /&gt;
| partName&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
|-&lt;br /&gt;
| partDescr&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
| Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spring Content METAs ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !SPRING_ lines a LDraw compliant editor will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The SPRING_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5977</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5977"/>
		<updated>2018-11-30T18:10:32Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* Path content METAs */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path Content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_CAP META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_ANCHOR META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_SKIN META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| donCol&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use with the given donor part.&lt;br /&gt;
|-&lt;br /&gt;
| donOri&lt;br /&gt;
| 3x3 matrix&lt;br /&gt;
| &lt;br /&gt;
| Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
|-&lt;br /&gt;
| donPart&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
|-&lt;br /&gt;
| donYSize&lt;br /&gt;
| unit&lt;br /&gt;
| 100%&lt;br /&gt;
| This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
|-&lt;br /&gt;
| donCen&lt;br /&gt;
| enum&lt;br /&gt;
| absCen	&lt;br /&gt;
| Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
* partCen: Use the part origin.&lt;br /&gt;
* absCen: Use the absolute center of the part.&lt;br /&gt;
* absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
* absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| donCenYOfs&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
|-&lt;br /&gt;
| donFinScale&lt;br /&gt;
| enum&lt;br /&gt;
| fitDon2Seg	&lt;br /&gt;
| Controls how the donor is scaled before placement in a segment. It must be set to one of the following:&lt;br /&gt;
* none: No additional scaling.&lt;br /&gt;
* fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
|-&lt;br /&gt;
| donPlace&lt;br /&gt;
| enum&lt;br /&gt;
| refsDyn	&lt;br /&gt;
| Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
* refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
* refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
* deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
|-&lt;br /&gt;
| donYAlign&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
|-&lt;br /&gt;
| donInline&lt;br /&gt;
| boolean&lt;br /&gt;
| false&lt;br /&gt;
| Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
|-&lt;br /&gt;
| segSize&lt;br /&gt;
| unit&lt;br /&gt;
| 100%&lt;br /&gt;
| Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
|-&lt;br /&gt;
| segSizeTol&lt;br /&gt;
| unit&lt;br /&gt;
| 5%&lt;br /&gt;
| Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
|-&lt;br /&gt;
| segsCnt&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
|-&lt;br /&gt;
| segsGrp&lt;br /&gt;
| integer&lt;br /&gt;
| 0&lt;br /&gt;
| Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
|-&lt;br /&gt;
| segsMaxMerge&lt;br /&gt;
| integer&lt;br /&gt;
| 1&lt;br /&gt;
| In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only useful when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
|-&lt;br /&gt;
| segsMrgAng&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
|-&lt;br /&gt;
| segsEdgeDelKind&lt;br /&gt;
| enum&lt;br /&gt;
| keepFirstLeft	&lt;br /&gt;
| Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
* keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
* keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
* keepAll: Remove nothing, keep them all.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_LENGTH META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| lenTarget&lt;br /&gt;
| unit&lt;br /&gt;
| 0&lt;br /&gt;
| The maximum allowed path length this meta can be used for.&lt;br /&gt;
|-&lt;br /&gt;
| lenMargin&lt;br /&gt;
| unit&lt;br /&gt;
| 0&lt;br /&gt;
| The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
|-&lt;br /&gt;
| partName&lt;br /&gt;
| ldrawRef&lt;br /&gt;
|&lt;br /&gt;
| LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
|-&lt;br /&gt;
| partDescr&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
| Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5976</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5976"/>
		<updated>2018-11-30T17:45:29Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The path anchor META */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_CAP META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_ANCHOR META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5975</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5975"/>
		<updated>2018-11-30T17:45:09Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The path cap META */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The PATH_CAP META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5974</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5974"/>
		<updated>2018-11-30T17:44:38Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The PATH_POINT META */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5973</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5973"/>
		<updated>2018-11-29T23:15:46Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* Path content METAs */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !PATH_ lines the LDraw editor will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software that do not support these METAs, plain LDraw fallback code is encouraged to be added to the generated subfile.&lt;br /&gt;
&lt;br /&gt;
==== The PATH_POINT META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this anchor to one of the groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the anchor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5972</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5972"/>
		<updated>2018-11-29T23:03:30Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* Specification */ Added note that this spec is unofficial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
Author&#039;s Note: This is a unofficial specification, not yet ratified by the LSC&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !LDCAD PATH_ lines LDCad will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The Path Point META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the anchor.&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5971</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5971"/>
		<updated>2018-11-29T22:59:05Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The path cap META */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !LDCAD PATH_ lines LDCad will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The Path Point META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| group&lt;br /&gt;
| enum&lt;br /&gt;
|&lt;br /&gt;
| Group is used to assign this cap to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
* start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
* end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
|-&lt;br /&gt;
| color&lt;br /&gt;
| ldrawColNr&lt;br /&gt;
| 16&lt;br /&gt;
| Color to use given LDraw part with.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| ldraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of the cap&#039;s part.&lt;br /&gt;
|-&lt;br /&gt;
| part&lt;br /&gt;
| ldrawRef&lt;br /&gt;
| &lt;br /&gt;
| LDraw part to use as a cap.&lt;br /&gt;
|-&lt;br /&gt;
| extraLen&lt;br /&gt;
| unit&lt;br /&gt;
| 0mm&lt;br /&gt;
| Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the anchor.&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5970</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5970"/>
		<updated>2018-11-29T21:51:35Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The path cap META */ Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !LDCAD PATH_ lines LDCad will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The Path Point META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use given LDraw part with.&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the cap&#039;s part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use as a cap.&lt;br /&gt;
extraLen	unit	0mm	Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the anchor.&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5969</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5969"/>
		<updated>2018-11-29T21:45:26Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The Path Point META */  Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !LDCAD PATH_ lines LDCad will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The Path Point META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Default&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| enum&lt;br /&gt;
| bezier	&lt;br /&gt;
| Sets the point type, must be ether bezier or circle.&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
|-&lt;br /&gt;
| posOri&lt;br /&gt;
| LDraw matrix&lt;br /&gt;
|&lt;br /&gt;
| Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| prevCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| nextCPDist&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
|-&lt;br /&gt;
| cirR&lt;br /&gt;
| float&lt;br /&gt;
| 25.0&lt;br /&gt;
| Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| cirDir&lt;br /&gt;
| enum&lt;br /&gt;
| xyCW	&lt;br /&gt;
| Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
* xyCW: Clockwise around the local xy plane.&lt;br /&gt;
* xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
* zyCW: Clockwise around the local zy plane.&lt;br /&gt;
* zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| prevYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
|-&lt;br /&gt;
| nextYRoll&lt;br /&gt;
| float&lt;br /&gt;
| 0.0&lt;br /&gt;
| Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use given LDraw part with.&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the cap&#039;s part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use as a cap.&lt;br /&gt;
extraLen	unit	0mm	Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the anchor.&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
	<entry>
		<id>https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5968</id>
		<title>Flexible Part Language Extension</title>
		<link rel="alternate" type="text/html" href="https://wiki.ldraw.org/index.php?title=Flexible_Part_Language_Extension&amp;diff=5968"/>
		<updated>2018-11-29T21:26:21Z</updated>

		<summary type="html">&lt;p&gt;OrionP: /* The path point META */ Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Specification ==&lt;br /&gt;
&#039;&#039;&#039;Maintained by&#039;&#039;&#039;: The LDraw.org Standards Committee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Writer&#039;&#039;&#039;: Roland Melkert, Orion Pobursky&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Revision&#039;&#039;&#039;: 1, XX-XXX-XXXX&lt;br /&gt;
&lt;br /&gt;
=== Path content METAs ===&lt;br /&gt;
&lt;br /&gt;
Path content metas are used to define bendable parts inside a dedicated subfile. Based upon a collection of 0 !LDCAD PATH_ lines LDCad will be able to generate many kinds of flexible parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The Path Point META ====&lt;br /&gt;
&lt;br /&gt;
The path point meta is used to define a point the generated path must pass through in a certain way. If multiple point metas are present the path will follow the order of line placement.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0 !LDCAD PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
type	enum	bezier	&lt;br /&gt;
Sets the point type, must be ether bezier or circle.&lt;br /&gt;
&lt;br /&gt;
Bezier points are used to guide the path through the center of this point using two control points, one in front and one behind it using the y axis of the points coordinate system (given by posOri).&lt;br /&gt;
&lt;br /&gt;
Circle points are used to guide the path around the center of this point on a 2D plane using a custom radius.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and orientation of this point. The orientation part is very important as it guides the path&#039;s direction using its local Y-axis.&lt;br /&gt;
prevCPDist	float	25.0	Defines the control point &#039;in front of&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s previous control point will be used by the previous path point next control point in order to do the bezier calculations for the line segment between them.&lt;br /&gt;
nextCPDist	float	25.0	Defines the control point &#039;next to&#039; this point by setting the distance (over the local Y-axis) to it in relation to the point&#039;s center. This point&#039;s next control point will be used together width the previous control point of the next path point to do the bezier calculations for the line segment between them.&lt;br /&gt;
cirR	float	25.0	Sets the radius of the path guidance circle. Only used if the point type is circle.&lt;br /&gt;
cirDir	enum	xyCW	&lt;br /&gt;
Used to select the 2D plane and winding direction this circle path point must use to guide the path around its center. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
xyCW: Clockwise around the local xy plane.&lt;br /&gt;
&lt;br /&gt;
xyCCW: Counter clockwise around the local xy plane.&lt;br /&gt;
&lt;br /&gt;
zyCW: Clockwise around the local zy plane.&lt;br /&gt;
&lt;br /&gt;
zyCCW: Counter clockwise around the local zy plane.&lt;br /&gt;
&lt;br /&gt;
Only used if the point type is circle.&lt;br /&gt;
&lt;br /&gt;
prevYRoll	float	0.0	Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before following the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a bush onto a beveled wheel. Only used if the point type is circle.&lt;br /&gt;
nextYRoll	float	0.0	Sets the roll (in degrees) around the paths Y-axis the path donor is required to have before leaving the local circle arc. Needed when e.g. working with a square shaped rubber band to guide it from e.g. a beveled wheel onto a bush. Only used if the point type is circle.&lt;br /&gt;
&lt;br /&gt;
==== The path cap META ====&lt;br /&gt;
&lt;br /&gt;
The path cap meta is used to add static (sub)parts to a flexible part. This is usually reserved for the outer endings of the generate part e.g. the studs at both endings of a wire.&lt;br /&gt;
&lt;br /&gt;
Cap metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use given LDraw part with.&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the cap&#039;s part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use as a cap.&lt;br /&gt;
extraLen	unit	0mm	Can be used to state the captions length, can be used to corrected the total path length when the caption parts include e.g. part of the flexible donor structure themselves.&lt;br /&gt;
&lt;br /&gt;
==== The path anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is (optionally) used to force a custom center using the automatic path content groups. This might be needed for start and or end groups if the containing cap or path point isn&#039;t suitable or logically. There can only be one anchor meta per group type inside any path content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for this flexible part. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: All things that make up the starting point of a flexible part. This is usually a cap and the first path point.&lt;br /&gt;
&lt;br /&gt;
end: All things that make up the end point of a flexible part. This is usually a cap and the last path point.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	ldraw matrix	 	Position and orientation of the anchor.&lt;br /&gt;
&lt;br /&gt;
==== The path skin META ====&lt;br /&gt;
&lt;br /&gt;
The path skin meta is used to define how to fill/flesh out (part of) the path taken through the given point(s). There should be at least one skin meta in every path content subfile. It is allowed to use multiple skin metas. The total available path length will be divided amount multiple skin metas depending on their segments (seg*) related properties.&lt;br /&gt;
&lt;br /&gt;
Skin metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
donCol	ldrawColNr	16	Color to use with the given donor part.&lt;br /&gt;
donOri	3x3 matrix	 	Rotation of the donor part. donOri act as a correction of the donor&#039;s own orientation in order to make the part Y-axis oriented. This because the donor part will be &#039;smeared&#039; along the path in its local (after this correction) Y direction.&lt;br /&gt;
donPart	ldrawRef	 	Set the LDraw file to use for filling out the path. Any LDraw file is allowed here but in practice you want to limit usage to simple parts.&lt;br /&gt;
donYSize	unit	100%	This is used to set the base donor size in its Y direction. If for example the donor part is a tube section with a height of 2ldu could stretch (y-axis only) that using this option to e.g. 10ldu en large it times e..g 4 by using 400%.&lt;br /&gt;
donCen	enum	absCen	&lt;br /&gt;
Used to choose the working center of the donor part. This option uses the donor as it is after the orientation corrections. It must be one of the following:&lt;br /&gt;
&lt;br /&gt;
partCen: Use the part origin.&lt;br /&gt;
&lt;br /&gt;
absCen: Use the absolute center of the part.&lt;br /&gt;
&lt;br /&gt;
absYCen: Use the part origin for the X and Z axis, but use the absolute center of its Y-axis.&lt;br /&gt;
&lt;br /&gt;
absXZCen: Use the absolute center of the X and Z axis, but use the part origin for the Y-axis.&lt;br /&gt;
&lt;br /&gt;
donCenYOfs	float	0.0	Define an additional offset to the Y part of the donor (after donOri, donYSize and donCen corrections) to be used.&lt;br /&gt;
donFinScale	enum	fitDon2Seg	&lt;br /&gt;
Controls how the donor is scaled before placement in a segment. It must be set to one of the followeling:&lt;br /&gt;
&lt;br /&gt;
none: No additional scaling.&lt;br /&gt;
&lt;br /&gt;
fitDon2Seg: Stretch/shrink the donor result to exactly fit the destination segment. Do note this might (partly) override some of the other don* scaling related parameters which could result in an unexpected end result.&lt;br /&gt;
&lt;br /&gt;
donPlace	enum	refsDyn	&lt;br /&gt;
Selects the placement / generation method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
refsStat: Donors are placed using the calculated center (after donYAling correction) at the starting point of segments using that locations local path orientation.&lt;br /&gt;
&lt;br /&gt;
refsDyn: Donors are placed using the calculated center (after donYAling correction) at the center segements using that locations (interpolated) local path orientation.&lt;br /&gt;
&lt;br /&gt;
deform: The donor mesh is deformed in such a way it follows the path&#039;s curve as a result any fallback code will have the full recursive (transformed) source of the donor part for each segment it is used on. The deform method results in extremely smooth flexible parts but it might also result in very large LDraw files.&lt;br /&gt;
&lt;br /&gt;
donYAlign	integer	0	Sets an alignment correction to use on the calculated donor center before placing a donor at a path segment. A negative number will shift the donor to the left by multiples of its Y length. So -1 will move it a full length to the left. A positive number will do the same to the right. 0 means no change will be made.&lt;br /&gt;
donInline	boolean	false	Determines if the generator will try to inline the donor file instead of referring to it directly while creating the segment fallback code. In-lining the donor file removes dependency on it and might increase portability of the fallback code. The donor will only be in-lined if it is entirely made out of type 1 lines.&lt;br /&gt;
segSize	unit	100%	Controls the length of individual segments along the resulting path. Each segment on the path will be filled out with a single donor part instance. Setting the segment size therefore controls how many times the donor might be used to fill out the path. Be care full when setting the segment size while using the deform method as it will greatly influence the resulting fallback file size. You can supply the segment size in ldu, mm or as a percentage of donYSize.&lt;br /&gt;
segSizeTol	unit	5%	Controls the amount of scaling allowed upon segments in order to fill rest space. If for example the segments size is 10 and the whole path has a length of 111, resulting in 11 segments, the remaining length of 1 will be spread over the 11 segments by scaling them slightly. Use this option to limit the amount of scaling to prevent e.g. noticeable distortions in the donor part. tolerance can be given in a static ldu, mm or a percentage of the calculated segment size it self.&lt;br /&gt;
segsCnt	integer	0	Used to set optionally set a fixed number of segments. 0 means unlimited segments can be used in order to construct the path. If a non zero value is given only a portion of the path will be filled out using this skin meta&#039;s options. This option can be used to limit the visible length of a flexible part and make room for other skin metas on the path.&lt;br /&gt;
segsGrp	integer	0	Used to group segments resulting from different skin metas. If set to 0 no grouping will be done and each skin meta will fill out its assigned space in order of the skin meta lines. If set to non zero skin metas using the same group number will alternate (zip together) their segments making possible e.g. color patterns.&lt;br /&gt;
segsMaxMerge	integer	1	In order to try and reduce the fallback code segments which are in a straight line of each other could optionally be joined into a single segment resulting in less donor placements. this option is only usefull when the donor uses final scaling other wise you will end up with (large) gaps in your path.&lt;br /&gt;
segsMrgAng	float	0.0	optionally lets you define the maximum angle (in degrees) between two segments in order to deem them to be inline of each other. 0.0 indicates the internal (version depended) hard coded default should be used. Use this option with case as a large angle might cause alignment problems.&lt;br /&gt;
segsEdgeDelKind	enum	keepFirstLeft	&lt;br /&gt;
Controls what to do with overlapping conditional lines while using the deform placement method. Must be one of the following:&lt;br /&gt;
&lt;br /&gt;
keepFirstLeft: Remove the left ones except for the first segment.&lt;br /&gt;
&lt;br /&gt;
keepLastRight: Remove the right ones except for the last segment.&lt;br /&gt;
&lt;br /&gt;
keepAll: Remove nothing, keep them all.&lt;br /&gt;
&lt;br /&gt;
==== The path length META ====&lt;br /&gt;
&lt;br /&gt;
The path length meta is used to constrain the length of the path and or to define a real life (official library) counter part for the maximum length. When multiple length metas are present the constraint closest to the true length of the path will be applied in order to e.g. map path content to static LDraw files.&lt;br /&gt;
&lt;br /&gt;
Length metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
lenTarget	unit	0	The maximum allowed path length this meta can be used for.&lt;br /&gt;
lenMargin	unit	0	The amount a path&#039;s length might differ from the true constrains in order to still qualify. This helps prevent unwanted exclusions and compensates for stretchable parts (e.g. rubber bands). The margin can be given in ldu, mm or a percentage upon the lenTarget value.&lt;br /&gt;
partName	ldrawRef	 	LDraw part which represents the static version of a path which matches this metas constrains. Currently this reference is never loaded so it does not have to exists. future versions of LDCad might use it in e.g. part usage overviews etc.&lt;br /&gt;
partDescr	string	 	Description to use for the given partName. Currently nothing is done with this value but future versions of LDCad might use it when e.g. the partName LDraw file can not be found (is virtual)&lt;br /&gt;
&lt;br /&gt;
=== Spring content META ===&lt;br /&gt;
&lt;br /&gt;
Spring content metas are used to define parts which include a movable spring inside a dedicated subfile. Based upon a collection of 0 !LDCAD SPRING_ lines LDCad will be able to generate many kinds of spring oriented parts for use in your models. In order to also view those models correctly in other LDraw viewer/editor software a generated meta can be used to add plain LDraw fallback code to the subfile.&lt;br /&gt;
&lt;br /&gt;
==== The spring point META ====&lt;br /&gt;
&lt;br /&gt;
The spring point meta is used to define at most two points using different group settings. These are the points the generated spring will connect using one or more section metas.&lt;br /&gt;
&lt;br /&gt;
Point metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this point to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This point represents the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This point represents the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another point is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this spring point.&lt;br /&gt;
&lt;br /&gt;
==== The spring cap META ====&lt;br /&gt;
&lt;br /&gt;
The cap meta is used to add static part(s) to ether the start or end of the spring oriented part.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this cap to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
color	ldrawColNr	16	Color to use for this cap part.&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this cap part.&lt;br /&gt;
part	ldrawRef	 	LDraw part to use for this cap. Can be anything but in practice it should be a single LDraw part as it might hurt render performance otherwise.&lt;br /&gt;
&lt;br /&gt;
==== The spring anchor META ====&lt;br /&gt;
&lt;br /&gt;
The anchor meta is used to force a custom center (and orientation) for one of the spring related groups. There can only be one anchor meta per group type in any spring content subfile.&lt;br /&gt;
&lt;br /&gt;
Anchor metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
group	enum	 	&lt;br /&gt;
Group is used to assign this anchor to one of the automatic LDCad groups available for spring parts. It must be set to one of the following:&lt;br /&gt;
&lt;br /&gt;
start: This cap connects to the start or bottom of the spring.&lt;br /&gt;
&lt;br /&gt;
end: This cap connects to the end or top of the spring.&lt;br /&gt;
&lt;br /&gt;
It is not allowed to set group to something another anchor is already set to.&lt;br /&gt;
&lt;br /&gt;
posOri	LDraw matrix	 	Position and location of this anhor.&lt;br /&gt;
&lt;br /&gt;
==== The spring section META ====&lt;br /&gt;
&lt;br /&gt;
The section meta is used to define the appearance of (part of) the spring wire connecting the two spring points. At least one section meta should be present. When multiple section metas are given the available spring length will be divided among them based on the proportion property.&lt;br /&gt;
&lt;br /&gt;
Section metas must only be used in the header and optionally kept grouped together.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]&lt;br /&gt;
&lt;br /&gt;
Properties&lt;br /&gt;
&lt;br /&gt;
Property	Type	Default	Description&lt;br /&gt;
windingCnt	float	5.0	Number of windings around the springs&#039; Y-direction this meta should make within the available length.&lt;br /&gt;
proportion	integer	1	&lt;br /&gt;
Defines the portion of the total spring length this section controls. If set to 0 the wire will be wound tightly and this section&#039;s length depends on the number of windings and wire thickness. If set to non zero the available length will be calculated by taking the leftover length (spring length minus the length used by zero proportion sections) divided by the sum of all proportion values multiplied by this meta&#039;s proportional value.&lt;br /&gt;
&lt;br /&gt;
For example imagine having a spring of length 100 using 4 section metas. If one of those sections uses a proportion of 2 and the other three use 1 the resulting section lengths will be: 40 (2 5ths), 20 (1 5th), 20 and 20.&lt;/div&gt;</summary>
		<author><name>OrionP</name></author>
	</entry>
</feed>