From 56209fa0ecfe3ca4460a31256be771c719baf63d Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 13 Oct 2020 20:25:35 +1100 Subject: [PATCH] New IFC get property node --- src/ifcsverchok/__init__.py | 1 + src/ifcsverchok/nodes/ifc/get_property.py | 40 +++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/ifcsverchok/nodes/ifc/get_property.py diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index d8b7205eb7..c24168b3d0 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -35,6 +35,7 @@ def nodes_index(): ("ifc.add", "SvIfcAdd"), ("ifc.remove", "SvIfcRemove"), ("ifc.generate_guid", "SvIfcGenerateGuid"), + ("ifc.get_property", "SvIfcGetProperty"), ("ifc.select_blender_objects", "SvIfcSelectBlenderObjects"), ])] diff --git a/src/ifcsverchok/nodes/ifc/get_property.py b/src/ifcsverchok/nodes/ifc/get_property.py new file mode 100644 index 0000000000..25bc0b731f --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/get_property.py @@ -0,0 +1,40 @@ +import bpy +import ifcopenshell +import ifcopenshell.util.element +import ifcsverchok.helper +from bpy.props import StringProperty +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode + + +class SvIfcGetProperty(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = 'SvIfcGetProperty' + bl_label = 'IFC Get Property' + entity: StringProperty(name='entity', update=updateNode) + pset_name: StringProperty(name='pset_name', update=updateNode) + prop_name: StringProperty(name='prop_name', update=updateNode) + + def sv_init(self, context): + self.inputs.new('SvStringsSocket', 'entity').prop_name = 'entity' + self.inputs.new('SvStringsSocket', 'pset_name').prop_name = 'pset_name' + self.inputs.new('SvStringsSocket', 'prop_name').prop_name = 'prop_name' + self.outputs.new('SvStringsSocket', 'value') + + def process(self): + self.sv_input_names = ['entity', 'pset_name', 'prop_name'] + self.value_out = [] + super().process() + self.outputs['value'].sv_set(self.value_out) + + def process_ifc(self, entity, pset_name, prop_name): + try: + self.value_out.append(ifcopenshell.util.element.get_psets(entity)[pset_name][prop_name]) + except: + pass + + +def register(): + bpy.utils.register_class(SvIfcGetProperty) + +def unregister(): + bpy.utils.unregister_class(SvIfcGetProperty)