1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

Add parameter for fence-sectioning.

This commit is contained in:
ika 2024-01-11 12:58:33 +00:00
parent 3f1087ea30
commit 6195170ada
2 changed files with 40 additions and 12 deletions

View File

@ -109,23 +109,24 @@ TopoDS_Shape BRepAlgoAPI_HullTransform::Perform()
Handle(ShapeFix_Shape) aShapeFixTool = new ShapeFix_Shape;
aShapeFixTool->Init(aHTrsf.Shape());
aShapeFixTool->Perform();
TopoDS_Shape aResShape = aShapeFixTool->Shape();
ShapeAnalysis_ShapeTolerance aSat;
aSat.InitTolerance();
aSat.AddTolerance(aShapeFixTool->Shape());
aSat.AddTolerance(aResShape);
// Check the necessarity of the next step
if (myIsAutoSection && aHullsList.size() > 0 && aSat.GlobalTolerance(1) >= aTolerances.back())
if (myIsAutoSection && aHullsList.size() > 0 && aSat.GlobalTolerance(0) >= aTolerances.back())
{
isToProceed = false;
mySections.pop_back();
}
else
{
aTolerances.push_back(aSat.GlobalTolerance(1));
aHullsList.push_back(aShapeFixTool->Shape());
aTolerances.push_back(aSat.GlobalTolerance(0));
aHullsList.push_back(aResShape);
aSectionsList.push_back(mySections);
if (myIsAutoSection)
addSection(aShapeFixTool->Shape());
addSection(aResShape);
}
}
} while (isToProceed);

View File

@ -1398,7 +1398,7 @@ static Standard_Integer hulltrsf(Draw_Interpretor& di, Standard_Integer n, const
if (n < 3)
{
di << "Usage result hull [-l cm cb_new cb_old lpp] or [-q aftlim cca ccf forelim aft_coef fore_coef modify_aft_zone modify_fore_zone] ";
di << "[-s XCoord_section1 ... XCoord_sectionN] or [-a minSectionTol]\n";
di << "[-s XCoord_section1 ... XCoord_sectionN] or [-a minSectionTol] or [-f step]\n";
return 1;
}
@ -1415,6 +1415,12 @@ static Standard_Integer hulltrsf(Draw_Interpretor& di, Standard_Integer n, const
std::list<double> aSections;
bool isAutoSection = false;
bool isQuad = false;
double _aftlim = 0;
double _cca = 0;
double _ccf = 0;
double _forelim = 0;
double _lpp = 0;
int i = 3;
while (i < n)
{
@ -1424,7 +1430,7 @@ static Standard_Integer hulltrsf(Draw_Interpretor& di, Standard_Integer n, const
double _cm = Atof(a[i + 1]);
double _cb_new = Atof(a[i + 2]);
double _cb_old = Atof(a[i + 3]);
double _lpp = Atof(a[i + 4]);
_lpp = Atof(a[i + 4]);
aHTrsf.InitLinear(_cm, _cb_new, _cb_old, _lpp);
i += 4;
continue;
@ -1432,10 +1438,11 @@ static Standard_Integer hulltrsf(Draw_Interpretor& di, Standard_Integer n, const
if (a[i][0] == '-' && a[i][1] == 'q' && n > i+8)
{
// init quad transformation parameters
double _aftlim = Atof(a[i + 1]);
double _cca = Atof(a[i + 2]);
double _ccf = Atof(a[i + 3]);
double _forelim = Atof(a[i + 4]);
isQuad = true;
_aftlim = Atof(a[i + 1]);
_cca = Atof(a[i + 2]);
_ccf = Atof(a[i + 3]);
_forelim = Atof(a[i + 4]);
double _aft_coef = Atof(a[i + 5]);
double _fore_coef = Atof(a[i + 6]);
bool _modify_aft_zone = (Draw::Atoi(a[i + 7]) == 1);
@ -1463,6 +1470,25 @@ static Standard_Integer hulltrsf(Draw_Interpretor& di, Standard_Integer n, const
aHTrsf.SetAutoSections(true, aTol);
continue;
}
if (a[i][0] == '-' && a[i][1] == 'f')
{
double aStep = Atof(a[i + 1]);
i += 2;
if (isQuad)
{
aSections.push_back(_aftlim - aStep);
aSections.push_back(_aftlim + aStep);
aSections.push_back(_forelim - aStep);
aSections.push_back(_forelim + aStep);
}
else
{
aSections.push_back(_lpp / 2 - aStep);
aSections.push_back(_lpp / 2 + aStep);
}
aHTrsf.SetSections(aSections);
continue;
}
i++;
}
@ -1649,7 +1675,8 @@ void BRepTest::BasicCommands(Draw_Interpretor& theCommands)
"[-l cm cb_new cb_old lpp] for linear or "
"[-q aftlim cca ccf forelim aft_coef fore_coef modify_aft_zone modify_fore_zone] for quad "
"[-s XCoord_section1 ... XCoord_sectionN] to add sections or "
"[-a tol (min distance between sections)] for auto sectioning\n",
"[-f step (step in both sides) for making section fence around behavior-changing points ] and/or"
"[-a tol (min distance between sections)] for auto sectioning",
__FILE__,
hulltrsf, g);