simpler.
Tolerance post Build (Perform) fix was made for:
- BRepAlgoAPI_BooleanOperation,
- BRepFeat_MakePrism,
- BRepOffsetAPI_MakePipeShell.
Draw command getsourcefile now returns result for:
- buildsweep,
- simulsweep,
- geompipe.
Conflicts:
src/BRepAlgoAPI/BRepAlgoAPI_BooleanOperation.cxx
const TopoDS_Shape& aS2 = myS2;
//
myShape.Nullify();
+ //
+ // SECTION
+ //
+ if (myOperation==BOP_SECTION) {
+ myBuilder=new BOP_Section;
+ }
+ //
+ // COMMON, FUSE, CUT12, CUT21
+ //
+ else if (myOperation==BOP_COMMON || myOperation==BOP_FUSE ||
+ myOperation==BOP_CUT || myOperation==BOP_CUT21) {
+ //
+ // Check whether one or both of the arguments is(are) empty shape(s)
+ // If yes, create BOP_EmptyBuilder object and build the result fast.
+ {
+ Standard_Boolean bIsEmptyShape1, bIsEmptyShape2;
+
+ bIsEmptyShape1=BOPTools_Tools3D::IsEmptyShape(aS1);
+ bIsEmptyShape2=BOPTools_Tools3D::IsEmptyShape(aS2);
+ //
+ if (bIsEmptyShape1 || bIsEmptyShape2) {
+ myBuilder=new BOP_EmptyBuilder;
+ //
+ if (myBuilder==NULL) {
+ myErrorStatus=7;
+ return ;
+ }
+ //
+ myBuilder->SetShapes(aS1, aS2);
+ myBuilder->SetOperation (myOperation);
+ myBuilder->DoWithFiller (*myDSFiller);
+
+ bIsDone=myBuilder->IsDone();
+
+ if (bIsDone) {
+ myErrorStatus=0;
+ myBuilderCanWork=Standard_True;
+ myShape=myBuilder->Result();
+ EnsureToleranceRule(myShape);
+ Done();
+ }
+ else {
+ myErrorStatus=100+myBuilder->ErrorStatus();
+ NotDone();
+ }
+ return;
+ }
+ }
+ //
+ TopAbs_ShapeEnum aT1, aT2;
myBuilder=new BOPAlgo_BOP;
myBuilder->AddArgument(aS1);
myErrorStatus=0;
myBuilderCanWork=Standard_True;
myShape=myBuilder->Shape();
+ EnsureToleranceRule(myShape);
Done();
}
else {
for (TopExp_Explorer aFE(theS, TopAbs_FACE); aFE.More(); aFE.Next())
{
TopoDS_Face aF = TopoDS::Face(aFE.Current());
- Standard_Real aFT = (*((Handle_BRep_TFace *)&aF.TShape()))->Tolerance();
+ Standard_Real aFT = ((Handle_BRep_TFace &)aF.TShape())->Tolerance();
//
for (TopExp_Explorer anEE(aF, TopAbs_EDGE); anEE.More(); anEE.Next())
{
TopoDS_Edge anES = TopoDS::Edge(anEE.Current());
- Handle_BRep_TEdge & anEG = *(Handle_BRep_TEdge *)&anES.TShape();
+ Handle_BRep_TEdge & anEG = (Handle_BRep_TEdge &)anES.TShape();
Standard_Real anET = anEG->Tolerance();
if (anET < aFT)
{
for (TopExp_Explorer aVE(anES, TopAbs_VERTEX); aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
- Handle_BRep_TVertex & aVG = *(Handle_BRep_TVertex *)&aVS.TShape();
+ Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
aVG->UpdateTolerance(anET);
}
}
aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
- Handle_BRep_TVertex & aVG = *(Handle_BRep_TVertex *)&aVS.TShape();
+ Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
aVG->UpdateTolerance(aFT);
}
}
anEE.More(); anEE.Next())
{
TopoDS_Edge anES = TopoDS::Edge(anEE.Current());
- Handle_BRep_TEdge & anEG = *(Handle_BRep_TEdge *)&anES.TShape();
+ Handle_BRep_TEdge & anEG = (Handle_BRep_TEdge &)anES.TShape();
Standard_Real anET = anEG->Tolerance();
for (TopExp_Explorer aVE(anES, TopAbs_VERTEX); aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
- Handle_BRep_TVertex & aVG = *(Handle_BRep_TVertex *)&aVS.TShape();
+ Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
aVG->UpdateTolerance(anET);
}
}
}
}
}
+ EnsureToleranceRule(myShape);
/* // loop of control of descendance
TopExp_Explorer expr(mySbase, TopAbs_FACE);
Ok = myPipe->Build();
if (Ok) {
myShape = myPipe->Shape();
+ EnsureToleranceRule(myShape);
Done();
}
else NotDone();
"deletesweep wire, To delete a section",
__FILE__,deletesweep,g);
- theCommands.Add("buildsweep", "builsweep [r] [option] [Tol] , no args to get help"
+ theCommands.Add("buildsweep", "buildsweep [r] [option] [Tol] , no args to get help",
__FILE__,buildsweep,g);
- theCommands.Add("simulsweep", "simulsweep r [n] [option]"
+ theCommands.Add("simulsweep", "simulsweep r [n] [option]",
__FILE__,simulsweep,g);
- theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]"
+ theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]",
__FILE__,geompipe,g);
theCommands.Add("middlepath", "middlepath res shape startshape endshape",