1 """Common tools for other modules.
2 Author: Sergey Pokhodenko
3 Copyright (C) 2014-20xx CEA/DEN, EDF R&D
13 # from .sketcher.sketch import Sketch
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()
22 def get_value(attribute):
23 """Return simple type value from ModelAPI attribute if possible.
25 ModelAPI_AttributeDouble -> double
26 ModelAPI_AttributeString -> str
28 if (isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble) or
29 isinstance(attribute, ModelAPI.ModelAPI_AttributeString)):
30 return attribute.value()
37 """Class for storing selection."""
39 def __init__(self, *args):
40 """Initialize selection."""
42 self.args = (None, None)
45 if len(args) == 1 and isinstance(args[0], basestring):
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))
59 def fill_attribute(attribute, value):
60 """Set value to attribure.
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
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)
73 attribute.setValue(value)
75 elif isinstance(attribute, ModelAPI.ModelAPI_AttributeDouble):
76 if isinstance(value, basestring):
77 attribute.setText(value)
79 attribute.setValue(value)
81 # TODO: ModelAPI_AttributeIntArray should be added to SWIG
82 # elif isinstance(attribute, ModelAPI.ModelAPI_AttributeIntArray):
83 # attrubute.setSize(len(value))
84 # for i in range(len(value)):
85 # attrubute.setValue(i, value[i])
87 elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefAttr):
88 assert(isinstance(value, ModelAPI.ModelAPI_Attribute) or
89 isinstance(value, ModelAPI.ModelAPI_Object))
90 if isinstance(value, ModelAPI.ModelAPI_Attribute):
91 attrubute.setAttr(value)
92 elif isinstance(value, ModelAPI.ModelAPI_Object):
93 attrubute.setObject(value)
95 elif isinstance(attribute, ModelAPI.ModelAPI_AttributeRefList):
100 assert(isinstance(value, collections.Iterable))
102 assert(isinstance(item, ModelAPI.ModelAPI_Object))
103 attribute.append(item)
105 elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelection):
107 attribute.setValue(None, None)
110 assert(isinstance(value, Selection))
111 attribute.setValue(*value.args)
113 elif isinstance(attribute, ModelAPI.ModelAPI_AttributeSelectionList):
118 assert(isinstance(value, collections.Iterable))
120 assert(isinstance(item, Selection))
121 attribute.append(*item.args)
123 elif (isinstance(attribute, GeomDataAPI.GeomDataAPI_Dir) or
124 isinstance(attribute, GeomDataAPI.GeomDataAPI_Point) or
125 isinstance(attribute, GeomDataAPI.GeomDataAPI_Point2D)
127 assert(isinstance(value, collections.Iterable))
128 attribute.setValue(*value)
131 raise AssertionError("Wrong attribute type: %s" % type(attribute))