X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConnectorPlugin%2FConnectorPlugin_ExportFeature.py;h=aaaab43c631fe3001dfbc0d59cb897eb52e910a0;hb=fb5791f033b0e2f0f79693b82464332316ce19b0;hp=31db8fc9a78ee751798abeef284d32794b8af121;hpb=5f94e78639962133064641e87f539915d7ad97e7;p=modules%2Fshaper.git diff --git a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py index 31db8fc9a..aaaab43c6 100644 --- a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py +++ b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py @@ -1,6 +1,25 @@ +## Copyright (C) 2014-2017 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 @@ -27,6 +46,10 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): ## 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. @@ -51,7 +74,7 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): 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)] @@ -128,7 +151,8 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): 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(): + # chcking of concealment removed because of #1799, remark #13 "aContext.isConcealed()" + if aContext is None or aContext.isDisabled(): continue anID = GeomAlgoAPI.GeomAlgoAPI_CompoundBuilder.id(self.shape, aSelection.value()) @@ -151,6 +175,116 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): self.geompy.UnionIDs(aGroup,Ids) self.geompy.addToStudyInFather(self.brep, aGroup, theGroupName) + ## Exports all fields + def exportFields(self): + # iterate all features to find fields + aFeaturesNum = self.Part.size("Features") + fieldIndex = 0 + for anIndex in range(0, aFeaturesNum): + aFeature = self.Part.object("Features", anIndex) + aSelectionList = aFeature.data().selectionList("selected") + # if a field has been found + if aSelectionList: + aFeature = ModelAPI.objectToFeature(aFeature) + if aFeature.firstResult() is not None: + aName = aFeature.firstResult().data().name() + fieldIndex = fieldIndex + 1 + self.createFieldFromFeature(aFeature, aName) + + ## Returns a type of the shape type in the old GEOM representation + def selectionDim(self, theSelectionType): + selType=theSelectionType.lower() # more or less independed approach + if selType== "vertex": + return 0 + if selType== "edge": + return 1 + if selType== "face": + return 2 + if selType== "solid": + return 3 + return -1 + + ## Returns a type of the shape type in the GeomAPI_Shape representation + def geomAPISelectionDim(self, theSelectionType): + selType=theSelectionType.lower() # more or less independed approach + if selType== "vertex": + return GeomAPI.GeomAPI_Shape.VERTEX + if selType== "edge": + return GeomAPI.GeomAPI_Shape.EDGE + if selType== "face": + return GeomAPI.GeomAPI_Shape.FACE + if selType== "solid": + return GeomAPI.GeomAPI_Shape.SOLID + return GeomAPI.GeomAPI_Shape.SHAPE + + ## Creates a field by the field feature and the name + # @param theField: the field feature + # @param theFieldName: name of the field to create + def createFieldFromFeature(self, theField, theFieldName): + # iterate on all selected entities of the field + # and get the corresponding ID + aTables = theField.tables("values") + aSelection = theField.selectionList("selected") + + # set component names + aComps = theField.stringArray("components_names") + aCompNames = [] + aCompNum = aComps.size() + for aCompIndex in range(0, aCompNum): + aCompNames.append(aComps.value(aCompIndex)) + + #if len(Ids) <> 0: + aDim = self.selectionDim(aSelection.selectionType()) + aResField = self.geompy.CreateField(self.brep, theFieldName, aTables.type(), aDim, aCompNames) + #self.geompy.UnionIDs(theField,Ids) + self.geompy.addToStudyInFather(self.brep, aResField, theFieldName) + + # set default values to all not filled sub-shapes (fields in GEOM support only full set of subs) + Ids={} + anExp = GeomAPI.GeomAPI_ShapeExplorer(self.shape, self.geomAPISelectionDim(aSelection.selectionType())) + while anExp.more(): + anID = GeomAlgoAPI.GeomAlgoAPI_CompoundBuilder.id(self.shape, anExp.current()) + if anID != 0: + Ids[anID]=anExp.current() + anExp.next() + + SelectedIds={} + for aSelIndex in range(aSelection.size()): + selShape = aSelection.value(aSelIndex).value() + # searching for this shape in Ids + for a in Ids.items(): + if (a[1].isSame(selShape)): + SelectedIds[a[0]] = aSelIndex + + # values here are in the same order as in field + listOfValues = Ids.items() + listOfValues.sort() + # set steps + aStepsNum = aTables.tables() + for aStepIndex in range(0, aStepsNum): + aStamp = theField.intArray("stamps").value(aStepIndex) + aValues = [] + for aValId in listOfValues: + aRow = 0 # default value if not from selection + if SelectedIds.has_key(aValId[0]): # take the value from the table + aRow = SelectedIds[aValId[0]] + 1 # plus one to avoid default string + aCols = aTables.columns() + for aCol in range(0, aCols): + aVal = aTables.valueStr(aRow, aCol, aStepIndex) + if aTables.type() == 0: # bool + if aVal == "True": + aVal = True + else: + aVal = False + elif aTables.type() == 1: # int + aVal = int(aVal) + elif aTables.type() == 2: # double + aVal = float(aVal) + aValues.append(aVal) + aStep = aResField.addStep(aStepIndex + 1, aStamp, aValues) + if aStep: + self.geompy.addToStudyInFather( aResField, aStep, aStep.GetName() ) + ## Exports all shapes and groups into the GEOM module. def execute(self): aSession = ModelAPI.ModelAPI_Session.get() @@ -159,9 +293,11 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): ## 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() + self.exportFields() pass