X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConnectorPlugin%2FConnectorPlugin_ExportFeature.py;h=141155028ef2d0b73c3544913ec74d552713d5d2;hb=50a8df0c6a66da8067b16155e5ae39f8f26a7ebc;hp=ee7dafeb75a59090c40e0220310541c30e945fb1;hpb=592f9b635dddfc888cc2e14d8e996e0e21d904b3;p=modules%2Fshaper.git diff --git a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py index ee7dafeb7..141155028 100644 --- a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py +++ b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py @@ -1,23 +1,35 @@ +# Copyright (C) 2014-2020 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + ## @package Plugins # ExportFeature class definition -# Copyright (C) 2014-20xx CEA/DEN, EDF R&D -import EventsAPI import ModelAPI -import GeomAlgoAPI +import ExchangeAPI +import EventsAPI import salome from salome.geom import geomBuilder -def getObjectIndex(theName): - aStudy = salome.myStudy - aId = 0 - aObj = aStudy.FindObjectByName(theName, "GEOM") - while len(aObj) != 0: - aId = aId + 1 - aName = theName + '_' + str(aId) - aObj = aStudy.FindObjectByName(aName, "GEOM") - return aId +from salome.shaper import model + +import os ## @ingroup Plugins # Feature to export all shapes and groups into the GEOM module @@ -26,6 +38,7 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): ## The constructor. def __init__(self): ModelAPI.ModelAPI_Feature.__init__(self) + pass @staticmethod ## Export kind. Static. @@ -36,7 +49,7 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): def getKind(self): return ExportFeature.ID() - ## This feature is action: has no property pannel and executes immideately. + ## This feature is action: has no property panel and executes immediately. def isAction(self): return True @@ -44,90 +57,57 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): def initAttributes(self): pass - ## Exports all bodies - def exportBodies(self): - global ShapeIndex - kResultBodyType = "Bodies" - aPartSize = self.Part.size(kResultBodyType) - 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)] - aShapesList = GeomAlgoAPI.ShapeList() - aName = "" - for idx, anObject in enumerate(anObjList): - aResult = ModelAPI.modelAPI_Result(anObject) - aBodyResult = ModelAPI.modelAPI_ResultBody(aResult) - if not aBodyResult: + ## Export the results, groups and fields via XAO + def exportViaXAO(self): + # if part-set is active, iterate also parts + for isPart in (True, False): + aResultType = model.ModelAPI_ResultBody_group() + if isPart: + aResultType = model.ModelAPI_ResultPart_group() + # iterate all results of Part, export one by one due to issue 2882 + for aResIndex in range(self.Part.size(aResultType)): + anObject = self.Part.object(aResultType, aResIndex) + aResult = model.objectToResult(anObject) + if not aResult is None: + if (not aResult.shape() or aResult.shape().isNull()) and isPart: + aPart = model.modelAPI_ResultPart(aResult) + aPartDoc = aPart.partDoc() + if not aPartDoc or not aPartDoc.isOpened(): + EventsAPI.Events_InfoMessage("ExportToGEOM", "For export to GEOM some Part is not activated", self).send() + return + + if not aResult.shape() or aResult.shape().isNull(): continue - aShape = aBodyResult.shape() - if aShape is not None and not aShape.isNull(): - aShapesList.append(aShape) - if len(aShapesList) == 1: - aName = aBodyResult.data().name() - - # issue 1045: create compound if there are more than one shape - if len(aShapesList) > 1: - self.shape = GeomAlgoAPI.GeomAlgoAPI_CompoundBuilder.compound(aShapesList) - aName = "ShaperResults" - elif len(aShapesList) == 1: - self.shape = aShapesList[0] - - # so, only one shape is always in the result - 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 - - ## Exports all groups - def exportGroups(self): - # iterate all features to find groups - aFeaturesNum = self.Part.size("Features") - groupIndex = 0 - for anIndex in range(0, aFeaturesNum): - aFeature = self.Part.object("Features", anIndex) - aSelectionList = aFeature.data().selectionList("group_list") - # if a group has been found - if aSelectionList: - aFeature = ModelAPI.objectToFeature(aFeature) - if aFeature.firstResult() is not None: - aName = aFeature.firstResult().data().name() - groupIndex = groupIndex + 1 - self.createGroupFromList(aSelectionList, aName) - - ## 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 - def createGroupFromList(self, theSelectionList, theGroupName): - # iterate on all selected entities of the group - # and get the corresponding ID - aSelectionNum = theSelectionList.size() - Ids = [] - 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" - else: - groupType = "SOLID" - - aGroup = self.geompy.CreateGroup(self.brep, self.geompy.ShapeType[groupType]) - self.geompy.UnionIDs(aGroup,Ids) - self.geompy.addToStudyInFather(self.brep, aGroup, theGroupName) - + tmpXAOFile = model.getTmpFileName("shaper_", ".xao") + self.tmpXAOFile = tmpXAOFile + #print "Export to %s"%tmpXAOFile + exportXAO = ExchangeAPI.exportToXAO(self.Part, tmpXAOFile, model.selection(aResult), "automatic_shaper_export_to_XAO") + if not os.path.exists(tmpXAOFile) or os.stat(tmpXAOFile).st_size == 0: + exportXAO.feature().setError("Error in exportToXAO. No XAO file has been created.") + return + imported, shape, subShapes, groups, fields = self.geompy.ImportXAO(tmpXAOFile) + self.geompy.addToStudy( shape, shape.GetName() ) + # add sub-shapes and groups to the object browser + for obj in subShapes + groups: + name = obj.GetName() + self.geompy.addToStudyInFather(shape, obj, name) + # add fields to the object browser + for field in fields: + name = field.GetName() + self.geompy.addToStudyInFather(shape, field, name) + # add steps to the object browser + steps = field.getSteps() + for i_step in steps: + step = field.getStep(i_step) + i_stamp = step.GetStamp() + step_name = "Step %i %i"%(i_step, i_stamp) + self.geompy.addToStudyInFather( field, step, step_name ) + # Remove the temporary file + os.remove(tmpXAOFile) + pass + pass + pass + ## Exports all shapes and groups into the GEOM module. def execute(self): aSession = ModelAPI.ModelAPI_Session.get() @@ -136,9 +116,9 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): ## List of objects created in the old geom for later use self.geomObjects = [] ## geomBuilder tool - self.geompy = geomBuilder.New(salome.myStudy) - - # Export bodies and groups - self.exportBodies() - self.exportGroups() + salome.salome_init(1) + self.geompy = geomBuilder.New() + + self.exportViaXAO() + pass