//=======================================================================
BRepSweep_NumLinearRegularSweep::BRepSweep_NumLinearRegularSweep
(const BRepSweep_Builder& aBuilder,
- const TopoDS_Shape& aGenShape,
- const Sweep_NumShape& aDirShape):
+ const TopoDS_Shape& aGenShape,
+ const Sweep_NumShape& aDirShape):
- myBuilder(aBuilder),
+myBuilder(aBuilder),
myGenShape(aGenShape),
myDirWire(aDirShape),
// *****************************************************************
myShapes(1,myGenShapeTool.NbShapes(),
- 1,myDirShapeTool.NbShapes()),
+ 1,myDirShapeTool.NbShapes()),
myBuiltShapes(1,myGenShapeTool.NbShapes(),
- 1,myDirShapeTool.NbShapes())
+ 1,myDirShapeTool.NbShapes())
{
myBuiltShapes.Init(Standard_False);
}
TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS)
{
if (myGenShapeTool.Index(aGenS) != 0 &&
- HasShape(aGenS,myDirWire)) return Shape(aGenS,myDirWire);
+ HasShape(aGenS,myDirWire)) return Shape(aGenS,myDirWire);
else {
TopoDS_Shape bidon;
return bidon;
//=======================================================================
TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
- const Sweep_NumShape& aDirS)
+ const Sweep_NumShape& aDirS)
{
Standard_Integer iGenS = myGenShapeTool.Index(aGenS);
Standard_Integer iDirS = myDirShapeTool.Index(aDirS);
TopAbs_ShapeEnum aGenSType = myGenShapeTool.Type(aGenS);
switch (aGenSType){
case TopAbs_VERTEX :
- myShapes(iGenS,iDirS)=MakeEmptyVertex(aGenS,aDirS);
- break;
+ myShapes(iGenS,iDirS)=MakeEmptyVertex(aGenS,aDirS);
+ break;
case TopAbs_EDGE :
- myShapes(iGenS,iDirS)=MakeEmptyGeneratingEdge(aGenS,aDirS);
- break;
+ myShapes(iGenS,iDirS)=MakeEmptyGeneratingEdge(aGenS,aDirS);
+ break;
case TopAbs_WIRE :
- myBuilder.MakeWire(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeWire(myShapes(iGenS,iDirS));
+ break;
case TopAbs_FACE :
- myShapes(iGenS,iDirS)=MakeEmptyFace(aGenS,aDirS);
- break;
+ myShapes(iGenS,iDirS)=MakeEmptyFace(aGenS,aDirS);
+ break;
case TopAbs_SHELL :
- myBuilder.MakeShell(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeShell(myShapes(iGenS,iDirS));
+ break;
case TopAbs_SOLID :
- Standard_NoSuchObject::Raise("Solids are not Processed");
- break;
+ Standard_NoSuchObject::Raise("Solids are not Processed");
+ break;
case TopAbs_COMPSOLID :
- Standard_NoSuchObject::Raise("Solids are not Processed");
- break;
+ Standard_NoSuchObject::Raise("Solids are not Processed");
+ break;
case TopAbs_COMPOUND :
- myBuilder.MakeCompound(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeCompound(myShapes(iGenS,iDirS));
+ break;
default:
- Standard_NoSuchObject::Raise("Unknown Shape");
- break;
+ Standard_NoSuchObject::Raise("Unknown Shape");
+ break;
}
bGenS = aGenS;
myGenShapeTool.SetOrientation(bGenS,TopAbs_FORWARD);
for (It.Init(bGenS);It.More();It.Next()){
- subGenS = It.Value();
- Or = It.Orientation();
- if(HasShape(subGenS,aDirS)){
- newShape = Shape(subGenS,aDirS);
- if (GGDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
- aGenS,subGenS,aDirS)){
- //Les "planchers" doivent etre construits par les
- //fonctions de construcion geometrique identiquement
- //au shape generateur.
- //On leur recolle juste une orientation pour etre bien
- //sur.
-
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- TopAbs_ShapeEnum subGenSType = myGenShapeTool.Type(subGenS);
- if (aGenSType==TopAbs_FACE){
- if(subGenSType==TopAbs_VERTEX){
- SetParameters(myShapes(iGenS,iDirS),
- newShape,aGenS,subGenS,aDirS);
- }
- else if(subGenSType==TopAbs_EDGE){
- SetPCurve(myShapes(iGenS,iDirS),newShape,
- aGenS,subGenS,aDirS,Or);
- }
- else if(subGenSType==TopAbs_WIRE){
- BRepSweep_Iterator Jt;
- cGenS = subGenS;
- myGenShapeTool.SetOrientation(cGenS,TopAbs_FORWARD);
- for (Jt.Init(cGenS);Jt.More();Jt.Next()){
- subsubGenS = Jt.Value();
- Pr = Jt.Orientation();
- if(HasShape(subsubGenS,aDirS)){
- TopoDS_Shape newsubEdge = Shape(subsubGenS,aDirS);
- SetPCurve(myShapes(iGenS,iDirS),newsubEdge,
- aGenS,subsubGenS,aDirS,Pr);
- }
- }
- }
- }
- else if(aGenSType==TopAbs_EDGE){
- SetGeneratingParameter(myShapes(iGenS,iDirS),
- newShape,bGenS,subGenS,aDirS);
- }
- }
- }
+ subGenS = It.Value();
+ Or = It.Orientation();
+ if(HasShape(subGenS,aDirS)){
+ newShape = Shape(subGenS,aDirS);
+ if (GGDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
+ aGenS,subGenS,aDirS)){
+ //Les "planchers" doivent etre construits par les
+ //fonctions de construcion geometrique identiquement
+ //au shape generateur.
+ //On leur recolle juste une orientation pour etre bien
+ //sur.
+
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ TopAbs_ShapeEnum subGenSType = myGenShapeTool.Type(subGenS);
+ if (aGenSType==TopAbs_FACE){
+ if(subGenSType==TopAbs_VERTEX){
+ SetParameters(myShapes(iGenS,iDirS),
+ newShape,aGenS,subGenS,aDirS);
+ }
+ else if(subGenSType==TopAbs_EDGE){
+ SetPCurve(myShapes(iGenS,iDirS),newShape,
+ aGenS,subGenS,aDirS,Or);
+ }
+ else if(subGenSType==TopAbs_WIRE){
+ BRepSweep_Iterator Jt;
+ cGenS = subGenS;
+ myGenShapeTool.SetOrientation(cGenS,TopAbs_FORWARD);
+ for (Jt.Init(cGenS);Jt.More();Jt.Next()){
+ subsubGenS = Jt.Value();
+ Pr = Jt.Orientation();
+ if(HasShape(subsubGenS,aDirS)){
+ TopoDS_Shape newsubEdge = Shape(subsubGenS,aDirS);
+ SetPCurve(myShapes(iGenS,iDirS),newsubEdge,
+ aGenS,subsubGenS,aDirS,Pr);
+ }
+ }
+ }
+ }
+ else if(aGenSType==TopAbs_EDGE){
+ SetGeneratingParameter(myShapes(iGenS,iDirS),
+ newShape,bGenS,subGenS,aDirS);
+ }
+ }
+ }
}
}
else if (myDirShapeTool.Type(aDirS)==TopAbs_EDGE){
Standard_Boolean sepwires = Standard_False;
switch (aGenSType){
case TopAbs_VERTEX :
- myShapes(iGenS,iDirS)=MakeEmptyDirectingEdge(aGenS,aDirS);
- break;
+ myShapes(iGenS,iDirS)=MakeEmptyDirectingEdge(aGenS,aDirS);
+ break;
case TopAbs_EDGE :
- //On cree un wire intermediaire qui contient tous les edges
- //du montant (face) du Shape pour le cas standard, et une
- //sequence de wires pour les cas merdiques necessitant des
- //wires independants.
- myBuilder.MakeWire(newWire);
- myShapes(iGenS,iDirS)=MakeEmptyFace(aGenS,aDirS);
- break;
+ //On cree un wire intermediaire qui contient tous les edges
+ //du montant (face) du Shape pour le cas standard, et une
+ //sequence de wires pour les cas merdiques necessitant des
+ //wires independants.
+ myBuilder.MakeWire(newWire);
+ myShapes(iGenS,iDirS)=MakeEmptyFace(aGenS,aDirS);
+ break;
case TopAbs_WIRE :
- myBuilder.MakeShell(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeShell(myShapes(iGenS,iDirS));
+ break;
case TopAbs_FACE :
- //On cree un shell intermediaire dans lequel on jette toutes
- //les faces en direct, pour eviter les empilages compliques
- //de shells et sous shells dans la structure du solide.
- myBuilder.MakeShell(newShell);
- myBuilder.MakeSolid(myShapes(iGenS,iDirS));
- break;
+ //On cree un shell intermediaire dans lequel on jette toutes
+ //les faces en direct, pour eviter les empilages compliques
+ //de shells et sous shells dans la structure du solide.
+ myBuilder.MakeShell(newShell);
+ myBuilder.MakeSolid(myShapes(iGenS,iDirS));
+ break;
case TopAbs_SHELL :
- myBuilder.MakeCompSolid(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeCompSolid(myShapes(iGenS,iDirS));
+ break;
case TopAbs_SOLID :
- Standard_NoSuchObject::Raise("Solids are not Processed");
- break;
+ Standard_NoSuchObject::Raise("Solids are not Processed");
+ break;
case TopAbs_COMPSOLID :
- Standard_NoSuchObject::Raise("Solids are not Processed");
- break;
+ Standard_NoSuchObject::Raise("Solids are not Processed");
+ break;
case TopAbs_COMPOUND :
- myBuilder.MakeCompound(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeCompound(myShapes(iGenS,iDirS));
+ break;
default:
- Standard_NoSuchObject::Raise("Unknown Shape");
- break;
+ Standard_NoSuchObject::Raise("Unknown Shape");
+ break;
}
bGenS = aGenS;
myGenShapeTool.SetOrientation(bGenS,TopAbs_FORWARD);
for (It.Init(bGenS);It.More();It.Next()){
- subGenS = It.Value();
- if(HasShape(subGenS,aDirS)){
- newShape = Shape(subGenS,aDirS);
- if (GGDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
- aGenS,subGenS,aDirS)){
- TopAbs_ShapeEnum subGenSType = myGenShapeTool.Type(subGenS);
- if (aGenSType==TopAbs_EDGE){
- Or = It.Orientation();
- if (SeparatedWires(myShapes(iGenS,iDirS),newShape,
- aGenS,subGenS,aDirS)){
- sepwires = Standard_True;
- TopoDS_Shape wi;
- myBuilder.MakeWire(wi);
- myBuilder.Add(wi,newShape,Or);
- wi.Closed(BRep_Tool::IsClosed(wi));
- WireSeq.Append(wi);
- }
- else{
- myBuilder.Add(newWire,newShape,Or);
- }
- SetDirectingPCurve (myShapes(iGenS,iDirS),
- newShape,bGenS,subGenS,aDirS,Or);
- }
- else if (aGenSType==TopAbs_WIRE){
- Or = It.Orientation();
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- }
- else if (aGenSType==TopAbs_FACE){
- Or = It.Orientation();
- if(subGenSType == TopAbs_WIRE) {
- for (Lt.Init(newShape);Lt.More();Lt.Next()){
- myBuilder.Add(newShell,Lt.Value(),
- TopAbs::Compose(Lt.Orientation(),Or));
- }
- }
- else if(subGenSType == TopAbs_EDGE) {
- myBuilder.Add(newShell,newShape,Or);
- }
- }
- else if(aGenSType == TopAbs_SHELL){
- Or = TopAbs_FORWARD;
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- }
- else if(aGenSType == TopAbs_COMPOUND){
- Or = TopAbs_FORWARD;
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- }
- else{
- Or = It.Orientation();
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- }
- }
- }
+ subGenS = It.Value();
+ if(HasShape(subGenS,aDirS)){
+ newShape = Shape(subGenS,aDirS);
+ if (GGDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
+ aGenS,subGenS,aDirS)){
+ TopAbs_ShapeEnum subGenSType = myGenShapeTool.Type(subGenS);
+ if (aGenSType==TopAbs_EDGE){
+ Or = It.Orientation();
+ if (SeparatedWires(myShapes(iGenS,iDirS),newShape,
+ aGenS,subGenS,aDirS)){
+ sepwires = Standard_True;
+ TopoDS_Shape wi;
+ myBuilder.MakeWire(wi);
+ myBuilder.Add(wi,newShape,Or);
+ wi.Closed(BRep_Tool::IsClosed(wi));
+ WireSeq.Append(wi);
+ }
+ else{
+ myBuilder.Add(newWire,newShape,Or);
+ }
+ SetDirectingPCurve (myShapes(iGenS,iDirS),
+ newShape,bGenS,subGenS,aDirS,Or);
+ }
+ else if (aGenSType==TopAbs_WIRE){
+ Or = It.Orientation();
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ }
+ else if (aGenSType==TopAbs_FACE){
+ Or = It.Orientation();
+ if(subGenSType == TopAbs_WIRE) {
+ for (Lt.Init(newShape);Lt.More();Lt.Next()){
+ myBuilder.Add(newShell,Lt.Value(),
+ TopAbs::Compose(Lt.Orientation(),Or));
+ }
+ }
+ else if(subGenSType == TopAbs_EDGE) {
+ myBuilder.Add(newShell,newShape,Or);
+ }
+ }
+ else if(aGenSType == TopAbs_SHELL){
+ Or = TopAbs_FORWARD;
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ }
+ else if(aGenSType == TopAbs_COMPOUND){
+ Or = TopAbs_FORWARD;
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ }
+ else{
+ Or = It.Orientation();
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ }
+ }
+ }
}
bDirS = aDirS;
for (Kt.Init(bDirS);Kt.More();Kt.Next()){
- subDirS = Kt.Value();
- if(HasShape(aGenS,subDirS)){
- newShape = Shape(aGenS,subDirS);
- if (GDDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
- aGenS,aDirS,subDirS)){
- if (aGenSType==TopAbs_EDGE){
- Or = TopAbs::Reverse(Kt.Orientation());
- myBuilder.Add(newWire,newShape,Or);
- SetGeneratingPCurve
- (myShapes(iGenS,iDirS),newShape,aGenS,aDirS,subDirS,Or);
- }
- else if(aGenSType==TopAbs_VERTEX){
- Or = Kt.Orientation();
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- SetDirectingParameter
- (myShapes(iGenS,iDirS),newShape,aGenS,aDirS,subDirS);
- }
- else if(aGenSType==TopAbs_FACE){
- Or = Kt.Orientation();
- myBuilder.Add(newShell,newShape,Or);
- }
- }
- }
+ subDirS = Kt.Value();
+ if(HasShape(aGenS,subDirS)){
+ newShape = Shape(aGenS,subDirS);
+ if (GDDShapeIsToAdd(myShapes(iGenS,iDirS),newShape,
+ aGenS,aDirS,subDirS)){
+ if (aGenSType==TopAbs_EDGE){
+ Or = TopAbs::Reverse(Kt.Orientation());
+ myBuilder.Add(newWire,newShape,Or);
+ SetGeneratingPCurve
+ (myShapes(iGenS,iDirS),newShape,aGenS,aDirS,subDirS,Or);
+ }
+ else if(aGenSType==TopAbs_VERTEX){
+ Or = Kt.Orientation();
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ SetDirectingParameter
+ (myShapes(iGenS,iDirS),newShape,aGenS,aDirS,subDirS);
+ }
+ else if(aGenSType==TopAbs_FACE){
+ Or = Kt.Orientation();
+ myBuilder.Add(newShell,newShape,Or);
+ }
+ }
+ }
}
if (aGenSType==TopAbs_EDGE){
- if (sepwires){
- for(Standard_Integer ij = 1;ij <= WireSeq.Length();ij++){
- myBuilder.Add(myShapes(iGenS,iDirS),WireSeq.Value(ij));
- }
- }
- else{
- newWire.Closed(BRep_Tool::IsClosed(newWire));
- myBuilder.Add(myShapes(iGenS,iDirS),newWire);
- }
- myBuiltShapes(iGenS,iDirS) = Standard_True;
- SetContinuity(aGenS,aDirS);
+ if (sepwires){
+ for(Standard_Integer ij = 1;ij <= WireSeq.Length();ij++){
+ myBuilder.Add(myShapes(iGenS,iDirS),WireSeq.Value(ij));
+ }
+ }
+ else{
+ newWire.Closed(BRep_Tool::IsClosed(newWire));
+ myBuilder.Add(myShapes(iGenS,iDirS),newWire);
+ }
+ myBuiltShapes(iGenS,iDirS) = Standard_True;
+ SetContinuity(aGenS,aDirS);
}
if (aGenSType==TopAbs_WIRE){
- SetContinuity(aGenS,aDirS);
+ SetContinuity(aGenS,aDirS);
}
if (aGenSType==TopAbs_FACE){
newShell.Closed (BRep_Tool::IsClosed (newShell));
- TopoDS_Shape temp = SplitShell(newShell);
- TopAbs_Orientation Or = DirectSolid(aGenS,aDirS);
- Lt.Init(temp);
- if(Lt.More()) Lt.Next();
- if(Lt.More()){
- for (Lt.Init(temp);Lt.More();Lt.Next()){
- myBuilder.Add(myShapes(iGenS,iDirS),Lt.Value(),Or);
- }
- }
- else myBuilder.Add(myShapes(iGenS,iDirS),newShell,Or);
+ TopoDS_Shape temp = SplitShell(newShell);
+ TopAbs_Orientation Or = DirectSolid(aGenS,aDirS);
+ Lt.Init(temp);
+ if(Lt.More()) Lt.Next();
+ if(Lt.More()){
+ for (Lt.Init(temp);Lt.More();Lt.Next()){
+ myBuilder.Add(myShapes(iGenS,iDirS),Lt.Value(),Or);
+ }
+ }
+ else myBuilder.Add(myShapes(iGenS,iDirS),newShell,Or);
}
}
else if (myDirShapeTool.Type(aDirS)==TopAbs_WIRE){
TopAbs_ShapeEnum aGenSType = myGenShapeTool.Type(aGenS);
switch (aGenSType){
case TopAbs_VERTEX :
- myBuilder.MakeWire(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeWire(myShapes(iGenS,iDirS));
+ break;
case TopAbs_EDGE :
- myBuilder.MakeShell(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeShell(myShapes(iGenS,iDirS));
+ break;
case TopAbs_WIRE :
- myBuilder.MakeShell(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeShell(myShapes(iGenS,iDirS));
+ break;
case TopAbs_FACE :
- myBuilder.MakeCompSolid(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeCompSolid(myShapes(iGenS,iDirS));
+ break;
case TopAbs_SHELL :
- myBuilder.MakeCompSolid(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeCompSolid(myShapes(iGenS,iDirS));
+ break;
case TopAbs_SOLID :
- Standard_NoSuchObject::Raise("Solids are not Processed");
- break;
+ Standard_NoSuchObject::Raise("Solids are not Processed");
+ break;
case TopAbs_COMPSOLID :
- Standard_NoSuchObject::Raise("Solids are not Processed");
- break;
+ Standard_NoSuchObject::Raise("Solids are not Processed");
+ break;
case TopAbs_COMPOUND :
- myBuilder.MakeCompound(myShapes(iGenS,iDirS));
- break;
+ myBuilder.MakeCompound(myShapes(iGenS,iDirS));
+ break;
default:
- Standard_NoSuchObject::Raise("Unknown Shape");
- break;
+ Standard_NoSuchObject::Raise("Unknown Shape");
+ break;
}
bDirS = aDirS;
for (Kt.Init(aDirS);Kt.More();Kt.Next()){
- subDirS = Kt.Value();
- if(HasShape(aGenS,subDirS)){
- Or = Kt.Orientation();
- newShape = Shape(aGenS,subDirS);
- myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
- }
+ subDirS = Kt.Value();
+ if(HasShape(aGenS,subDirS)){
+ Or = Kt.Orientation();
+ newShape = Shape(aGenS,subDirS);
+ myBuilder.Add(myShapes(iGenS,iDirS),newShape,Or);
+ }
}
}
myBuiltShapes(iGenS,iDirS) = Standard_True;
}
// Change the "Closed" flag only for Wires and Shells
if (myShapes(iGenS, iDirS).ShapeType() == TopAbs_WIRE ||
- myShapes(iGenS, iDirS).ShapeType() == TopAbs_SHELL)
+ myShapes(iGenS, iDirS).ShapeType() == TopAbs_SHELL)
myShapes(iGenS,iDirS).Closed (BRep_Tool::IsClosed (myShapes(iGenS,iDirS)));
return myShapes(iGenS,iDirS);
}