0028838: Configuration - undefine macros coming from X11 headers in place of collision
[occt.git] / src / ShapeUpgrade / ShapeUpgrade_WireDivide.hxx
1 // Created on: 1999-04-15
2 // Created by: Roman LYGIN
3 // Copyright (c) 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 _ShapeUpgrade_WireDivide_HeaderFile
18 #define _ShapeUpgrade_WireDivide_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <TopoDS_Face.hxx>
24 #include <TopoDS_Wire.hxx>
25 #include <Standard_Integer.hxx>
26 #include <ShapeUpgrade_Tool.hxx>
27 #include <Standard_Boolean.hxx>
28 #include <ShapeExtend_Status.hxx>
29 class ShapeUpgrade_SplitCurve3d;
30 class ShapeUpgrade_SplitCurve2d;
31 class ShapeUpgrade_EdgeDivide;
32 class ShapeAnalysis_TransferParameters;
33 class ShapeUpgrade_FixSmallCurves;
34 class Geom_Surface;
35 class TopoDS_Edge;
36 class TopLoc_Location;
37
38 // resolve name collisions with X11 headers
39 #ifdef Status
40   #undef Status
41 #endif
42
43 class ShapeUpgrade_WireDivide;
44 DEFINE_STANDARD_HANDLE(ShapeUpgrade_WireDivide, ShapeUpgrade_Tool)
45
46 //! Divides edges in the wire lying on the face or free wires or
47 //! free edges with a criterion.
48 //! Splits 3D curve and pcurve(s) of the edge on the face.
49 //! Other pcurves which may be associated with the edge are simply
50 //! copied.
51 //! If 3D curve is splitted then pcurve on the face is splitted as
52 //! well, and wice-versa.
53 //! Input shape is not modified.
54 //! The modifications made are recorded in external context
55 //! (ShapeBuild_ReShape). This tool is applied to all edges
56 //! before splitting them in order to keep sharing.
57 class ShapeUpgrade_WireDivide : public ShapeUpgrade_Tool
58 {
59
60 public:
61
62   
63   //! Empty constructor
64   Standard_EXPORT ShapeUpgrade_WireDivide();
65   
66   //! Initializes by wire and face
67   Standard_EXPORT void Init (const TopoDS_Wire& W, const TopoDS_Face& F);
68   
69   //! Initializes by wire and surface
70   Standard_EXPORT void Init (const TopoDS_Wire& W, const Handle(Geom_Surface)& S);
71   
72   //! Loads working wire
73   Standard_EXPORT void Load (const TopoDS_Wire& W);
74   
75   //! Creates wire of one edge and calls Load for wire
76   Standard_EXPORT void Load (const TopoDS_Edge& E);
77   
78   //! Sets supporting surface by face
79   Standard_EXPORT void SetFace (const TopoDS_Face& F);
80   
81   //! Sets supporting surface
82   Standard_EXPORT void SetSurface (const Handle(Geom_Surface)& S);
83   
84   //! Sets supporting surface with location
85   Standard_EXPORT void SetSurface (const Handle(Geom_Surface)& S, const TopLoc_Location& L);
86   
87   //! Computes the resulting wire by splitting all the edges
88   //! according to splitting criteria.
89   //! All the modifications made are recorded in context
90   //! (ShapeBuild_ReShape). This tool is applied to all edges
91   //! before splitting them in order to keep sharings.
92   //! If no supporting face or surface is defined, only 3d
93   //! splitting criteria are used.
94   Standard_EXPORT virtual void Perform();
95   
96   //! Gives the resulting Wire (equal to initial one if not done
97   //! or Null if not loaded)
98   Standard_EXPORT const TopoDS_Wire& Wire() const;
99   
100   //! Queries status of last call to Perform()
101   //! OK - no edges were splitted, wire left untouched
102   //! DONE1 - some edges were splitted
103   //! FAIL1 - some edges have no 3d curve (skipped)
104   //! FAIL2 - some edges have no pcurve (skipped)
105   Standard_EXPORT Standard_Boolean Status (const ShapeExtend_Status status) const;
106   
107   //! Sets the tool for splitting 3D curves.
108   Standard_EXPORT void SetSplitCurve3dTool (const Handle(ShapeUpgrade_SplitCurve3d)& splitCurve3dTool);
109   
110   //! Sets the tool for splitting pcurves.
111   Standard_EXPORT void SetSplitCurve2dTool (const Handle(ShapeUpgrade_SplitCurve2d)& splitCurve2dTool);
112   
113   //! Sets the tool for Transfer parameters between curves and pcurves.
114   Standard_EXPORT void SetTransferParamTool (const Handle(ShapeAnalysis_TransferParameters)& TransferParam);
115   
116   //! Sets tool for splitting edge
117   Standard_EXPORT void SetEdgeDivideTool (const Handle(ShapeUpgrade_EdgeDivide)& edgeDivideTool);
118   
119   //! returns tool for splitting edges
120   Standard_EXPORT virtual Handle(ShapeUpgrade_EdgeDivide) GetEdgeDivideTool() const;
121   
122   //! Returns the tool for Transfer of parameters.
123   Standard_EXPORT virtual Handle(ShapeAnalysis_TransferParameters) GetTransferParamTool();
124   
125   //! Sets mode for splitting 3d curves from edges.
126   //! 0 - only curve 3d from free edges.
127   //! 1 - only curve 3d from shared edges.
128   //! 2 -  all curve 3d.
129   Standard_EXPORT void SetEdgeMode (const Standard_Integer EdgeMode);
130   
131   //! Sets tool for fixing small curves with specified min tolerance;
132   Standard_EXPORT void SetFixSmallCurveTool (const Handle(ShapeUpgrade_FixSmallCurves)& FixSmallCurvesTool);
133   
134   //! Returns tool for fixing small curves
135   Standard_EXPORT Handle(ShapeUpgrade_FixSmallCurves) GetFixSmallCurveTool() const;
136
137
138
139
140   DEFINE_STANDARD_RTTIEXT(ShapeUpgrade_WireDivide,ShapeUpgrade_Tool)
141
142 protected:
143
144   
145   //! Returns the tool for splitting 3D curves.
146   Standard_EXPORT virtual Handle(ShapeUpgrade_SplitCurve3d) GetSplitCurve3dTool() const;
147   
148   //! Returns the tool for splitting pcurves.
149   Standard_EXPORT virtual Handle(ShapeUpgrade_SplitCurve2d) GetSplitCurve2dTool() const;
150
151   TopoDS_Face myFace;
152   TopoDS_Wire myWire;
153   Standard_Integer myStatus;
154   Standard_Integer myEdgeMode;
155
156
157 private:
158
159
160   Handle(ShapeUpgrade_SplitCurve3d) mySplitCurve3dTool;
161   Handle(ShapeUpgrade_SplitCurve2d) mySplitCurve2dTool;
162   Handle(ShapeUpgrade_EdgeDivide) myEdgeDivide;
163   Handle(ShapeAnalysis_TransferParameters) myTransferParamTool;
164   Handle(ShapeUpgrade_FixSmallCurves) myFixSmallCurveTool;
165
166
167 };
168
169
170
171
172
173
174
175 #endif // _ShapeUpgrade_WireDivide_HeaderFile