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

0030346: Modeling Algorithms - BRepPrimAPI_MakeRevol throws "BRepSweep_Translation::MakeEmptyVertex"

Implementation of method "IsDeleted(...)" for MakeRevol and MakePrism algorithms.

Problem (exception) occurs during history building and was caused by an attempt to obtain generated shape for subshape, which was really "deleted" by algorithm - this input subshape and its possible generated shape was not used in result.
This commit is contained in:
ifv 2018-12-10 15:48:55 +03:00 committed by bugmaster
parent 39235bedc6
commit 80eeb3cef1
15 changed files with 541 additions and 294 deletions

View File

@ -114,7 +114,10 @@ TopoDS_Shape BRepPrimAPI_MakePrism::LastShape()
const TopTools_ListOfShape& BRepPrimAPI_MakePrism::Generated (const TopoDS_Shape& S)
{
myGenerated.Clear();
myGenerated.Append(myPrism.Shape (S));
if (myPrism.IsUsed(S) && myPrism.GenIsUsed(S))
{
myGenerated.Append(myPrism.Shape(S));
}
return myGenerated;
}
@ -146,3 +149,13 @@ TopoDS_Shape BRepPrimAPI_MakePrism::LastShape(const TopoDS_Shape &theShape)
}
// Modified by skv - Fri Mar 4 15:50:09 2005 End
//=======================================================================
//function : IsDeleted
//purpose :
//=======================================================================
Standard_Boolean BRepPrimAPI_MakePrism::IsDeleted(const TopoDS_Shape& S)
{
return !myPrism.IsUsed(S);
}

View File

@ -88,6 +88,9 @@ public:
//! Returns ListOfShape from TopTools.
Standard_EXPORT virtual const TopTools_ListOfShape& Generated (const TopoDS_Shape& S) Standard_OVERRIDE;
//! Returns true if the shape S has been deleted.
Standard_EXPORT virtual Standard_Boolean IsDeleted(const TopoDS_Shape& S) Standard_OVERRIDE;
//! Returns the TopoDS Shape of the bottom of the prism.
//! generated with theShape (subShape of the generating shape).
Standard_EXPORT TopoDS_Shape FirstShape (const TopoDS_Shape& theShape);
@ -96,9 +99,6 @@ public:
//! generated with theShape (subShape of the generating shape).
Standard_EXPORT TopoDS_Shape LastShape (const TopoDS_Shape& theShape);
protected:

View File

@ -240,16 +240,49 @@ TopoDS_Shape BRepPrimAPI_MakeRevol::LastShape()
const TopTools_ListOfShape& BRepPrimAPI_MakeRevol::Generated (const TopoDS_Shape& S)
{
myGenerated.Clear();
if (!myRevol.IsUsed(S))
{
return myGenerated;
}
TopoDS_Shape aGS = myRevol.Shape(S);
if (!aGS.IsNull())
{
if (BRepTools_History::IsSupportedType(aGS))
{
if (aGS.ShapeType() == TopAbs_EDGE)
{
Standard_Boolean isDeg = BRep_Tool::Degenerated(TopoDS::Edge(aGS));
if (isDeg)
{
TopTools_ListIteratorOfListOfShape anIt(myDegenerated);
for (; anIt.More(); anIt.Next())
{
if (aGS.IsSame(anIt.Value()))
{
myGenerated.Append(aGS);
if (!myHist.IsNull())
{
TopTools_ListIteratorOfListOfShape anIt1(myHist->Modified(aGS));
for (; anIt1.More(); anIt1.Next())
{
myGenerated.Append(anIt1.Value());
}
return myGenerated;
}
}
}
return myGenerated;
}
}
//
if (myHist.IsNull())
{
myGenerated.Append(aGS);
return myGenerated;
}
//
if (myHist->Modified(aGS).IsEmpty())
{
myGenerated.Append(aGS);
@ -261,18 +294,19 @@ const TopTools_ListOfShape& BRepPrimAPI_MakeRevol::Generated (const TopoDS_Shape
{
myGenerated.Append(anIt.Value());
}
if (aGS.ShapeType() == TopAbs_EDGE)
{
if (BRep_Tool::Degenerated(TopoDS::Edge(aGS)))
{
//Append initial common deg. edge
myGenerated.Append(aGS);
}
}
}
}
return myGenerated;
}
//=======================================================================
//function : IsDeleted
//purpose :
//=======================================================================
Standard_Boolean BRepPrimAPI_MakeRevol::IsDeleted(const TopoDS_Shape& S)
{
return !myRevol.IsUsed(S);
}
//=======================================================================
//function : FirstShape

View File

@ -96,6 +96,10 @@ public:
//! For shapes of other types method always returns empty list
Standard_EXPORT virtual const TopTools_ListOfShape& Generated (const TopoDS_Shape& S) Standard_OVERRIDE;
//! Returns true if the shape S has been deleted.
Standard_EXPORT virtual Standard_Boolean IsDeleted(const TopoDS_Shape& S) Standard_OVERRIDE;
//! Returns the TopoDS Shape of the beginning of the revolution,
//! generated with theShape (subShape of the generating shape).
Standard_EXPORT TopoDS_Shape FirstShape (const TopoDS_Shape& theShape);

View File

@ -30,6 +30,7 @@
#include <TopAbs_Orientation.hxx>
#include <TopoDS_Shape.hxx>
#include <TopTools_SequenceOfShape.hxx>
#include <TopoDS.hxx>
//=======================================================================
//function : BRepSweep_NumLinearRegularSweep
@ -54,9 +55,12 @@ myBuilder(aBuilder),
myShapes(1,myGenShapeTool.NbShapes(),
1,myDirShapeTool.NbShapes()),
myBuiltShapes(1,myGenShapeTool.NbShapes(),
1,myDirShapeTool.NbShapes())
1,myDirShapeTool.NbShapes()),
myUsedShapes(1, myGenShapeTool.NbShapes(),
1, myDirShapeTool.NbShapes())
{
myBuiltShapes.Init(Standard_False);
myUsedShapes.Init(Standard_False);
}
//=======================================================================
@ -156,7 +160,9 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
Or = It.Orientation();
if(HasShape(subGenS,aDirS)){
newShape = Shape(subGenS,aDirS);
if (GGDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
Standard_Integer iNewGenS = myGenShapeTool.Index(subGenS);
Standard_Integer iNewDirS = iDirS;
if (GGDShapeIsToAdd(myShapes(iGenS, iDirS), newShape,
aGenS,subGenS,aDirS)){
//Les "planchers" doivent etre construits par les
//fonctions de construcion geometrique identiquement
@ -165,6 +171,7 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
//sur.
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
TopAbs_ShapeEnum subGenSType = myGenShapeTool.Type(subGenS);
if (aGenSType==TopAbs_FACE){
if(subGenSType==TopAbs_VERTEX){
@ -248,7 +255,9 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
subGenS = It.Value();
if(HasShape(subGenS,aDirS)){
newShape = Shape(subGenS,aDirS);
if (GGDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
Standard_Integer iNewGenS = myGenShapeTool.Index(subGenS);
Standard_Integer iNewDirS = iDirS;
if (GGDShapeIsToAdd(myShapes(iGenS, iDirS), newShape,
aGenS,subGenS,aDirS)){
TopAbs_ShapeEnum subGenSType = myGenShapeTool.Type(subGenS);
if (aGenSType==TopAbs_EDGE){
@ -259,11 +268,13 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
TopoDS_Shape wi;
myBuilder.MakeWire(wi);
myBuilder.Add(wi,newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
wi.Closed(BRep_Tool::IsClosed(wi));
WireSeq.Append(wi);
}
else{
myBuilder.Add(newWire,newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
SetDirectingPCurve (myShapes(iGenS,iDirS),
newShape,bGenS,subGenS,aDirS,Or);
@ -271,6 +282,7 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
else if (aGenSType==TopAbs_WIRE){
Or = It.Orientation();
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
else if (aGenSType==TopAbs_FACE){
Or = It.Orientation();
@ -282,19 +294,23 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
}
else if(subGenSType == TopAbs_EDGE) {
myBuilder.Add(newShell,newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
}
else if(aGenSType == TopAbs_SHELL){
Or = TopAbs_FORWARD;
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
else if(aGenSType == TopAbs_COMPOUND){
Or = TopAbs_FORWARD;
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
else{
Or = It.Orientation();
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
}
}
@ -304,23 +320,28 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
subDirS = Kt.Value();
if(HasShape(aGenS,subDirS)){
newShape = Shape(aGenS,subDirS);
Standard_Integer iNewGenS = iGenS;
Standard_Integer iNewDirS = myDirShapeTool.Index(subDirS);
if (GDDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
aGenS,aDirS,subDirS)){
if (aGenSType==TopAbs_EDGE){
Or = TopAbs::Reverse(Kt.Orientation());
myBuilder.Add(newWire,newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
SetGeneratingPCurve
(myShapes(iGenS,iDirS),newShape,aGenS,aDirS,subDirS,Or);
}
else if(aGenSType==TopAbs_VERTEX){
Or = Kt.Orientation();
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
SetDirectingParameter
(myShapes(iGenS,iDirS),newShape,aGenS,aDirS,subDirS);
}
else if(aGenSType==TopAbs_FACE){
Or = Kt.Orientation();
myBuilder.Add(newShell,newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
}
}
@ -390,9 +411,12 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
for (Kt.Init(aDirS);Kt.More();Kt.Next()){
subDirS = Kt.Value();
if(HasShape(aGenS,subDirS)){
Standard_Integer iNewGenS = iGenS;
Standard_Integer iNewDirS = myDirShapeTool.Index(subDirS);
Or = Kt.Orientation();
newShape = Shape(aGenS,subDirS);
myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
myUsedShapes(iNewGenS, iNewDirS) = Standard_True;
}
}
}
@ -492,3 +516,67 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::SplitShell(const TopoDS_Shape& aNe
return comp;
}
//=======================================================================
//function : IsUsed
//purpose :
//=======================================================================
Standard_Boolean BRepSweep_NumLinearRegularSweep::IsUsed(const TopoDS_Shape& aGenS) const
{
Standard_Integer iGenS = myGenShapeTool.Index(aGenS);
Standard_OutOfRange_Raise_if(iGenS == 0,
"BRepSweep_NumLinearRegularSweep::IsUsed: shape index = 0")
Standard_Integer j;
Standard_Boolean isBuilt = Standard_False;
Standard_Boolean isUsed = Standard_False;
for (j = 2; j <= myBuiltShapes.UpperCol(); ++j)
{
isBuilt = isBuilt || myBuiltShapes(iGenS, j);
isUsed = isUsed || myUsedShapes(iGenS, j);
}
if (isUsed)
{
if (aGenS.ShapeType() == TopAbs_VERTEX && IsInvariant(aGenS))
{
if (myUsedShapes(iGenS, 1) || !Closed())
{
return isUsed;
}
else
{
return Standard_False;
}
}
else
{
return isUsed;
}
}
//
if (isBuilt) //&& !IsUsed
{
if (!HasShape(aGenS, myDirWire) && !Closed())
{
return Standard_True;
}
else if (aGenS.ShapeType() == TopAbs_VERTEX && !Closed())
{
if (!myBuiltShapes(iGenS, 1))
{
return Standard_True;
}
}
}
return isUsed;
}
//=======================================================================
//function : GenIsUsed
//purpose :
//=======================================================================
Standard_Boolean BRepSweep_NumLinearRegularSweep::GenIsUsed(const TopoDS_Shape& aGenS) const
{
Standard_Integer iGenS = myGenShapeTool.Index(aGenS);
Standard_OutOfRange_Raise_if(iGenS == 0,
"BRepSweep_NumLinearRegularSweep::GenIsUsed: shape index = 0")
return myBuiltShapes(iGenS, 1) && myUsedShapes(iGenS, 1);
}

View File

@ -172,6 +172,9 @@ public:
//! function returns false.
Standard_EXPORT virtual Standard_Boolean HasShape (const TopoDS_Shape& aGenS, const Sweep_NumShape& aDirS) const = 0;
//! Returns true if aGenS cannot be transformed.
Standard_EXPORT virtual Standard_Boolean IsInvariant(const TopoDS_Shape& aGenS) const = 0;
//! Returns the resulting Shape indexed by aDirS and
//! aGenS.
Standard_EXPORT TopoDS_Shape Shape (const TopoDS_Shape& aGenS, const Sweep_NumShape& aDirS);
@ -180,6 +183,14 @@ public:
//! and aGenS.
Standard_EXPORT TopoDS_Shape Shape (const TopoDS_Shape& aGenS);
//! Returns true if the initial shape aGenS
//! is used in result shape
Standard_EXPORT Standard_Boolean IsUsed(const TopoDS_Shape& aGenS) const;
//! Returns true if the shape, generated from theS
//! is used in result shape
Standard_EXPORT Standard_Boolean GenIsUsed(const TopoDS_Shape& theS) const;
//! Returns the resulting Shape indexed by myDirWire
//! and myGenShape.
Standard_EXPORT TopoDS_Shape Shape();
@ -220,6 +231,7 @@ protected:
Sweep_NumShapeTool myDirShapeTool;
TopTools_Array2OfShape myShapes;
TColStd_Array2OfBoolean myBuiltShapes;
TColStd_Array2OfBoolean myUsedShapes;
private:

View File

@ -185,3 +185,21 @@ TopLoc_Location BRepSweep_Prism::Location(const gp_Vec& V)const
TopLoc_Location L(gpt);
return L;
}
//=======================================================================
//function : IsUsed
//purpose :
//=======================================================================
Standard_Boolean BRepSweep_Prism::IsUsed(const TopoDS_Shape& aGenS) const
{
return myTranslation.IsUsed(aGenS);
}
//=======================================================================
//function : GenIsUsed
//purpose :
//=======================================================================
Standard_Boolean BRepSweep_Prism::GenIsUsed(const TopoDS_Shape& aGenS) const
{
return myTranslation.GenIsUsed(aGenS);
}

View File

@ -80,7 +80,13 @@ public:
Standard_EXPORT gp_Vec Vec() const;
//! Returns true if the
//! aGenS is used in resulting shape
Standard_EXPORT Standard_Boolean IsUsed(const TopoDS_Shape& aGenS) const;
//! Returns true if the shape, generated from theS
//! is used in result shape
Standard_EXPORT Standard_Boolean GenIsUsed(const TopoDS_Shape& theS) const;
protected:

View File

@ -215,3 +215,11 @@ gp_Ax1 BRepSweep_Revol::Axe()const
}
//=======================================================================
//function : IsUsed
//purpose :
//=======================================================================
Standard_Boolean BRepSweep_Revol::IsUsed(const TopoDS_Shape& aGenS) const
{
return myRotation.IsUsed(aGenS);
}

View File

@ -77,6 +77,10 @@ public:
//! returns the angle.
Standard_EXPORT Standard_Real Angle() const;
//! Returns true if the aGenS is used in resulting Shape
Standard_EXPORT Standard_Boolean IsUsed(const TopoDS_Shape& aGenS) const;
private:
//! builds the NumShape.

View File

@ -160,7 +160,7 @@ TopoDS_Shape BRepSweep_Rotation::MakeEmptyVertex
{
//call only in construction mode with copy.
Standard_ConstructionError_Raise_if
(!myCopy,"BRepSweep_Translation::MakeEmptyVertex");
(!myCopy,"BRepSweep_Rotation::MakeEmptyVertex");
gp_Pnt P = BRep_Tool::Pnt(TopoDS::Vertex(aGenV));
TopoDS_Vertex V;
if (aDirV.Index()==2) P.Transform(myLocation.Transformation());

View File

@ -45,7 +45,7 @@
#include <gp_Pnt2d.hxx>
#include <TColgp_Array1OfPnt2d.hxx>
static BRepOffsetAPI_MakePipeShell* Sweep= 0;
static BRepOffsetAPI_MakePipeShell* Sweep = 0;
static BRepOffsetAPI_ThruSections* Generator = 0;
#include <stdio.h>
@ -65,14 +65,14 @@ static BRepOffsetAPI_ThruSections* Generator = 0;
// prism
//=======================================================================
static Standard_Integer prism(Draw_Interpretor& , Standard_Integer n, const char** a)
static Standard_Integer prism(Draw_Interpretor&, Standard_Integer n, const char** a)
{
if (n < 6) return 1;
TopoDS_Shape base = DBRep::Get(a[2]);
if (base.IsNull()) return 1;
gp_Vec V(Draw::Atof(a[3]),Draw::Atof(a[4]),Draw::Atof(a[5]));
gp_Vec V(Draw::Atof(a[3]), Draw::Atof(a[4]), Draw::Atof(a[5]));
Standard_Boolean copy = Standard_False;
Standard_Boolean inf = Standard_False;
@ -86,12 +86,26 @@ static Standard_Integer prism(Draw_Interpretor& , Standard_Integer n, const char
TopoDS_Shape res;
BRepPrimAPI_MakePrism* Prism;
if (inf || sinf)
res = BRepPrimAPI_MakePrism(base,gp_Dir(V),inf);
{
Prism = new BRepPrimAPI_MakePrism(base, gp_Dir(V), inf);
}
else
res = BRepPrimAPI_MakePrism(base,V,copy);
{
Prism = new BRepPrimAPI_MakePrism(base, V, copy);
}
DBRep::Set(a[1],res);
res = Prism->Shape();
DBRep::Set(a[1], res);
//History
TopTools_ListOfShape anArgs;
anArgs.Append(base);
BRepTest_Objects::SetHistory(anArgs, *Prism);
delete Prism;
return 0;
}
@ -100,7 +114,7 @@ static Standard_Integer prism(Draw_Interpretor& , Standard_Integer n, const char
//=======================================================================
// revol
//=======================================================================
static Standard_Integer revol(Draw_Interpretor& ,
static Standard_Integer revol(Draw_Interpretor&,
Standard_Integer n, const char** a)
{
if (n < 10) return 1;
@ -108,9 +122,9 @@ static Standard_Integer revol(Draw_Interpretor& ,
TopoDS_Shape base = DBRep::Get(a[2]);
if (base.IsNull()) return 1;
gp_Pnt P(Draw::Atof(a[3]),Draw::Atof(a[4]),Draw::Atof(a[5]));
gp_Dir D(Draw::Atof(a[6]),Draw::Atof(a[7]),Draw::Atof(a[8]));
gp_Ax1 A(P,D);
gp_Pnt P(Draw::Atof(a[3]), Draw::Atof(a[4]), Draw::Atof(a[5]));
gp_Dir D(Draw::Atof(a[6]), Draw::Atof(a[7]), Draw::Atof(a[8]));
gp_Ax1 A(P, D);
Standard_Real angle = Draw::Atof(a[9]) * (M_PI / 180.0);
@ -121,7 +135,7 @@ static Standard_Integer revol(Draw_Interpretor& ,
TopoDS_Shape res = Revol.Shape();
DBRep::Set(a[1],res);
DBRep::Set(a[1], res);
//History
TopTools_ListOfShape anArgs;
@ -151,11 +165,11 @@ static Standard_Integer pipe(Draw_Interpretor& di,
if (n > 1 && n < 4) return 1;
TopoDS_Shape Spine = DBRep::Get(a[2],TopAbs_WIRE);
if ( Spine.IsNull()) return 1;
TopoDS_Shape Spine = DBRep::Get(a[2], TopAbs_WIRE);
if (Spine.IsNull()) return 1;
TopoDS_Shape Profile = DBRep::Get(a[3]);
if ( Profile.IsNull()) return 1;
if (Profile.IsNull()) return 1;
GeomFill_Trihedron Mode = GeomFill_IsCorrectedFrenet;
if (n >= 5)
@ -177,7 +191,7 @@ static Standard_Integer pipe(Draw_Interpretor& di,
ForceApproxC1);
TopoDS_Shape S = PipeBuilder.Shape();
DBRep::Set(a[1],S);
DBRep::Set(a[1], S);
// Save history of pipe
if (BRepTest_Objects::IsHistoryNeeded())
@ -193,44 +207,44 @@ static Standard_Integer pipe(Draw_Interpretor& di,
//=======================================================================
static Standard_Integer geompipe(Draw_Interpretor& ,
static Standard_Integer geompipe(Draw_Interpretor&,
Standard_Integer n, const char** a)
{
TopoDS_Shape Spine = DBRep::Get(a[2],TopAbs_EDGE);
if ( Spine.IsNull()) return 1;
if ( n < 5) return 1;
TopoDS_Shape Profile = DBRep::Get(a[3],TopAbs_EDGE);
if ( Profile.IsNull()) return 1;
Standard_Real aSpFirst,aSpLast,aPrFirst,aPrLast;
Handle(Geom_Curve) SpineCurve = BRep_Tool::Curve(TopoDS::Edge(Spine),aSpFirst,aSpLast);
Handle(Geom_Curve) ProfileCurve = BRep_Tool::Curve(TopoDS::Edge(Profile),aPrFirst,aPrLast);
Handle(GeomAdaptor_HCurve) aAdaptCurve = new GeomAdaptor_HCurve(SpineCurve,aSpFirst,aSpLast);
TopoDS_Shape Spine = DBRep::Get(a[2], TopAbs_EDGE);
if (Spine.IsNull()) return 1;
if (n < 5) return 1;
TopoDS_Shape Profile = DBRep::Get(a[3], TopAbs_EDGE);
if (Profile.IsNull()) return 1;
Standard_Real aSpFirst, aSpLast, aPrFirst, aPrLast;
Handle(Geom_Curve) SpineCurve = BRep_Tool::Curve(TopoDS::Edge(Spine), aSpFirst, aSpLast);
Handle(Geom_Curve) ProfileCurve = BRep_Tool::Curve(TopoDS::Edge(Profile), aPrFirst, aPrLast);
Handle(GeomAdaptor_HCurve) aAdaptCurve = new GeomAdaptor_HCurve(SpineCurve, aSpFirst, aSpLast);
Standard_Boolean ByACR = Standard_False;
Standard_Boolean rotate = Standard_False;
Standard_Real Radius = Draw::Atof(a[4]);
gp_Pnt ctr;
gp_Vec norm;
ProfileCurve->D1(aSpFirst,ctr,norm);
gp_Vec xAxisStart(ctr,SpineCurve->Value(aSpFirst));
gp_Ax2 aAx2Start(ctr,norm,xAxisStart);
Handle(Geom_Circle) cStart=new Geom_Circle(aAx2Start,Radius);
Standard_Integer k =5;
if(n > k)
ByACR = (Draw::Atoi(a[k++]) ==1);
if(n > k)
rotate = (Draw::Atoi(a[k++])==1);
GeomFill_Pipe aPipe(ProfileCurve,aAdaptCurve,cStart,ByACR,rotate);
ProfileCurve->D1(aSpFirst, ctr, norm);
gp_Vec xAxisStart(ctr, SpineCurve->Value(aSpFirst));
gp_Ax2 aAx2Start(ctr, norm, xAxisStart);
Handle(Geom_Circle) cStart = new Geom_Circle(aAx2Start, Radius);
Standard_Integer k = 5;
if (n > k)
ByACR = (Draw::Atoi(a[k++]) == 1);
if (n > k)
rotate = (Draw::Atoi(a[k++]) == 1);
GeomFill_Pipe aPipe(ProfileCurve, aAdaptCurve, cStart, ByACR, rotate);
aPipe.Perform(Standard_True);
if (!aPipe.IsDone())
{
cout << "GeomFill_Pipe cannot make a surface" << endl;
return 1;
}
Handle(Geom_Surface) Sur=aPipe.Surface();
Handle(Geom_Surface) Sur = aPipe.Surface();
TopoDS_Face F;
if(!Sur.IsNull())
if (!Sur.IsNull())
F = BRepBuilderAPI_MakeFace(Sur, Precision::Confusion());
DBRep::Set(a[1],F);
DBRep::Set(a[1], F);
return 0;
}
@ -241,7 +255,7 @@ static Standard_Integer geompipe(Draw_Interpretor& ,
Standard_Integer evolved(Draw_Interpretor& di, Standard_Integer n, const char** a)
{
if ( n == 1) {
if (n == 1) {
//cout << " 1) evolved result base profil : "<< endl;
//cout << " The relative position of the profil on the base" << endl;
//cout << " is given in the referencial axis. " << endl;
@ -255,34 +269,34 @@ Standard_Integer evolved(Draw_Interpretor& di, Standard_Integer n, const char**
return 0;
}
if ( n < 4 ) return 1;
if (n < 4) return 1;
Standard_Boolean IsAFace = Standard_False;
Standard_Boolean Solid = (!strcmp(a[0],"evolvedsolid"));
Standard_Boolean Solid = (!strcmp(a[0], "evolvedsolid"));
TopoDS_Shape Base = DBRep::Get(a[2],TopAbs_WIRE,Standard_False);
if ( Base.IsNull()) {
Base = DBRep::Get(a[2],TopAbs_FACE,Standard_False);
TopoDS_Shape Base = DBRep::Get(a[2], TopAbs_WIRE, Standard_False);
if (Base.IsNull()) {
Base = DBRep::Get(a[2], TopAbs_FACE, Standard_False);
IsAFace = Standard_True;
}
if ( Base.IsNull()) return 1;
if (Base.IsNull()) return 1;
TopoDS_Shape InpuTShape(DBRep::Get(a[3],TopAbs_WIRE,Standard_False));
TopoDS_Shape InpuTShape(DBRep::Get(a[3], TopAbs_WIRE, Standard_False));
TopoDS_Wire Prof = TopoDS::Wire(InpuTShape);
// TopoDS_Wire Prof =
// TopoDS::Wire(DBRep::Get(a[3],TopAbs_WIRE,Standard_False));
if ( Prof.IsNull()) return 1;
// TopoDS_Wire Prof =
// TopoDS::Wire(DBRep::Get(a[3],TopAbs_WIRE,Standard_False));
if (Prof.IsNull()) return 1;
if (IsAFace) {
TopoDS_Shape Volevo
= BRepOffsetAPI_MakeEvolved(TopoDS::Face(Base),Prof,GeomAbs_Arc,n == 4,Solid);
DBRep::Set(a[1],Volevo);
= BRepOffsetAPI_MakeEvolved(TopoDS::Face(Base), Prof, GeomAbs_Arc, n == 4, Solid);
DBRep::Set(a[1], Volevo);
}
else {
TopoDS_Shape Volevo
= BRepOffsetAPI_MakeEvolved(TopoDS::Wire(Base),Prof,GeomAbs_Arc,n == 4,Solid);
DBRep::Set(a[1],Volevo);
= BRepOffsetAPI_MakeEvolved(TopoDS::Wire(Base), Prof, GeomAbs_Arc, n == 4, Solid);
DBRep::Set(a[1], Volevo);
}
return 0;
@ -294,41 +308,41 @@ Standard_Integer evolved(Draw_Interpretor& di, Standard_Integer n, const char**
//purpose :
//=======================================================================
static Standard_Integer pruled(Draw_Interpretor& ,
static Standard_Integer pruled(Draw_Interpretor&,
Standard_Integer n, const char** a)
{
if ( n != 4) return 1;
if (n != 4) return 1;
Standard_Boolean YaWIRE = Standard_False;
TopoDS_Shape S1 = DBRep::Get(a[2],TopAbs_EDGE);
if ( S1.IsNull()) {
S1 = DBRep::Get(a[2],TopAbs_WIRE);
TopoDS_Shape S1 = DBRep::Get(a[2], TopAbs_EDGE);
if (S1.IsNull()) {
S1 = DBRep::Get(a[2], TopAbs_WIRE);
if (S1.IsNull()) return 1;
YaWIRE = Standard_True;
}
TopoDS_Shape S2 = DBRep::Get(a[3],TopAbs_EDGE);
if ( S2.IsNull()) {
S2 = DBRep::Get(a[3],TopAbs_WIRE);
if ( S2.IsNull()) return 1;
TopoDS_Shape S2 = DBRep::Get(a[3], TopAbs_EDGE);
if (S2.IsNull()) {
S2 = DBRep::Get(a[3], TopAbs_WIRE);
if (S2.IsNull()) return 1;
if (!YaWIRE) {
S1 = BRepLib_MakeWire(TopoDS::Edge(S1));
YaWIRE = Standard_True;
}
}
else if ( YaWIRE) {
else if (YaWIRE) {
S2 = BRepLib_MakeWire(TopoDS::Edge(S2));
}
TopoDS_Shape Result;
if ( YaWIRE) {
Result = BRepFill::Shell(TopoDS::Wire(S1),TopoDS::Wire(S2));
if (YaWIRE) {
Result = BRepFill::Shell(TopoDS::Wire(S1), TopoDS::Wire(S2));
}
else {
Result = BRepFill::Face(TopoDS::Edge(S1),TopoDS::Edge(S2));
Result = BRepFill::Face(TopoDS::Edge(S1), TopoDS::Edge(S2));
}
DBRep::Set(a[1],Result);
DBRep::Set(a[1], Result);
return 0;
}
@ -340,15 +354,15 @@ static Standard_Integer pruled(Draw_Interpretor& ,
Standard_Integer gener(Draw_Interpretor&, Standard_Integer n, const char** a)
{
if ( n < 4) return 1;
if (n < 4) return 1;
TopoDS_Shape Shape;
BRepFill_Generator aGenerator;
for ( Standard_Integer i = 2; i<= n-1 ; i++) {
Shape = DBRep::Get(a[i],TopAbs_WIRE);
if ( Shape.IsNull())
for (Standard_Integer i = 2; i <= n - 1; i++) {
Shape = DBRep::Get(a[i], TopAbs_WIRE);
if (Shape.IsNull())
return 1;
aGenerator.AddWire(TopoDS::Wire(Shape));
@ -372,33 +386,33 @@ Standard_Integer gener(Draw_Interpretor&, Standard_Integer n, const char** a)
Standard_Integer thrusections(Draw_Interpretor&, Standard_Integer n, const char** a)
{
if (n<6) return 1;
if (n < 6) return 1;
Standard_Boolean check = Standard_True;
Standard_Boolean samenumber = Standard_True;
Standard_Integer index = 2;
// Lecture option
if (!strcmp(a[1],"-N")) {
if (n<7) return 1;
if (!strcmp(a[1], "-N")) {
if (n < 7) return 1;
check = Standard_False;
index++;
}
TopoDS_Shape Shape;
Standard_Boolean issolid = ( Draw::Atoi(a[index]) == 1 );
Standard_Boolean isruled = ( Draw::Atoi(a[index+1]) == 1 );
Standard_Boolean issolid = (Draw::Atoi(a[index]) == 1);
Standard_Boolean isruled = (Draw::Atoi(a[index + 1]) == 1);
if (Generator != 0)
{
delete Generator;
Generator = 0;
}
Generator = new BRepOffsetAPI_ThruSections(issolid,isruled);
Generator = new BRepOffsetAPI_ThruSections(issolid, isruled);
Standard_Integer NbEdges = 0;
Standard_Boolean IsFirstWire = Standard_False;
for ( Standard_Integer i = index+2; i<= n-1 ; i++) {
for (Standard_Integer i = index + 2; i <= n - 1; i++) {
Standard_Boolean IsWire = Standard_True;
Shape = DBRep::Get(a[i], TopAbs_WIRE);
if (!Shape.IsNull())
@ -439,7 +453,7 @@ Standard_Integer thrusections(Draw_Interpretor&, Standard_Integer n, const char*
if (Generator->IsDone()) {
TopoDS_Shape Shell = Generator->Shape();
DBRep::Set(a[index-1], Shell);
DBRep::Set(a[index - 1], Shell);
// Save history of the lofting
if (BRepTest_Objects::IsHistoryNeeded())
BRepTest_Objects::SetHistory(Generator->Wires(), *Generator);
@ -454,13 +468,13 @@ Standard_Integer thrusections(Draw_Interpretor&, Standard_Integer n, const char*
//=======================================================================
// mksweep
//=======================================================================
static Standard_Integer mksweep(Draw_Interpretor& ,
static Standard_Integer mksweep(Draw_Interpretor&,
Standard_Integer n, const char** a)
{
if ( n != 2) return 1;
TopoDS_Shape Spine = DBRep::Get(a[1],TopAbs_WIRE);
if ( Spine.IsNull()) return 1;
if (Sweep !=0) {
if (n != 2) return 1;
TopoDS_Shape Spine = DBRep::Get(a[1], TopAbs_WIRE);
if (Spine.IsNull()) return 1;
if (Sweep != 0) {
delete Sweep;
Sweep = 0;
}
@ -474,7 +488,7 @@ static Standard_Integer mksweep(Draw_Interpretor& ,
static Standard_Integer setsweep(Draw_Interpretor& di,
Standard_Integer n, const char** a)
{
if ( n == 1) {
if (n == 1) {
//cout << "setsweep options [arg1 [arg2 [...]]] : options are :" << endl;
//cout << " -FR : Tangent and Normal are given by Frenet trihedron" <<endl;
//cout << " -CF : Tangente is given by Frenet," << endl;
@ -498,37 +512,37 @@ static Standard_Integer setsweep(Draw_Interpretor& di,
return 0;
}
if (Sweep ==0) {
if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
di << "You have forgotten the <<mksweep>> command !\n";
return 1;
}
if (!strcmp(a[1],"-FR")) {
if (!strcmp(a[1], "-FR")) {
Sweep->SetMode(Standard_True);
}
else if (!strcmp(a[1],"-CF")) {
else if (!strcmp(a[1], "-CF")) {
Sweep->SetMode(Standard_False);
}
else if (!strcmp(a[1],"-DT")) {
else if (!strcmp(a[1], "-DT")) {
Sweep->SetDiscreteMode();
}
else if (!strcmp(a[1],"-DX")) {
if (n!=3) {
else if (!strcmp(a[1], "-DX")) {
if (n != 3) {
//cout << "bad arguments !" << endl;
di << "bad arguments !\n";
return 1;
}
TopoDS_Shape Surf;
Surf = DBRep::Get(a[2],TopAbs_SHAPE);
Surf = DBRep::Get(a[2], TopAbs_SHAPE);
if (Surf.IsNull()) {
//cout << a[2] <<"is not a shape !" << endl;
di << a[2] <<"is not a shape !\n";
di << a[2] << "is not a shape !\n";
return 1;
}
Sweep->SetMode(Surf);
}
else if (!strcmp(a[1],"-CN")) {
if (n!=5) {
else if (!strcmp(a[1], "-CN")) {
if (n != 5) {
//cout << "bad arguments !" << endl;
di << "bad arguments !\n";
return 1;
@ -536,14 +550,14 @@ static Standard_Integer setsweep(Draw_Interpretor& di,
gp_Dir D(Draw::Atof(a[2]), Draw::Atof(a[3]), Draw::Atof(a[4]));
Sweep->SetMode(D);;
}
else if (!strcmp(a[1],"-FX")) {
if ((n!=5)&&(n!=8)) {
else if (!strcmp(a[1], "-FX")) {
if ((n != 5) && (n != 8)) {
//cout << "bad arguments !" << endl;
di << "bad arguments !\n";
return 1;
}
gp_Dir D(Draw::Atof(a[2]), Draw::Atof(a[3]), Draw::Atof(a[4]));
if (n==8) {
if (n == 8) {
gp_Dir DN(Draw::Atof(a[5]), Draw::Atof(a[6]), Draw::Atof(a[7]));
gp_Ax2 Axe(gp_Pnt(0., 0., 0.), D, DN);
Sweep->SetMode(Axe);
@ -553,7 +567,7 @@ static Standard_Integer setsweep(Draw_Interpretor& di,
Sweep->SetMode(Axe);
}
}
else if (!strcmp(a[1],"-G")) // contour guide
else if (!strcmp(a[1], "-G")) // contour guide
{
if (n != 5)
{
@ -563,7 +577,7 @@ static Standard_Integer setsweep(Draw_Interpretor& di,
}
else
{
TopoDS_Shape Guide = DBRep::Get(a[2],TopAbs_WIRE);
TopoDS_Shape Guide = DBRep::Get(a[2], TopAbs_WIRE);
Standard_Boolean CurvilinearEquivalence = Draw::Atoi(a[3]) != 0;
Standard_Integer KeepContact = Draw::Atoi(a[4]);
Sweep->SetMode(TopoDS::Wire(Guide),
@ -574,7 +588,7 @@ static Standard_Integer setsweep(Draw_Interpretor& di,
else {
//cout << "The option "<< a[1] << " is unknown !" << endl;
di << "The option "<< a[1] << " is unknown !\n";
di << "The option " << a[1] << " is unknown !\n";
return 1;
}
return 0;
@ -587,7 +601,7 @@ static Standard_Integer setsweep(Draw_Interpretor& di,
static Standard_Integer addsweep(Draw_Interpretor& di,
Standard_Integer n, const char** a)
{
if ( n == 1) {
if (n == 1) {
//cout << "addsweep wire/vertex [Vertex] [-T] [-R] [u0 v0 u1 v1 [...[uN vN]]] : options are :" << endl;
//cout << " -T : the wire/vertex have to be translated to assume contact"<< endl;
//cout << " with the spine" <<endl;
@ -601,7 +615,7 @@ static Standard_Integer addsweep(Draw_Interpretor& di,
return 0;
}
if (Sweep ==0) {
if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
di << "You have forgotten the <<mksweep>> command !\n";
return 1;
@ -617,51 +631,52 @@ static Standard_Integer addsweep(Draw_Interpretor& di,
Section.ShapeType() != TopAbs_VERTEX))
{
//cout << a[1] <<"is not a wire and is not a vertex!" << endl;
di << a[1] <<" is not a wire and is not a vertex!\n";
di << a[1] << " is not a wire and is not a vertex!\n";
return 1;
}
Standard_Boolean HasVertex=Standard_False,
isT=Standard_False,
isR=Standard_False;
Standard_Boolean HasVertex = Standard_False,
isT = Standard_False,
isR = Standard_False;
if (n > 2) {
Standard_Integer cur = 2;
// Reading of Vertex
TopoDS_Shape InputVertex(DBRep::Get(a[cur],TopAbs_VERTEX));
TopoDS_Shape InputVertex(DBRep::Get(a[cur], TopAbs_VERTEX));
Vertex = TopoDS::Vertex(InputVertex);
// Vertex = TopoDS::Vertex(DBRep::Get(a[cur],TopAbs_VERTEX));
// Vertex = TopoDS::Vertex(DBRep::Get(a[cur],TopAbs_VERTEX));
if (!Vertex.IsNull()) {
cur++;
HasVertex = Standard_True;
}
// Reading of the translation option
if ((n>cur) && !strcmp(a[cur],"-T")) {
if ((n > cur) && !strcmp(a[cur], "-T")) {
cur++;
isT = Standard_True;
}
// Reading of the rotation option
if ((n>cur) && !strcmp(a[cur],"-R")) {
if ((n > cur) && !strcmp(a[cur], "-R")) {
cur++;
isR = Standard_True;
}
// law ?
if (n>cur) {
Standard_Integer nbreal = n-cur;
if ( (nbreal < 4) || (nbreal % 2 != 0) ) {
if (n > cur) {
Standard_Integer nbreal = n - cur;
if ((nbreal < 4) || (nbreal % 2 != 0)) {
//cout << "bad arguments ! :" <<a[cur] << endl;
di << "bad arguments ! :" <<a[cur] << "\n";
} else { //law of interpolation
Standard_Integer ii, L= nbreal/2;
TColgp_Array1OfPnt2d ParAndRad(1, L);
for (ii=1; ii<=L; ii++, cur+=2) {
ParAndRad(ii).SetX(Draw::Atof(a[cur]));
ParAndRad(ii).SetY(Draw::Atof(a[cur+1]));
di << "bad arguments ! :" << a[cur] << "\n";
}
thelaw = new (Law_Interpol) ();
else { //law of interpolation
Standard_Integer ii, L = nbreal / 2;
TColgp_Array1OfPnt2d ParAndRad(1, L);
for (ii = 1; ii <= L; ii++, cur += 2) {
ParAndRad(ii).SetX(Draw::Atof(a[cur]));
ParAndRad(ii).SetY(Draw::Atof(a[cur + 1]));
}
thelaw = new (Law_Interpol)();
thelaw->Set(ParAndRad,
Abs(ParAndRad(1).Y() - ParAndRad(L).Y()) < Precision::Confusion());
}
@ -686,16 +701,16 @@ static Standard_Integer addsweep(Draw_Interpretor& di,
static Standard_Integer deletesweep(Draw_Interpretor& di,
Standard_Integer n, const char** a)
{
if ( n != 2) {
if (n != 2) {
return 1;
}
TopoDS_Wire Section;
TopoDS_Shape InputShape(DBRep::Get(a[1],TopAbs_SHAPE));
TopoDS_Shape InputShape(DBRep::Get(a[1], TopAbs_SHAPE));
Section = TopoDS::Wire(InputShape);
// Section = TopoDS::Wire(DBRep::Get(a[1],TopAbs_SHAPE));
// Section = TopoDS::Wire(DBRep::Get(a[1],TopAbs_SHAPE));
if (Section.IsNull()) {
//cout << a[1] <<"is not a wire !" << endl;
di << a[1] <<"is not a wire !\n";
di << a[1] << "is not a wire !\n";
return 1;
}
@ -710,7 +725,7 @@ static Standard_Integer deletesweep(Draw_Interpretor& di,
static Standard_Integer buildsweep(Draw_Interpretor& di,
Standard_Integer n, const char** a)
{
if ( n == 1) {
if (n == 1) {
//cout << "build sweep result [-M/-C/-R] [-S] [tol] : options are" << endl;
//cout << " -M : Discontinuities are treated by Modfication of"<< endl;
//cout << " the sweeping mode : it is the default" <<endl;
@ -731,7 +746,7 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
}
Standard_Boolean mksolid = Standard_False;
if (Sweep ==0) {
if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
di << "You have forgotten the <<mksweep>> command !\n";
return 1;
@ -744,23 +759,23 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
}
TopoDS_Shape result;
Standard_Integer cur=2;
if (n>cur) {
Standard_Integer cur = 2;
if (n > cur) {
BRepBuilderAPI_TransitionMode Transition = BRepBuilderAPI_Transformed;
// Reading Transition
if (!strcmp(a[cur],"-C")) {
if (!strcmp(a[cur], "-C")) {
Transition = BRepBuilderAPI_RightCorner;
cur++;
}
else if (!strcmp(a[cur],"-R")) {
else if (!strcmp(a[cur], "-R")) {
Transition = BRepBuilderAPI_RoundCorner;
cur++;
}
Sweep->SetTransitionMode(Transition);
}
// Reading solid ?
if ((n>cur) && (!strcmp(a[cur],"-S")) ) mksolid = Standard_True;
if ((n > cur) && (!strcmp(a[cur], "-S"))) mksolid = Standard_True;
// Calcul le resultat
Sweep->Build();
@ -785,7 +800,7 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
if (!B) di << " BuildSweep : It is impossible to make a solid !\n";
}
result = Sweep->Shape();
DBRep::Set(a[1],result);
DBRep::Set(a[1], result);
// Save history of sweep
if (BRepTest_Objects::IsHistoryNeeded())
{
@ -824,9 +839,9 @@ static Standard_Integer errorsweep(Draw_Interpretor& di,
static Standard_Integer simulsweep(Draw_Interpretor& di,
Standard_Integer n, const char** a)
{
if ( (n!=3) && (n!=4) ) return 1;
if ((n != 3) && (n != 4)) return 1;
if (Sweep ==0) {
if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
di << "You have forgotten the <<mksweep>> command !\n";
return 1;
@ -844,13 +859,13 @@ static Standard_Integer simulsweep(Draw_Interpretor& di,
Standard_Integer N, ii;
N = Draw::Atoi(a[2]);
if (n>3) {
if (n > 3) {
BRepBuilderAPI_TransitionMode Transition = BRepBuilderAPI_Transformed;
// Lecture Transition
if (!strcmp(a[3],"-C")) {
if (!strcmp(a[3], "-C")) {
Transition = BRepBuilderAPI_RightCorner;
}
else if (!strcmp(a[3],"-R")) {
else if (!strcmp(a[3], "-R")) {
Transition = BRepBuilderAPI_RoundCorner;
}
Sweep->SetTransitionMode(Transition);
@ -858,8 +873,8 @@ static Standard_Integer simulsweep(Draw_Interpretor& di,
// Calculate the result
Sweep->Simulate(N, List);
for (ii=1, it.Initialize(List); it.More(); it.Next(), ii++) {
Sprintf(name,"%s_%d",a[1],ii);
for (ii = 1, it.Initialize(List); it.More(); it.Next(), ii++) {
Sprintf(name, "%s_%d", a[1], ii);
DBRep::Set(name, it.Value());
}
@ -909,60 +924,60 @@ void BRepTest::SweepCommands(Draw_Interpretor& theCommands)
theCommands.Add("prism",
"prism result base dx dy dz [Copy | Inf | Seminf]",
__FILE__,prism,g);
__FILE__, prism, g);
theCommands.Add("revol",
"revol result base px py pz dx dy dz angle [Copy]",
__FILE__,revol,g);
__FILE__, revol, g);
theCommands.Add("pipe",
"pipe result Wire_spine Profile [Mode [Approx]], no args to get help",
__FILE__,pipe,g);
__FILE__, pipe, g);
theCommands.Add("evolved",
"evolved , no args to get help",
__FILE__,evolved,g);
__FILE__, evolved, g);
theCommands.Add("evolvedsolid",
"evolved , no args to get help",
__FILE__,evolved,g);
__FILE__, evolved, g);
theCommands.Add("pruled",
"pruled result Edge1/Wire1 Edge2/Wire2",
__FILE__,pruled,g);
__FILE__, pruled, g);
theCommands.Add("gener", "gener result wire1 wire2 [..wire..]",
__FILE__,gener,g);
__FILE__, gener, g);
theCommands.Add("thrusections", "thrusections [-N] result issolid isruled shape1 shape2 [..shape..], the option -N means no check on wires, shapes must be wires or vertices (only first or last)",
__FILE__,thrusections,g);
__FILE__, thrusections, g);
theCommands.Add("mksweep", "mksweep wire",
__FILE__,mksweep,g);
__FILE__, mksweep, g);
theCommands.Add("setsweep", "setsweep no args to get help",
__FILE__,setsweep,g);
__FILE__, setsweep, g);
theCommands.Add("addsweep",
"addsweep wire [vertex] [-M ] [-C] [auxiilaryshape]:no args to get help",
__FILE__,addsweep,g);
__FILE__, addsweep, g);
theCommands.Add("deletesweep",
"deletesweep wire, To delete a section",
__FILE__,deletesweep,g);
__FILE__, deletesweep, g);
theCommands.Add("buildsweep", "builsweep [r] [option] [Tol] , no args to get help",
__FILE__,buildsweep,g);
__FILE__, buildsweep, g);
theCommands.Add("errorsweep", "errorsweep: returns the summary error on resulting surfaces reached by Sweep",
__FILE__,errorsweep,g);
__FILE__, errorsweep, g);
theCommands.Add("simulsweep", "simulsweep r [n] [option]"
__FILE__,simulsweep,g);
__FILE__, simulsweep, g);
theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]"
__FILE__,geompipe,g);
__FILE__, geompipe, g);
theCommands.Add("middlepath", "middlepath res shape startshape endshape",
__FILE__,middlepath,g);
__FILE__, middlepath, g);
}

View File

@ -0,0 +1,21 @@
puts "========"
puts "0030346: Modeling Algorithms - BRepPrimAPI_MakeRevol throws BRepSweep_Translation::MakeEmptyVertex"
puts "========"
puts ""
pload MODELING
plane f 0 0 0 0 1 0
mkface f f 0 1 0 1
revol r1 f 0 0 0 0 0 1 60
savehistory h1
set s1 [dump h1]
if { !([regexp "0 Deleted" $s1] && [regexp "6 Generated" $s1])} {
puts "Error: wrong history h1"
}
revol r2 f 0 0 0 0 0 1 360
savehistory h2
set s2 [dump h2]
if { !([regexp "6 Deleted" $s2] && [regexp "3 Generated" $s2])} {
puts "Error: wrong history h2"
}

View File

@ -0,0 +1,23 @@
puts "========"
puts "0030346: Modeling Algorithms - BRepPrimAPI_MakeRevol throws BRepSweep_Translation::MakeEmptyVertex"
puts "========"
puts ""
pload MODELING
sphere s 1
mkface f1 s 0 2*pi 0.785398163397448 1.5707963267949
prism r1 f1 0 0 2
savehistory h1
set s1 [dump h1]
if { !([regexp "0 Deleted" $s1] && [regexp "2 Generated" $s1])} {
puts "Error: wrong history h1"
}
#
mkface f2 s 0 5 0.785398163397448 1.5707963267949
prism r2 f2 0 0 2
savehistory h2
set s2 [dump h2]
if { !([regexp "0 Deleted" $s2] && [regexp "6 Generated" $s2])} {
puts "Error: wrong history h2"
}

View File

@ -1,5 +1,3 @@
puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
puts "================"
puts "BUC61023"
puts "OCC65"
@ -14,7 +12,10 @@ checkshape sh
revol result sh 0 0 0 0 0 1 360
checkshape result
explode result
#result contains two shapes, one of them (result_2) is bad - empty shell
#because of bad input data, so only result_1 is checked.
checkshape result_1
checkprops result -s 1.0134e+06
checkview -display result -2d -path ${imagedir}/${test_image}.png