import EventsAPI
import ModelAPI
+import GeomAPI
import GeomAlgoAPI
import salome
## The constructor.
def __init__(self):
ModelAPI.ModelAPI_Feature.__init__(self)
+ ## Shape that will be exported (the compound if there are several exported bodies)
+ self.shape = None
+ ## BRep representation of the exported shape (a stream that will be sent to GEOM and converted to GEOM object)
+ self.brep = None
@staticmethod
## Export kind. Static.
kResultBodyType = "Bodies"
aPartSize = self.Part.size(kResultBodyType)
if aPartSize == 0:
- EventsAPI.Events_Error_send("No results in the active document")
+ EventsAPI.Events_InfoMessage("ExportFeature","No results in the active document").send()
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)
+ # issue 1326: bodies that are already concealed did not exported, so groups should not be invalid
+ aContext = ModelAPI.modelAPI_Result(aSelection.context())
+ if aContext is None or aContext.isConcealed() or aContext.isDisabled():
+ continue
+
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())
+
+ if len(Ids) <> 0:
+ aGroup = self.geompy.CreateGroup(self.brep, self.geompy.ShapeType[groupType])
+ self.geompy.UnionIDs(aGroup,Ids)
+ self.geompy.addToStudyInFather(self.brep, aGroup, theGroupName)
- 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()
## List of objects created in the old geom for later use
self.geomObjects = []
## geomBuilder tool
+ salome.salome_init(0,1)
self.geompy = geomBuilder.New(salome.myStudy)
-
+
# Export bodies and groups
self.exportBodies()
self.exportGroups()