0031424: Visualization - stop using Prs3d_Drawer::HLRAngle() parameter
[occt.git] / src / HLRBRep / HLRBRep_PolyAlgo.hxx
1 // Created on: 1992-02-18
2 // Created by: Christophe MARION
3 // Copyright (c) 1992-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _HLRBRep_PolyAlgo_HeaderFile
18 #define _HLRBRep_PolyAlgo_HeaderFile
19
20 #include <BRepAdaptor_Surface.hxx>
21 #include <BRepAdaptor_Curve.hxx>
22 #include <BRepAdaptor_Curve2d.hxx>
23 #include <GeomAbs_Shape.hxx>
24 #include <HLRAlgo_Array1OfTData.hxx>
25 #include <HLRAlgo_Array1OfPISeg.hxx>
26 #include <HLRAlgo_Array1OfPINod.hxx>
27 #include <HLRAlgo_ListOfBPoint.hxx>
28 #include <HLRAlgo_PolyAlgo.hxx>
29 #include <HLRAlgo_PolyInternalNode.hxx>
30 #include <HLRAlgo_Projector.hxx>
31 #include <TColStd_Array1OfInteger.hxx>
32 #include <TColStd_Array1OfTransient.hxx>
33 #include <TopTools_IndexedMapOfShape.hxx>
34 #include <TopTools_ListOfShape.hxx>
35 #include <TopTools_MapOfShape.hxx>
36 #include <TopTools_SequenceOfShape.hxx>
37
38 class Geom_Surface;
39 class HLRAlgo_Projector;
40 class TopoDS_Edge;
41 class HLRAlgo_PolyInternalData;
42 class HLRAlgo_EdgeStatus;
43 struct HLRAlgo_TriangleData;
44
45 class HLRBRep_PolyAlgo;
46 DEFINE_STANDARD_HANDLE(HLRBRep_PolyAlgo, Standard_Transient)
47
48 //! to remove Hidden lines on Shapes with Triangulations.
49 //! A framework to compute the shape as seen in
50 //! a projection plane. This is done by calculating
51 //! the visible and the hidden parts of the shape.
52 //! HLRBRep_PolyAlgo works with three types of entity:
53 //! -   shapes to be visualized (these shapes must
54 //! have already been triangulated.)
55 //! -   edges in these shapes (these edges are
56 //! defined as polygonal lines on the
57 //! triangulation of the shape, and are the basic
58 //! entities which will be visualized or hidden), and
59 //! -   triangles in these shapes which hide the edges.
60 //! HLRBRep_PolyAlgo is based on the principle
61 //! of comparing each edge of the shape to be
62 //! visualized with each of the triangles produced
63 //! by the triangulation of the shape, and
64 //! calculating the visible and the hidden parts of each edge.
65 //! For a given projection, HLRBRep_PolyAlgo
66 //! calculates a set of lines characteristic of the
67 //! object being represented. It is also used in
68 //! conjunction with the HLRBRep_PolyHLRToShape extraction
69 //! utilities, which reconstruct a new, simplified
70 //! shape from a selection of calculation results.
71 //! This new shape is made up of edges, which
72 //! represent the shape visualized in the projection.
73 //! HLRBRep_PolyAlgo works with a polyhedral
74 //! simplification of the shape whereas
75 //! HLRBRep_Algo takes the shape itself into
76 //! account. When you use HLRBRep_Algo, you
77 //! obtain an exact result, whereas, when you use
78 //! HLRBRep_PolyAlgo, you reduce computation
79 //! time but obtain polygonal segments.
80 //! An HLRBRep_PolyAlgo object provides a framework for:
81 //! -   defining the point of view
82 //! -   identifying the shape or shapes to be visualized
83 //! -   calculating the outlines
84 //! -   calculating the visible and hidden lines of the shape.
85 //! Warning
86 //! -   Superimposed lines are not eliminated by this algorithm.
87 //! -   There must be no unfinished objects inside the shape you wish to visualize.
88 //! -   Points are not treated.
89 //! -   Note that this is not the sort of algorithm
90 //! used in generating shading, which calculates
91 //! the visible and hidden parts of each face in a
92 //! shape to be visualized by comparing each
93 //! face in the shape with every other face in the same shape.
94 class HLRBRep_PolyAlgo : public Standard_Transient
95 {
96
97 public:
98
99   
100   //! Constructs an empty framework for the
101   //! calculation of the visible and hidden lines of a shape in a projection.
102   //! Use the functions:
103   //! -   Projector to define the point of view
104   //! -   Load to select the shape or shapes to be  visualized
105   //! -   Update to compute the visible and hidden lines of the shape.
106   //! Warning
107   //! The shape or shapes to be visualized must have already been triangulated.
108   Standard_EXPORT HLRBRep_PolyAlgo();
109   
110   Standard_EXPORT HLRBRep_PolyAlgo(const Handle(HLRBRep_PolyAlgo)& A);
111   
112   Standard_EXPORT HLRBRep_PolyAlgo(const TopoDS_Shape& S);
113   
114   Standard_Integer NbShapes() const { return myShapes.Length(); }
115
116   Standard_EXPORT TopoDS_Shape& Shape (const Standard_Integer I);
117   
118   //! remove the Shape of Index <I>.
119   Standard_EXPORT void Remove (const Standard_Integer I);
120   
121   //! return the index of the Shape <S> and  return 0 if
122   //! the Shape <S> is not found.
123   Standard_EXPORT Standard_Integer Index (const TopoDS_Shape& S) const;
124   
125   //! Loads the shape S into this framework.
126   //! Warning S must have already been triangulated.
127   void Load (const TopoDS_Shape& theShape) { myShapes.Append (theShape); }
128
129   Standard_EXPORT Handle(HLRAlgo_PolyAlgo) Algo() const;
130   
131   //! Sets the parameters of the view for this framework.
132   //! These parameters are defined by an HLRAlgo_Projector object,
133   //! which is returned by the Projector function on a Prs3d_Projector object.
134   const HLRAlgo_Projector& Projector() const { return myProj; }
135
136   void Projector (const HLRAlgo_Projector& theProj) { myProj = theProj; }
137   
138   Standard_Real TolAngular() const { return myTolAngular; }
139
140   void TolAngular (const Standard_Real theTol) { myTolAngular = theTol; }
141
142   Standard_Real TolCoef() const { return myTolSta; }
143   
144   void TolCoef (const Standard_Real theTol)
145   {
146     myTolSta = theTol;
147     myTolEnd = 1.0 - theTol;
148   }
149
150   //! Launches calculation of outlines of the shape
151   //! visualized by this framework. Used after setting the point of view and
152   //! defining the shape or shapes to be visualized.
153   Standard_EXPORT void Update();
154
155   void InitHide() { myAlgo->InitHide(); }
156
157   Standard_Boolean MoreHide() const { return myAlgo->MoreHide(); }
158
159   void NextHide() { myAlgo->NextHide(); }
160
161   Standard_EXPORT HLRAlgo_BiPoint::PointsT& Hide (
162     HLRAlgo_EdgeStatus& status,
163     TopoDS_Shape& S,
164     Standard_Boolean& reg1,
165     Standard_Boolean& regn,
166     Standard_Boolean& outl,
167     Standard_Boolean& intl);
168
169   void InitShow() { myAlgo->InitShow(); }
170
171   Standard_Boolean MoreShow() const { return myAlgo->MoreShow(); }
172
173   void NextShow() { myAlgo->NextShow(); }
174
175   Standard_EXPORT HLRAlgo_BiPoint::PointsT& Show (TopoDS_Shape& S, Standard_Boolean& reg1, Standard_Boolean& regn, Standard_Boolean& outl, Standard_Boolean& intl);
176   
177   //! Make a shape  with  the internal outlines in  each
178   //! face.
179   Standard_EXPORT TopoDS_Shape OutLinedShape (const TopoDS_Shape& S) const;
180
181   Standard_Boolean Debug() const { return myDebug; }
182
183   void Debug (const Standard_Boolean theDebug) { myDebug = theDebug; }
184
185   DEFINE_STANDARD_RTTIEXT(HLRBRep_PolyAlgo,Standard_Transient)
186
187 private:
188   
189   Standard_EXPORT TopoDS_Shape MakeShape() const;
190   
191   Standard_EXPORT Standard_Integer InitShape (const TopoDS_Shape& Shape, Standard_Boolean& IsoledF, Standard_Boolean& IsoledE);
192   
193   Standard_EXPORT void StoreShell (const TopoDS_Shape& Shape, Standard_Integer& iShell, TColStd_Array1OfTransient& Shell, const Standard_Boolean IsoledF, const Standard_Boolean IsoledE, TColStd_Array1OfInteger& ES, TColStd_Array1OfTransient& PD, TColStd_Array1OfTransient& PID, TopTools_MapOfShape& ShapeMap1, TopTools_MapOfShape& ShapeMap2);
194   
195   Standard_EXPORT Standard_Boolean Normal (const Standard_Integer iNode, HLRAlgo_PolyInternalNode::NodeIndices& theNodIndices, HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_Array1OfTData*& TData, HLRAlgo_Array1OfPISeg*& PISeg, HLRAlgo_Array1OfPINod*& PINod, const Standard_Boolean orient) const;
196   
197   Standard_EXPORT Standard_Boolean AverageNormal (const Standard_Integer iNode, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices, HLRAlgo_Array1OfTData*& TData, HLRAlgo_Array1OfPISeg*& PISeg, HLRAlgo_Array1OfPINod*& PINod, Standard_Real& X, Standard_Real& Y, Standard_Real& Z) const;
198
199   Standard_Boolean AverageNormal (const Standard_Integer iNode, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices, HLRAlgo_Array1OfTData*& TData, HLRAlgo_Array1OfPISeg*& PISeg, HLRAlgo_Array1OfPINod*& PINod, gp_XYZ& theNormal) const
200   {
201     return AverageNormal (iNode, theNodeIndices, TData, PISeg, PINod, theNormal.ChangeCoord(1), theNormal.ChangeCoord(2), theNormal.ChangeCoord(3));
202   }
203
204   Standard_EXPORT void AddNormalOnTriangle (const Standard_Integer iTri, const Standard_Integer iNode, Standard_Integer& jNode, HLRAlgo_Array1OfTData*& TData, HLRAlgo_Array1OfPINod*& PINod, Standard_Real& X, Standard_Real& Y, Standard_Real& Z, Standard_Boolean& OK) const;
205   
206   Standard_EXPORT void InitBiPointsWithConnexity (const Standard_Integer e, TopoDS_Edge& E, HLRAlgo_ListOfBPoint& List, TColStd_Array1OfTransient& PID, TopTools_ListOfShape& LS, const Standard_Boolean connex);
207   
208   Standard_EXPORT void Interpolation (HLRAlgo_ListOfBPoint& List, Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1, Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2, Standard_Real& XTI1, Standard_Real& YTI1, Standard_Real& ZTI1, Standard_Real& XTI2, Standard_Real& YTI2, Standard_Real& ZTI2, const Standard_Integer e, Standard_Real& U1, Standard_Real& U2, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices1, HLRAlgo_PolyInternalNode::NodeData& Nod11RValues, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices2, HLRAlgo_PolyInternalNode::NodeData& Nod12RValues, const Standard_Integer i1p1, const Standard_Integer i1p2, const Standard_Integer i1, const Handle(HLRAlgo_PolyInternalData)& pid1, HLRAlgo_Array1OfTData*& TData1, HLRAlgo_Array1OfPISeg*& PISeg1, HLRAlgo_Array1OfPINod*& PINod1) const;
209   
210   Standard_EXPORT void Interpolation (HLRAlgo_ListOfBPoint& List, Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1, Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2, Standard_Real& XTI1, Standard_Real& YTI1, Standard_Real& ZTI1, Standard_Real& XTI2, Standard_Real& YTI2, Standard_Real& ZTI2, const Standard_Integer e, Standard_Real& U1, Standard_Real& U2, const GeomAbs_Shape rg, HLRAlgo_PolyInternalNode::NodeIndices& Nod11Indices, HLRAlgo_PolyInternalNode::NodeData& Nod11RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod12Indices, HLRAlgo_PolyInternalNode::NodeData& Nod12RValues, const Standard_Integer i1p1, const Standard_Integer i1p2, const Standard_Integer i1, const Handle(HLRAlgo_PolyInternalData)& pid1, HLRAlgo_Array1OfTData*& TData1, HLRAlgo_Array1OfPISeg*& PISeg1, HLRAlgo_Array1OfPINod*& PINod1, HLRAlgo_PolyInternalNode::NodeIndices& Nod21Indices, HLRAlgo_PolyInternalNode::NodeData& Nod21RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod22Indices, HLRAlgo_PolyInternalNode::NodeData& Nod22RValues, const Standard_Integer i2p1, const Standard_Integer i2p2, const Standard_Integer i2, const Handle(HLRAlgo_PolyInternalData)& pid2, HLRAlgo_Array1OfTData*& TData2, HLRAlgo_Array1OfPISeg*& PISeg2, HLRAlgo_Array1OfPINod*& PINod2) const;
211   
212   Standard_EXPORT Standard_Boolean Interpolation (const Standard_Real U1, const Standard_Real U2, HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_PolyInternalNode::NodeData& Nod2RValues, Standard_Real& X3, Standard_Real& Y3, Standard_Real& Z3, Standard_Real& XT3, Standard_Real& YT3, Standard_Real& ZT3, Standard_Real& coef3, Standard_Real& U3, Standard_Boolean& mP3P1) const;
213   
214   Standard_EXPORT void MoveOrInsertPoint (HLRAlgo_ListOfBPoint& List, Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1, Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2, Standard_Real& XTI1, Standard_Real& YTI1, Standard_Real& ZTI1, Standard_Real& XTI2, Standard_Real& YTI2, Standard_Real& ZTI2, const Standard_Integer e, Standard_Real& U1, Standard_Real& U2, HLRAlgo_PolyInternalNode::NodeIndices& Nod11Indices, HLRAlgo_PolyInternalNode::NodeData& Nod11RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod12Indices, HLRAlgo_PolyInternalNode::NodeData& Nod12RValues, const Standard_Integer i1p1, const Standard_Integer i1p2, const Standard_Integer i1, const Handle(HLRAlgo_PolyInternalData)& pid1, HLRAlgo_Array1OfTData*& TData1, HLRAlgo_Array1OfPISeg*& PISeg1, HLRAlgo_Array1OfPINod*& PINod1, const Standard_Real X3, const Standard_Real Y3, const Standard_Real Z3, const Standard_Real XT3, const Standard_Real YT3, const Standard_Real ZT3, const Standard_Real coef3, const Standard_Real U3, const Standard_Boolean insP3, const Standard_Boolean mP3P1, const Standard_Integer flag) const;
215   
216   Standard_EXPORT void MoveOrInsertPoint (HLRAlgo_ListOfBPoint& List, Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1, Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2, Standard_Real& XTI1, Standard_Real& YTI1, Standard_Real& ZTI1, Standard_Real& XTI2, Standard_Real& YTI2, Standard_Real& ZTI2, const Standard_Integer e, Standard_Real& U1, Standard_Real& U2, HLRAlgo_PolyInternalNode::NodeIndices& Nod11Indices, HLRAlgo_PolyInternalNode::NodeData& Nod11RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod12Indices, HLRAlgo_PolyInternalNode::NodeData& Nod12RValues, const Standard_Integer i1p1, const Standard_Integer i1p2, const Standard_Integer i1, const Handle(HLRAlgo_PolyInternalData)& pid1, HLRAlgo_Array1OfTData*& TData1, HLRAlgo_Array1OfPISeg*& PISeg1, HLRAlgo_Array1OfPINod*& PINod1, HLRAlgo_PolyInternalNode::NodeIndices& Nod21Indices, HLRAlgo_PolyInternalNode::NodeData& Nod21RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod22Indices, HLRAlgo_PolyInternalNode::NodeData& Nod22RValues, const Standard_Integer i2p1, const Standard_Integer i2p2, const Standard_Integer i2, const Handle(HLRAlgo_PolyInternalData)& pid2, HLRAlgo_Array1OfTData*& TData2, HLRAlgo_Array1OfPISeg*& PISeg2, HLRAlgo_Array1OfPINod*& PINod2, const Standard_Real X3, const Standard_Real Y3, const Standard_Real Z3, const Standard_Real XT3, const Standard_Real YT3, const Standard_Real ZT3, const Standard_Real coef3, const Standard_Real U3, const Standard_Boolean insP3, const Standard_Boolean mP3P1, const Standard_Integer flag) const;
217   
218   Standard_EXPORT void MoveOrInsertPoint (HLRAlgo_ListOfBPoint& List, Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1, Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2, Standard_Real& XTI1, Standard_Real& YTI1, Standard_Real& ZTI1, Standard_Real& XTI2, Standard_Real& YTI2, Standard_Real& ZTI2, const Standard_Integer e, Standard_Real& U1, Standard_Real& U2, HLRAlgo_PolyInternalNode::NodeIndices& Nod11Indices, HLRAlgo_PolyInternalNode::NodeData& Nod11RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod12Indices, HLRAlgo_PolyInternalNode::NodeData& Nod12RValues, const Standard_Integer i1p1, const Standard_Integer i1p2, const Standard_Integer i1, const Handle(HLRAlgo_PolyInternalData)& pid1, HLRAlgo_Array1OfTData*& TData1, HLRAlgo_Array1OfPISeg*& PISeg1, HLRAlgo_Array1OfPINod*& PINod1, HLRAlgo_PolyInternalNode::NodeIndices& Nod21Indices, HLRAlgo_PolyInternalNode::NodeData& Nod21RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod22Indices, HLRAlgo_PolyInternalNode::NodeData& Nod22RValues, const Standard_Integer i2p1, const Standard_Integer i2p2, const Standard_Integer i2, const Handle(HLRAlgo_PolyInternalData)& pid2, HLRAlgo_Array1OfTData*& TData2, HLRAlgo_Array1OfPISeg*& PISeg2, HLRAlgo_Array1OfPINod*& PINod2, const Standard_Real X3, const Standard_Real Y3, const Standard_Real Z3, const Standard_Real XT3, const Standard_Real YT3, const Standard_Real ZT3, const Standard_Real coef3, const Standard_Real U3, const Standard_Boolean insP3, const Standard_Boolean mP3P1, const Standard_Real X4, const Standard_Real Y4, const Standard_Real Z4, const Standard_Real XT4, const Standard_Real YT4, const Standard_Real ZT4, const Standard_Real coef4, const Standard_Real U4, const Standard_Boolean insP4, const Standard_Boolean mP4P1, const Standard_Integer flag) const;
219   
220   Standard_EXPORT void InsertOnOutLine (TColStd_Array1OfTransient& PID);
221   
222   Standard_EXPORT void CheckFrBackTriangles (HLRAlgo_ListOfBPoint& List, TColStd_Array1OfTransient& PID);
223   
224   Standard_EXPORT void FindEdgeOnTriangle (const HLRAlgo_TriangleData& theTriangle, const Standard_Integer ip1, const Standard_Integer ip2, Standard_Integer& jtrouv, Standard_Boolean& isDirect) const;
225   
226   Standard_EXPORT void ChangeNode (const Standard_Integer ip1, const Standard_Integer ip2, HLRAlgo_PolyInternalNode::NodeIndices& Nod1Indices, HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod2Indices, HLRAlgo_PolyInternalNode::NodeData& Nod2RValues, const Standard_Real coef1, const Standard_Real X3, const Standard_Real Y3, const Standard_Real Z3, const Standard_Boolean first, HLRAlgo_Array1OfTData*& TData, HLRAlgo_Array1OfPISeg*& PISeg, HLRAlgo_Array1OfPINod*& PINod) const;
227   
228   Standard_EXPORT void UpdateAroundNode (const Standard_Integer iNode, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices, HLRAlgo_Array1OfTData* TData, HLRAlgo_Array1OfPISeg* PISeg, HLRAlgo_Array1OfPINod* PINod) const;
229   
230   Standard_EXPORT void OrientTriangle (const Standard_Integer iTri, HLRAlgo_TriangleData& theTriangle, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices1, HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices2, HLRAlgo_PolyInternalNode::NodeData& Nod2RValues, HLRAlgo_PolyInternalNode::NodeIndices& theNodeIndices3, HLRAlgo_PolyInternalNode::NodeData& Nod3RValues) const;
231   
232   Standard_EXPORT Standard_Boolean Triangles (const Standard_Integer ip1, const Standard_Integer ip2, HLRAlgo_PolyInternalNode::NodeIndices& Nod1Indices, HLRAlgo_Array1OfPISeg*& PISeg, Standard_Integer& iTri1, Standard_Integer& iTri2) const;
233   
234   Standard_EXPORT Standard_Boolean NewNode (HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_PolyInternalNode::NodeData& Nod2RValues, Standard_Real& coef1, Standard_Boolean& moveP1) const;
235   
236   Standard_EXPORT void UVNode (HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_PolyInternalNode::NodeData& Nod2RValues, const Standard_Real coef1, Standard_Real& U3, Standard_Real& V3) const;
237   
238   Standard_EXPORT void CheckDegeneratedSegment (HLRAlgo_PolyInternalNode::NodeIndices& Nod1Indices, HLRAlgo_PolyInternalNode::NodeData& Nod1RValues, HLRAlgo_PolyInternalNode::NodeIndices& Nod2Indices, HLRAlgo_PolyInternalNode::NodeData& Nod2RValues) const;
239   
240   Standard_EXPORT void UpdateOutLines (HLRAlgo_ListOfBPoint& List, TColStd_Array1OfTransient& PID);
241   
242   Standard_EXPORT void UpdateEdgesBiPoints (HLRAlgo_ListOfBPoint& List, const TColStd_Array1OfTransient& PID, const Standard_Boolean closed);
243   
244   Standard_EXPORT void UpdatePolyData (TColStd_Array1OfTransient& PD, TColStd_Array1OfTransient& PID, const Standard_Boolean closed);
245   
246   Standard_EXPORT void TMultiply (Standard_Real& X, Standard_Real& Y, Standard_Real& Z, const Standard_Boolean VecPartOnly = Standard_False) const;
247
248   void TMultiply(gp_XYZ& thePoint, const Standard_Boolean VecPartOnly = Standard_False) const
249   {
250     TMultiply(thePoint.ChangeCoord(1), thePoint.ChangeCoord(2), thePoint.ChangeCoord(3), VecPartOnly);
251   }
252
253   Standard_EXPORT void TTMultiply (Standard_Real& X, Standard_Real& Y, Standard_Real& Z, const Standard_Boolean VecPartOnly = Standard_False) const;
254
255   void TTMultiply (gp_XYZ& thePoint, const Standard_Boolean VecPartOnly = Standard_False) const
256   {
257     TTMultiply(thePoint.ChangeCoord(1), thePoint.ChangeCoord(2), thePoint.ChangeCoord(3), VecPartOnly);\
258   }
259
260   Standard_EXPORT void TIMultiply (Standard_Real& X, Standard_Real& Y, Standard_Real& Z, const Standard_Boolean VecPartOnly = Standard_False) const;
261
262   void TIMultiply (gp_XYZ& thePoint, const Standard_Boolean VecPartOnly = Standard_False) const
263   {
264     TIMultiply(thePoint.ChangeCoord(1), thePoint.ChangeCoord(2), thePoint.ChangeCoord(3), VecPartOnly);
265   }
266
267 private:
268
269   HLRAlgo_Projector myProj;
270   Standard_Real TMat[3][3];
271   Standard_Real TLoc[3];
272   Standard_Real TTMa[3][3];
273   Standard_Real TTLo[3];
274   Standard_Real TIMa[3][3];
275   Standard_Real TILo[3];
276   TopTools_SequenceOfShape myShapes;
277   TopTools_IndexedMapOfShape myEMap;
278   TopTools_IndexedMapOfShape myFMap;
279   Handle(HLRAlgo_PolyAlgo) myAlgo;
280   Standard_Boolean myDebug;
281   Standard_Real myTolSta;
282   Standard_Real myTolEnd;
283   Standard_Real myTolAngular;
284   Handle(Geom_Surface) myGSurf;
285   BRepAdaptor_Surface myBSurf;
286   BRepAdaptor_Curve myBCurv;
287   BRepAdaptor_Curve2d myPC;
288
289 };
290
291 #endif // _HLRBRep_PolyAlgo_HeaderFile