mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Create instance context menu (#6830)
This commit is contained in:
@@ -314,7 +314,7 @@ def prop_with_search(
|
|||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
row.prop(data, prop_name, **kwargs)
|
row.prop(data, prop_name, **kwargs)
|
||||||
try:
|
try:
|
||||||
if len(get_enum_items(data, prop_name, original_operator_path=original_operator_path)) > 10:
|
if len(get_enum_items(data, prop_name, original_operator_path=original_operator_path)) > 0:
|
||||||
# Magick courtesy of https://blender.stackexchange.com/a/203443/86891
|
# Magick courtesy of https://blender.stackexchange.com/a/203443/86891
|
||||||
row.context_pointer_set(name="data", data=data)
|
row.context_pointer_set(name="data", data=data)
|
||||||
op = row.operator("bim.enum_property_search", text="", icon="VIEWZOOM")
|
op = row.operator("bim.enum_property_search", text="", icon="VIEWZOOM")
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ classes = (
|
|||||||
operator.UpdateItemAttributes,
|
operator.UpdateItemAttributes,
|
||||||
operator.UpdateParametricRepresentation,
|
operator.UpdateParametricRepresentation,
|
||||||
operator.UpdateRepresentation,
|
operator.UpdateRepresentation,
|
||||||
|
operator.CreateInstance,
|
||||||
prop.RepresentationItem,
|
prop.RepresentationItem,
|
||||||
prop.RepresentationItemObject,
|
prop.RepresentationItemObject,
|
||||||
prop.ShapeAspect,
|
prop.ShapeAspect,
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import bonsai.core.root
|
|||||||
import bonsai.core.drawing
|
import bonsai.core.drawing
|
||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
import bonsai.bim.handler
|
import bonsai.bim.handler
|
||||||
|
from bonsai.bim.module.model.data import AuthoringData
|
||||||
from mathutils import Vector, Matrix, Quaternion
|
from mathutils import Vector, Matrix, Quaternion
|
||||||
from time import time
|
from time import time
|
||||||
from bonsai.bim.ifc import IfcStore
|
from bonsai.bim.ifc import IfcStore
|
||||||
@@ -3432,3 +3433,38 @@ class UnassignRepresentationLayer(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
layer = ifc_file.by_id(self.layer_id)
|
layer = ifc_file.by_id(self.layer_id)
|
||||||
ifcopenshell.api.layer.unassign_layer(ifc_file, [representation], layer)
|
ifcopenshell.api.layer.unassign_layer(ifc_file, [representation], layer)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
|
class CreateInstance(bpy.types.Operator, tool.Ifc.Operator):
|
||||||
|
bl_idname = "bim.create_instance"
|
||||||
|
bl_label = "IFC Create Instance"
|
||||||
|
bl_description = "Create an instance of the type associated with the selected object"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
|
||||||
|
def _execute(self, context):
|
||||||
|
if not context.selected_objects or len(context.selected_objects) > 1:
|
||||||
|
self.report({"ERROR"}, "Select exactly one object to create an instance of its type")
|
||||||
|
return {"CANCELLED"}
|
||||||
|
|
||||||
|
active_obj = context.active_object
|
||||||
|
element = tool.Ifc.get_entity(active_obj)
|
||||||
|
if not element:
|
||||||
|
self.report({"ERROR"}, "Selected object is not an IFC element")
|
||||||
|
return {"CANCELLED"}
|
||||||
|
|
||||||
|
relating_type = ifcopenshell.util.element.get_type(element)
|
||||||
|
if not relating_type:
|
||||||
|
self.report({"ERROR"}, "Selected object has no associated type")
|
||||||
|
return {"CANCELLED"}
|
||||||
|
|
||||||
|
try:
|
||||||
|
props = tool.Model.get_model_props()
|
||||||
|
props.ifc_class = relating_type.is_a()
|
||||||
|
props.relating_type_id = str(relating_type.id())
|
||||||
|
except:
|
||||||
|
self.report({"ERROR"}, "You must be using the Multiobject Tool or the relevant editing tool")
|
||||||
|
return {"CANCELLED"}
|
||||||
|
|
||||||
|
bpy.ops.bim.hotkey(hotkey="S_A")
|
||||||
|
|
||||||
|
return {"FINISHED"}
|
||||||
|
|||||||
@@ -66,6 +66,12 @@ def object_menu(self, context):
|
|||||||
self.layout.menu("BIM_MT_object_set_origin", icon="PLUGIN")
|
self.layout.menu("BIM_MT_object_set_origin", icon="PLUGIN")
|
||||||
self.layout.menu("BIM_MT_separate", icon="PLUGIN")
|
self.layout.menu("BIM_MT_separate", icon="PLUGIN")
|
||||||
|
|
||||||
|
# only show the create instance operator if the current tool is the BIM tool
|
||||||
|
# if context.space_data and hasattr(context.space_data, "show_object_viewport_mesh"):
|
||||||
|
# current_tool = context.workspace.tools.from_space_view3d_mode(context.mode, create=False)
|
||||||
|
# if current_tool and current_tool.idname == "bim.bim_tool":
|
||||||
|
self.layout.operator("bim.create_instance", icon="PLUGIN")
|
||||||
|
|
||||||
|
|
||||||
def edit_mesh_menu(self, context):
|
def edit_mesh_menu(self, context):
|
||||||
self.layout.separator()
|
self.layout.separator()
|
||||||
|
|||||||
Reference in New Issue
Block a user