Commands and Generators
To troubleshoot generator issues, first look through the information here and then check the Q&A page. The below commands only build shapes; to display them in the scene, they must be instanced using the command under Scene Graph & Geometric Manipulation.
To see examples of properly-used generators, see the exemplars under Exhibition or the worked examples under Tutorials.
B-Spline
bspline id order {order} (point_idlist) segs {segs} endbspline
bspline id order {order} (point_idlist) segs {segs} endbspline
Defines a B-spline.
{order}: integer that sets the B-spline's DEGREE to be{order}-1.point_idlist: a list of points of the formpoint1point2...{segs}: the number of segments into which the B-spline is sampled.- The number of control points must be greater than or equal to
{order} - For closed curves, there must be at least
{order}-1control points.
Bezier Curve
beziercurve id ( point_idlist ) segs {segs} endbeziercurve
beziercurve id ( point_idlist ) segs {segs} endbeziercurve
Defines a Bezier curve.
point_idlist: a list of points of the formpoint1point2...{segs}: the number of segments into which the Bezier curve is sampled.
Circle
circle id (radius segs) endcircle
circle id (radius segs) endcircle
Defines a circle.
radius: the radius.segs: the number of line segments.radiusandsegscannot be negative.
Cone (this command is not implemented)
cone id (radius height hgt_max theta_max theta_segs [botcap] [topcap] ) endcone
cone id (radius height hgt_max theta_max theta_segs [botcap] [topcap] ) endcone
Defines a (possibly truncated) cone.
radius: the radius at the bottom.height: the height of a complete cone.hgt_max: the fraction of the height [0, 1] at which the cone is truncated.theta_max: the max theta angle (<= 360 degrees), resulting in a partial cone.theta_segs: the number of segments in the theta direction.“botcap”: if present, draw the bottom face (with downward normal).“topcap”: if present, draw the top face on a truncated cone.2
Cylinder
cylinder id (radius height theta_max theta_segs [botcap] [topcap] ) endcylinder
cylinder id (radius height theta_max theta_segs [botcap] [topcap] ) endcylinder
Defines a (wedge of a) cylinder.
radius: the radius at the bottom.height: the height of a complete cone.theta_max: the max theta angle (<= 360 degrees), resulting in a cylinder wedge.theta_segs: the number of segments in the theta direction.“botcap”: if present, draw the bottom face (with downward normal).“topcap”: if present, draw the top face on the cylinder.Radius,height,theta_segscannot be negative.Theta_maxmust be between 0 and 360 degrees.
Disk
Disk id (radius theta_max theta_segs) enddisk
Disk id (radius theta_max theta_segs) enddisk
Defines a (partial) disk.
radius: the radius of the disk.theta_max: the max theta angle. If less than 360 degrees, a wedge will be created.theta_segs: the number of segments in the wedge perimeter.radius,theta_segscannot be negative.Theta_maxmust be between 0 and 360 degrees.
Dupin Cycle
dupin id (a b c d u v crosssec) enddupin
dupin id (a b c d u v crosssec) enddupin
Defines a Dupin with specified number of cross sections
a: Radius (x-y plane) of the donut sphere formed by the dupinb: Height (x-z plane) of the donut sphere formed by the dupinc: x to y radius of the donut sphered: x to z radius of the donut sphereu: x to y sphere anglev: x to z sphere angle
Ellipsoid
ellipsoid id ( radius[o][p]_x radius_y long_max latt_min latt_max segs_long segs_latt ) endellipsoid
ellipsoid id ( radius[o][p]_x radius_y long_max latt_min latt_max segs_long segs_latt ) endellipsoid
Defines a sphere more like a “globe” with its “rotation axis” along the z-axis.
radius[q][r]_x: the radius of the ellipsoid in the x directionradius_y: the radius of the ellipsoid in the y directionlong_max: {<= 360}: the max longitude at any latitude, resulting in a sliced “orange.”latt_min: {>= -90}: the min latitude, cutting off the South pole.latt_max: {<= 90}: the max latitude, cutting off the North pole.segs_long: {>= 3}: the number of segments in the longitudinal direction.segs_latt: {>= 2}: the number of segments in the latitudinal direction.
Face
face id (point_idlist) [surface surface_id] endface
face id (point_idlist) [surface surface_id] endface
Defines a face from a list of points. Front face uses counter-clockwise winding.
point_idlist: a list of points of the formpoint1point2...
A face cannot be included in an instance and displayed; it must be made into a mesh and the mesh displayed. Additionally, two faces cannot occupy the exact same space (i.e. same number of points with identical coordinates), but they may overlap.
Mesh
mesh id
point pointId1 id1 (x y z) endpoint
…
point pointIdN (x y z) endpoint
face faceId1 ( point_idlist1 ) [surface surface_id] endface
...
face faceIdN ( point_idlistN) [surface surface_id] endface
endmesh
mesh id
point pointId1 id1 (x y z) endpoint
…
point pointIdN (x y z) endpoint
face faceId1 ( point_idlist1 ) [surface surface_id] endface
...
face faceIdN ( point_idlistN) [surface surface_id] endface
endmesh
Creates a collection of faces, which can optionally be colored. Faces in a mesh can then be referred to in the rest of the program via a hierarchical name: id.faceId. Variable names must be unique within a mesh.
faceId: the name of the facepoint_idlist: a list of points of the formpoint1point2...pointId: the name of the point
Individual faces within a mesh cannot be rotated, translated, etc.: these commands are reserved for mesh instances.
Funnel
funnel id (radius ratio height segs) endfunnel
funnel id (radius ratio height segs) endfunnel
Defines a funnel, i.e. the mantle of a truncated cone.
radius: the radius of the “bottom” ring.ratio: the ratio of the radii of the top ring and the bottom ring.height: the height of the truncated cone.segs: the number of segments around the equator.radius,ratio,height,segscannot be negative.
Tunnel
tunnel id (radius ratio height segs) endtunnel
tunnel id (radius ratio height segs) endtunnel
Defines a tunnel made from two Funnels, glued bottom-to-bottom.
radius: the radius of the “middle” ring.ratio: the ratio of the radii of the two outer rings and the middle ring.height: the heights of each of the truncated cones.segs: the number of segments around the equator.radius,ratio,height,segscannot be negative.
General Cartesian Surface
gencartesiansurf id func func_string (x_min x_max y_min y_max x_segs y_segs) endgencartesiansurf
gencartesiansurf id func func_string (x_min x_max y_min y_max x_segs y_segs) endgencartesiansurf
Defines a general surface based on a cartesian equation z = f(x,y) evaluated over specified axis bounds and number of segments.
x_min: Lower bound of range in x-planex_max: Upper bound of range in x-planey_min: Lower bound of range in y-planey_max: Upper bound of range in y-planex_segs: Number of segments in x dimension.y_segs: Number of segments in y dimension.func: Keywordfuncis necessary to tell parser to parsefunc_string.func_string: Supplied function of form z = f(x,y). See necessary formatting below.
Passed in func_string formatting:
- Surrounded by open and close brackets and without spaces
- Many operations are included, for example:
- Basic operators are supported: +, -, *, /, %, ^
- Mathematical functions are supported: avg(), max(), abs(), exp(), log(), sin(), cosh(), etc.
- If and nested-if statements are also supported and take the form z = f(x,y) = if(condition,true_expression,false_expression)
- See https://github.com/ArashPartow/exprtk readme.txt Section 01 and Section 08 for more information on what operations/functions/etc. are supported
- See https://github.com/randyfan/NOME3/blob/master/ExampleNOMEFiles/genCartesianSurfExample.nom for example usage
General Implicit Surface
genimplicitsurf id func func_string (x_min x_max y_min y_max z_min z_max x_segs y_segs z_segs) endgenimplicitsurf
genimplicitsurf id func func_string (x_min x_max y_min y_max z_min z_max x_segs y_segs z_segs) endgenimplicitsurf
Defines a general surface based on an implicit equation f(x,y,z) = b, where b is a given isolevel. It is evaluated over the specified axis bounds and number of segments.
x_min: Lower bound of range in x-planex_max: Upper bound of range in x-planey_min: Lower bound of range in y-planey_max: Upper bound of range in y-planez_min: Lower bound of range in z-planez_max: Upper bound of range in z-planex_segs: Number of segments in x dimensiony_segs: Number of segments in y dimensionz_segs: Number of segments in z dimensionfunc: Keywordfuncis necessary to tell parser to parsefunc_string.func_string: Supplied function of form f(x,y,z) - b, where b is the isolevel (func_stringis assuming user has modified input expression so that f(x,y,z) = b is rewritten as f(x,y,z) - b = 0, with “= 0” omitted fromfunc_string). See necessary formatting below.
Passed in func_string formatting:
- Surrounded by opened and closed brackets and without spaces
- Many operations are included, for example:
- Basic operators are supported: +, -, *, /, %, ^
- Mathematical functions are supported: avg(), max(), abs(), exp(), log(), sin(), cosh(), etc.
- If and nested-if statements are also supported and take the form z = f(x,y) = if(condition,true_expression,false_expression)
- See https://github.com/ArashPartow/exprtk readme.txt Section 01 and Section 08 for more information on what operations/functions/etc. are supported
- See https://github.com/randyfan/NOME3/blob/master/ExampleNOMEFiles/genImplicitSurfExample.nom for example usage
General Parametric Surface
genparametricsurf id funcX funcX_string_x funcY funcY_string funcZ funcZ_string (u_min u_max v_min v_max u_segs v_segs) endgenparametricsurf
genparametricsurf id funcX funcX_string_x funcY funcY_string funcZ funcZ_string (u_min u_max v_min v_max u_segs v_segs) endgenparametricsurf
Defines a general surface based on parametric equations x(u,v), y(u,v), and z(u,v) evaluated over specified axis bounds and number of segments in u and v.
u_min: Lower bound of range in u-planeu_max: Upper bound of range in u-planev_min: Lower bound of range in v-planev_max: Upper bound of range in v-planeu_segs: Number of segments in u dimensionv_segs: Number of segments in v dimensionfuncX: KeywordfuncXis necessary to tell parser to parsefuncX_string.funcY: KeywordfuncYis necessary to tell parser to parsefuncY_string.funcZ: KeywordfuncZis necessary to tell parser to parsefuncZ_string.funcX_string: Function x(u,v). See necessary formatting below.funcY_string: Function y(u,v). See necessary formatting below.funcZ_string: Function z(u,v). See necessary formatting below.
Passed in funcX_string, funcY_string, and funcZ_string formatting:
- Surrounded by opened and closed brackets and without spaces
funcX_string,funcY_string, andfuncZ_stringtake the form x(u,v), y(u,v), and z(u,v) respectively, where x, y, and z are each defined by a parametric function dependant on variables u and v.- Many operations are included, for example:
- Basic operators are supported: +, -, *, /, %, ^
- Mathematical functions are supported: avg(), max(), abs(), exp(), log(), sin(), cosh(), etc.
- If and nested-if statements are also supported and take the form z = f(x,y) = if(condition,true_expression,false_expression)
- See https://github.com/ArashPartow/exprtk readme.txt Section 01 and Section 08 for more information on what operations/functions/etc. are supported
- See https://github.com/randyfan/NOME3/blob/master/ExampleNOMEFiles/genParametricSurfExample.nom for example usage
Mobius Strip (Status: current implementation does not use thickness. uses radius, twists, cuts, and segs)
mobiusstrip id (radius twists cuts segs) endmobiusstrip
mobiusstrip id (radius twists cuts segs) endmobiusstrip
Defines a mobius strip with a specified number of twists and cuts.
- radius: the width of the band. If there are multiple cuts, then radius = width of all sub-bands + width of all gaps between sub-bands.
- twists: the number of twists in the mobius strip.
- cuts: the number of cuts in the mobius strip band (cuts go parallel to the edges of the band). Gaps and sub-bands will all be of the same width. Sum of widths = radius.
- segs: the number of segments around the band.
Point
point id (x y z) endpoint
point id (x y z) endpoint
Defines a point at the specified x, y, and z coordinates.
Controlpoint
controlpoint id point p_id [scale (sx sy sz)] [rotate (rx ry rz)] [crosssection crosssection_id] [reverse] endcontrolpoint
controlpoint id point p_id [scale (sx sy sz)] [rotate (rx ry rz)] [crosssection crosssection_id] [reverse] endcontrolpoint
Enhances a point (p_id) with additional parameters controlling the non-uniform scaling (sx, sy) and rotation (rz) and tilting (rx, ry) of the cross section swept along a path. (See Sweep)
(sx sy sz): scales the cross-section located at the controlpoint by a factor ofsxandsy. (Note:szis irrelevant)(rx ry rz):rz: angle about which the cross section located at the controlpoint is rotatedrx,ry: angles about which the cross section located at the controlpoint is tilted
crosssection_id: the cross section to be defined at this controlpoint"reverse": reverses the sweep at the controlpoint
Note: Interpolation rules for scaling and rotation of cross sections are determined by the path type's interpolation rules. See Sweep warp.
Note: the crosssection parameter should be used in a path for the Sweep Morph generator.
Polyline
polyline id ( point_idlist ) [closed] [surface surface_id] endpolyline
polyline id ( point_idlist ) [closed] [surface surface_id] endpolyline
Defines a polyline, a chain of piecewise linear segments. You can optionally make it closed, i.e., the last point connects back to the first.
point_idlist: a list of points of the formpoint1point2...
Sphere
sphere id (radius theta_max phi_min phi_max theta_segs phi_segs [type]) endsphere
sphere id (radius theta_max phi_min phi_max theta_segs phi_segs [type]) endsphere
Defines a sphere.
radius: the radius of the sphere.theta_max: the max theta of any latitude, resulting in a sliced sphere.phi_min: min phi that determines cutoff at the SOUTH pole of the sphere (phi=-90)phi_max: max phi that determined cutoff at the NORTH pole of the sphere (phi=90)theta_segs: the number of segments in the longitudinal direction.phi_segs: the number of segments in the latitudinal direction.-90 <= phi_min < phi_max <= 90 (degrees).radius, theta_segs, phi_segs > 00 <= theta_max <= 360type(optional): controls which components of the sphere geometry are generated.type = 3(default): produces the full sphere, including both the outer shell and any interior completion geometry (caps/fills for truncated spheres).type = 1: generates only the outer shell, allowing incomplete spheres to be displayed as open surfaces.type = 2: generates only the interior completion geometry (cap or fill components), useful for isolating those pieces separately.
The sphere generator was revised in JIPCAD_2025 to produce consistent vertex and face connectivity, enabling sphere objects to participate correctly in merge and subdivision operations.
newSphere (this command is not implemented)
sphere
id ( radius long_max latt_min latt_max segs_long segs_latt [brep brep-type] )
endsphere
sphere
id ( radius long_max latt_min latt_max segs_long segs_latt [brep brep-type] )
endsphere
Defines a sphere more like a “globe” with its “rotation axis” along the z-axis.
radius: the radius of the sphere {put most important geometrical parameters first}.long_max[e][f]: {<= 360}: the max longitude at any latitude, resulting in a sliced “orange.”latt_min[g][h]: {>= -90}: the min latitude, cutting off the South pole.latt_max[i][j]: {<= 90}: the max latitude, cutting off theNorth pole.segs_long[k][l]: {>= 3}: the number of segments in the longitudinal direction.segs_latt[m][n]: {>= 2}: the number of segments in the latitudinal direction.[brep brep-type]: specify NOME_TRIAS or NOME_QUADS as in sweeps, etc.
Sweep
A sweep describes the result of sweeping a crosssection along a path.
sweep id
crosssection id [reverse] [begincap] [endcap] endcrosssection
path id [mintorsion] [azimuth a_angle] [twist t_angle] [cutbegin] [cutend] endpath
[brep brep-type]
endsweep
crosssection along a path. sweep id
crosssection id [reverse] [begincap] [endcap] endcrosssection
path id [mintorsion] [azimuth a_angle] [twist t_angle] [cutbegin] [cutend] endpath
[brep brep-type]
endsweep
crosssection - can be a polyline, circle, beziercurve, or bspline.
“reverse”: if present, flips the orientation of the crosssection, turning the generated brep-surface inside out.“begincap”: if present, draw the starting face (with outward normal).“endcap”: if present, draw the ending face (with outward normal) Begincap and endcap are helpful in prepare the model for 3d printing, as instead of a hollow tube the sweep is now a cylinder closed at each segment on the bspline.
path - can be a polyline, circle, beziercurve, or bspline.
- Each path has a set of Frenet frames (tangents, normals, & binormals) that are used to determine how the crosssection will twist along the path. The user can control the twist in four ways and these options are additive in the order given below:
mintorsion: minimizes the twisting of the intrinsic Frenet frame.azimuth: angle=a_angleabout the tangent that all Frenet frames will be rotated by.twist: angle=t_angleabout the tangent that specifies the overall amount of twist from the first Frenet frame to the last.warp: sets each twist angle explicitly at specified controlpoints in the path. (See Controlpoint)- These controlpoints also permit rotating and non-uniformly scaling of the crosssection at these locations. Regular points act like control points with no additional transformations. At any sample points between adjacent controlpoint, the transformation variables are interpolated in the same way that the x, y, and z-coordinates are being interpolated. (e.g. by a cubic polynomial for the cubic Bspline)
cutbegin: if present, does not draw the first segment of the sweepcutend: if present, does not draw the last segment of the sweep
brep_type: can be either TRIANGLES (=default) or QUADRILATERALS.
In order to see the sweep's color, define the sweep path counterclockwise. If the path is defined clockwise the outside color of the shape will be displayed on the its inside due to the orientation flipping.
Sweep Morph
sweepmorph id
[begincap] [endcap]
path id [mintorsion] [azimuth a_angle] [twist t_angle] [cutbegin] [cutend] endpath
endsweepmorph
sweepmorph id
[begincap] [endcap]
path id [mintorsion] [azimuth a_angle] [twist t_angle] [cutbegin] [cutend] endpath
endsweepmorph
Linearly interpolates between cross sections that are specified at control points.
- See Sweep for information on the flags.
- If a
crosssectionis defined at only one control point, the result will be a generic Sweep with thatcrosssection. - Linear interpolations of cross sections are performed between subsequent control points where cross sections are specified.
- Points without
crosssectionspecifications and are...- before the first control point with a specified
crosssectionwill adopt this firstcrosssection. - after the last control point with a specified
crosssectionwill adopt this lastcrosssection.
- before the first control point with a specified
Sweep Morph Visualizer
morphvisualizer id
sweep sweep_id
index (seg_index)
endmorphvisualizer
morphvisualizer id
sweep sweep_id
index (seg_index)
endmorphvisualizer
Displays the cross section of a Sweep at index seg_index.
sweep_id: the sweep.seg_index: the index of the cross section to display.
Note: sweep_id need not be a Sweep Morph. The visualizer works for any sweep and will display cross sections with scales and cross section morphs applied. Rotations, twists, and azimuth changes in a sweep are not reflected in the morph visualizer.
Torus
torus id (rad_maj rad_min theta_max phi_min phi_max segs_theta segs_phi) endtorus
torus id (rad_maj rad_min theta_max phi_min phi_max segs_theta segs_phi) endtorus
Defines a torus.
rad_maj: the major radiusrad_min: the minor radius of the outer ring.theta_max: specified in degrees. The minor cross-section circle is swept starting at the x-axis and circles the z-axis by the angle theta until thetamax is reached (=< 360).phi_min: starting angle in degrees around the minor circle.phi_max: terminating angle in degrees around the minor circle.0 <= phi_min < phi_max <= 360(degrees).segs_theta: the number of segments along the major radius.segs_phi: the number of segments around the minor radius.
should we also allow:
[brep brep-type]-- as in sweeps, etc
Torus Knot
torusknot id (symm turns rad_maj rad_min rad_tube segs_circ segs_sweep) endtorusknot
torusknot id (symm turns rad_maj rad_min rad_tube segs_circ segs_sweep) endtorusknot
Defines a torus knot.
symm: sweeps through the donut hole = rotational symmetry of knot (+/- OK)turns: turns around the donut hole (+/- to reverse chirality.rad_maj: the major radius of the donut.rad_min: the minor donut radius (tube radius).rad_tube: radius of swept circle. For rad_tube := 0, only the sweep path is output.segs_circ: the number of segments on the circular cross section.segs_sweep: the number of segments along the sweep path.
It can be helpful to use the wireframe viewing option when attempting to visualize torus knots: this is found under Render Config in the UI (more info on the UI in UI Controls page).
JIPCAD_2025 Generators
The following generators were introduced or significantly improved in JIPCAD_2025. They enable in-code merging, subdivision, offsetting, and normal-vector visualization, and can be chained together to build complex workflows.
Merge
merge id
instance iGeom1 Geom1 endinstance
...
instance iGeomN GeomN endinstance
endmerge
merge id
instance iGeom1 Geom1 endinstance
...
instance iGeomN GeomN endinstance
endmerge
Merges one or more geometry instances into a single clean boundary-representation mesh, combining coincident vertices within a small epsilon distance. The result is a valid 2-manifold suitable for subsequent subdivision and offset operations.
- All face colors from input geometry are preserved in the output. Faces with no color assigned (internally flagged as
surface nd) remain uncolored so they can be colored later via an instancing command. - Merging is performed hierarchically: coincident vertices are first resolved within each small group or mesh, then at successively higher levels of the hierarchy up to the top.
- The output mesh is named
idand can be instanced like any other geometry.
Example:
merge merge_pyramid
instance ipyramid pyramid endinstance
endmerge
instance imerge_pyramid merge_pyramid endinstance
Subdivision
subdivision id ( level {integer ≤ 6} )
instance iGeom Geom endinstance
endsubdivision
subdivision id ( level {integer ≤ 6} )
instance iGeom Geom endinstance
endsubdivision
Subdivides the input geometry using the Catmull-Clark algorithm, producing smoother shapes. Each subdivision step splits polyhedral faces into quadrilateral facets and repositions vertices toward averaged positions.
level: the number of subdivision steps (integer, maximum 6). Three levels typically produce well-rounded shapes.- The input geometry should be a properly merged mesh (no coincident vertices) to avoid gaps and non-water-tight surfaces.
- Face colors from the input mesh are preserved through subdivision. Uncolored faces (
surface nd) remain available for later color assignment. - The output of subdivision is in a clean format and can be used directly in further
subdivisionoroffsetoperations.
Example:
subdivision subdiv_pyramid ( level 3 )
instance imerge_pyramid merge_pyramid endinstance
endsubdivision
instance isubdiv_pyramid subdiv_pyramid endinstance
Generator chaining: Subdivision results can be chained into further subdivision (subdivision → subdivision) or passed into offset. Likewise, the output of offset can be fed into subdivision for smoother tubular beams.
Offset
offset id ( thick T-size [ hole H-size ] [ rimcolor surfaceID ] )
instance iGeom Geom endinstance
endoffset
offset id ( thick T-size [ hole H-size ] [ rimcolor surfaceID ] )
instance iGeom Geom endinstance
endoffset
Turns a thin mathematical surface into a thickened membrane of physical thickness T, suitable for 3D printing. Each vertex is split into two: one moved outward and one inward along the averaged vertex normal. The required move distance accounts for the dihedral angles along adjacent edges.
thick T-size: the target membrane thickness.hole H-size(optional): a value between 0.1 and 0.9 that turns each face into a frame with a hole of that fractional size at its center. Values below 0.1 produce no hole; values above 0.9 are clipped to 0.9 (a narrow ~10% frame). This creates a transparent "grid" appearance.rimcolor surfaceID(optional): assigns a color to the narrow ribbon of quadrilateral faces that connect the inner and outer shells along open contour edges. If omitted, rim faces inherit the instancing color or remainsurface nd.- Face colors from the input geometry are preserved in both the outer and inner shells.
- The output geometry is in a clean format compatible with further
subdivisionoroffsetoperations.
Example:
offset offset_pyramid ( thick 0.2 hole 0.3 )
instance imerge_pyramid merge_pyramid endinstance
endoffset
instance ioffset_pyramid offset_pyramid endinstance
Generator chaining examples:
subdivision → offset: apply gridded offsetting to a coarsely subdivided mesh for transparency.offset → offset: first offset creates prismatic frames; second offset thickens the frame walls.offset → subdivision: gridded offset followed by subdivision produces smooth tubular beams.
Face Normal (facenormal)
facenormal id ( size [ surface surfaceID ] )
instance iGeom Geom endinstance
endfacenormal
facenormal id ( size [ surface surfaceID ] )
instance iGeom Geom endinstance
endfacenormal
Generates a set of line segments visualizing the face normals of the included geometry. Each normal originates from the centroid of its face.
size: the display length of each normal vector.surface surfaceID(optional): the color to use when rendering the normal vectors.- For non-planar faces, the face normal is computed as a weighted average of the normals of the triangles formed by splitting the face at its centroid (weights proportional to triangle area).
- The output geometry (named
id) can be instanced like any other object to display the normals in the scene.
This generator was introduced in JIPCAD_2025 primarily to aid in debugging the offset operation, where correct normal directions are critical for producing valid thickened geometry.
Vertex Normal (vertexnormal)
vertexnormal id ( size [ surface surfaceID ] )
instance iGeom Geom endinstance
endvertexnormal
vertexnormal id ( size [ surface surfaceID ] )
instance iGeom Geom endinstance
endvertexnormal
Generates a set of line segments visualizing the vertex normals of the included geometry. Each normal originates from its shared vertex.
size: the display length of each normal vector.surface surfaceID(optional): the color to use when rendering the normal vectors.- Each vertex normal is computed as a weighted average of the normals of all adjacent face components, with weights proportional to the angles each component exhibits at the shared vertex.
- The output geometry (named
id) can be instanced like any other object.
Vertex normals also influence the offset generator: the direction of the averaged vertex normal determines how vertex pairs are split to form the inner and outer shells.
Include (File Import)
include :path\filename.jip
endinclude
include :path\filename.jip
endinclude
Imports code from another .jip or .nom file into the current JIPCAD program. This is useful for reusing common declarations such as surface color definitions and coordinate axes.
- Local files: provide a relative or absolute path to a file in the same directory as (or accessible from) the active JIPCAD file.
- GitHub repository files: files stored in the JIPCAD GitHub repository can be included directly by their repository-relative path.
Examples:
include : intro_imports\colors.nom endinclude
include : subdivision\Tord_SD.nom endinclude
Common shared files (color declarations, coordinate axes) are available at ExampleFiles\intro_imports in the repository. Example files for the 2025 generators are at ExampleFiles\offset and ExampleFiles\tr_2025.