0031682: Visualization - Prs3d_ShadingAspect::SetTransparency() has no effect with...
[occt.git] / src / ChFi3d / ChFi3d_ChBuilder.hxx
CommitLineData
42cf5bc1 1// Created on: 1995-04-26
2// Created by: Modelistation
3// Copyright (c) 1995-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 _ChFi3d_ChBuilder_HeaderFile
18#define _ChFi3d_ChBuilder_HeaderFile
19
20#include <Standard.hxx>
21#include <Standard_DefineAlloc.hxx>
22#include <Standard_Handle.hxx>
23
24#include <ChFi3d_Builder.hxx>
25#include <Standard_Real.hxx>
26#include <Standard_Integer.hxx>
27#include <Standard_Boolean.hxx>
28#include <ChFiDS_ChamfMethod.hxx>
1d54b807 29#include <ChFiDS_ChamfMode.hxx>
42cf5bc1 30#include <ChFiDS_SecHArray1.hxx>
31#include <math_Vector.hxx>
32#include <TopAbs_Orientation.hxx>
33#include <TopAbs_State.hxx>
34#include <ChFiDS_SequenceOfSurfData.hxx>
35#include <ChFiDS_ListOfStripe.hxx>
36class Standard_ConstructionError;
37class Standard_DomainError;
38class TopoDS_Shape;
39class TopoDS_Edge;
40class TopoDS_Face;
41class ChFiDS_SurfData;
42class ChFiDS_HElSpine;
43class ChFiDS_Spine;
44class BRepAdaptor_HSurface;
45class Adaptor3d_TopolTool;
46class BRepAdaptor_HCurve2d;
47class TopoDS_Vertex;
48class ChFiDS_Stripe;
49
50
51//! construction tool for 3D chamfers on edges (on a solid).
52class ChFi3d_ChBuilder : public ChFi3d_Builder
53{
54public:
55
56 DEFINE_STANDARD_ALLOC
57
58
59 //! initializes the Builder with the Shape <S> for the
60 //! computation of chamfers
61 Standard_EXPORT ChFi3d_ChBuilder(const TopoDS_Shape& S, const Standard_Real Ta = 1.0e-2);
62
63 //! initializes a contour with the edge <E> as first
64 //! (the next are found by propagation ).
65 //! The two distances (parameters of the chamfer) must
66 //! be set after.
67 //! if the edge <E> has more than 2 adjacent faces
68 Standard_EXPORT void Add (const TopoDS_Edge& E);
69
70 //! initializes a new contour with the edge <E> as first
71 //! (the next are found by propagation ), and the
72 //! distance <Dis>
73 //! if the edge <E> has more than 2 adjacent faces
1d54b807 74 Standard_EXPORT void Add (const Standard_Real Dis, const TopoDS_Edge& E);
42cf5bc1 75
76 //! set the distance <Dis> of the fillet
77 //! contour of index <IC> in the DS with <Dis> on <F>.
78 //! if the face <F> is not one of common faces
79 //! of an edge of the contour <IC>
1d54b807 80 Standard_EXPORT void SetDist (const Standard_Real Dis,
81 const Standard_Integer IC,
82 const TopoDS_Face& F);
42cf5bc1 83
84 //! gives the distances <Dis> of the fillet
85 //! contour of index <IC> in the DS
86 Standard_EXPORT void GetDist (const Standard_Integer IC, Standard_Real& Dis) const;
87
88 //! initializes a new contour with the edge <E> as first
89 //! (the next are found by propagation ), and the
90 //! distance <Dis1> and <Dis2>
91 //! if the edge <E> has more than 2 adjacent faces
1d54b807 92 Standard_EXPORT void Add (const Standard_Real Dis1,
93 const Standard_Real Dis2,
94 const TopoDS_Edge& E,
95 const TopoDS_Face& F);
42cf5bc1 96
97 //! set the distances <Dis1> and <Dis2> of the fillet
98 //! contour of index <IC> in the DS with <Dis1> on <F>.
99 //! if the face <F> is not one of common faces
100 //! of an edge of the contour <IC>
1d54b807 101 Standard_EXPORT void SetDists (const Standard_Real Dis1,
102 const Standard_Real Dis2,
103 const Standard_Integer IC,
104 const TopoDS_Face& F);
42cf5bc1 105
106 //! gives the distances <Dis1> and <Dis2> of the fillet
107 //! contour of index <IC> in the DS
1d54b807 108 Standard_EXPORT void Dists (const Standard_Integer IC,
109 Standard_Real& Dis1,
110 Standard_Real& Dis2) const;
42cf5bc1 111
112 //! initializes a new contour with the edge <E> as first
113 //! (the next are found by propagation ), and the
114 //! distance <Dis1> and <Angle>
115 //! if the edge <E> has more than 2 adjacent faces
1d54b807 116 Standard_EXPORT void AddDA (const Standard_Real Dis,
117 const Standard_Real Angle,
118 const TopoDS_Edge& E,
119 const TopoDS_Face& F);
42cf5bc1 120
121 //! set the distance <Dis> and <Angle> of the fillet
122 //! contour of index <IC> in the DS with <Dis> on <F>.
123 //! if the face <F> is not one of common faces
124 //! of an edge of the contour <IC>
1d54b807 125 Standard_EXPORT void SetDistAngle (const Standard_Real Dis,
126 const Standard_Real Angle,
127 const Standard_Integer IC,
128 const TopoDS_Face& F);
42cf5bc1 129
130 //! gives the distances <Dis> and <Angle> of the fillet
131 //! contour of index <IC> in the DS
1d54b807 132 Standard_EXPORT void GetDistAngle (const Standard_Integer IC,
133 Standard_Real& Dis,
134 Standard_Real& Angle) const;
135
136 //! set the mode of shamfer
137 Standard_EXPORT void SetMode (const ChFiDS_ChamfMode theMode);
42cf5bc1 138
139 //! renvoi la methode des chanfreins utilisee
140 Standard_EXPORT ChFiDS_ChamfMethod IsChamfer (const Standard_Integer IC) const;
141
1d54b807 142 //! returns the mode of chamfer used
143 Standard_EXPORT ChFiDS_ChamfMode Mode () const;
144
42cf5bc1 145 //! Reset tous rayons du contour IC.
146 Standard_EXPORT void ResetContour (const Standard_Integer IC);
147
148 Standard_EXPORT void Simulate (const Standard_Integer IC);
149
150 Standard_EXPORT Standard_Integer NbSurf (const Standard_Integer IC) const;
151
1d54b807 152 Standard_EXPORT Handle(ChFiDS_SecHArray1) Sect (const Standard_Integer IC,
153 const Standard_Integer IS) const;
154
155 Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data,
156 const Handle(ChFiDS_HElSpine)& Guide,
157 const Handle(ChFiDS_Spine)& Spine,
158 const Standard_Integer Choix,
159 const Handle(BRepAdaptor_HSurface)& S1,
160 const Handle(Adaptor3d_TopolTool)& I1,
161 const Handle(BRepAdaptor_HCurve2d)& PC1,
162 const Handle(BRepAdaptor_HSurface)& Sref1,
163 const Handle(BRepAdaptor_HCurve2d)& PCref1,
164 Standard_Boolean& Decroch1,
165 const Handle(BRepAdaptor_HSurface)& S2,
166 const Handle(Adaptor3d_TopolTool)& I2,
167 const TopAbs_Orientation Or2,
168 const Standard_Real Fleche,
169 const Standard_Real TolGuide,
170 Standard_Real& First,
171 Standard_Real& Last,
172 const Standard_Boolean Inside,
173 const Standard_Boolean Appro,
174 const Standard_Boolean Forward,
175 const Standard_Boolean RecP,
176 const Standard_Boolean RecS,
177 const Standard_Boolean RecRst,
178 const math_Vector& Soldep) Standard_OVERRIDE;
179
180 Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data,
181 const Handle(ChFiDS_HElSpine)& Guide,
182 const Handle(ChFiDS_Spine)& Spine,
183 const Standard_Integer Choix,
184 const Handle(BRepAdaptor_HSurface)& S1,
185 const Handle(Adaptor3d_TopolTool)& I1,
186 const TopAbs_Orientation Or1,
187 const Handle(BRepAdaptor_HSurface)& S2,
188 const Handle(Adaptor3d_TopolTool)& I2,
189 const Handle(BRepAdaptor_HCurve2d)& PC2,
190 const Handle(BRepAdaptor_HSurface)& Sref2,
191 const Handle(BRepAdaptor_HCurve2d)& PCref2,
192 Standard_Boolean& Decroch2,
193 const Standard_Real Fleche,
194 const Standard_Real TolGuide,
195 Standard_Real& First,
196 Standard_Real& Last,
197 const Standard_Boolean Inside,
198 const Standard_Boolean Appro,
199 const Standard_Boolean Forward,
200 const Standard_Boolean RecP,
201 const Standard_Boolean RecS,
202 const Standard_Boolean RecRst,
203 const math_Vector& Soldep) Standard_OVERRIDE;
204
205 Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data,
206 const Handle(ChFiDS_HElSpine)& Guide,
207 const Handle(ChFiDS_Spine)& Spine,
208 const Standard_Integer Choix,
209 const Handle(BRepAdaptor_HSurface)& S1,
210 const Handle(Adaptor3d_TopolTool)& I1,
211 const Handle(BRepAdaptor_HCurve2d)& PC1,
212 const Handle(BRepAdaptor_HSurface)& Sref1,
213 const Handle(BRepAdaptor_HCurve2d)& PCref1,
214 Standard_Boolean& Decroch1,
215 const TopAbs_Orientation Or1,
216 const Handle(BRepAdaptor_HSurface)& S2,
217 const Handle(Adaptor3d_TopolTool)& I2,
218 const Handle(BRepAdaptor_HCurve2d)& PC2,
219 const Handle(BRepAdaptor_HSurface)& Sref2,
220 const Handle(BRepAdaptor_HCurve2d)& PCref2,
221 Standard_Boolean& Decroch2,
222 const TopAbs_Orientation Or2,
223 const Standard_Real Fleche,
224 const Standard_Real TolGuide,
225 Standard_Real& First,
226 Standard_Real& Last,
227 const Standard_Boolean Inside,
228 const Standard_Boolean Appro,
229 const Standard_Boolean Forward,
230 const Standard_Boolean RecP1,
231 const Standard_Boolean RecRst1,
232 const Standard_Boolean RecP2,
233 const Standard_Boolean RecRst2,
234 const math_Vector& Soldep) Standard_OVERRIDE;
42cf5bc1 235
236 //! Methode, implemented in inheritants, calculates
237 //! the elements of construction of the surface (fillet
238 //! or chamfer).
1d54b807 239 Standard_EXPORT virtual Standard_Boolean PerformSurf (ChFiDS_SequenceOfSurfData& Data,
240 const Handle(ChFiDS_HElSpine)& Guide,
241 const Handle(ChFiDS_Spine)& Spine,
242 const Standard_Integer Choix,
243 const Handle(BRepAdaptor_HSurface)& S1,
244 const Handle(Adaptor3d_TopolTool)& I1,
245 const Handle(BRepAdaptor_HSurface)& S2,
246 const Handle(Adaptor3d_TopolTool)& I2,
247 const Standard_Real MaxStep,
248 const Standard_Real Fleche,
249 const Standard_Real TolGuide,
250 Standard_Real& First,
251 Standard_Real& Last,
252 const Standard_Boolean Inside,
253 const Standard_Boolean Appro,
254 const Standard_Boolean Forward,
255 const Standard_Boolean RecOnS1,
256 const Standard_Boolean RecOnS2,
257 const math_Vector& Soldep,
258 Standard_Integer& Intf,
259 Standard_Integer& Intl) Standard_OVERRIDE;
42cf5bc1 260
261 //! Method, implemented in the inheritants, calculates
262 //! the elements of construction of the surface (fillet
263 //! or chamfer) contact edge/face.
1d54b807 264 Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data,
265 const Handle(ChFiDS_HElSpine)& Guide,
266 const Handle(ChFiDS_Spine)& Spine,
267 const Standard_Integer Choix,
268 const Handle(BRepAdaptor_HSurface)& S1,
269 const Handle(Adaptor3d_TopolTool)& I1,
270 const Handle(BRepAdaptor_HCurve2d)& PC1,
271 const Handle(BRepAdaptor_HSurface)& Sref1,
272 const Handle(BRepAdaptor_HCurve2d)& PCref1,
273 Standard_Boolean& Decroch1,
274 const Handle(BRepAdaptor_HSurface)& S2,
275 const Handle(Adaptor3d_TopolTool)& I2,
276 const TopAbs_Orientation Or2,
277 const Standard_Real MaxStep,
278 const Standard_Real Fleche,
279 const Standard_Real TolGuide,
280 Standard_Real& First,
281 Standard_Real& Last,
282 const Standard_Boolean Inside,
283 const Standard_Boolean Appro,
284 const Standard_Boolean Forward,
285 const Standard_Boolean RecP,
286 const Standard_Boolean RecS,
287 const Standard_Boolean RecRst,
288 const math_Vector& Soldep) Standard_OVERRIDE;
42cf5bc1 289
290 //! Method, implemented in inheritants, calculates
291 //! the elements of construction of the surface (fillet
292 //! or chamfer) contact edge/face.
1d54b807 293 Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data,
294 const Handle(ChFiDS_HElSpine)& Guide,
295 const Handle(ChFiDS_Spine)& Spine,
296 const Standard_Integer Choix,
297 const Handle(BRepAdaptor_HSurface)& S1,
298 const Handle(Adaptor3d_TopolTool)& I1,
299 const TopAbs_Orientation Or1,
300 const Handle(BRepAdaptor_HSurface)& S2,
301 const Handle(Adaptor3d_TopolTool)& I2,
302 const Handle(BRepAdaptor_HCurve2d)& PC2,
303 const Handle(BRepAdaptor_HSurface)& Sref2,
304 const Handle(BRepAdaptor_HCurve2d)& PCref2,
305 Standard_Boolean& Decroch2,
306 const Standard_Real MaxStep,
307 const Standard_Real Fleche,
308 const Standard_Real TolGuide,
309 Standard_Real& First,
310 Standard_Real& Last,
311 const Standard_Boolean Inside,
312 const Standard_Boolean Appro,
313 const Standard_Boolean Forward,
314 const Standard_Boolean RecP,
315 const Standard_Boolean RecS,
316 const Standard_Boolean RecRst,
317 const math_Vector& Soldep) Standard_OVERRIDE;
42cf5bc1 318
319 //! Method, implemented in inheritants, calculates
320 //! the elements of construction of the surface (fillet
321 //! or chamfer) contact edge/edge.
1d54b807 322 Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data,
323 const Handle(ChFiDS_HElSpine)& Guide,
324 const Handle(ChFiDS_Spine)& Spine,
325 const Standard_Integer Choix,
326 const Handle(BRepAdaptor_HSurface)& S1,
327 const Handle(Adaptor3d_TopolTool)& I1,
328 const Handle(BRepAdaptor_HCurve2d)& PC1,
329 const Handle(BRepAdaptor_HSurface)& Sref1,
330 const Handle(BRepAdaptor_HCurve2d)& PCref1,
331 Standard_Boolean& Decroch1,
332 const TopAbs_Orientation Or1,
333 const Handle(BRepAdaptor_HSurface)& S2,
334 const Handle(Adaptor3d_TopolTool)& I2,
335 const Handle(BRepAdaptor_HCurve2d)& PC2,
336 const Handle(BRepAdaptor_HSurface)& Sref2,
337 const Handle(BRepAdaptor_HCurve2d)& PCref2,
338 Standard_Boolean& Decroch2,
339 const TopAbs_Orientation Or2,
340 const Standard_Real MaxStep,
341 const Standard_Real Fleche,
342 const Standard_Real TolGuide,
343 Standard_Real& First,
344 Standard_Real& Last,
345 const Standard_Boolean Inside,
346 const Standard_Boolean Appro,
347 const Standard_Boolean Forward,
348 const Standard_Boolean RecP1,
349 const Standard_Boolean RecRst1,
350 const Standard_Boolean RecP2,
351 const Standard_Boolean RecRst2,
352 const math_Vector& Soldep) Standard_OVERRIDE;
42cf5bc1 353
42cf5bc1 354
355
356
357protected:
358
359
79104795 360 Standard_EXPORT void SimulKPart (const Handle(ChFiDS_SurfData)& SD) const Standard_OVERRIDE;
42cf5bc1 361
1d54b807 362 Standard_EXPORT Standard_Boolean SimulSurf (Handle(ChFiDS_SurfData)& Data,
363 const Handle(ChFiDS_HElSpine)& Guide,
364 const Handle(ChFiDS_Spine)& Spine,
365 const Standard_Integer Choix,
366 const Handle(BRepAdaptor_HSurface)& S1,
367 const Handle(Adaptor3d_TopolTool)& I1,
368 const Handle(BRepAdaptor_HSurface)& S2,
369 const Handle(Adaptor3d_TopolTool)& I2,
370 const Standard_Real TolGuide,
371 Standard_Real& First,
372 Standard_Real& Last,
373 const Standard_Boolean Inside,
374 const Standard_Boolean Appro,
375 const Standard_Boolean Forward,
376 const Standard_Boolean RecOnS1,
377 const Standard_Boolean RecOnS2,
378 const math_Vector& Soldep,
379 Standard_Integer& Intf,
380 Standard_Integer& Intl) Standard_OVERRIDE;
381
382 Standard_EXPORT Standard_Boolean PerformFirstSection (const Handle(ChFiDS_Spine)& S,
383 const Handle(ChFiDS_HElSpine)& HGuide,
384 const Standard_Integer Choix,
385 Handle(BRepAdaptor_HSurface)& S1,
386 Handle(BRepAdaptor_HSurface)& S2,
387 const Handle(Adaptor3d_TopolTool)& I1,
388 const Handle(Adaptor3d_TopolTool)& I2,
389 const Standard_Real Par,
390 math_Vector& SolDep,
391 TopAbs_State& Pos1,
392 TopAbs_State& Pos2) const Standard_OVERRIDE;
42cf5bc1 393
394 //! computes the intersection of two chamfers on
395 //! the vertex of index <Index> in myVDataMap.
79104795 396 Standard_EXPORT void PerformTwoCorner (const Standard_Integer Index) Standard_OVERRIDE;
42cf5bc1 397
398 //! computes the intersection of three chamfers on
399 //! the vertex of index <Index> in myVDataMap.
79104795 400 Standard_EXPORT void PerformThreeCorner (const Standard_Integer Index) Standard_OVERRIDE;
42cf5bc1 401
402 //! extends the spine of the Stripe <S> at the
403 //! extremity of the vertex <V>.
1d54b807 404 Standard_EXPORT void ExtentOneCorner (const TopoDS_Vertex& V,
405 const Handle(ChFiDS_Stripe)& S) Standard_OVERRIDE;
42cf5bc1 406
407 //! extends the spine of the 2 stripes of <LS> at the
408 //! extremity of the vertex <V>
1d54b807 409 Standard_EXPORT void ExtentTwoCorner (const TopoDS_Vertex& V,
410 const ChFiDS_ListOfStripe& LS) Standard_OVERRIDE;
42cf5bc1 411
412 //! extends the spine of the 2 stripes of <LS> at the
413 //! extremity of the vertex <V>
1d54b807 414 Standard_EXPORT void ExtentThreeCorner (const TopoDS_Vertex& V,
415 const ChFiDS_ListOfStripe& LS) Standard_OVERRIDE;
42cf5bc1 416
417 //! set the regularities
79104795 418 Standard_EXPORT void SetRegul() Standard_OVERRIDE;
42cf5bc1 419
420
421
422
423private:
424
425
1d54b807 426 Standard_EXPORT void ConexFaces (const Handle(ChFiDS_Spine)& Sp,
427 const Standard_Integer IEdge,
428 TopoDS_Face& F1,
429 TopoDS_Face& F2) const;
42cf5bc1 430
1d54b807 431 ChFiDS_ChamfMode myMode;
42cf5bc1 432
433
434};
435
436
437
438
439
440
441
442#endif // _ChFi3d_ChBuilder_HeaderFile