Salome HOME
Remove execute() from partition feature.
[modules/shaper.git] / src / PythonAPI / model / tools.py
1 """Common tools for other modules.
2 Author: Sergey Pokhodenko
3 Copyright (C) 2014-20xx CEA/DEN, EDF R&D
4 """
5
6 import re
7 import collections
8
9 import ModelAPI
10 import GeomAPI
11 import GeomDataAPI
12
13 # from .sketcher.sketch import Sketch
14
15
16 def convert_to_underscore(name):
17     """Convert CamelCase to underscore_case."""
18     s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
19     return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
20
21
22 def get_value(attribute):
23     """Return simple type value from ModelAPI attribute if possible.
24
25     ModelAPI_AttributeDouble -> double
26     ModelAPI_AttributeString -> str
27     """
28     if (isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble) or
29             isinstance(attribute, ModelAPI.ModelAPI_AttributeString)):
30         return attribute.value()
31
32     print type(attribute)
33     return attribute
34
35
36 class Selection:
37     """Class for storing selection."""
38
39     def __init__(self, *args):
40         """Initialize selection."""
41         if not args:
42             self.args = (None, None)
43             return
44
45         if len(args) == 1 and isinstance(args[0], basestring):
46             self.args = args
47             return
48
49         assert(len(args) > 1 and len(args) < 4)
50         assert(isinstance(args[0], basestring) or
51                isinstance(args[0], ModelAPI.ModelAPI_Result))
52         if isinstance(args[0], basestring):
53             assert(isinstance(args[1], basestring))
54         elif isinstance(args[0], ModelAPI.ModelAPI_Result) or args[0] is None:
55             assert(isinstance(args[1], GeomAPI.GeomAPI_Shape))
56         self.args = args
57
58
59 def fill_attribute(attribute, value):
60     """Set value to attribure.
61
62     This function processes complex cases.
63     ModelAPI_AttributeSelectionList can accept string, result + shape, list of
64     strings and [result + shape]...
65     ModelAPI_AttributeDouble can accept float and string
66     """
67     if (isinstance(attribute, ModelAPI.ModelAPI_AttributeBoolean) or
68         isinstance(attribute, ModelAPI.ModelAPI_AttributeDocRef) or
69         isinstance(attribute, ModelAPI.ModelAPI_AttributeInteger) or
70         isinstance(attribute, ModelAPI.ModelAPI_AttributeReference) or
71         isinstance(attribute, ModelAPI.ModelAPI_AttributeString)
72         ):
73         attribute.setValue(value)
74
75     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble):
76         if isinstance(value, basestring):
77             attribute.setText(value)
78         else:
79             attribute.setValue(value)
80
81     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeIntArray):
82         attrubute.setSize(len(value))
83         for i in range(len(value)):
84             attrubute.setValue(i, value[i])
85
86     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefAttr):
87         assert(isinstance(value, ModelAPI.ModelAPI_Attribute) or
88                isinstance(value, ModelAPI.ModelAPI_Object))
89         if isinstance(value, ModelAPI.ModelAPI_Attribute):
90             attrubute.setAttr(value)
91         elif isinstance(value, ModelAPI.ModelAPI_Object):
92             attrubute.setObject(value)
93
94     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefList):
95         attribute.clear()
96         if not value:
97             return
98
99         assert(isinstance(value, collections.Iterable))
100         for item in value:
101             assert(isinstance(item, ModelAPI.ModelAPI_Object))
102             attribute.append(item)
103
104     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelection):
105         if value is None:
106             attribute.setValue(None, None)
107             return
108
109         assert(isinstance(value, Selection))
110         attribute.setValue(*value.args)
111
112     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelectionList):
113         attribute.clear()
114         if not value:
115             return
116
117         assert(isinstance(value, collections.Iterable))
118         for item in value:
119             assert(isinstance(item, Selection))
120             attribute.append(*item.args)
121
122     elif (isinstance(attribute, GeomDataAPI.GeomDataAPI_Dir) or
123           isinstance(attribute, GeomDataAPI.GeomDataAPI_Point) or
124           isinstance(attribute, GeomDataAPI.GeomDataAPI_Point2D)
125           ):
126         assert(isinstance(value, collections.Iterable))
127         attribute.setValue(*value)
128
129     else:
130         raise AssertionError("Wrong attribute type: %s" % type(attribute))