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);
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->Build();
if (!mySweep3d->IsDone())
+ {
+ myStatus = 6;
return Standard_False;
+ }
myPipe3d = mySweep3d->Shape();
return Standard_True;
///////////////////////
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;
TopoDS_Wire GetRightBank();
TopoDS_Wire GetInlet();
TopoDS_Wire GetOutlet();
+ Standard_Integer GetStatus();
void MakeSharpVertexList();
//TopoDS_Shape myLeftBank;
//TopoDS_Shape myRightBank;
+ Standard_Integer myStatus;
+ //0 - Ok
+ //1 - some edges does not belong to same plane or parallel (fillet can not be build)
+ //2 - can not create fillet at some vertex with given radius: the length of some edge is too small respective to width of canal
+ //3 - fillet failed at some vertex
+ //4 - fillet failed
+ //5 - projection failed
+ //6 - sweep 3d failed
+ //7 - sweep 2d failed
+
Standard_Real myFilletRadius;
TopTools_ListOfShape mySharpVertexList;
Standard_Real myTolAngular;