<<>> <> <> <> DIRECTORY G3dBasic, G3dMatrix, G3dPatch, G3dPlane, G3dSpline, IO, Rope; G3dTriangle: CEDAR DEFINITIONS ~ BEGIN <> Triple: TYPE ~ G3dBasic.Triple; Patch: TYPE ~ G3dPatch.Patch; MajorPlane: TYPE ~ G3dPlane.MajorPlane; Plane: TYPE ~ G3dPlane.Plane; Segment: TYPE ~ RECORD [p1, p2: Triple, length: REAL, info: ATOM]; Segments: TYPE ~ RECORD [length: INT ¬ 0, s: SEQUENCE maxLength: INT OF Segment]; IntTriple: TYPE ~ RECORD [i, j, k: INT ¬ 0]; IntTriples: TYPE ~ RECORD [length: INT ¬ 0, s: SEQUENCE maxLength: INT OF IntTriple]; Triangle: TYPE ~ RECORD [ p1, p2, p3: Triple ¬ [], l1, l2, l3: Triple ¬ [], -- connect pts 1-2, 2-3, 3-1 in majorPlane plane: Plane ¬ [], -- plane of triangle majorPlane: MajorPlane ¬ xy -- major plane of triangle ]; Triangles: TYPE ~ RECORD [length: INT¬0, s: SEQUENCE maxLength: INT OF REF Triangle]; TriangleProc: TYPE ~ PROC [p1, p2: Triple, t: REF Triangle] RETURNS [continue: BOOL¬TRUE]; TriIntersection: TYPE ~ RECORD [intersect: BOOL, point: Triple]; <> DistanceToTriangles: PROC [triangles: REF Triangles, p: Triple] RETURNS [REAL]; <> <<>> TriangleCenter: PROC [t: REF Triangle] RETURNS [c: Triple]; <> <<>> AverageTriangleNormals: PROC [triangles: REF Triangles] RETURNS [Triple]; <> <<>> MaxDeviationFromNormal: PROC [normal: Triple, triangles: REF Triangles] RETURNS [REAL]; <> <> <<>> ApplyToTrianglesSides: PROC [triangles: REF Triangles, action: TriangleProc]; <> <<>> MakeTriangle: PROC [p1, p2, p3: Triple, scratch: REF Triangle ¬ NIL] RETURNS [REF Triangle]; <> <<>> SetTriangle: PROC [t: REF Triangle]; <> SetTriangles: PROC [triangles: REF Triangles]; <> InsideTriangle: PROC [p: Triple, t: REF Triangle] RETURNS [BOOL]; <> <<>> IntersectTriangle: PROC [p1, p2: Triple, t: REF Triangle] RETURNS [TriIntersection]; <> <<>> TrianglesFromPatch: PROC [patch: Patch, sRes, tRes: INT] RETURNS [REF Triangles]; <> <<>> BoundaryFromPatch: PROC [patch: Patch, sRes, tRes: INT, cullColinearPoints: BOOL ¬ FALSE] RETURNS [REF Segments]; <> <<>> Normal: PROC [p1, p2, p3: Triple] RETURNS [Triple]; <> <<>> ObtainTriangles: PROC RETURNS [REF Triangles]; <> <<>> ReleaseTriangles: PROC [scratch: REF Triangles]; <> <<>> AddTriangle: PROC [t: REF Triangle, triangles: REF Triangles] RETURNS [REF Triangles]; <> <<>> CopyTriangles: PROC [triangles: REF Triangles] RETURNS [REF Triangles]; <> <<>> AddIntTriple: PROC [i: IntTriple, intTriples: REF IntTriples] RETURNS [REF IntTriples]; <> <<>> END.