1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
-- File: Poly.cdl
-- Created: Mon Mar 6 09:38:50 1995
-- Author: Laurent PAINNOT
-- <lpa@metrox>
---Copyright: Matra Datavision 1995
package Poly
---Purpose: This package provides classes and services to
-- handle :
--
-- * 3D triangular polyhedrons.
--
-- * 3D polygons.
--
-- * 2D polygon.
--
-- * Tools to dump, save and restore those objects.
uses
MMgt,
TCollection,
TColStd,
gp,
TColgp,
TShort
is
class Triangle;
---Purpose: A triangle is a triplet of integers (indices of
-- the nodes).
class Array1OfTriangle
instantiates Array1 from TCollection(Triangle from Poly);
class HArray1OfTriangle
instantiates HArray1 from TCollection(Triangle from Poly,
Array1OfTriangle from Poly);
class Triangulation;
---Purpose: A Triangulation is a 3D polyhedron made of
-- triangles. It is made of a nodes which are
-- indexed. Nodes have a 3d value and a 2d value.
-- Triangles are triplet of node indices.
--
-- This is a Transient class.
class Polygon3D;
---Purpose: A Polygon3D is made of indexed nodes.
-- Nodes have a 3d value.
class Polygon2D;
---Purpose: A Polygon2D is made of indexed nodes.
-- Nodes have a 2d value.
class PolygonOnTriangulation;
---Purpose: A polygonOnTriangulation is made of node indices
-- referencing a triangulation.
--
-- Tools to use triangulations
--
class Connect;
---Purpose: Computes and stores the link from nodes to
-- triangles and from triangles to neighbouring
-- triangles.
-- This tool is obsolete, replaced by Poly_CoherentTriangulation
--
-- Data types for the Coherent Triangulation data model
--
imported CogerentTriangulation;
imported CoherentTriangle;
imported CoherentNode;
imported CoherentLink;
imported CoherentTriPtr;
imported ListOfTriangulation;
imported MakeLoops;
---Purpose: Algorithm to make minimal loops in a graph
--
-- Package methods
--
Catenate (lstTri: ListOfTriangulation from Poly)
returns Triangulation from Poly;
---Purpose: Join several triangulations to one new triangulation object.
-- The new triangulation is just a mechanical sum of input
-- triangulations, without node sharing. UV coordinates are
-- dropped in the result.
Write(T : Triangulation from Poly;
OS : in out OStream;
Compact : Boolean = Standard_True);
---Purpose: Writes the content of the triangulation <T> on the
-- stream <OS>. If <Compact> is true this is a "save"
-- format intended to be read back with the Read
-- method. If compact is False it is a "Dump" format
-- intended to be informative.
Write(P : Polygon3D from Poly;
OS : in out OStream;
Compact : Boolean = Standard_True);
---Purpose: Writes the content of the 3D polygon <P> on the
-- stream <OS>. If <Compact> is true this is a "save"
-- format intended to be read back with the Read
-- method. If compact is False it is a "Dump" format
-- intended to be informative.
Write(P : Polygon2D from Poly;
OS : in out OStream;
Compact : Boolean = Standard_True);
---Purpose: Writes the content of the 2D polygon <P> on the
-- stream <OS>. If <Compact> is true this is a "save"
-- format intended to be read back with the Read
-- method. If compact is False it is a "Dump" format
-- intended to be informative.
Dump(T : Triangulation from Poly;
OS : in out OStream);
---Purpose: Dumps the triangulation. This is a call to the
-- previous method with Comapct set to False.
Dump(P : Polygon3D from Poly;
OS : in out OStream);
---Purpose: Dumps the 3D polygon. This is a call to the
-- previous method with Comapct set to False.
Dump(P : Polygon2D from Poly;
OS : in out OStream);
---Purpose: Dumps the 2D polygon. This is a call to the
-- previous method with Comapct set to False.
ReadTriangulation(IS : in out IStream)
returns Triangulation from Poly;
---Purpose: Reads a triangulation from the stream <IS>.
ReadPolygon3D(IS : in out IStream)
returns Polygon3D from Poly;
---Purpose: Reads a 3d polygon from the stream <IS>.
ReadPolygon2D(IS : in out IStream)
returns Polygon2D from Poly;
---Purpose: Reads a 2D polygon from the stream <IS>.
ComputeNormals(Tri : Triangulation from Poly);
---Purpose: Compute node normals for face triangulation
-- as mean normal of surrounding triangles
PointOnTriangle(P1, P2, P3, P: XY from gp; UV: out XY from gp)
returns Real;
---Purpose: Computes parameters of the point P on triangle
-- defined by points P1, P2, and P3, in 2d.
-- The parameters U and V are defined so that
-- P = P1 + U * (P2 - P1) + V * (P3 - P1),
-- with U >= 0, V >= 0, U + V <= 1.
-- If P is located outside of triangle, or triangle
-- is degenerated, the returned parameters correspond
-- to closest point, and returned value is square of
-- the distance from original point to triangle (0 if
-- point is inside).
end Poly;
|