X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConnectorPlugin%2FConnectorPlugin_ExportFeature.py;h=31db8fc9a78ee751798abeef284d32794b8af121;hb=220bd2b37119be1c65abf88a88792445cb9d99f8;hp=ee7dafeb75a59090c40e0220310541c30e945fb1;hpb=592f9b635dddfc888cc2e14d8e996e0e21d904b3;p=modules%2Fshaper.git diff --git a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py index ee7dafeb7..31db8fc9a 100644 --- a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py +++ b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py @@ -4,6 +4,7 @@ import EventsAPI import ModelAPI +import GeomAPI import GeomAlgoAPI import salome @@ -52,8 +53,8 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): 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): @@ -78,12 +79,12 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): 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 @@ -102,7 +103,18 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): 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 @@ -111,23 +123,34 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): # 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() @@ -137,7 +160,7 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): self.geomObjects = [] ## geomBuilder tool self.geompy = geomBuilder.New(salome.myStudy) - + # Export bodies and groups self.exportBodies() self.exportGroups()