1 // Created on: 1993-11-09 2 // Created by: Laurent BOURESCHE 3 // Copyright (c) 1993-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_Builder_HeaderFile 18 #define _ChFi3d_Builder_HeaderFile 19 20 #include <BRepAdaptor_Curve2d.hxx> 21 #include <BRepAdaptor_Surface.hxx> 22 #include <GeomAbs_Shape.hxx> 23 #include <ChFiDS_ErrorStatus.hxx> 24 #include <ChFiDS_ListOfStripe.hxx> 25 #include <ChFiDS_Map.hxx> 26 #include <ChFiDS_Regularities.hxx> 27 #include <ChFiDS_SequenceOfSurfData.hxx> 28 #include <ChFiDS_StripeMap.hxx> 29 #include <ChFiDS_ElSpine.hxx> 30 #include <math_Vector.hxx> 31 #include <TopoDS_Shape.hxx> 32 #include <TopTools_ListOfShape.hxx> 33 #include <TopTools_DataMapOfShapeListOfInteger.hxx> 34 #include <TopTools_DataMapOfShapeShape.hxx> 35 #include <TopAbs_Orientation.hxx> 36 #include <TopAbs_State.hxx> 37 38 class TopOpeBRepDS_HDataStructure; 39 class TopOpeBRepBuild_HBuilder; 40 class TopoDS_Edge; 41 class ChFiDS_Spine; 42 class TopoDS_Vertex; 43 class Geom_Surface; 44 class ChFiDS_SurfData; 45 class Adaptor3d_TopolTool; 46 class BRepBlend_Line; 47 class Blend_Function; 48 class Blend_FuncInv; 49 class Blend_SurfRstFunction; 50 class Blend_SurfPointFuncInv; 51 class Blend_SurfCurvFuncInv; 52 class Blend_RstRstFunction; 53 class Blend_CurvPointFuncInv; 54 class ChFiDS_Stripe; 55 class BRepTopAdaptor_TopolTool; 56 class gp_Pnt2d; 57 class ChFiDS_CommonPoint; 58 class TopoDS_Face; 59 class AppBlend_Approx; 60 class Geom2d_Curve; 61 62 63 //! Root class for calculation of surfaces (fillets, 64 //! chamfers) destined to smooth edges of 65 //! a gap on a Shape and the reconstruction of the Shape. 66 class ChFi3d_Builder 67 { 68 public: 69 70 DEFINE_STANDARD_ALLOC 71 72 Standard_EXPORT virtual ~ChFi3d_Builder(); 73 74 Standard_EXPORT void SetParams (const Standard_Real Tang, 75 const Standard_Real Tesp, 76 const Standard_Real T2d, 77 const Standard_Real TApp3d, 78 const Standard_Real TolApp2d, 79 const Standard_Real Fleche); 80 81 Standard_EXPORT void SetContinuity (const GeomAbs_Shape InternalContinuity, 82 const Standard_Real AngularTolerance); 83 84 //! extracts from the list the contour containing edge E. 85 Standard_EXPORT void Remove (const TopoDS_Edge& E); 86 87 //! gives the number of the contour containing E or 0 88 //! if E does not belong to any contour. 89 Standard_EXPORT Standard_Integer Contains (const TopoDS_Edge& E) const; 90 91 //! gives the number of the contour containing E or 0 92 //! if E does not belong to any contour. 93 //! Sets in IndexInSpine the index of E in the contour if it's found 94 Standard_EXPORT Standard_Integer Contains (const TopoDS_Edge& E, 95 Standard_Integer& IndexInSpine) const; 96 97 //! gives the number of disjoint contours on which 98 //! the fillets are calculated 99 Standard_EXPORT Standard_Integer NbElements() const; 100 101 //! gives the n'th set of edges (contour) 102 //! if I >NbElements() 103 Standard_EXPORT Handle(ChFiDS_Spine) Value (const Standard_Integer I) const; 104 105 //! returns the length of the contour of index IC. 106 Standard_EXPORT Standard_Real Length (const Standard_Integer IC) const; 107 108 //! returns the First vertex V of 109 //! the contour of index IC. 110 Standard_EXPORT TopoDS_Vertex FirstVertex (const Standard_Integer IC) const; 111 112 //! returns the Last vertex V of 113 //! the contour of index IC. 114 Standard_EXPORT TopoDS_Vertex LastVertex (const Standard_Integer IC) const; 115 116 //! returns the abscissa of the vertex V on 117 //! the contour of index IC. 118 Standard_EXPORT Standard_Real Abscissa (const Standard_Integer IC, 119 const TopoDS_Vertex& V) const; 120 121 //! returns the relative abscissa([0.,1.]) of the 122 //! vertex V on the contour of index IC. 123 Standard_EXPORT Standard_Real RelativeAbscissa (const Standard_Integer IC, 124 const TopoDS_Vertex& V) const; 125 126 //! returns true if the contour of index IC is closed 127 //! an tangent. 128 Standard_EXPORT Standard_Boolean ClosedAndTangent (const Standard_Integer IC) const; 129 130 //! returns true if the contour of index IC is closed 131 Standard_EXPORT Standard_Boolean Closed (const Standard_Integer IC) const; 132 133 //! general calculation of geometry on all edges, 134 //! topologic reconstruction. 135 Standard_EXPORT void Compute(); 136 137 //! returns True if the computation is success 138 Standard_EXPORT Standard_Boolean IsDone() const; 139 140 //! if (Isdone()) makes the result. 141 //! if (!Isdone()) 142 Standard_EXPORT TopoDS_Shape Shape() const; 143 144 //! Advanced function for the history 145 Standard_EXPORT const TopTools_ListOfShape& Generated (const TopoDS_Shape& EouV); 146 147 //! Returns the number of contours on which the calculation 148 //! has failed. 149 Standard_EXPORT Standard_Integer NbFaultyContours() const; 150 151 //! Returns the number of I'th contour on which the calculation 152 //! has failed. 153 Standard_EXPORT Standard_Integer FaultyContour (const Standard_Integer I) const; 154 155 //! Returns the number of surfaces calculated on the contour IC. 156 Standard_EXPORT Standard_Integer NbComputedSurfaces (const Standard_Integer IC) const; 157 158 //! Returns the IS'th surface calculated on the contour IC. 159 Standard_EXPORT Handle(Geom_Surface) ComputedSurface (const Standard_Integer IC, 160 const Standard_Integer IS) const; 161 162 //! Returns the number of vertices on which the calculation 163 //! has failed. 164 Standard_EXPORT Standard_Integer NbFaultyVertices() const; 165 166 //! Returns the IV'th vertex on which the calculation has failed. 167 Standard_EXPORT TopoDS_Vertex FaultyVertex (const Standard_Integer IV) const; 168 169 //! returns True if a partial result has been calculated 170 Standard_EXPORT Standard_Boolean HasResult() const; 171 172 //! if (HasResult()) returns partial result 173 //! if (!HasResult()) 174 Standard_EXPORT TopoDS_Shape BadShape() const; 175 176 //! for the stripe IC ,indication on the cause 177 //! of failure WalkingFailure,TwistedSurface,Error, Ok 178 Standard_EXPORT ChFiDS_ErrorStatus StripeStatus (const Standard_Integer IC) const; 179 180 //! Reset all results of compute and returns the algorithm 181 //! in the state of the last acquisition to enable modification of contours or areas. 182 Standard_EXPORT void Reset(); 183 184 //! Returns the Builder of topologic operations. 185 Standard_EXPORT Handle(TopOpeBRepBuild_HBuilder) Builder() const; 186 187 //! Method, implemented in the inheritants, calculates 188 //! the elements of construction of the surface (fillet or 189 //! chamfer). 190 Standard_EXPORT Standard_Boolean SplitKPart (const Handle(ChFiDS_SurfData)& Data, 191 ChFiDS_SequenceOfSurfData& SetData, 192 const Handle(ChFiDS_Spine)& Spine, 193 const Standard_Integer Iedge, 194 const Handle(Adaptor3d_Surface)& S1, 195 const Handle(Adaptor3d_TopolTool)& I1, 196 const Handle(Adaptor3d_Surface)& S2, 197 const Handle(Adaptor3d_TopolTool)& I2, 198 Standard_Boolean& Intf, 199 Standard_Boolean& Intl); 200 201 Standard_EXPORT Standard_Boolean PerformTwoCornerbyInter (const Standard_Integer Index); 202 203 204 205 206 protected: 207 208 209 Standard_EXPORT ChFi3d_Builder(const TopoDS_Shape& S, const Standard_Real Ta); 210 211 Standard_EXPORT virtual void SimulKPart (const Handle(ChFiDS_SurfData)& SD) const = 0; 212 213 Standard_EXPORT virtual Standard_Boolean SimulSurf (Handle(ChFiDS_SurfData)& Data, 214 const Handle(ChFiDS_ElSpine)& Guide, 215 const Handle(ChFiDS_Spine)& Spine, 216 const Standard_Integer Choix, 217 const Handle(BRepAdaptor_Surface)& S1, 218 const Handle(Adaptor3d_TopolTool)& I1, 219 const Handle(BRepAdaptor_Surface)& S2, 220 const Handle(Adaptor3d_TopolTool)& I2, 221 const Standard_Real TolGuide, 222 Standard_Real& First, 223 Standard_Real& Last, 224 const Standard_Boolean Inside, 225 const Standard_Boolean Appro, 226 const Standard_Boolean Forward, 227 const Standard_Boolean RecOnS1, 228 const Standard_Boolean RecOnS2, 229 const math_Vector& Soldep, 230 Standard_Integer& Intf, 231 Standard_Integer& Intl) = 0; 232 233 Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data, 234 const Handle(ChFiDS_ElSpine)& Guide, 235 const Handle(ChFiDS_Spine)& Spine, 236 const Standard_Integer Choix, 237 const Handle(BRepAdaptor_Surface)& S1, 238 const Handle(Adaptor3d_TopolTool)& I1, 239 const Handle(BRepAdaptor_Curve2d)& PC1, 240 const Handle(BRepAdaptor_Surface)& Sref1, 241 const Handle(BRepAdaptor_Curve2d)& PCref1, 242 Standard_Boolean& Decroch1, 243 const Handle(BRepAdaptor_Surface)& S2, 244 const Handle(Adaptor3d_TopolTool)& I2, 245 const TopAbs_Orientation Or2, 246 const Standard_Real Fleche, 247 const Standard_Real TolGuide, 248 Standard_Real& First, 249 Standard_Real& Last, 250 const Standard_Boolean Inside, 251 const Standard_Boolean Appro, 252 const Standard_Boolean Forward, 253 const Standard_Boolean RecP, 254 const Standard_Boolean RecS, 255 const Standard_Boolean RecRst, 256 const math_Vector& Soldep); 257 258 Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data, 259 const Handle(ChFiDS_ElSpine)& Guide, 260 const Handle(ChFiDS_Spine)& Spine, 261 const Standard_Integer Choix, 262 const Handle(BRepAdaptor_Surface)& S1, 263 const Handle(Adaptor3d_TopolTool)& I1, 264 const TopAbs_Orientation Or1, 265 const Handle(BRepAdaptor_Surface)& S2, 266 const Handle(Adaptor3d_TopolTool)& I2, 267 const Handle(BRepAdaptor_Curve2d)& PC2, 268 const Handle(BRepAdaptor_Surface)& Sref2, 269 const Handle(BRepAdaptor_Curve2d)& PCref2, 270 Standard_Boolean& Decroch2, 271 const Standard_Real Fleche, 272 const Standard_Real TolGuide, 273 Standard_Real& First, 274 Standard_Real& Last, 275 const Standard_Boolean Inside, 276 const Standard_Boolean Appro, 277 const Standard_Boolean Forward, 278 const Standard_Boolean RecP, 279 const Standard_Boolean RecS, 280 const Standard_Boolean RecRst, 281 const math_Vector& Soldep); 282 283 Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data, 284 const Handle(ChFiDS_ElSpine)& Guide, 285 const Handle(ChFiDS_Spine)& Spine, 286 const Standard_Integer Choix, 287 const Handle(BRepAdaptor_Surface)& S1, 288 const Handle(Adaptor3d_TopolTool)& I1, 289 const Handle(BRepAdaptor_Curve2d)& PC1, 290 const Handle(BRepAdaptor_Surface)& Sref1, 291 const Handle(BRepAdaptor_Curve2d)& PCref1, 292 Standard_Boolean& Decroch1, 293 const TopAbs_Orientation Or1, 294 const Handle(BRepAdaptor_Surface)& S2, 295 const Handle(Adaptor3d_TopolTool)& I2, 296 const Handle(BRepAdaptor_Curve2d)& PC2, 297 const Handle(BRepAdaptor_Surface)& Sref2, 298 const Handle(BRepAdaptor_Curve2d)& PCref2, 299 Standard_Boolean& Decroch2, 300 const TopAbs_Orientation Or2, 301 const Standard_Real Fleche, 302 const Standard_Real TolGuide, 303 Standard_Real& First, 304 Standard_Real& Last, 305 const Standard_Boolean Inside, 306 const Standard_Boolean Appro, 307 const Standard_Boolean Forward, 308 const Standard_Boolean RecP1, 309 const Standard_Boolean RecRst1, 310 const Standard_Boolean RecP2, 311 const Standard_Boolean RecRst2, 312 const math_Vector& Soldep); 313 314 Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data, 315 const Handle(ChFiDS_ElSpine)& Guide, 316 const Handle(ChFiDS_ElSpine)& AdditionalGuide, 317 Handle(BRepBlend_Line)& Lin, 318 const Handle(Adaptor3d_Surface)& S1, 319 const Handle(Adaptor3d_TopolTool)& I1, 320 const Handle(Adaptor3d_Surface)& S2, 321 const Handle(Adaptor3d_TopolTool)& I2, 322 Blend_Function& Func, 323 Blend_FuncInv& FInv, 324 const Standard_Real PFirst, 325 const Standard_Real MaxStep, 326 const Standard_Real Fleche, 327 const Standard_Real TolGuide, 328 Standard_Real& First, 329 Standard_Real& Last, 330 const Standard_Boolean Inside, 331 const Standard_Boolean Appro, 332 const Standard_Boolean Forward, 333 const math_Vector& Soldep, 334 const Standard_Integer NbSecMin, 335 const Standard_Boolean RecOnS1 = Standard_False, 336 const Standard_Boolean RecOnS2 = Standard_False); 337 338 Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data, 339 const Handle(ChFiDS_ElSpine)& HGuide, 340 Handle(BRepBlend_Line)& Lin, 341 const Handle(Adaptor3d_Surface)& S1, 342 const Handle(Adaptor3d_TopolTool)& I1, 343 const Handle(Adaptor3d_Surface)& S2, 344 const Handle(Adaptor2d_Curve2d)& PC2, 345 const Handle(Adaptor3d_TopolTool)& I2, 346 Standard_Boolean& Decroch, 347 Blend_SurfRstFunction& Func, 348 Blend_FuncInv& FInv, 349 Blend_SurfPointFuncInv& FInvP, 350 Blend_SurfCurvFuncInv& FInvC, 351 const Standard_Real PFirst, 352 const Standard_Real MaxStep, 353 const Standard_Real Fleche, 354 const Standard_Real TolGuide, 355 Standard_Real& First, 356 Standard_Real& Last, 357 const math_Vector& Soldep, 358 const Standard_Integer NbSecMin, 359 const Standard_Boolean Inside, 360 const Standard_Boolean Appro, 361 const Standard_Boolean Forward, 362 const Standard_Boolean RecP, 363 const Standard_Boolean RecS, 364 const Standard_Boolean RecRst); 365 366 Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data, 367 const Handle(ChFiDS_ElSpine)& HGuide, 368 Handle(BRepBlend_Line)& Lin, 369 const Handle(Adaptor3d_Surface)& S1, 370 const Handle(Adaptor2d_Curve2d)& PC1, 371 const Handle(Adaptor3d_TopolTool)& I1, 372 Standard_Boolean& Decroch1, 373 const Handle(Adaptor3d_Surface)& S2, 374 const Handle(Adaptor2d_Curve2d)& PC2, 375 const Handle(Adaptor3d_TopolTool)& I2, 376 Standard_Boolean& Decroch2, 377 Blend_RstRstFunction& Func, 378 Blend_SurfCurvFuncInv& FInv1, 379 Blend_CurvPointFuncInv& FInvP1, 380 Blend_SurfCurvFuncInv& FInv2, 381 Blend_CurvPointFuncInv& FInvP2, 382 const Standard_Real PFirst, 383 const Standard_Real MaxStep, 384 const Standard_Real Fleche, 385 const Standard_Real TolGuide, 386 Standard_Real& First, 387 Standard_Real& Last, 388 const math_Vector& Soldep, 389 const Standard_Integer NbSecMin, 390 const Standard_Boolean Inside, 391 const Standard_Boolean Appro, 392 const Standard_Boolean Forward, 393 const Standard_Boolean RecP1, 394 const Standard_Boolean RecRst1, 395 const Standard_Boolean RecP2, 396 const Standard_Boolean RecRst2); 397 398 Standard_EXPORT virtual void SetRegul() = 0; 399 400 Standard_EXPORT Standard_Boolean PerformElement (const Handle(ChFiDS_Spine)& CElement, 401 const Standard_Real Offset, 402 const TopoDS_Face& theFirstFace); 403 404 Standard_EXPORT void PerformExtremity (const Handle(ChFiDS_Spine)& CElement); 405 406 Standard_EXPORT void PerformSetOfSurf (Handle(ChFiDS_Stripe)& S, 407 const Standard_Boolean Simul = Standard_False); 408 409 Standard_EXPORT void PerformSetOfKPart (Handle(ChFiDS_Stripe)& S, 410 const Standard_Boolean Simul = Standard_False); 411 412 Standard_EXPORT void PerformSetOfKGen (Handle(ChFiDS_Stripe)& S, 413 const Standard_Boolean Simul = Standard_False); 414 415 Standard_EXPORT void Trunc (const Handle(ChFiDS_SurfData)& SD, 416 const Handle(ChFiDS_Spine)& Spine, 417 const Handle(Adaptor3d_Surface)& S1, 418 const Handle(Adaptor3d_Surface)& S2, 419 const Standard_Integer iedge, 420 const Standard_Boolean isfirst, 421 const Standard_Integer cntlFiOnS); 422 423 Standard_EXPORT void CallPerformSurf (Handle(ChFiDS_Stripe)& Stripe, 424 const Standard_Boolean Simul, 425 ChFiDS_SequenceOfSurfData& SeqSD, 426 Handle(ChFiDS_SurfData)& SD, 427 const Handle(ChFiDS_ElSpine)& Guide, 428 const Handle(ChFiDS_Spine)& Spine, 429 const Handle(BRepAdaptor_Surface)& HS1, 430 const Handle(BRepAdaptor_Surface)& HS3, 431 const gp_Pnt2d& P1, 432 const gp_Pnt2d& P3, 433 const Handle(Adaptor3d_TopolTool)& I1, 434 const Handle(BRepAdaptor_Surface)& HS2, 435 const Handle(BRepAdaptor_Surface)& HS4, 436 const gp_Pnt2d& P2, const gp_Pnt2d& P4, 437 const Handle(Adaptor3d_TopolTool)& I2, 438 const Standard_Real MaxStep, 439 const Standard_Real Fleche, 440 const Standard_Real TolGuide, 441 Standard_Real& First, 442 Standard_Real& Last, 443 const Standard_Boolean Inside, 444 const Standard_Boolean Appro, 445 const Standard_Boolean Forward, 446 const Standard_Boolean RecOnS1, 447 const Standard_Boolean RecOnS2, 448 math_Vector& Soldep, 449 Standard_Integer& Intf, 450 Standard_Integer& Intl, 451 Handle(BRepAdaptor_Surface)& Surf1, 452 Handle(BRepAdaptor_Surface)& Surf2); 453 454 //! Method, implemented in the inheritants, calculating 455 //! elements of construction of the surface (fillet or 456 //! chamfer). 457 Standard_EXPORT virtual Standard_Boolean PerformSurf (ChFiDS_SequenceOfSurfData& Data, 458 const Handle(ChFiDS_ElSpine)& Guide, 459 const Handle(ChFiDS_Spine)& Spine, 460 const Standard_Integer Choix, 461 const Handle(BRepAdaptor_Surface)& S1, 462 const Handle(Adaptor3d_TopolTool)& I1, 463 const Handle(BRepAdaptor_Surface)& S2, 464 const Handle(Adaptor3d_TopolTool)& I2, 465 const Standard_Real MaxStep, 466 const Standard_Real Fleche, 467 const Standard_Real TolGuide, 468 Standard_Real& First, 469 Standard_Real& Last, 470 const Standard_Boolean Inside, 471 const Standard_Boolean Appro, 472 const Standard_Boolean Forward, 473 const Standard_Boolean RecOnS1, 474 const Standard_Boolean RecOnS2, 475 const math_Vector& Soldep, 476 Standard_Integer& Intf, 477 Standard_Integer& Intl) = 0; 478 479 //! Method, implemented in inheritants, calculates 480 //! the elements of construction of the surface (fillet 481 //! or chamfer) contact edge/face. 482 Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data, 483 const Handle(ChFiDS_ElSpine)& Guide, 484 const Handle(ChFiDS_Spine)& Spine, 485 const Standard_Integer Choix, 486 const Handle(BRepAdaptor_Surface)& S1, 487 const Handle(Adaptor3d_TopolTool)& I1, 488 const Handle(BRepAdaptor_Curve2d)& PC1, 489 const Handle(BRepAdaptor_Surface)& Sref1, 490 const Handle(BRepAdaptor_Curve2d)& PCref1, 491 Standard_Boolean& Decroch1, 492 const Handle(BRepAdaptor_Surface)& S2, 493 const Handle(Adaptor3d_TopolTool)& I2, 494 const TopAbs_Orientation Or2, 495 const Standard_Real MaxStep, 496 const Standard_Real Fleche, 497 const Standard_Real TolGuide, 498 Standard_Real& First, 499 Standard_Real& Last, 500 const Standard_Boolean Inside, 501 const Standard_Boolean Appro, 502 const Standard_Boolean Forward, 503 const Standard_Boolean RecP, 504 const Standard_Boolean RecS, 505 const Standard_Boolean RecRst, 506 const math_Vector& Soldep); 507 508 //! Method, implemented in inheritants, calculates 509 //! the elements of construction of the surface (fillet 510 //! or chamfer) contact edge/face. 511 Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data, 512 const Handle(ChFiDS_ElSpine)& Guide, 513 const Handle(ChFiDS_Spine)& Spine, 514 const Standard_Integer Choix, 515 const Handle(BRepAdaptor_Surface)& S1, 516 const Handle(Adaptor3d_TopolTool)& I1, 517 const TopAbs_Orientation Or1, 518 const Handle(BRepAdaptor_Surface)& S2, 519 const Handle(Adaptor3d_TopolTool)& I2, 520 const Handle(BRepAdaptor_Curve2d)& PC2, 521 const Handle(BRepAdaptor_Surface)& Sref2, 522 const Handle(BRepAdaptor_Curve2d)& PCref2, 523 Standard_Boolean& Decroch2, 524 const Standard_Real MaxStep, 525 const Standard_Real Fleche, 526 const Standard_Real TolGuide, 527 Standard_Real& First, 528 Standard_Real& Last, 529 const Standard_Boolean Inside, 530 const Standard_Boolean Appro, 531 const Standard_Boolean Forward, 532 const Standard_Boolean RecP, 533 const Standard_Boolean RecS, 534 const Standard_Boolean RecRst, 535 const math_Vector& Soldep); 536 537 //! Method, implemented in inheritants, calculates 538 //! the elements of construction of the surface (fillet 539 //! or chamfer) contact edge/edge. 540 Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data, 541 const Handle(ChFiDS_ElSpine)& Guide, 542 const Handle(ChFiDS_Spine)& Spine, 543 const Standard_Integer Choix, 544 const Handle(BRepAdaptor_Surface)& S1, 545 const Handle(Adaptor3d_TopolTool)& I1, 546 const Handle(BRepAdaptor_Curve2d)& PC1, 547 const Handle(BRepAdaptor_Surface)& Sref1, 548 const Handle(BRepAdaptor_Curve2d)& PCref1, 549 Standard_Boolean& Decroch1, 550 const TopAbs_Orientation Or1, 551 const Handle(BRepAdaptor_Surface)& S2, 552 const Handle(Adaptor3d_TopolTool)& I2, 553 const Handle(BRepAdaptor_Curve2d)& PC2, 554 const Handle(BRepAdaptor_Surface)& Sref2, 555 const Handle(BRepAdaptor_Curve2d)& PCref2, 556 Standard_Boolean& Decroch2, 557 const TopAbs_Orientation Or2, 558 const Standard_Real MaxStep, 559 const Standard_Real Fleche, 560 const Standard_Real TolGuide, 561 Standard_Real& First, 562 Standard_Real& Last, 563 const Standard_Boolean Inside, 564 const Standard_Boolean Appro, 565 const Standard_Boolean Forward, 566 const Standard_Boolean RecP1, 567 const Standard_Boolean RecRst1, 568 const Standard_Boolean RecP2, 569 const Standard_Boolean RecRst2, 570 const math_Vector& Soldep); 571 572 Standard_EXPORT virtual void PerformTwoCorner (const Standard_Integer Index) = 0; 573 574 Standard_EXPORT virtual void PerformThreeCorner (const Standard_Integer Index) = 0; 575 576 Standard_EXPORT void PerformMoreThreeCorner (const Standard_Integer Index, 577 const Standard_Integer nbcourb); 578 579 Standard_EXPORT virtual void ExtentOneCorner (const TopoDS_Vertex& V, 580 const Handle(ChFiDS_Stripe)& S) = 0; 581 582 Standard_EXPORT virtual void ExtentTwoCorner (const TopoDS_Vertex& V, 583 const ChFiDS_ListOfStripe& LS) = 0; 584 585 Standard_EXPORT virtual void ExtentThreeCorner (const TopoDS_Vertex& V, 586 const ChFiDS_ListOfStripe& LS) = 0; 587 588 Standard_EXPORT virtual Standard_Boolean PerformFirstSection (const Handle(ChFiDS_Spine)& S, 589 const Handle(ChFiDS_ElSpine)& HGuide, 590 const Standard_Integer Choix, 591 Handle(BRepAdaptor_Surface)& S1, 592 Handle(BRepAdaptor_Surface)& S2, 593 const Handle(Adaptor3d_TopolTool)& I1, 594 const Handle(Adaptor3d_TopolTool)& I2, 595 const Standard_Real Par, 596 math_Vector& SolDep, 597 TopAbs_State& Pos1, 598 TopAbs_State& Pos2) const = 0; 599 600 Standard_EXPORT Standard_Boolean SearchFace (const Handle(ChFiDS_Spine)& Sp, 601 const ChFiDS_CommonPoint& Pc, 602 const TopoDS_Face& FRef, 603 TopoDS_Face& FVoi) const; 604 605 Standard_EXPORT Standard_Boolean StripeOrientations (const Handle(ChFiDS_Spine)& Sp, 606 TopAbs_Orientation& Or1, 607 TopAbs_Orientation& Or2, 608 Standard_Integer& ChoixConge) const; 609 610 //! Calculates a Line of contact face/face. 611 Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data, 612 const Handle(ChFiDS_ElSpine)& Guide, 613 const Handle(ChFiDS_Spine)& Spine, 614 Handle(BRepBlend_Line)& Lin, 615 const Handle(Adaptor3d_Surface)& S1, 616 const Handle(Adaptor3d_TopolTool)& I1, 617 const Handle(Adaptor3d_Surface)& S2, 618 const Handle(Adaptor3d_TopolTool)& I2, 619 Blend_Function& Func, 620 Blend_FuncInv& FInv, 621 const Standard_Real PFirst, 622 const Standard_Real MaxStep, 623 const Standard_Real Fleche, 624 const Standard_Real TolGuide, 625 Standard_Real& First, 626 Standard_Real& Last, 627 const Standard_Boolean Inside, 628 const Standard_Boolean Appro, 629 const Standard_Boolean Forward, 630 const math_Vector& Soldep, 631 Standard_Integer& Intf, 632 Standard_Integer& Intl, 633 Standard_Boolean& Gd1, 634 Standard_Boolean& Gd2, 635 Standard_Boolean& Gf1, 636 Standard_Boolean& Gf2, 637 const Standard_Boolean RecOnS1 = Standard_False, 638 const Standard_Boolean RecOnS2 = Standard_False); 639 640 //! Calculates a Line of contact edge/face. 641 Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data, 642 const Handle(ChFiDS_ElSpine)& HGuide, 643 Handle(BRepBlend_Line)& Lin, 644 const Handle(Adaptor3d_Surface)& S1, 645 const Handle(Adaptor3d_TopolTool)& I1, 646 const Handle(Adaptor3d_Surface)& S2, 647 const Handle(Adaptor2d_Curve2d)& PC2, 648 const Handle(Adaptor3d_TopolTool)& I2, 649 Standard_Boolean& Decroch, 650 Blend_SurfRstFunction& Func, 651 Blend_FuncInv& FInv, 652 Blend_SurfPointFuncInv& FInvP, 653 Blend_SurfCurvFuncInv& FInvC, 654 const Standard_Real PFirst, 655 const Standard_Real MaxStep, 656 const Standard_Real Fleche, 657 const Standard_Real TolGuide, 658 Standard_Real& First, 659 Standard_Real& Last, 660 const math_Vector& Soldep, 661 const Standard_Boolean Inside, 662 const Standard_Boolean Appro, 663 const Standard_Boolean Forward, 664 const Standard_Boolean RecP, 665 const Standard_Boolean RecS, 666 const Standard_Boolean RecRst); 667 668 //! Calculates a Line of contact edge/edge. 669 Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data, 670 const Handle(ChFiDS_ElSpine)& HGuide, 671 Handle(BRepBlend_Line)& Lin, 672 const Handle(Adaptor3d_Surface)& S1, 673 const Handle(Adaptor2d_Curve2d)& PC1, 674 const Handle(Adaptor3d_TopolTool)& I1, 675 Standard_Boolean& Decroch1, 676 const Handle(Adaptor3d_Surface)& S2, 677 const Handle(Adaptor2d_Curve2d)& PC2, 678 const Handle(Adaptor3d_TopolTool)& I2, 679 Standard_Boolean& Decroch2, 680 Blend_RstRstFunction& Func, 681 Blend_SurfCurvFuncInv& FInv1, 682 Blend_CurvPointFuncInv& FInvP1, 683 Blend_SurfCurvFuncInv& FInv2, 684 Blend_CurvPointFuncInv& FInvP2, 685 const Standard_Real PFirst, 686 const Standard_Real MaxStep, 687 const Standard_Real Fleche, 688 const Standard_Real TolGuide, 689 Standard_Real& First, 690 Standard_Real& Last, 691 const math_Vector& Soldep, 692 const Standard_Boolean Inside, 693 const Standard_Boolean Appro, 694 const Standard_Boolean Forward, 695 const Standard_Boolean RecP1, 696 const Standard_Boolean RecRst1, 697 const Standard_Boolean RecP2, 698 const Standard_Boolean RecRst2); 699 700 Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, 701 Blend_Function& Func, 702 Handle(BRepBlend_Line)& Lin, 703 const Handle(Adaptor3d_Surface)& S1, 704 const Handle(Adaptor3d_Surface)& S2, 705 const TopAbs_Orientation Or1, 706 const Standard_Boolean Gd1, 707 const Standard_Boolean Gd2, 708 const Standard_Boolean Gf1, 709 const Standard_Boolean Gf2, 710 const Standard_Boolean Reversed = Standard_False); 711 712 Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, 713 Blend_SurfRstFunction& Func, 714 Handle(BRepBlend_Line)& Lin, 715 const Handle(Adaptor3d_Surface)& S1, 716 const Handle(Adaptor3d_Surface)& S2, 717 const TopAbs_Orientation Or, 718 const Standard_Boolean Reversed); 719 720 Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, 721 Blend_RstRstFunction& Func, 722 Handle(BRepBlend_Line)& Lin, 723 const Handle(Adaptor3d_Surface)& S1, 724 const Handle(Adaptor3d_Surface)& S2, 725 const TopAbs_Orientation Or); 726 727 Standard_EXPORT Standard_Boolean StoreData (Handle(ChFiDS_SurfData)& Data, 728 const AppBlend_Approx& Approx, 729 const Handle(BRepBlend_Line)& Lin, 730 const Handle(Adaptor3d_Surface)& S1, 731 const Handle(Adaptor3d_Surface)& S2, 732 const TopAbs_Orientation Or1, 733 const Standard_Boolean Gd1, 734 const Standard_Boolean Gd2, 735 const Standard_Boolean Gf1, 736 const Standard_Boolean Gf2, 737 const Standard_Boolean Reversed = Standard_False); 738 739 Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, 740 const Handle(Geom_Surface)& Surfcoin, 741 const Handle(Adaptor3d_Surface)& S1, 742 const Handle(Geom2d_Curve)& PC1, 743 const Handle(Adaptor3d_Surface)& S2, 744 const Handle(Geom2d_Curve)& PC2, 745 const TopAbs_Orientation Or, 746 const Standard_Boolean On1, 747 const Standard_Boolean Gd1, 748 const Standard_Boolean Gd2, 749 const Standard_Boolean Gf1, 750 const Standard_Boolean Gf2); 751 752 753 Standard_Real tolappangle; 754 Standard_Real tolesp; 755 Standard_Real tol2d; 756 Standard_Real tolapp3d; 757 Standard_Real tolapp2d; 758 Standard_Real fleche; 759 GeomAbs_Shape myConti; 760 ChFiDS_Map myEFMap; 761 ChFiDS_Map myESoMap; 762 ChFiDS_Map myEShMap; 763 ChFiDS_Map myVFMap; 764 ChFiDS_Map myVEMap; 765 Handle(TopOpeBRepDS_HDataStructure) myDS; 766 Handle(TopOpeBRepBuild_HBuilder) myCoup; 767 ChFiDS_ListOfStripe myListStripe; 768 ChFiDS_StripeMap myVDataMap; 769 ChFiDS_Regularities myRegul; 770 ChFiDS_ListOfStripe badstripes; 771 TopTools_ListOfShape badvertices; 772 TopTools_DataMapOfShapeListOfInteger myEVIMap; 773 TopTools_DataMapOfShapeShape myEdgeFirstFace; 774 Standard_Boolean done; 775 Standard_Boolean hasresult; 776 777 778 private: 779 780 781 Standard_EXPORT Standard_Boolean FaceTangency (const TopoDS_Edge& E0, 782 const TopoDS_Edge& E1, 783 const TopoDS_Vertex& V) const; 784 785 Standard_EXPORT void PerformSetOfSurfOnElSpine (const Handle(ChFiDS_ElSpine)& ES, 786 Handle(ChFiDS_Stripe)& St, 787 Handle(BRepTopAdaptor_TopolTool)& It1, 788 Handle(BRepTopAdaptor_TopolTool)& It2, 789 const Standard_Boolean Simul = Standard_False); 790 791 Standard_EXPORT void PerformFilletOnVertex (const Standard_Integer Index); 792 793 Standard_EXPORT void PerformSingularCorner (const Standard_Integer Index); 794 795 Standard_EXPORT void PerformOneCorner (const Standard_Integer Index, 796 const Standard_Boolean PrepareOnSame = Standard_False); 797 798 Standard_EXPORT void IntersectMoreCorner (const Standard_Integer Index); 799 800 Standard_EXPORT void PerformMoreSurfdata (const Standard_Integer Index); 801 802 Standard_EXPORT void PerformIntersectionAtEnd (const Standard_Integer Index); 803 804 Standard_EXPORT void ExtentAnalyse(); 805 806 Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V, 807 const ChFiDS_CommonPoint& P1, 808 const ChFiDS_CommonPoint& P2, 809 TopoDS_Face& Fv) const; 810 811 Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V, 812 const ChFiDS_CommonPoint& P1, 813 const ChFiDS_CommonPoint& P2, 814 TopoDS_Face& Fv, 815 const TopoDS_Face& Favoid) const; 816 817 Standard_EXPORT Standard_Boolean MoreSurfdata (const Standard_Integer Index) const; 818 819 Standard_EXPORT Standard_Boolean StartSol (const Handle(ChFiDS_Spine)& Spine, 820 Handle(BRepAdaptor_Surface)& HS, 821 gp_Pnt2d& P, 822 Handle(BRepAdaptor_Curve2d)& HC, 823 Standard_Real& W, 824 const Handle(ChFiDS_SurfData)& SD, 825 const Standard_Boolean isFirst, 826 const Standard_Integer OnS, 827 Handle(BRepAdaptor_Surface)& HSref, 828 Handle(BRepAdaptor_Curve2d)& HCref, 829 Standard_Boolean& RecP, 830 Standard_Boolean& RecS, 831 Standard_Boolean& RecRst, 832 Standard_Boolean& C1Obst, 833 Handle(BRepAdaptor_Surface)& HSbis, 834 gp_Pnt2d& Pbis, 835 const Standard_Boolean Decroch, 836 const TopoDS_Vertex& Vref) const; 837 838 Standard_EXPORT void StartSol (const Handle(ChFiDS_Stripe)& S, 839 const Handle(ChFiDS_ElSpine)& HGuide, 840 Handle(BRepAdaptor_Surface)& HS1, 841 Handle(BRepAdaptor_Surface)& HS2, 842 Handle(BRepTopAdaptor_TopolTool)& I1, 843 Handle(BRepTopAdaptor_TopolTool)& I2, 844 gp_Pnt2d& P1, 845 gp_Pnt2d& P2, 846 Standard_Real& First) const; 847 848 Standard_EXPORT void ConexFaces (const Handle(ChFiDS_Spine)& Sp, 849 const Standard_Integer IEdge, 850 Handle(BRepAdaptor_Surface)& HS1, 851 Handle(BRepAdaptor_Surface)& HS2) const; 852 853 854 TopoDS_Shape myShape; 855 Standard_Real angular; 856 TopTools_ListOfShape myGenerated; 857 TopoDS_Shape myShapeResult; 858 TopoDS_Shape badShape; 859 860 861 }; 862 863 864 865 866 867 868 869 #endif // _ChFi3d_Builder_HeaderFile 870