#include <Standard_Failure.hxx>
+#include <Bnd_OBB.hxx>
+#include <BRepBndLib.hxx>
+#include <OSD_Timer.hxx>
+
#include <limits>
//=======================================================================
for (;;)
aList.Append(Standard::Allocate(aBlockSizes[i]));
}
- catch (Standard_Failure)
+ catch (Standard_Failure const&)
{
aStatus |= OUMCatchOK;
}
std::pair<gp_Pnt, gp_Pnt> vertices;
clock_t t = clock();
- theDI << "\nRetrieving " << iterations << " vertices using approach A)...";
+ theDI << "\nRetrieving " << iterations << " vertices using approach A)...\n";
for (int i = 0; i < iterations; ++i)
{
vertices = getVerticesA(edge);
}
- theDI << "done in " << (clock() - t) / (double)CLOCKS_PER_SEC << " seconds\n";
+ theDI << "COUNTER RetrievingVertA" << ": " << (clock() - t) / (double)CLOCKS_PER_SEC << "\n";
t = clock();
- theDI << "\nRetrieving " << iterations << " vertices using approach B)...";
+ theDI << "\nRetrieving " << iterations << " vertices using approach B)...\n";
for (int i = 0; i < iterations; ++i)
{
vertices = getVerticesB(edge);
}
- theDI << "done in " << (clock() - t) / (double)CLOCKS_PER_SEC << " seconds\n";
+ theDI << "COUNTER RetrievingVertB" << ": " << (clock() - t) / (double)CLOCKS_PER_SEC << "\n";
return 0;
}
Geom2dAdaptor_Curve(normalLine),1e-9,g1,g1,g3);
aDuumyList.Append(aCircleBuilder.NbSolutions());
}
- catch(Standard_Failure)
+ catch(Standard_Failure const&)
{
theDI << "Exception was caught\n";
}
DBRep::Set(theArgVal[2], bsp_face1);
}
}
- catch (Standard_Failure)
+ catch (Standard_Failure const&)
{
theDI << "ERROR: Exception in GeomFill_NSections\n";
}
return 0;
}
+//=======================================================================
+//function : OCC29807
+//purpose :
+//=======================================================================
+#include <GeomAdaptor_HSurface.hxx>
+#include <IntPatch_PointLine.hxx>
+#include <IntSurf_PntOn2S.hxx>
+static Standard_Integer OCC29807(Draw_Interpretor& theDI, Standard_Integer theNArg, const char** theArgV)
+{
+ if (theNArg != 7)
+ {
+ theDI << "Use: " << theArgV[0] << "surface1 surface2 u1 v1 u2 v2\n";
+ return 1;
+ }
+
+ const Handle(Geom_Surface) aS1 = DrawTrSurf::GetSurface(theArgV[1]);
+ const Handle(Geom_Surface) aS2 = DrawTrSurf::GetSurface(theArgV[2]);
+
+ if (aS1.IsNull() || aS2.IsNull())
+ {
+ theDI << "Error. Null surface is not supported.\n";
+ return 1;
+ }
+
+ const Standard_Real aU1 = Draw::Atof(theArgV[3]);
+ const Standard_Real aV1 = Draw::Atof(theArgV[4]);
+ const Standard_Real aU2 = Draw::Atof(theArgV[5]);
+ const Standard_Real aV2 = Draw::Atof(theArgV[6]);
+
+ const Handle(GeomAdaptor_HSurface) anAS1 = new GeomAdaptor_HSurface(aS1);
+ const Handle(GeomAdaptor_HSurface) anAS2 = new GeomAdaptor_HSurface(aS2);
+
+ const gp_Pnt aP1 = anAS1->Value(aU1, aV1);
+ const gp_Pnt aP2 = anAS2->Value(aU2, aV2);
+
+ if (aP1.SquareDistance(aP2) > Precision::SquareConfusion())
+ {
+ theDI << "Error. True intersection point must be specified. "
+ "Please check parameters: u1 v1 u2 v2.\n";
+ return 1;
+ }
+
+ IntSurf_PntOn2S aPOn2S;
+ aPOn2S.SetValue(0.5*(aP1.XYZ() + aP2.XYZ()), aU1, aV1, aU2, aV2);
+
+ const Standard_Real aCurvatureRadius = IntPatch_PointLine::CurvatureRadiusOfIntersLine(anAS1, anAS2, aPOn2S);
+ theDI << "Radius of curvature is " << aCurvatureRadius << "\n";
+ return 0;
+}
+
//=======================================================================
//function : OCC29925
//purpose : check safety of functions like IsSpace(), LowerCase(), etc. for all chars
return 0;
}
+//=======================================================================
+//function : OCC29311
+//purpose : check performance of OBB calculations
+//=======================================================================
+static Standard_Integer OCC29311 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+ if (theArgc < 4)
+ {
+ std::cerr << "Use: " << theArgv[0] << " shape counter_name nb_iterations" << std::endl;
+ return 1;
+ }
+
+ TopoDS_Shape aShape = DBRep::Get (theArgv[1]);
+ Standard_Integer aNbIter = Draw::Atoi (theArgv[3]);
+
+ Bnd_OBB anOBB;
+ OSD_Timer aTimer;
+ aTimer.Start ();
+ for (Standard_Integer aN = aNbIter; aN > 0; --aN)
+ {
+ anOBB.SetVoid ();
+ BRepBndLib::AddOBB (aShape, anOBB, Standard_False, Standard_False, Standard_False);
+ }
+ aTimer.Stop ();
+
+ theDI << "COUNTER " << theArgv[2] << ": " << aTimer.ElapsedTime() << "\n";
+
+ return 0;
+}
+
+//=======================================================================
+//function : OCC30391
+//purpose :
+//=======================================================================
+#include <BRepOffset_Tool.hxx>
+static Standard_Integer OCC30391(Draw_Interpretor& theDI,
+ Standard_Integer theNArg,
+ const char** theArgV)
+{
+ if (theNArg < 7)
+ {
+ theDI << "Use: " << theArgV[0] << "result face LenBeforeUfirst LenAfterUlast LenBeforeVfirst LenAfterVlast\n";
+ return 1;
+ }
+
+ TopoDS_Shape aShape = DBRep::Get(theArgV[2], TopAbs_FACE);
+ if (aShape.IsNull())
+ return 1;
+
+ const TopoDS_Face& aFace = TopoDS::Face(aShape);
+
+ Standard_Real aLenBeforeUfirst = atof(theArgV[3]);
+ Standard_Real aLenAfterUlast = atof(theArgV[4]);
+ Standard_Real aLenBeforeVfirst = atof(theArgV[5]);
+ Standard_Real aLenAfterVlast = atof(theArgV[6]);
+
+ TopoDS_Face Result;
+ BRepOffset_Tool::EnLargeFace(aFace, Result,
+ Standard_True,Standard_True,Standard_True,Standard_True,Standard_True,1,
+ aLenBeforeUfirst, aLenAfterUlast,
+ aLenBeforeVfirst, aLenAfterVlast);
+
+ DBRep::Set(theArgV[1], Result);
+ return 0;
+}
+
+//=======================================================================
+//function : QAStartsWith string startstring
+//=======================================================================
+static Standard_Integer QAStartsWith(Draw_Interpretor& di, Standard_Integer n, const char** a)
+{
+ if (n == 3)
+ {
+ TCollection_ExtendedString str = a[1];
+ TCollection_ExtendedString startstr = a[2];
+ if (str.StartsWith(startstr))
+ di << "Yes";
+ else
+ di << "No";
+ return 0;
+ }
+ std::cerr << "Syntax error\n";
+ return 1;
+}
+
+//=======================================================================
+//function : QAEndsWith string endstring
+//=======================================================================
+static Standard_Integer QAEndsWith(Draw_Interpretor& di, Standard_Integer n, const char** a)
+{
+ if (n == 3)
+ {
+ TCollection_ExtendedString str = a[1];
+ TCollection_ExtendedString endstr = a[2];
+ if (str.EndsWith(endstr))
+ di << "Yes";
+ else
+ di << "No";
+ return 0;
+ }
+ std::cerr << "Syntax error\n";
+ return 1;
+}
+
+//Class is used in OCC30435
+#include <AppCont_Function.hxx>
+#include <Adaptor3d_HCurve.hxx>
+class CurveEvaluator : public AppCont_Function
+
+{
+
+public:
+ Handle(Adaptor3d_HCurve) myCurve;
+
+ CurveEvaluator(const Handle(Adaptor3d_HCurve)& C)
+ : myCurve(C)
+ {
+ myNbPnt = 1;
+ myNbPnt2d = 0;
+ }
+
+ Standard_Real FirstParameter() const
+ {
+ return myCurve->FirstParameter();
+ }
+
+ Standard_Real LastParameter() const
+ {
+ return myCurve->LastParameter();
+ }
+
+ Standard_Boolean Value(const Standard_Real theT,
+ NCollection_Array1<gp_Pnt2d>& /*thePnt2d*/,
+ NCollection_Array1<gp_Pnt>& thePnt) const
+ {
+ thePnt(1) = myCurve->Value(theT);
+ return Standard_True;
+ }
+
+ Standard_Boolean D1(const Standard_Real theT,
+ NCollection_Array1<gp_Vec2d>& /*theVec2d*/,
+ NCollection_Array1<gp_Vec>& theVec) const
+ {
+ gp_Pnt aDummyPnt;
+ myCurve->D1(theT, aDummyPnt, theVec(1));
+ return Standard_True;
+ }
+};
+
+#include <GeomAdaptor_HCurve.hxx>
+#include <Approx_FitAndDivide.hxx>
+#include <Convert_CompBezierCurvesToBSplineCurve.hxx>
+static Standard_Integer OCC30435(Draw_Interpretor& di, Standard_Integer, const char** a)
+{
+
+ Handle(Geom_Curve) GC;
+ GC = DrawTrSurf::GetCurve(a[2]);
+ if (GC.IsNull())
+ return 1;
+
+ Standard_Integer Dmin = 3;
+ Standard_Integer Dmax = 12;
+ Standard_Real Tol3d = 1.e-7;
+ Standard_Boolean inverse = Standard_True;
+
+
+ Standard_Integer inv = atoi(a[3]);
+ if (inv > 0)
+ {
+ inverse = Standard_True;
+ }
+ else
+ {
+ inverse = Standard_False;
+ }
+
+ Standard_Integer maxit = atoi(a[4]);
+
+ Handle(GeomAdaptor_HCurve) aGAC = new GeomAdaptor_HCurve(GC);
+
+ CurveEvaluator aCE(aGAC);
+
+ Approx_FitAndDivide anAppro(Dmin, Dmax, Tol3d, 0., Standard_True);
+ anAppro.SetInvOrder(inverse);
+ Standard_Integer i;
+ for (i = 1; i <= maxit; ++i)
+ anAppro.Perform(aCE);
+
+ if (!anAppro.IsAllApproximated())
+ {
+ di << "Approximation failed \n";
+ return 1;
+ }
+ Standard_Integer NbCurves = anAppro.NbMultiCurves();
+
+ Convert_CompBezierCurvesToBSplineCurve Conv;
+
+ Standard_Real tol3d, tol2d, tolreached = 0.;
+ for (i = 1; i <= NbCurves; i++) {
+ anAppro.Error(i, tol3d, tol2d);
+ tolreached = Max(tolreached, tol3d);
+ AppParCurves_MultiCurve MC = anAppro.Value(i);
+ TColgp_Array1OfPnt Poles(1, MC.Degree() + 1);
+ MC.Curve(1, Poles);
+ Conv.AddCurve(Poles);
+ }
+ Conv.Perform();
+ Standard_Integer NbPoles = Conv.NbPoles();
+ Standard_Integer NbKnots = Conv.NbKnots();
+
+ TColgp_Array1OfPnt NewPoles(1, NbPoles);
+ TColStd_Array1OfReal NewKnots(1, NbKnots);
+ TColStd_Array1OfInteger NewMults(1, NbKnots);
+
+ Conv.KnotsAndMults(NewKnots, NewMults);
+ Conv.Poles(NewPoles);
+
+ BSplCLib::Reparametrize(GC->FirstParameter(),
+ GC->LastParameter(),
+ NewKnots);
+ Handle(Geom_BSplineCurve) TheCurve = new Geom_BSplineCurve(NewPoles, NewKnots, NewMults, Conv.Degree());
+
+ DrawTrSurf::Set(a[1], TheCurve);
+ di << a[1] << ": tolreached = " << tolreached << "\n";
+
+ return 0;
+
+}
+
+//=======================================================================
+//function : OCC30708_1
+//purpose : Tests initialization of the TopoDS_Iterator with null shape
+//=======================================================================
+static Standard_Integer OCC30708_1 (Draw_Interpretor& di, Standard_Integer, const char**)
+{
+ TopoDS_Iterator it;
+ try
+ {
+ OCC_CATCH_SIGNALS
+
+ TopoDS_Shape empty;
+ it.Initialize (empty);
+
+ }
+ catch (Standard_Failure)
+ {
+ di << "Cannot initialize TopoDS_Iterator with null shape\n";
+ return 0;
+ }
+
+ if (it.More())
+ di << "Incorrect Iterator initialization: method More() returns true on null shape\n";
+
+ return 0;
+}
+
+//=======================================================================
+//function : OCC30708_2
+//purpose : Tests initialization of the BRepLib_MakeWire with null wire
+//=======================================================================
+static Standard_Integer OCC30708_2 (Draw_Interpretor& di, Standard_Integer, const char**)
+{
+ try
+ {
+ OCC_CATCH_SIGNALS
+
+ TopoDS_Wire empty;
+ BRepLib_MakeWire aWBuilder (empty);
+ }
+ catch (Standard_Failure)
+ {
+ di << "Cannot initialize BRepLib_MakeWire with null wire\n";
+ }
+
+ return 0;
+}
+
+//=======================================================================
+//function : OCC30869
+//purpose :
+//=======================================================================
+static Standard_Integer OCC30869 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+ if (theArgc != 2)
+ {
+ theDI.PrintHelp (theArgv[0]);
+ return 1;
+ }
+
+ TopoDS_Shape aWire = DBRep::Get (theArgv[1]);
+ if (aWire.IsNull() || aWire.ShapeType() != TopAbs_WIRE)
+ {
+ theDI << theArgv[1] << " is not a wire.\n";
+ return 1;
+ }
+
+ BRepAdaptor_CompCurve aBACC (TopoDS::Wire (aWire));
+
+ Standard_Real aFirst = aBACC.FirstParameter();
+ Standard_Real aLast = aBACC.LastParameter();
+
+ gp_Pnt aPFirst, aPLast;
+ gp_Vec aVFirst, aVLast;
+
+ aBACC.D1 (aFirst, aPFirst, aVFirst);
+ aBACC.D1 (aLast, aPLast, aVLast);
+
+ if (aVFirst.SquareMagnitude() > gp::Resolution())
+ aVFirst.Normalize();
+ if (aVLast.SquareMagnitude() > gp::Resolution())
+ aVLast.Normalize();
+
+ theDI << aFirst << ": point " << aPFirst.X() << " "
+ << aPFirst.Y() << " "
+ << aPFirst.Z()
+ << ", tangent " << aVFirst.X() << " "
+ << aVFirst.Y() << " "
+ << aVFirst.Z() << "\n";
+
+ theDI << aLast << ": point " << aPLast.X() << " "
+ << aPLast.Y() << " "
+ << aPLast.Z()
+ << ", tangent " << aVLast.X() << " "
+ << aVLast.Y() << " "
+ << aVLast.Z() << "\n";
+
+ return 0;
+}
+
void QABugs::Commands_20(Draw_Interpretor& theCommands) {
const char *group = "QABugs";
theCommands.Add ("OCC29064", "OCC29064: test memory usage by copying empty maps", __FILE__, OCC29064, group);
theCommands.Add ("OCC29925", "OCC29925: check safety of character classification functions", __FILE__, OCC29925, group);
+ theCommands.Add("OCC29807", "OCC29807 surface1 surface2 u1 v1 u2 v2", __FILE__, OCC29807, group);
+ theCommands.Add("OCC29311", "OCC29311 shape counter nbiter: check performance of OBB calculation", __FILE__, OCC29311, group);
+ theCommands.Add("OCC30391", "OCC30391 result face LenBeforeUfirst LenAfterUlast LenBeforeVfirst LenAfterVlast", __FILE__, OCC30391, group);
+ theCommands.Add("OCC30435", "OCC30435 result curve inverse nbit", __FILE__, OCC30435, group);
+
+ theCommands.Add("QAStartsWith",
+ "QAStartsWith string startstring",
+ __FILE__, QAStartsWith, group);
+
+ theCommands.Add("QAEndsWith",
+ "QAEndsWith string endstring",
+ __FILE__, QAEndsWith, group);
+
+ theCommands.Add ("OCC30708_1", "Tests initialization of the TopoDS_Iterator with null shape",
+ __FILE__, OCC30708_1, group);
+
+ theCommands.Add ("OCC30708_2", "Tests initialization of the BRepLib_MakeWire with null shape",
+ __FILE__, OCC30708_2, group);
+
+ theCommands.Add ("OCC30869", "Prints bounding points of the given wire and tangent vectors at these points.\n"
+ "Usage: OCC30869 wire",
+ __FILE__, OCC30869, group);
+
return;
}