HYDROData_Canal3dAnd2d::HYDROData_Canal3dAnd2d(const TopoDS_Wire& Profile,
const TopoDS_Wire& Guideline)
- : myProfile(Profile), myOriginalGuideline(Guideline)
+ : myProfile(Profile), myOriginalGuideline(Guideline), myStatus(0)
{
TopExp::Vertices(myProfile, myLeftVertex, myRightVertex);
gp_Pnt LeftPoint = BRep_Tool::Pnt(myLeftVertex);
MakeSharpVertexList();
if (!mySharpVertexList.IsEmpty())
MakeFillet();
+ else
+ myGuideline = myOriginalGuideline;
- ProjectWireOntoXOY(myGuideline, myProjectedGuideline);
- Make2dProfile();
- SetMiddlePoint2d();
- SetMiddlePoint3d();
+ if (myStatus == 0)
+ {
+ if (ProjectWireOntoXOY(myGuideline, myProjectedGuideline))
+ {
+ Make2dProfile();
+ SetMiddlePoint2d();
+ SetMiddlePoint3d();
+ }
+ }
}
void HYDROData_Canal3dAnd2d::MakeSharpVertexList()
TopoDS_Wire LocalWire = BRepLib_MakeWire(anEdge1, anEdge2);
//if ( !takePlane(anEdge1, anEdge2, aV, aPlane) )
if (!PlaneOfWire(LocalWire, aPlane))
+ {
+ myStatus = 1;
return Standard_False; // seems edges does not belong to same plane or parallel (fillet can not be build)
+ }
GEOMImpl_Fillet1d aFilletAlgo (anEdge1, anEdge2, aPlane);
if (!aFilletAlgo.Perform(myFilletRadius)) {
+ myStatus = 2;
return Standard_False; //can not create fillet at this vertex with given radius
}
TopoDS_Edge aModifE1, aModifE2;
TopoDS_Edge aNewE = aFilletAlgo.Result(BRep_Tool::Pnt(aV), aModifE1, aModifE2);
if (aNewE.IsNull()) {
+ myStatus = 3;
return Standard_False; //fillet failed at this vertex
}
}
if (anEdgeToEdgeMap.IsEmpty() && aListOfNewEdge.IsEmpty()) {
+ myStatus = 4;
return Standard_False; //fillet can't be computed on the given shape with the given radius
}
OrtProj.BuildWire(Wires);
if (Wires.Extent() != 1)
+ {
+ myStatus = 5;
return Standard_False;
+ }
ProjectedWire = TopoDS::Wire(Wires.First());
return Standard_True;
mySweep3d = new BRepOffsetAPI_MakePipeShell(myGuideline);
mySweep3d->SetMode(gp::DZ()); //optional
mySweep3d->Add(myTransformedProfile3d);
- //mySweep3d->SetTransitionMode(BRepBuilderAPI_RightCorner); //optional
+ //Set approx parameters
+ mySweep3d->SetMaxDegree(14);
+ mySweep3d->SetMaxSegments(500);
+ ///////////////////////
mySweep3d->Build();
if (!mySweep3d->IsDone())
+ {
+ myStatus = 6;
return Standard_False;
+ }
myPipe3d = mySweep3d->Shape();
return Standard_True;
mySweep2d = new BRepOffsetAPI_MakePipeShell(myProjectedGuideline);
mySweep2d->SetMode(gp::DZ()); //optional
mySweep2d->Add(myTransformedProfile2d);
- //mySweep2d->SetTransitionMode(BRepBuilderAPI_RightCorner); //optional
+ //Set approx parameters
+ mySweep2d->SetMaxDegree(14);
+ mySweep2d->SetMaxSegments(500);
+ ///////////////////////
mySweep2d->Build();
if (!mySweep2d->IsDone())
+ {
+ myStatus = 7;
return Standard_False;
+ }
myPipe2d = mySweep2d->Shape();
myUnifier.Initialize(myPipe2d);
return GetBank(myRightVertex2d);
}
+Standard_Integer HYDROData_Canal3dAnd2d::GetStatus()
+{
+ return myStatus;
+}
+
+
/*TopoDS_Wire HYDROData_Canal3dAnd2d::GetRoundedGuideline()
{
return myGuideline;