From 88e20582ddbddade037cee2f6a6106483aac721a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 13 Oct 2020 20:30:00 +1100 Subject: [PATCH] New node to get IFC attribute --- src/ifcsverchok/__init__.py | 3 +- src/ifcsverchok/nodes/ifc/get_attribute.py | 41 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/ifcsverchok/nodes/ifc/get_attribute.py diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index c24168b3d0..51e0f9e71e 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -5,7 +5,7 @@ bl_info = { "blender": (2, 90, 0), "location": "Node Editor", "category": "Node", - "description": "An extension to Sverchok to generate IFC data", + "description": "An extension to Sverchok to work with IFC data", "warning": "", } @@ -36,6 +36,7 @@ def nodes_index(): ("ifc.remove", "SvIfcRemove"), ("ifc.generate_guid", "SvIfcGenerateGuid"), ("ifc.get_property", "SvIfcGetProperty"), + ("ifc.get_attribute", "SvIfcGetAttribute"), ("ifc.select_blender_objects", "SvIfcSelectBlenderObjects"), ])] diff --git a/src/ifcsverchok/nodes/ifc/get_attribute.py b/src/ifcsverchok/nodes/ifc/get_attribute.py new file mode 100644 index 0000000000..f01d64174c --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/get_attribute.py @@ -0,0 +1,41 @@ +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 SvIfcGetAttribute(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = 'SvIfcGetAttribute' + bl_label = 'IFC Get Attribute' + entity: StringProperty(name='entity', update=updateNode) + attribute_name: StringProperty(name='attribute_name', update=updateNode) + + def sv_init(self, context): + self.inputs.new('SvStringsSocket', 'entity').prop_name = 'entity' + self.inputs.new('SvStringsSocket', 'attribute_name').prop_name = 'attribute_name' + self.outputs.new('SvStringsSocket', 'value') + + def process(self): + self.sv_input_names = ['entity', 'attribute_name'] + self.value_out = [] + super().process() + self.outputs['value'].sv_set(self.value_out) + + def process_ifc(self, entity, attribute_name): + try: + if attribute_name.isnumeric(): + self.value_out.append(entity[int(attribute_name)]) + else: + self.value_out.append(entity.get_info()[attribute_name]) + except: + pass + + +def register(): + bpy.utils.register_class(SvIfcGetAttribute) + +def unregister(): + bpy.utils.unregister_class(SvIfcGetAttribute)