Primitives Reference: Difference between revisions
Holly-Wood (talk | contribs) |
Holly-Wood (talk | contribs) |
||
| Line 2,046: | Line 2,046: | ||
| '''stud13.dat''' || '''Very truncated solid stud''' | | '''stud13.dat''' || '''Very truncated solid stud''' | ||
|- | |- | ||
| [[File:Stud13. png|200px|thumb|alt=Stud13]] | | [[File:Stud13.png|200px|thumb|alt=Stud13]] | ||
||For use on the 2x2 Light&Sound siren part where the stud does not extend over the edge of the part. | ||For use on the 2x2 Light&Sound siren part where the stud does not extend over the edge of the part. | ||
|- | |- | ||
| Line 2,097: | Line 2,097: | ||
||For use on the underside of parts (usually plates) between the gaps for studs. This is modelled with the solid disc uppermost. To use for the underside of plates, it is necessary to invert in the {y} dimension, like | ||For use on the underside of parts (usually plates) between the gaps for studs. This is modelled with the solid disc uppermost. To use for the underside of plates, it is necessary to invert in the {y} dimension, like | ||
1 16 | 1 16 x y z 1 0 0 0 -1 0 0 0 1 stud3.dat | ||
In real life, more recent parts use a hollow version of this underside stud. Since this serves no functional purpose and many parts exist with both varients, this feature is not modelled in LDraw parts and the solid version is always used. | In real life, more recent parts use a hollow version of this underside stud. Since this serves no functional purpose and many parts exist with both varients, this feature is not modelled in LDraw parts and the solid version is always used. | ||
| Line 2,162: | Line 2,162: | ||
| [[File:Stud4h.png|200px|thumb|alt=Stud4h]] | | [[File:Stud4h.png|200px|thumb|alt=Stud4h]] | ||
||For use on the underside of plate thickness parts where the hole extends to the top surface of the plate. | ||For use on the underside of plate thickness parts where the hole extends to the top surface of the plate. | ||
|- | |||
| '''stud4f''n''s.dat''' || '''Ring underside stud with fillet stubs''' | |||
|- | |||
| [[File:Stud4f4s.png|200px|thumb|alt=Stud4fns]] | |||
||For use on the underside of parts where a strengthening fillet joins the stud. The | |||
number of fillets is indicated by n: 1=one fillet, 2=two opposite fillets, 3=three | |||
fillets, 4=four fillets, 5=two adjacent fillets. The fillet width is indicated by s: | |||
n=narrow (2LDu), s=standard (3LDu), w=wide (4LDu) | |||
''Currently available primitives:'' | |||
One fillet: stud4f1n, stud4f1s | |||
Two opposite fillets: stud4f2n, stud4f2s, stud4f2w | |||
Three fillets: stud4f3s | |||
Four fillets: stud4f4n, stud4f4s | |||
Two adjacent fillets: stud4f5n | |||
|- | |||
| '''stud16.dat''' || '''Ring underside stud ‐ split''' | |||
|- | |||
| [[File:Stud16.png|200px|thumb|alt=Stud16]] | |||
||A divided underside stud, as typically used in minifig headwear. See also note for stud3. | |||
|- | |||
| '''stud21a.dat''' || '''Ring underside stud - split with single wide slot''' | |||
|- | |||
| [[File:Stud21a.png|200px|thumb|alt=Stud21a]] | |||
||A partially divided underside stud, used on pull-back motors. See also note for stud3. | |||
|- | |||
| '''stud22a.dat''' || '''Ring underside stud - split with double wide slot''' | |||
|- | |||
| [[File:Stud22a.png|200px|thumb|alt=Stud22a]] | |||
||A divided underside stud, used on pull-back motors. See also note for stud3. | |||
|- | |||
| '''stud18a.dat''' || '''Stud Tube Open Snap''' | |||
|- | |||
| [[File:Stud18a.png|200px|thumb|alt=Stud18a]] | |||
|| | |||
|- | |||
| '''stud23.dat''' || '''Square underside stud hole''' | |||
|- | |||
| [[File:Stud23.png|200px|thumb|alt=Stud23]] | |||
|| | |||
|- | |||
| '''stud5.dat''' || '''Scala stud''' | |||
|- | |||
| [[File:Stud5.png|200px|thumb|alt=Stud5]] | |||
|| | |||
|- | |||
| '''stud7.dat''' || '''Duplo hollow top stud''' | |||
|- | |||
| [[File:Stud7.png|200px|thumb|alt=Stud7]] | |||
|| | |||
|- | |||
| '''stud7a.dat''' || '''Duplo hollow top stud without edge around base''' | |||
|- | |||
| [[File:Stud7a.png|200px|thumb|alt=Stud7a]] | |||
|| | |||
|} | |} | ||
Revision as of 09:00, 28 December 2023
LDraw Primitives Reference
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. They serve several purposes :
- To speed up parts authoring by providing a library of components which can be incorporated into several parts
- To allow rendering software to make substitutions of curved components
Within this reference material the available primitives are categorised into:
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.
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.
Rectilinear primitives
Nomenclature
Boxes are named boxF, with F representing the number of faces a box has. The suffix E represents the number of edges removed.
F and E are may followed by an additional letter. The hyphen is removed if F is accompanied by a modifier.
Face modifiers:
- o - faces are opposite to each other
- t - faces are all touching each other (usually, it's implied, but box4t.dat is a thing)
- u - missing faces form a U-shape
Edge letters:
- p - groups of edges are parallel to each other
- a - some missing faces have no adjacent edges
Scaling and orientation
These rectilinear elements may be scaled in the {x}, {y} and {z} dimensions to make elements of any size. For example
1 16 0 0 0 40 0 0 0 1 0 0 0 20 rect.dat
would generate a 80LDu x 40LDu rectangle in the {x,z} plane.
Although the default orientation of the rect.dat primitive is in the {x,z} plane the LDraw language allows for this to be transformed
1 16 0 0 0 0 1 0 40 0 0 0 0 20 rect.dat
would generate a 80LDu x 40LDu rectangle in the {y,z} plane.
1 16 0 0 0 40 0 0 0 0 20 0 1 0 rect.dat
would generate a 80LDu x 40LDu rectangle in the {x,y} plane.
| Return to top |
| Return to top |
Curved primitives
LDraw represents curved surfaces as polygons. For circular components two series of primitives are provided.
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}.
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.
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. 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.
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
1 16 0 0 0 3 0 0 0 1 0 0 0 3 4-4edge.dat
would generate a circle in the {x,z} plane with a radius of 3LDu.
They may also be scaled asymmetrically in the x and z dimension to make ellipses.
Although the default orientation is in the {x,z} plane the LDraw language allows for these to be transformed
1 16 0 0 0 0 1 0 3 0 0 0 0 3 4-4edge.dat would generate a circle in the {y,z} plane
1 16 0 0 0 3 0 0 0 0 3 0 1 0 4-4edge.dat would generate a circle in the {x,y} plane
| Return to top |
| Return to top |
Technic primitives
| Return to top |
| Return to top |
| Return to top |
| Return to top |
| Return to top |
| Return to top |
| Return to top |
| Return to top |
| Return to top |
| Return to top |
Stud-related primitives
Stud primitives
Each studxxx primitive described below has a matching low resolution stu2xxx primitive, used by the fast-draw mode of renderers - these stu2xxx primitive must never be used in part files. An additional primitive (studline.dat) is used to substitute a single line for studs by the super fast-draw mode of LDraw.
All stud primitives are modelled with the solid disc uppermost, even if designed for the underside of parts (stud3, stud4, stud8, stud11). The origin is at the base of the stud and they extend for 4LDU in the {-y} dimension. To use for the underside, the primitives need to be inverted in the {y} dimension, viz.
1 16 x y z 1 0 0 0 -1 0 0 0 1 stud3.dat
These primitives must not be scaled in the {x} or {z} dimensions. Ideally they should not be scaled in the {y} dimension either, to allow the accurate substitution of chamfered studs by high-quality renderers [but this rule is flouted in the regular brick files, where stud4 is scaled by 5 to generate the underside tube].



















































































































































































































































