diff --git a/src/ifcsverchok/__init__.py b/src/ifcsverchok/__init__.py index 697e97ba0e..524190e857 100644 --- a/src/ifcsverchok/__init__.py +++ b/src/ifcsverchok/__init__.py @@ -29,6 +29,7 @@ def nodes_index(): ("ifc.by_id", "SvIfcById"), ("ifc.by_guid", "SvIfcByGuid"), ("ifc.by_type", "SvIfcByType"), + ("ifc.by_query", "SvIfcByQuery"), ])] def make_node_list(): diff --git a/src/ifcsverchok/nodes/ifc/by_query.py b/src/ifcsverchok/nodes/ifc/by_query.py new file mode 100644 index 0000000000..299a0849d3 --- /dev/null +++ b/src/ifcsverchok/nodes/ifc/by_query.py @@ -0,0 +1,33 @@ +import bpy +import ifcopenshell +import ifcopenshell.util.selector +import ifcsverchok.helper +from bpy.props import StringProperty +from sverchok.node_tree import SverchCustomTreeNode +from sverchok.data_structure import updateNode + + +class SvIfcByQuery(bpy.types.Node, SverchCustomTreeNode, ifcsverchok.helper.SvIfcCore): + bl_idname = 'SvIfcByQuery' + bl_label = 'IFC By Query' + file: StringProperty(name='file', update=updateNode) + query: StringProperty(name='query', update=updateNode) + + def sv_init(self, context): + self.inputs.new('SvStringsSocket', 'file').prop_name = 'file' + self.inputs.new('SvStringsSocket', 'query').prop_name = 'query' + self.outputs.new('SvStringsSocket', 'entity') + + def process(self): + self.sv_input_names = ['file', 'query'] + super().process() + + def process_ifc(self, file, query): + selector = ifcopenshell.util.selector.Selector() + self.outputs['entity'].sv_set([selector.parse(file, query)]) + +def register(): + bpy.utils.register_class(SvIfcByQuery) + +def unregister(): + bpy.utils.unregister_class(SvIfcByQuery)