1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

Compare commits

...

6 Commits

Author SHA1 Message Date
isn
f4729d5ded processing of E/E and E/V intersection segments 2017-02-14 12:09:15 +03:00
isn
13036964b0 first remarks 2016-10-03 11:03:28 +03:00
isn
73e83cf785 0026265: Incorrect result of 2d offset
complete redesign of prev. version + optimizations + regressions
2016-09-28 11:20:01 +03:00
isn
725abf92f9 reversed meaning of -o option 2016-09-27 20:19:31 +03:00
isn
9cb4cd0ab7 actual fix 2016-09-26 11:48:39 +03:00
isn
3a46f887da 0027890: BndLib_Add2dCurve::Add(..) works incorrect on some curves
new testcase: extension for 'gbounding' command. now this command allows to pass curve2d as args and works in two modes ('normal' and optimal)
2016-09-22 14:42:30 +03:00
3 changed files with 1272 additions and 27 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -38,6 +38,7 @@
#include <BRep_Builder.hxx>
#include <BRepBndLib.hxx>
#include <Bnd_Box.hxx>
#include <Bnd_Box2d.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <BRepTools_WireExplorer.hxx>
@@ -486,46 +487,98 @@ static Standard_Integer optbounding(Draw_Interpretor& di,Standard_Integer n,cons
#include <GeomAdaptor_Surface.hxx>
#include <BndLib_AddSurface.hxx>
#include <BndLib_Add3dCurve.hxx>
#include <BndLib_Add2dCurve.hxx>
#include <Draw_Segment2D.hxx>
static Standard_Integer gbounding(Draw_Interpretor& di,Standard_Integer n,const char** a)
{
if (n < 2)
if (n != 2 && n != 3)
{
di << "Usage: gbounding surf/curve \n";
di << "Usage: gbounding surf/curve/curve2d [-o] \n";
di << "[-o] turn on Optimal mode ('off' by default) \n";
return 1;
}
Standard_Real axmin,aymin,azmin,axmax,aymax,azmax;
Bnd_Box B; Handle(Draw_Box) DB;
if (n == 2) {
else
{
Standard_Boolean IsOptimal = Standard_False;
if (n == 3 && !strcmp(a[2], "-o"))
IsOptimal = Standard_True;
Standard_Real axmin,aymin,azmin,axmax,aymax,azmax;
Bnd_Box B;
Bnd_Box2d B2d;
Handle(Draw_Box) DB;
Standard_Boolean Is3d = Standard_True;
Handle(Geom_Curve) C;
Handle(Geom_Surface) S;
Handle_Geom2d_Curve C2d;
S = DrawTrSurf::GetSurface(a[1]);
if (S.IsNull())
{
C = DrawTrSurf::GetCurve(a[1]);
}
if(!S.IsNull())
if (!S.IsNull())
{
//add surf
GeomAdaptor_Surface aGAS(S);
BndLib_AddSurface::AddOptimal(aGAS, Precision::Confusion(), B);
}
else if(!C.IsNull())
{
GeomAdaptor_Curve aGAC(C);
BndLib_Add3dCurve::AddOptimal(aGAC, Precision::Confusion(), B);
if (IsOptimal)
BndLib_AddSurface::AddOptimal(aGAS, Precision::Confusion(), B);
else
BndLib_AddSurface::Add(aGAS, Precision::Confusion(), B);
}
else
{
di << "Wrong argument \n";
return 1;
C = DrawTrSurf::GetCurve(a[1]);
if (!C.IsNull())
{
// add cur
GeomAdaptor_Curve aGAC(C);
if (IsOptimal)
BndLib_Add3dCurve::AddOptimal(aGAC, Precision::Confusion(), B);
else
BndLib_Add3dCurve::Add(aGAC, Precision::Confusion(), B);
}
else
{
C2d = DrawTrSurf::GetCurve2d(a[1]);
if (!C2d.IsNull())
{
//add cur2d
Is3d = Standard_False;
if (IsOptimal)
BndLib_Add2dCurve::AddOptimal(C2d, C2d->FirstParameter(), C2d->LastParameter(), Precision::Confusion(), B2d);
else
BndLib_Add2dCurve::Add(C2d, C2d->FirstParameter(), C2d->LastParameter(), Precision::Confusion(), B2d);
}
else
{
di << "Wrong argument \n";
return 1;
}
}
}
if (Is3d)
{
B.Get(axmin,aymin,azmin,axmax,aymax,azmax);
DB = new Draw_Box(gp_Pnt(axmin,aymin,azmin),gp_Pnt(axmax,aymax,azmax),Draw_vert);
dout<<DB;
di << axmin<<" "<< aymin<<" "<< azmin<<" "<< axmax<<" "<< aymax<<" "<< azmax;
}
else
{
B2d.Get(axmin,aymin,axmax,aymax);
gp_Pnt2d p1(axmin, aymin);
gp_Pnt2d p2(axmax, aymin);
gp_Pnt2d p3(axmax, aymax);
gp_Pnt2d p4(axmin, aymax);
Draw_Segment2D* S1 = new Draw_Segment2D(p1, p2, Draw_vert);
Draw_Segment2D* S2 = new Draw_Segment2D(p2, p3, Draw_vert);
Draw_Segment2D* S3 = new Draw_Segment2D(p3, p4, Draw_vert);
Draw_Segment2D* S4 = new Draw_Segment2D(p4, p1, Draw_vert);
dout << S1 << S2 << S3 << S4;
di << axmin<<" "<< aymin<<" "<< axmax<<" "<< aymax;
}
B.Get(axmin,aymin,azmin,axmax,aymax,azmax);
DB = new Draw_Box(gp_Pnt(axmin,aymin,azmin),gp_Pnt(axmax,aymax,azmax),Draw_vert);
dout<<DB;
di << axmin<<" "<< aymin<<" "<< azmin<<" "<< axmax<<" "<< aymax<<" "<< azmax;
}
return 0;
}//=======================================================================
}
//=======================================================================
//function : findplane
//purpose :
//=======================================================================
@@ -1045,7 +1098,7 @@ void BRepTest::BasicCommands(Draw_Interpretor& theCommands)
optbounding,g);
//
theCommands.Add("gbounding",
"gbounding curve/surf ",
"gbounding surf/curve/curve2d [-o] ",
__FILE__,
gbounding,g);

View File

@@ -524,9 +524,8 @@ void BndLib_Box2dCurve::PerformOther()
aNb=33;
dT=(myT2-myT1)/(aNb-1);
//
aT=myT1;
for (j=0; j<aNb; ++j) {
aT=j*dT;
aT=myT1+j*dT;
myCurve->D0(aT, aP2D);
myBox.Add(aP2D);
}