]> SALOME platform Git repositories - modules/shaper.git/blob - src/PythonAPI/model/tools.py
Salome HOME
fe300d990b670624bb0f96875af5a2afca6c03c3
[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 class Selection:
23     """Class for storing selection."""
24
25     def __init__(self, *args):
26         """Initialize selection."""
27         if not args:
28             self.args = (None, None)
29             return
30
31         if len(args) == 1 and isinstance(args[0], basestring):
32             self.args = args
33             return
34
35         assert(len(args) > 1 and len(args) < 4)
36         assert(isinstance(args[0], basestring) or
37                isinstance(args[0], ModelAPI.ModelAPI_Result))
38         if isinstance(args[0], basestring):
39             assert(isinstance(args[1], basestring))
40         elif isinstance(args[0], ModelAPI.ModelAPI_Result) or args[0] is None:
41             assert(isinstance(args[1], GeomAPI.GeomAPI_Shape))
42         self.args = args
43
44
45 def fill_attribute(attribute, value):
46     """Set value to attribure.
47
48     This function processes complex cases.
49     ModelAPI_AttributeSelectionList can accept string, result + shape, list of
50     strings and [result + shape]...
51     ModelAPI_AttributeDouble can accept float and string
52     """
53     if (isinstance(attribute, ModelAPI.ModelAPI_AttributeBoolean) or
54         isinstance(attribute, ModelAPI.ModelAPI_AttributeDocRef) or
55         isinstance(attribute, ModelAPI.ModelAPI_AttributeInteger) or
56         isinstance(attribute, ModelAPI.ModelAPI_AttributeReference) or
57         isinstance(attribute, ModelAPI.ModelAPI_AttributeString)
58         ):
59         attribute.setValue(value)
60
61     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble):
62         if isinstance(value, basestring):
63             attribute.setText(value)
64         else:
65             attribute.setValue(value)
66
67     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeIntArray):
68         attrubute.setSize(len(value))
69         for i in range(len(value)):
70             attrubute.setValue(i, value[i])
71
72     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefAttr):
73         assert(isinstance(value, ModelAPI.ModelAPI_Attribute) or
74                isinstance(value, ModelAPI.ModelAPI_Object))
75         if isinstance(value, ModelAPI.ModelAPI_Attribute):
76             attrubute.setAttr(value)
77         elif isinstance(value, ModelAPI.ModelAPI_Object):
78             attrubute.setObject(value)
79
80     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefList):
81         attribute.clear()
82         if not value:
83             return
84
85         assert(isinstance(value, collections.Iterable))
86         for item in value:
87             assert(isinstance(item, ModelAPI.ModelAPI_Object))
88             attribute.append(item)
89
90     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelection):
91         if value is None:
92             attribute.setValue(None, None)
93             return
94
95         assert(isinstance(value, Selection))
96         attribute.setValue(*value.args)
97
98     elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelectionList):
99         attribute.clear()
100         if not value:
101             return
102
103         assert(isinstance(value, collections.Iterable))
104         for item in value:
105             assert(isinstance(item, Selection))
106             attribute.append(*item.args)
107
108     elif (isinstance(attribute, GeomDataAPI.GeomDataAPI_Dir) or
109           isinstance(attribute, GeomDataAPI.GeomDataAPI_Point) or
110           isinstance(attribute, GeomDataAPI.GeomDataAPI_Point2D)
111           ):
112         assert(isinstance(value, collections.Iterable))
113         attribute.setValue(*value)
114
115     else:
116         raise AssertionError("Wrong attribute type: %s" % type(attribute))