static void StoreGroups(GEOMImpl_IPipe *theCI,
Handle(TColStd_HArray1OfInteger) *theGroups);
-static bool DoGroups(BRepOffsetAPI_MakePipeShell &theSweep,
- TopTools_SequenceOfShape *theGroups);
+// after OCCT improvement
+static bool DoGroups1(const TopoDS_Shape &theProfile,
+ BRepOffsetAPI_MakePipeShell &theSweep,
+ TopTools_SequenceOfShape *theGroups);
-static bool CreateGroups(BRepOffsetAPI_MakePipeShell &theSweep,
- GEOMImpl_IPipe *theCI);
+static bool CreateGroups1(const TopoDS_Shape &theProfile,
+ BRepOffsetAPI_MakePipeShell &theSweep,
+ GEOMImpl_IPipe *theCI);
//=======================================================================
//function : GetID
// Make groups.
TopTools_SequenceOfShape aGroups[5];
- if (!DoGroups(aBuilder, aGroups)) {
+ TopoDS_Shape aProfile = aTmpSeqBases.Value(1);
+ if (!DoGroups1(aProfile, aBuilder, aGroups)) {
Standard_ConstructionError::Raise("Generate groups failure");
}
// Make groups.
TopTools_SequenceOfShape aGroups[5];
- if (!DoGroups(aBuilder, aGroups)) {
+ TopoDS_Shape aProfile = aTmpSeqBases.Value(1);
+ if (!DoGroups1(aProfile, aBuilder, aGroups)) {
Standard_ConstructionError::Raise("Generate groups failure");
}
// Make groups.
TopTools_SequenceOfShape aSeqGroups[5];
- if (!DoGroups(aBuilder, aSeqGroups)) {
+ TopoDS_Shape aProfile = usedBases.Value(1);
+ if (!DoGroups1(aProfile, aBuilder, aSeqGroups)) {
Standard_ConstructionError::Raise("Generate groups failure");
}
// Create groups.
if (isGenerateGroups) {
// Make groups.
- if (!DoGroups(aBuilder, aLocalGroups)) {
+ if (!DoGroups1(aWire1, aBuilder, aLocalGroups)) {
if (aCI) delete aCI;
Standard_ConstructionError::Raise("Generate groups failure");
}
// Create groups.
if (isGenerateGroups) {
// Make groups.
- if (!DoGroups(aBuilder, aLocalGroups)) {
+ if (!DoGroups1(aWire1, aBuilder, aLocalGroups)) {
if (aCI) delete aCI;
Standard_ConstructionError::Raise("Generate groups failure");
}
PipeBuilder.MakeSolid();
}
- if (!CreateGroups(PipeBuilder, aCIBN)) {
+ if (!CreateGroups1(aProf, PipeBuilder, aCIBN)) {
if (aCIBN) delete aCIBN;
Standard_ConstructionError::Raise("Generate groups failure");
}
}
//=======================================================================
-//function : DoGroups
-//purpose : auxilary for CreateGroups()
+//function : DoGroups1
+//purpose : auxilary for CreateGroups1()
//=======================================================================
-bool DoGroups(BRepOffsetAPI_MakePipeShell &theSweep,
- TopTools_SequenceOfShape *theGroups)
+bool DoGroups1 (const TopoDS_Shape &theProfile,
+ BRepOffsetAPI_MakePipeShell &theSweep,
+ TopTools_SequenceOfShape *theGroups)
{
Standard_Boolean isDoSides = Standard_False;
return false;
}
- const TopoDS_Shape aDownShape = theSweep.FirstShape();
+ TopoDS_Shape aDownShape = theProfile;
+ if (aDownShape.IsNull()) aDownShape = theSweep.FirstShape();
if (isDoSides) {
// Create Side1 and Side2 groups.
if (aMapFence.Add(aSideShape)) {
theGroups[anIdSide].Append(aSideShape);
}
+ } else if (aSideShape.ShapeType() == TopAbs_WIRE) {
+ if (aMapFence.Add(aSideShape)) {
+ TopExp_Explorer anExpWE (aSideShape, TopAbs_EDGE);
+ for (; anExpWE.More(); anExpWE.Next()) {
+ theGroups[anIdSide].Append(anExpWE.Current());
+ }
+ }
} else {
- // Only edges can be is Side1 and Side2 groups.
+ // Only edges can be in Side1 and Side2 groups.
return false;
}
}
}
}
} else {
- // Create Other group. Get boudnary edges of the profile.
+ // Create Other group. Get boundary edges of the profile.
TopTools_MapOfShape aMapBndEdges;
TopExp_Explorer anExp(aDownShape, TopAbs_EDGE);
if (aMapFence.Add(anOtherShape)) {
theGroups[GROUP_OTHER].Append(anOtherShape);
}
+ } else if (anOtherShape.ShapeType() == TopAbs_SHELL) {
+ if (aMapFence.Add(anOtherShape)) {
+ TopExp_Explorer anExpSHF (anOtherShape, TopAbs_FACE);
+ for (; anExpSHF.More(); anExpSHF.Next()) {
+ theGroups[GROUP_OTHER].Append(anExpSHF.Current());
+ }
+ }
} else {
// Only faces can be in Other group.
return false;
}
//=======================================================================
-//function : CreateGroups
+//function : CreateGroups1
//purpose : auxilary for Execute()
//=======================================================================
-bool CreateGroups(BRepOffsetAPI_MakePipeShell &theSweep,
- GEOMImpl_IPipe *theCI)
+bool CreateGroups1 (const TopoDS_Shape &theProfile,
+ BRepOffsetAPI_MakePipeShell &theSweep,
+ GEOMImpl_IPipe *theCI)
{
if (!theCI->GetGenerateGroups()) {
// Nothing to do.
// Make groups.
TopTools_SequenceOfShape aGroups[5];
- if (!DoGroups(theSweep, aGroups)) {
+ if (!DoGroups1(theProfile, theSweep, aGroups)) {
return false;
}
}
//=======================================================================
-//function : DoGroups
+//function : DoGroups2
//purpose : auxilary for CreateGroups()
//=======================================================================
-static bool DoGroups(const TopoDS_Shape &theProfile,
- const TopoDS_Shape &thePath,
- BRepOffsetAPI_MakePipe &theSweep,
- TopTools_SequenceOfShape *theGroups)
+static bool DoGroups2(const TopoDS_Shape &theProfile,
+ const TopoDS_Shape &thePath,
+ BRepOffsetAPI_MakePipe &theSweep,
+ TopTools_SequenceOfShape *theGroups)
{
Standard_Boolean isDoSides = Standard_False;
}
}
} else {
- // Create Other group. Get boudnary edges of the profile.
+ // Create Other group. Get boundary edges of the profile.
TopTools_MapOfShape aMapBndEdges;
TopExp_Explorer anExp(theProfile, TopAbs_EDGE);
//function : CreateGroups
//purpose : auxilary for Execute()
//=======================================================================
-static bool CreateGroups(const TopoDS_Shape &theProfile,
- const TopoDS_Shape &thePath,
- BRepOffsetAPI_MakePipe &theSweep,
- GEOMImpl_IPipe *theCI)
+static bool CreateGroups2(const TopoDS_Shape &theProfile,
+ const TopoDS_Shape &thePath,
+ BRepOffsetAPI_MakePipe &theSweep,
+ GEOMImpl_IPipe *theCI)
{
if (!theCI->GetGenerateGroups()) {
// Nothing to do.
// Make groups.
TopTools_SequenceOfShape aGroups[5];
- if (!DoGroups(theProfile, thePath, theSweep, aGroups)) {
+ if (!DoGroups2(theProfile, thePath, theSweep, aGroups)) {
return false;
}
if (aShapeBase.ShapeType() == TopAbs_EDGE ||
aShapeBase.ShapeType() == TopAbs_WIRE)
{
- TopoDS_Wire Profile;
+ TopoDS_Wire aProfile;
if (aShapeBase.ShapeType() == TopAbs_WIRE)
- Profile = TopoDS::Wire(aShapeBase);
+ aProfile = TopoDS::Wire(aShapeBase);
else
{
BRep_Builder BB;
- BB.MakeWire(Profile);
- BB.Add(Profile, aShapeBase);
+ BB.MakeWire(aProfile);
+ BB.Add(aProfile, aShapeBase);
}
BRepOffsetAPI_MakePipeShell Sweep (aWirePath);
BRepBuilderAPI_MakeFace FaceBuilder (aWirePath, Standard_True); //to find the plane of spine
if (FaceBuilder.IsDone())
Sweep.SetMode(FaceBuilder.Face());
- Sweep.Add(Profile);
+ Sweep.Add(aProfile);
Standard_Boolean isDone = BuildPipeShell(Sweep);
else
aShape = Sweep.Shape(); //result is good
- if (!CreateGroups(Sweep, aCI)) {
+ if (!CreateGroups1(aProfile, Sweep, aCI)) {
if (aCI) delete aCI;
Standard_ConstructionError::Raise("Generate groups failure");
}
if (aMkPipe.IsDone() && aMkPipe.ErrorOnSurface() <= TolPipeSurf) {
aShape = aMkPipe.Shape();
- if (!CreateGroups(aShapeBase, aWirePath, aMkPipe, aCI)) {
+ if (!CreateGroups2(aShapeBase, aWirePath, aMkPipe, aCI)) {
if (aCI) delete aCI;
Standard_ConstructionError::Raise("Generate groups failure");
}
if (aMkPipeDescrete.IsDone()) {
aShape = aMkPipeDescrete.Shape();
- if (!CreateGroups(aShapeBase, aWirePath, aMkPipeDescrete, aCI)) {
+ if (!CreateGroups2(aShapeBase, aWirePath, aMkPipeDescrete, aCI)) {
if (aCI) delete aCI;
Standard_ConstructionError::Raise("Generate groups failure");
}