diff --git a/src/BOPTest/BOPTest_LowCommands.cxx b/src/BOPTest/BOPTest_LowCommands.cxx index 13b2d7a3c3..69c8f357cf 100755 --- a/src/BOPTest/BOPTest_LowCommands.cxx +++ b/src/BOPTest/BOPTest_LowCommands.cxx @@ -33,18 +33,37 @@ #include #include + #include +#include +#include +#include +#include #include #include #include +#include + static void PrintState (Draw_Interpretor& aDI, const TopAbs_State& aState); +static + Handle(Geom2d_Curve) CurveOnSurface(const TopoDS_Edge& E, + const TopoDS_Face& F, + Standard_Real& First, + Standard_Real& Last); +static + Handle(Geom2d_Curve) CurveOnSurface(const TopoDS_Edge& E, + const Handle(Geom_Surface)& S, + const TopLoc_Location& L, + Standard_Real& First, + Standard_Real& Last); static Standard_Integer bclassify (Draw_Interpretor& , Standard_Integer , const char** ); static Standard_Integer b2dclassify (Draw_Interpretor& , Standard_Integer , const char** ); +static Standard_Integer bhaspc (Draw_Interpretor& , Standard_Integer , const char** ); //======================================================================= //function : LowCommands @@ -61,9 +80,10 @@ static Standard_Integer b2dclassify (Draw_Interpretor& , Standard_Integer , con __FILE__, bclassify , g); theCommands.Add("b2dclassify" , "Use >bclassify Face Point2d [Tol2D=Tol(Face)] ", __FILE__, b2dclassify , g); + theCommands.Add("bhaspc" , "Use >bhaspc Edge Face [do]", + __FILE__, bhaspc , g); } - //======================================================================= //function : bclassify //purpose : @@ -165,6 +185,51 @@ Standard_Integer b2dclassify (Draw_Interpretor& aDI, return 0; } +//======================================================================= +//function : bhaspc +//purpose : +//======================================================================= +Standard_Integer bhaspc (Draw_Interpretor& di, Standard_Integer n, const char** a) +{ + if (n<3) { + di << " Use bhaspc> Edge Face [do]\n"; + return 1; + } + + TopoDS_Shape S1 = DBRep::Get(a[1]); + TopoDS_Shape S2 = DBRep::Get(a[2]); + + if (S1.IsNull() || S2.IsNull()) { + di << " Null shapes are not allowed \n"; + return 1; + } + if (S1.ShapeType()!=TopAbs_EDGE || S2.ShapeType()!=TopAbs_FACE) { + di << " Type mismatch\n"; + return 1; + } + // + const TopoDS_Edge& aE=TopoDS::Edge(S1); + const TopoDS_Face& aF=TopoDS::Face(S2); + Standard_Real f2D, l2D; + + Handle(Geom2d_Curve) C2D=CurveOnSurface(aE, aF, f2D, l2D); + + if (C2D.IsNull()) { + di << " No 2D Curves detected\n"; + } + else { + di << " Ok Edge has P-Curve on this Face\n"; + } + + if (n==4) { + if (!strcmp(a[3], "do")) { + BOPTools_AlgoTools2D::BuildPCurveForEdgeOnFace(aE, aF); + } + } + + return 0; +} + //======================================================================= //function : PrintState //purpose : @@ -200,3 +265,55 @@ void PrintState (Draw_Interpretor& aDI, aDI<ChangeCurves()); + + while (itcr.More()) { + const Handle(BRep_CurveRepresentation)& cr = itcr.Value(); + if (cr->IsCurveOnSurface(S,l)) { + const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr); + GC->Range(First,Last); + if (GC->IsCurveOnClosedSurface() && Eisreversed) + return GC->PCurve2(); + else + return GC->PCurve(); + } + itcr.Next(); + } + return nullPCurve; +} +