From bad54273fadb482de37d38d680fe5b6bad9522ae Mon Sep 17 00:00:00 2001 From: mpv Date: Mon, 27 Mar 2017 12:13:33 +0300 Subject: [PATCH] Fix for the issue #1947 : export fields to GEOM as a full set of sub-shapes with only selected values as not-default. --- .../ConnectorPlugin_ExportFeature.py | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py index 5c9ec2bb4..c59d9e249 100644 --- a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py +++ b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py @@ -173,16 +173,30 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): ## Returns a type of the shape type in the old GEOM representation def selectionDim(self, theSelectionType): - if theSelectionType == "vertex": + selType=theSelectionType.lower() # more or less independed approach + if selType== "vertex": return 0 - if theSelectionType == "edge": + if selType== "edge": return 1 - if theSelectionType == "face": + if selType== "face": return 2 - if theSelectionType == "solid": + 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 @@ -205,14 +219,36 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): #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 = [] - aRows = aTables.rows() - aCols = aTables.columns() - for aRow in range(1, aRows): # no defaults + 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 -- 2.39.2