Initial Commit

This commit is contained in:
Gorgious56
2022-06-29 19:49:17 +02:00
committed by Dion Moult
parent e50259f8fa
commit 4ad4bdef3b
4 changed files with 43 additions and 2 deletions
@@ -26,6 +26,7 @@ classes = (
operator.EnableReassignClass, operator.EnableReassignClass,
operator.ReassignClass, operator.ReassignClass,
operator.UnlinkObject, operator.UnlinkObject,
operator.BIM_OT_root_property_textfield,
prop.BIMRootProperties, prop.BIMRootProperties,
ui.BIM_PT_class, ui.BIM_PT_class,
) )
@@ -31,7 +31,7 @@ import blenderbim.core.root as core
import blenderbim.tool as tool import blenderbim.tool as tool
from ifcopenshell.api.void.data import Data as VoidData from ifcopenshell.api.void.data import Data as VoidData
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.root.prop import get_contexts from blenderbim.bim.module.root.prop import get_contexts, get_ifc_classes_filtered
class Operator: class Operator:
@@ -189,3 +189,24 @@ class CopyClass(bpy.types.Operator, Operator):
for obj in objects: for obj in objects:
core.copy_class(tool.Ifc, tool.Collector, tool.Geometry, tool.Root, obj=obj) core.copy_class(tool.Ifc, tool.Collector, tool.Geometry, tool.Root, obj=obj)
blenderbim.bim.handler.purge_module_data() blenderbim.bim.handler.purge_module_data()
class BIM_OT_root_property_textfield(bpy.types.Operator):
bl_idname = "bim.root_ifc_class_filter"
bl_label = "Filter Property"
bl_options = {"REGISTER", "UNDO"}
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
def execute(self, context):
context.scene.BIMRootProperties.ifc_class = context.scene.BIMRootProperties.ifc_class_filter_enum
return {"FINISHED"}
def draw(self, context):
props = context.scene.BIMRootProperties
self.layout.prop(props, "ifc_class_filter_textfield")
if len(get_ifc_classes_filtered(props, context)) > 10:
self.layout.prop(props, "ifc_class_filter_enum")
else:
self.layout.props_enum(props, "ifc_class_filter_enum")
@@ -34,11 +34,14 @@ from bpy.props import (
) )
types_enum = [] types_enum = []
classes_enum = []
def purge(): def purge():
global types_enum global types_enum
types_enum = [] types_enum = []
global classes_enum
classes_enum = []
def getIfcPredefinedTypes(self, context): def getIfcPredefinedTypes(self, context):
@@ -69,6 +72,10 @@ def refreshPredefinedTypes(self, context):
context.scene.BIMRootProperties.ifc_predefined_type = enum[0][0] context.scene.BIMRootProperties.ifc_predefined_type = enum[0][0]
def update_class_enum(self, context):
self.ifc_class = self.ifc_class_filter_enum
def get_ifc_products(self, context): def get_ifc_products(self, context):
if not IfcClassData.is_loaded: if not IfcClassData.is_loaded:
IfcClassData.load() IfcClassData.load()
@@ -81,6 +88,15 @@ def get_ifc_classes(self, context):
return IfcClassData.data["ifc_classes"] return IfcClassData.data["ifc_classes"]
def get_ifc_classes_filtered(self, context):
ifc_classes = get_ifc_classes(self, context)
global classes_enum
classes_enum = [
c for c in ifc_classes
if self.ifc_class_filter_textfield.lower() in c[0].lower()] or ifc_classes
return classes_enum
def get_contexts(self, context): def get_contexts(self, context):
if not IfcClassData.is_loaded: if not IfcClassData.is_loaded:
IfcClassData.load() IfcClassData.load()
@@ -91,5 +107,7 @@ class BIMRootProperties(PropertyGroup):
contexts: EnumProperty(items=get_contexts, name="Contexts") contexts: EnumProperty(items=get_contexts, name="Contexts")
ifc_product: EnumProperty(items=get_ifc_products, name="Products", update=refresh_classes) ifc_product: EnumProperty(items=get_ifc_products, name="Products", update=refresh_classes)
ifc_class: EnumProperty(items=get_ifc_classes, name="Class", update=refreshPredefinedTypes) ifc_class: EnumProperty(items=get_ifc_classes, name="Class", update=refreshPredefinedTypes)
ifc_class_filter_textfield: StringProperty(name="Filter", options={"TEXTEDIT_UPDATE"})
ifc_class_filter_enum: EnumProperty(items=get_ifc_classes_filtered, name="Class", update=update_class_enum)
ifc_predefined_type: EnumProperty(items=getIfcPredefinedTypes, name="Predefined Type", default=None) ifc_predefined_type: EnumProperty(items=getIfcPredefinedTypes, name="Predefined Type", default=None)
ifc_userdefined_type: StringProperty(name="Userdefined Type") ifc_userdefined_type: StringProperty(name="Userdefined Type")
@@ -79,8 +79,9 @@ class BIM_PT_class(Panel):
if not is_reassigning_class: if not is_reassigning_class:
row = self.layout.row() row = self.layout.row()
row.prop(props, "ifc_product") row.prop(props, "ifc_product")
row = self.layout.row() row = self.layout.row(align=True)
row.prop(props, "ifc_class") row.prop(props, "ifc_class")
row.operator("bim.root_ifc_class_filter", text="", icon="VIEWZOOM")
if ifc_predefined_types: if ifc_predefined_types:
row = self.layout.row() row = self.layout.row()
row.prop(props, "ifc_predefined_type") row.prop(props, "ifc_predefined_type")