import EventsAPI
import ModelAPI
+import GeomAPI
import GeomAlgoAPI
import salome
if aPartSize == 0:
EventsAPI.Events_Error_send("No results in the active document")
return
-
- anObjList = [self.Part.object(kResultBodyType, idx) for idx in xrange(aPartSize)]
+
+ anObjList = [self.Part.object(kResultBodyType, idx) for idx in xrange(aPartSize)]
aShapesList = GeomAlgoAPI.ShapeList()
aName = ""
for idx, anObject in enumerate(anObjList):
aDump = self.shape.getShapeStream()
# Load shape to SALOME Geom
aBrep = self.geompy.RestoreShape(aDump)
-
+
# Make unique name
aId = getObjectIndex(aName)
if aId != 0:
aName = aName + '_' + str(aId)
-
+
self.geompy.addToStudy(aBrep, aName)
self.brep = aBrep
aName = aFeature.firstResult().data().name()
groupIndex = groupIndex + 1
self.createGroupFromList(aSelectionList, aName)
-
+
+ ## Returns a type of the shape in the old GEOM representation
+ def shapeType(self, shape):
+ if shape.isVertex():
+ return "VERTEX"
+ elif shape.isEdge():
+ return "EDGE"
+ elif shape.isFace():
+ return "FACE"
+
+ return "SOLID"
+
## Creates a group by given list of selected objects and the name
# @param theSelectionList: list of selected objects
# @param theGroupName: name of the group to create
# and get the corresponding ID
aSelectionNum = theSelectionList.size()
Ids = []
+ groupType = ""
for aSelIndex in range(0, aSelectionNum):
aSelection = theSelectionList.value(aSelIndex)
anID = GeomAlgoAPI.GeomAlgoAPI_CompoundBuilder.id(self.shape, aSelection.value())
- Ids.append(anID)
- if aSelection.value().isVertex():
- groupType = "VERTEX"
- elif aSelection.value().isEdge():
- groupType = "EDGE"
- elif aSelection.value().isFace():
- groupType = "FACE"
+ if anID == 0:
+ #it may be a compound of objects if movement of the group to the end
+ # splits the original element to several (issue 1146)
+ anExp = GeomAPI.GeomAPI_ShapeExplorer(aSelection.value(), GeomAPI.GeomAPI_Shape.SHAPE)
+ while anExp.more():
+ anID = GeomAlgoAPI.GeomAlgoAPI_CompoundBuilder.id(self.shape, anExp.current())
+ if anID != 0:
+ Ids.append(anID)
+ groupType = self.shapeType(anExp.current())
+ anExp.next()
else:
- groupType = "SOLID"
+ Ids.append(anID)
+ groupType = self.shapeType(aSelection.value())
+
aGroup = self.geompy.CreateGroup(self.brep, self.geompy.ShapeType[groupType])
self.geompy.UnionIDs(aGroup,Ids)
self.geompy.addToStudyInFather(self.brep, aGroup, theGroupName)
-
+
## Exports all shapes and groups into the GEOM module.
def execute(self):
aSession = ModelAPI.ModelAPI_Session.get()
self.geomObjects = []
## geomBuilder tool
self.geompy = geomBuilder.New(salome.myStudy)
-
+
# Export bodies and groups
self.exportBodies()
self.exportGroups()
{
}
+// returns a type of shape to expolode, but if toFind==SHAPE, it will return the type
+// of the first sub-element of compoud if theSHape is compound
+static TopAbs_ShapeEnum ShapeType(const std::shared_ptr<GeomAPI_Shape>& theShape,
+ const GeomAPI_Shape::ShapeType toFind)
+{
+ if (toFind == GeomAPI_Shape::SHAPE) {
+ TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
+ if (!aShape.IsNull() && aShape.ShapeType() == TopAbs_COMPOUND) {
+ TopoDS_Iterator anIter(aShape);
+ if (anIter.More()) {
+ return anIter.Value().ShapeType();
+ }
+ }
+ }
+ return (TopAbs_ShapeEnum)toFind;
+}
+
//=================================================================================================
GeomAPI_ShapeExplorer::GeomAPI_ShapeExplorer(const std::shared_ptr<GeomAPI_Shape>& theShape,
const GeomAPI_Shape::ShapeType toFind,
const GeomAPI_Shape::ShapeType toAvoid)
: GeomAPI_Interface(new TopExp_Explorer(theShape->impl<TopoDS_Shape>(),
- (TopAbs_ShapeEnum)toFind,
+ ShapeType(theShape, toFind),
(TopAbs_ShapeEnum)toAvoid))
{
}
const GeomAPI_Shape::ShapeType toAvoid)
{
MY_EXPLORER->Init(theShape->impl<TopoDS_Shape>(),
- (TopAbs_ShapeEnum)toFind,
+ ShapeType(theShape, toFind),
(TopAbs_ShapeEnum)toAvoid);
}