typedef void (*PK_GOSGMT_f_t)(const int *segtyp, const int *ntags, const int *tags, const int *ngeom, const double *geom, const int *nlntp, const int *lntp, int *ifail); Output non hierarchical segment The arguments have the following significance :- segtyp: type of segment segtyp - the type of the segment; one of the following values SGTPED = 2006; --- Edge SGTPSI = 2007; --- Silhouette line SGTPPH = 2008; --- Planar hatch-line SGTPRH = 2009; --- Radial hatch-line SGTPRU = 2010; --- Rib line (unfixed blend) SGTPBB = 2011; --- Blend-boundary line SGTPPL = 2012; --- Parametric hatch line debugging segment types SGTPCU = 2014; --- Curve line *** Used only for debugging *** SGTPBX = 2015; --- Box *** Used only for debugging *** SGTPFT = 2016; --- Facet SGTPER = 2018; --- Error segment SGTPGC = 2019; --- Geometry ... curve. SGTPGS = 2020; --- Geometry ... surface. SGTPGB = 2021; --- Geometry ... surface boundary. SGTPMF = 2022; --- Mangled facet SGTPVT = 2023; --- Visibility segment (used for hierarchical output) SGTPTS = 2024; --- Facet strip SGTPVP = 2025; --- Parametrised Visibility segment When rendering a list of entities Parasolid may encounter a body, face or edge that it is unable to render (e.g. a rubber face). In such cases, Parasolid outputs an error segment (SGTPER), giving the tag of the bad entity and a code indicating why it was unable to render it. Parasolid then continues to render the remaining entities. If, during a call to PK_TOPOL_render_facet, either * user tolerances can't be matched, or * facets are created which self intersect or are severely creased, then geometric data is output as a segment type SGTPMF. In this case, the facets are always triangular. This does not apply to geometry (i.e. SGTPGC, SGTPGS and SGTPGB). These are never replaced by error segments, unrenderable geometry segments are not output at all. If edges/silhouettes/hatchlines are being output hierarchically then GOSGMT is called to output the whole geometry of the item (optional) and again to output the positions at which the visibility changes on the item (a visibility segment). ntags, tags: tags associated with segment ntags, tags - an array of tags associated with the segment. The tags given depend upon the segment type as follows: SGTPED - tag of edge (or none if edge output hierarchically) SGTPSI, SGTPPH, SGTPRH - tag of face on which silhouette or hatch line lies (or none if silhouette or hatchline output hierarchically) SGTPPL - tag of face or surface on which the parametric hatch line lies (or none if hatchline output hierarchically) SGTPRU, SGTPBB - tag of edge blended SGTPFT - tag of face on which facet lies SGTPMF - tag of face on which mangled facet lies SGTPTS - tag of face on which facet strip lies SGTPGC - tag of the curve SGTPGS - tag of the surface SGTPGB - tag of the surface for which this is a boundary curve SGTPVT - none SGTPER - tag of entity which could not be rendered SGTPVP - none If edges, silhouettes or hatchlines are output hierarchically then the tag information is given by GOOPSG and GOCLSG. If regional data was requested in a call to PK_TOPOL_render_line two further tags are given for SGTPED and SGTPSI segments, identifying the faces either side of the line in the image. Either or both face tags may be null. If edge tags were requested in a call to PK_TOPOL_render_facet, for each edge of the facet the tag of the model edge from which it was derived is given; or a null tag if it is not derived from a model edge. The number of edge tags given equals the number of vertices given in geom. The first edge tag ( tags[1] ) is the tag of the edge from which is derived the first facet edge (which ends at the first vertex given in geom). The second edge tag is for the facet edge which ends at the second vertex, and so on. If facet strips have been requested in a call to PK_TOPOL_render_facet the format for the edges tags is as follows:- If the strip has n vertices, then there are 2 * (n - 2) + 1 edge tags The i-th element of the tags array (starting at i = 1) is the tag of the edge between vertex, floor ( (i - 1) / 2 ) + 1 and vertex, floor (i / 2) + 2 where, floor (x) is the integer portion of x. ngeom, geom: geometry of segment ngeom, geom - an array of reals giving the geometry of the segment. The values given depend upon the type of the geometry, as specified in the second element of lntp. L3TPSL - straight line: ngeom = 9 start point, end point, line direction. L3TPCC - complete circle: ngeom = 7 centre point, axis direction, radius. The forward direction of the circle is clockwise when viewing the circle along the axis direction. L3TPCI - circular arc: ngeom = 13 centre point, axis direction, radius, start point, end point. The forward direction of the circle is given above. L3TPCE - complete ellipse: ngeom = 11 centre point, major axis direction, minor axis direction, major radius, minor radius The forward direction of the ellipse is clockwise when viewing the ellipse along the axis direction. The axis direction is the vector cross product of the major axis with the minor axis in that order. L3TPEL - elliptical arc: ngeom = 17 centre point, major axis direction, minor axis direction, major radius, minor radius, start point, end point The forward direction of the ellipse is given above. L3TPPY - poly line: geom holds ngeom vectors. L3TPPC - non-rational B-curve in Bezier form: geom holds ngeom vectors of dimension 3. These are the Bezier vertices of the curve. L3TPRC - rational B-curve in Bezier form: geom holds ngeom vectors of dimension 4. These are the Bezier vertices of the curve, where each Bezier vertex consists of a 3-space point and a weight. L3TPNC - non-rational B-curve in NURBs form: geom holds ngeom reals. These consist of lntp[9] vectors of dimension 3, which are the bspline vertices followed by lntp[10] reals which are the knots. So ngeom is equal to 3 times lntp[9] plus lntp[10]. L3TPRN - rational B-curve in NURBs form: geom holds ngeom reals. These consist of lntp[9] vectors of dimension 4, which are the bspline vertices where each vertex consists of a 3-space point followed by a weight. These are followed by lntp[10] reals which are the knots. So ngeom is equal to 4 times lntp[9] plus lntp[10]. L3TPFV - facet vertices: geom holds ngeom vectors defining the vertices of a facet. L3TPFN - facet vertices plus surface normals: geom holds * ngeom/2 vectors defining the vertices of a facet followed by * ngeom/2 vectors defining the surface normals at the vertices. L3TPFP - facet vertices plus parameters geom holds * ngeom/2 vectors defining the vertices of a facet followed by * ngeom/2 vectors defining the surface and curve parameters (u,v,t) of the vertex L3TPFI - facet vertices plus normals plus parameters geom holds * ngeom/3 vectors defining the vertices of a facet followed by * ngeom/3 vectors defining the surface normals at the vertices followed by * ngeom/3 vectors defining the surface and curve parameters (u,v,t) of the vertex L3TPF1 - facet vertices + normals + parameters + 1st derivs geom holds * ngeom/5 vectors defining the vertices of a facet followed by * ngeom/5 vectors defining the surface normals at the vertices followed by * ngeom/5 vectors defining the surface and curve parameters (u,v,t) of the vertex followed by * ngeom/5 vectors defining the dP/du surface derivatives at the vertices followed by * ngeom/5 vectors defining the dP/dv surface derivatives at the vertices L3TPF2 - facet vertices + normals + parameters + all derivs geom holds * ngeom/8 vectors defining the vertices of a facet followed by * ngeom/8 vectors defining the surface normals at the vertices followed by * ngeom/8 vectors defining the surface and curve parameters (u,v,t) of the vertex followed by * ngeom/8 vectors defining the dP/du surface derivatives at the vertices followed by * ngeom/8 vectors defining the dP/dv surface derivatives at the vertices followed by * ngeom/8 vectors defining the d2P/du2 surface derivatives at the vertices followed by * ngeom/8 vectors defining the d2P/dudv surface derivatives at the vertices followed by * ngeom/8 vectors defining the d2P/dv2 surface derivatives at the vertices L3TPTS - facet strip vertices: geom holds ngeom vectors defining the vertices of a facet strip. L3TPTN - facet strip vertices plus surface normals: geom holds * ngeom/2 vectors defining the vertices of a facet strip followed by * ngeom/2 vectors defining the surface normals at the vertices. L3TPTN - facet strip vertices plus parameters: geom holds * ngeom/2 vectors defining the vertices of a facet strip followed by * ngeom/2 vectors defining the surface and curve parameters (u,v,t) of the vertex L3TPTI - facet strip vertices plus normals plus parameters: geom holds * ngeom/3 vectors defining the vertices of a facet strip followed by * ngeom/3 vectors defining the surface normals followed by * ngeom/3 vectors defining the parameters of the vertex L3TPT1 - facet strip vertices + normals + parameters + 1st derivs geom holds * ngeom/5 vectors defining the vertices of a facet strip followed by * ngeom/5 vectors defining the surface normals at the vertices followed by * ngeom/5 vectors defining the surface and curve parameters (u,v,t) of the vertex followed by * ngeom/5 vectors defining the dP/du surface derivatives at the vertices followed by * ngeom/5 vectors defining the dP/dv surface derivatives at the vertices L3TPT2 - facet strip vertices + normals + parameters + all derivs geom holds * ngeom/8 vectors defining the vertices of a facet strip followed by * ngeom/8 vectors defining the surface normals at the vertices followed by * ngeom/8 vectors defining the surface and curve parameters (u,v,t) of the vertex followed by * ngeom/8 vectors defining the dP/du surface derivatives at the vertices followed by * ngeom/8 vectors defining the dP/dv surface derivatives at the vertices followed by * ngeom/8 vectors defining the d2P/du2 surface derivatives at the vertices followed by * ngeom/8 vectors defining the d2P/dudv surface derivatives at the vertices followed by * ngeom/8 vectors defining the d2P/dv2 surface derivatives at the vertices If a facet has multiple loops the outer loop is output first and the inner loops follow. The vertices of the outer loop are ordered anticlockwise when viewed down the surface normal. The vertices of inner loops are ordered clockwise. Facets are manifold; i.e. no vertex coincides with any other in the same facet, nor does it lie in any edge in the same facet. For facet strips the vertices of the first facet in the strip are held in elements 0,1 and 2 of geom and are ordered anticlockwise when viewed down the surface normal. The vertices of the second facet are held in elements 1,2 and 3 and are ordered clockwise. The vertices of the n-th facet are held in elements n-1, n and n+1 and are ordered anticlockwise if n is odd and clockwise if n is even. If lntp[1] is L3TPTS then the number of facets in a strip is given by ngeom - 2. If lntp[1] is L3TPTN then the number of facet is given by ngeom/2 - 2. For visibility segments (SGTPVT/SGTPVP) geom contains the visibility transition points (i.e. vectors in model space at which the edge changes visibility). Segments of type SGTPVP contain parameters as well. If the edge has only one visibility then no geometry is output. The geometry array in an unparametrised (SGTPVT) visibility segment holds a sequence of sets of three doubles {x,y,z} corresponding to the vector position of the transition points in model space. The geometry array in a parametrised (SGTPVP) visibility segment holds a sequence of sets of four doubles {x,y,z,t} corresponding to the vector position of the transition points and their parameter on the geometry segment. For error segments (SGTPER) ngeom is zero. nlntp, lntp: type of geometry and other codes nlntp, lntp - an array of integers specifying the type of geometry of the segment and other codes as follows: lntp[0] - Occurrence number of the entity from which the segment was derived. If the segment type is SGTPER lntp[1] - Reason why Parasolid is unable to render the entity: ERNOGO = 4001; --- Unspecified error ERRUBB = 4002; --- Rubber entity (no geometry attached) ERSANG = 4003; --- Surface angular tolerance too small ERSDIS = 4004; --- Surface distance tolerance too small ERCANG = 4005; --- Curve angular tolerance too small ERCDIS = 4006; --- Curve distance tolerance too small ERCLEN = 4007; --- Chord chord length tolerance too small ERFWID = 4008; --- Facet width tolerance too small If the segment type is SGTPVT or SGTPVP * lntp contains an array of visibility codes for the edge/silhouette/hatchline. * lntp+nlntp holds the smoothness codes for the edge See the Parasolid Downward Interfaces manual for more information. Otherwise lntp[1] - Geometry type; one of the values: L3TPSL = 3001; --- Straight line L3TPCI = 3002; --- Partial circle L3TPCC = 3003; --- Complete circle L3TPEL = 3004; --- Partial ellipse L3TPCE = 3005; --- Complete ellipse L3TPPY = 3006; --- Poly-line L3TPFV = 3007; --- Facet vertices L3TPFN = 3008; --- Facet vertices plus surface normals L3TPPC = 3009; --- Non-rational B-curve (Bezier) L3TPRC = 3010; --- Rational B-curve (Bezier) L3TPTS = 3011; --- Facet strip vertices L3TPTN = 3012; --- Facet strip vertices plus surface normals L3TPNC = 3013; --- Non-rational B-curve (NURBs form) L3TPRN = 3014; --- Rational B-curve (NURBs form) L3TPFP = 3015; --- Facet vertices plus parameters L3TPFI = 3016; --- Facet vertices plus norms plus parameters L3TPTP = 3017; --- Facet strip vertices plus parameters L3TPTI = 3018; --- Facet strip verts plus norms plus params L3TPF1 = 3019; --- Facet verts + norms + params + 1st derivs L3TPF2 = 3020; --- Facet verts + norms + params + all derivs L3TPT1 = 3021; --- Facet strip verts+norms+params+1st derivs L3TPT2 = 3022; --- Facet strip verts+norms+params+all derivs If the geometry type is anything except L3TPF* or L3TPT*: lntp[2] - Completeness; one of the values CODCOM = 1001; --- Segment complete CODINC = 1002; --- Segment incomplete CODUNC = 1003; --- Segment may or may not be complete lntp[3] - Visibility; one of the values CODVIS = 1006; --- Line segment is visible CODINV = 1007; --- Line segment is invisible CODUNV = 1008; --- Visibility of line segment is unknown CODDRV = 1009; --- Line segment drafted visible CODISH = 1022; --- Line segment is invisible (hidden by own body occ) lntp[4] - Smoothness; one of the values CODSMO = 1014; --- Edge is "smooth" CODNSM = 1015; --- Edge is not "smooth" CODUNS = 1016; --- Edge "smoothness" is unknown CODSMS = 1017; --- Edge "smooth" but coincident with silhouette lntp[5] - Internal edge; one of the values CODINE = 1018; --- Edge is internal CODNIN = 1019; --- Edge is not internal CODINU = 1020; --- Not known whether edge is internal CODINS = 1021; --- Edge is internal, coincides with silhouette CODIGN = 1023; --- Edge lies on boundary of ignorable feature If segtyp is SGTPGC, SGTPGS or SGTPGB the lntp[2..5] are always lntp[2] = CODUNC = 1003; --- Segment may or may not be complete lntp[3] = CODUNV = 1008; --- Visibility of segment is unknown lntp[4] = CODUNS = 1016; --- "smoothness" is unknown lntp[5] = CODINU = 1020; --- Not known whether internal If regional data was requested in a call to PK_TOPOL_render_line lntp[6] and lntp[7] contain start and end point indices for SGTPED and SGTPSI segments. The indices uniquely identify the image points at each end of the segment. If the geometry type is L3TPF* : lntp[2] - Number of loops in facet. lntp[3], lntp[4], ... - The number of vertices in each loop. If the geometry type is L3TPT* : lntp[2] - Number of vertices in the facet strip. If the geometry type is L3TPPC or L3TPRC: lntp[8] is the degree of the parametric curve If the geometry type is L3TPNC or L3TPRN: lntp[8] is the degree of the NURBs curve lntp[9] is the number of b-spline vertices lntp[10] is the number of knots If segtyp type is SGTPMF there is one loop consisting of three vertices. If segtyp type is SGTPSI then the last element in the ltp array is the silhouette label. ifail: ifail - a code indicating whether the Frustrum wants to abort graphic output. One of the values: CONTIN = 0; --- Continue: no errors ABORT = -1011; --- Abort: return control to caller