| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | __title__ = "FreeCAD FEM material document object" |
| | __author__ = "Juergen Riegel, Bernd Hahnebach, Mario Passaglia" |
| | __url__ = "https://www.freecad.org" |
| |
|
| | |
| | |
| | |
| |
|
| | from FreeCAD import Base, Units |
| | import Materials |
| |
|
| | from . import base_fempythonobject |
| |
|
| | _PropHelper = base_fempythonobject._PropHelper |
| |
|
| |
|
| | class MaterialCommon(base_fempythonobject.BaseFemPythonObject): |
| | """ |
| | The MaterialCommon object |
| | """ |
| |
|
| | Type = "Fem::MaterialCommon" |
| |
|
| | def __init__(self, obj): |
| | super().__init__(obj) |
| |
|
| | for prop in self._get_properties(): |
| | prop.add_to_object(obj) |
| |
|
| | obj.addExtension("App::SuppressibleExtensionPython") |
| |
|
| | def _get_properties(self): |
| | prop = [] |
| |
|
| | prop.append( |
| | _PropHelper( |
| | type="App::PropertyLinkSubListGlobal", |
| | name="References", |
| | group="Material", |
| | doc="List of material shapes", |
| | value=[], |
| | ) |
| | ) |
| | prop.append( |
| | _PropHelper( |
| | type="App::PropertyEnumeration", |
| | name="Category", |
| | group="Material", |
| | doc="Material type: fluid or solid", |
| | value=["Solid", "Fluid"], |
| | ) |
| | ) |
| | prop.append( |
| | _PropHelper( |
| | type="App::PropertyString", |
| | name="UUID", |
| | group="Material", |
| | doc="Material UUID", |
| | hidden=True, |
| | value="", |
| | ) |
| | ) |
| |
|
| | return prop |
| |
|
| | def onDocumentRestored(self, obj): |
| | |
| | for prop in self._get_properties(): |
| | try: |
| | obj.getPropertyByName(prop.name) |
| | except Base.PropertyError: |
| | prop.add_to_object(obj) |
| |
|
| | if prop.name == "References": |
| | |
| | prop.handle_change_type(obj, old_type="App::PropertyLinkSubList") |
| |
|
| | |
| | if not obj.UUID: |
| | obj.UUID = self._get_material_uuid(obj.Material) |
| |
|
| | if not obj.hasExtension("App::SuppressibleExtensionPython"): |
| | obj.addExtension("App::SuppressibleExtensionPython") |
| |
|
| | def _get_material_uuid(self, material): |
| | if not material: |
| | return "" |
| |
|
| | material_manager = Materials.MaterialManager() |
| |
|
| | for a_mat in material_manager.Materials: |
| | unmatched_item = True |
| | a_mat_prop = material_manager.getMaterial(a_mat).Properties |
| | for it in material: |
| | if it in a_mat_prop: |
| | |
| | try: |
| | unmatched_item = Units.Quantity(material[it]) != Units.Quantity( |
| | a_mat_prop[it] |
| | ) |
| | except ValueError: |
| | |
| | unmatched_item = material[it] != a_mat_prop[it] |
| |
|
| | if unmatched_item: |
| | break |
| |
|
| | if not unmatched_item: |
| | |
| | return a_mat |
| |
|
| | return "" |
| |
|
| | """ |
| | Some remarks to the category. Not finished, thus to be continued. |
| | |
| | Following question need to be answered: |
| | Why use a attribute to split the object? If a new fem object is needed, |
| | a new fem object should be created. A new object will have an own Type |
| | and will be collected for the writer by this type. |
| | |
| | The category should not be used in writer! This would be the border. |
| | If an fem object has to be distinguished in writer it should be an own |
| | fem object. |
| | |
| | The category is just some helper to make it easier for the user to |
| | distinguish between different material categories. |
| | It can have own command, own icon, own make method. In material TaskPanel |
| | it can be distinguished which materials will be shown. |
| | |
| | ATM in calculix writer the Category is used. See comments in CalculiX Solver. |
| | """ |
| |
|