Salome HOME
Add ConnectorAPI
[modules/shaper.git] / src / PythonAPI / model / tools.py
index 2a4a6ed73fac25a94b6c9fb74a9bb0f399755663..cde3e64bff00c02d05527e91e42706416b2f41bb 100644 (file)
@@ -8,6 +8,7 @@ import collections
 
 import ModelAPI
 import GeomAPI
+import GeomDataAPI
 
 # from .sketcher.sketch import Sketch
 
@@ -18,25 +19,21 @@ def convert_to_underscore(name):
     return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
 
 
-def get_value(attribute):
-    """Return simple type value from ModelAPI attribute if possible.
-
-    ModelAPI_AttributeDouble -> double
-    ModelAPI_AttributeString -> str
-    """
-    if (isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble) or
-            isinstance(attribute, ModelAPI.ModelAPI_AttributeString)):
-        return attribute.value()
-
-    print type(attribute)
-    return attribute
-
-
 class Selection:
-    """Class for storing selection."""
+    """Class for selection.
+
+    Selection() -> empty selection
+    Selection(name, type) -> selection initialized with arguments:
+        - name -- topological name
+        - type -- type of the object
+    Selection(context, shape) -> selection initialized with arguments:
+        - context -- ModelAPI_Result object
+        - shape -- GeomAPI_Shape shape
+    """
 
     def __init__(self, *args):
-        """Initialize selection."""
+        """x.__init__(...) initializes x; see x.__class__.__doc__ for signature"""
+
         if not args:
             self.args = (None, None)
             return
@@ -48,22 +45,14 @@ class Selection:
         assert(len(args) > 1 and len(args) < 4)
         assert(isinstance(args[0], basestring) or
                isinstance(args[0], ModelAPI.ModelAPI_Result))
-#                 "args[0] should be str or ModelAPI_Result (%s given)." %
-#                 type(args[0]))
         if isinstance(args[0], basestring):
             assert(isinstance(args[1], basestring))
-#             ,
-#                    "args[1] should be str (%s given)." %
-#                    type(args[1]))
-        elif isinstance(args[0], ModelAPI.ModelAPI_Result):
+        elif isinstance(args[0], ModelAPI.ModelAPI_Result) or args[0] is None:
             assert(isinstance(args[1], GeomAPI.GeomAPI_Shape))
-#                    ,
-#                    "args[1] should be GeomAPI_Shape (%s given)." %
-#                    type(args[1]))
         self.args = args
 
 
-def fill_attribute(attribute, value, *args):
+def fill_attribute(attribute, value):
     """Set value to attribure.
 
     This function processes complex cases.
@@ -71,15 +60,55 @@ def fill_attribute(attribute, value, *args):
     strings and [result + shape]...
     ModelAPI_AttributeDouble can accept float and string
     """
-    if isinstance(attribute, ModelAPI.ModelAPI_AttributeSelectionList):
+    if (isinstance(attribute, ModelAPI.ModelAPI_AttributeBoolean) or
+        isinstance(attribute, ModelAPI.ModelAPI_AttributeDocRef) or
+        isinstance(attribute, ModelAPI.ModelAPI_AttributeReference)
+        ):
+        attribute.setValue(value)
+
+    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeString):
+        attribute.setValue(str(value))
+
+    elif (isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble) or
+          isinstance(attribute, ModelAPI.ModelAPI_AttributeInteger)
+          ):
+        if isinstance(value, basestring):
+            attribute.setText(value)
+        else:
+            attribute.setValue(value)
+
+    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeIntArray):
+        attrubute.setSize(len(value))
+        for i in range(len(value)):
+            attrubute.setValue(i, value[i])
+
+    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefAttr):
+        assert(isinstance(value, ModelAPI.ModelAPI_Attribute) or
+               isinstance(value, ModelAPI.ModelAPI_Object))
+        if isinstance(value, ModelAPI.ModelAPI_Attribute):
+            attribute.setAttr(value)
+        elif isinstance(value, ModelAPI.ModelAPI_Object):
+            attribute.setObject(value)
+
+    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefList):
         attribute.clear()
         if not value:
             return
 
         assert(isinstance(value, collections.Iterable))
         for item in value:
-            assert(isinstance(item, Selection))
-            attribute.append(*item.args)
+            assert(isinstance(item, ModelAPI.ModelAPI_Object))
+            attribute.append(item)
+
+    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefAttrList):
+        attribute.clear()
+        if not value:
+            return
+
+        assert(isinstance(value, collections.Iterable))
+        for item in value:
+            assert(isinstance(item, ModelAPI.ModelAPI_Attribute))
+            attribute.append(item)
 
     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelection):
         if value is None:
@@ -89,11 +118,22 @@ def fill_attribute(attribute, value, *args):
         assert(isinstance(value, Selection))
         attribute.setValue(*value.args)
 
-    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble):
-        if isinstance(value, basestring):
-            attribute.setText(value)
-        else:
-            attribute.setValue(value)
+    elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelectionList):
+        attribute.clear()
+        if not value:
+            return
+
+        assert(isinstance(value, collections.Iterable))
+        for item in value:
+            assert(isinstance(item, Selection))
+            attribute.append(*item.args)
+
+    elif (isinstance(attribute, GeomDataAPI.GeomDataAPI_Dir) or
+          isinstance(attribute, GeomDataAPI.GeomDataAPI_Point) or
+          isinstance(attribute, GeomDataAPI.GeomDataAPI_Point2D)
+          ):
+        assert(isinstance(value, collections.Iterable))
+        attribute.setValue(*value)
 
     else:
         raise AssertionError("Wrong attribute type: %s" % type(attribute))