mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 23:36:20 +00:00
Remove dead code that manually synced drawing references. Now we have an automatic sync_references function instead.
This commit is contained in:
@@ -29,12 +29,10 @@ classes = (
|
|||||||
operator.AddDrawingToSheet,
|
operator.AddDrawingToSheet,
|
||||||
operator.AddSchedule,
|
operator.AddSchedule,
|
||||||
operator.AddScheduleToSheet,
|
operator.AddScheduleToSheet,
|
||||||
operator.AddSectionsAnnotations,
|
|
||||||
operator.AddSheet,
|
operator.AddSheet,
|
||||||
operator.BuildSchedule,
|
operator.BuildSchedule,
|
||||||
operator.CleanWireframes,
|
operator.CleanWireframes,
|
||||||
operator.ContractSheet,
|
operator.ContractSheet,
|
||||||
operator.CopyGrid,
|
|
||||||
operator.CreateDrawing,
|
operator.CreateDrawing,
|
||||||
operator.CreateSheets,
|
operator.CreateSheets,
|
||||||
operator.DisableEditingAssignedProduct,
|
operator.DisableEditingAssignedProduct,
|
||||||
|
|||||||
@@ -1195,170 +1195,6 @@ class CleanWireframes(bpy.types.Operator):
|
|||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
|
||||||
class CopyGrid(bpy.types.Operator):
|
|
||||||
bl_idname = "bim.add_grid"
|
|
||||||
bl_label = "Add Grid"
|
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def poll(cls, context):
|
|
||||||
return helper.get_active_drawing(context.scene)[0] is not None
|
|
||||||
|
|
||||||
def execute(self, context):
|
|
||||||
drawing = tool.Ifc.get_entity(context.scene.camera)
|
|
||||||
target_view = tool.Drawing.get_drawing_target_view(drawing)
|
|
||||||
subcontext = ifcopenshell.util.representation.get_context(
|
|
||||||
IfcStore.get_file(), "Plan", "Annotation", target_view
|
|
||||||
)
|
|
||||||
if not subcontext:
|
|
||||||
return {"FINISHED"}
|
|
||||||
|
|
||||||
proj_coll = helper.get_project_collection(context.scene)
|
|
||||||
view_coll, camera = helper.get_active_drawing(context.scene)
|
|
||||||
is_ortho = camera.data.type == "ORTHO"
|
|
||||||
bounds = helper.ortho_view_frame(camera.data) if is_ortho else None
|
|
||||||
clipping = is_ortho and target_view in ("PLAN_VIEW", "REFLECTED_PLAN_VIEW")
|
|
||||||
elevating = is_ortho and target_view in ("ELEVATION_VIEW", "SECTION_VIEW")
|
|
||||||
|
|
||||||
def grep(coll):
|
|
||||||
results = []
|
|
||||||
for obj in coll.all_objects:
|
|
||||||
element = tool.Ifc.get_entity(obj)
|
|
||||||
if element and element.is_a("IfcAnnotation") and element.ObjectType == "GRID":
|
|
||||||
results.append(obj)
|
|
||||||
return results
|
|
||||||
|
|
||||||
def clone(src):
|
|
||||||
dst = src.copy()
|
|
||||||
dst.data = dst.data.copy()
|
|
||||||
dst.name = dst.name.replace("IfcGridAxis/", "")
|
|
||||||
dst.BIMObjectProperties.ifc_definition_id = 0
|
|
||||||
dst.data.BIMMeshProperties.ifc_definition_id = 0
|
|
||||||
return dst
|
|
||||||
|
|
||||||
def disassemble(obj):
|
|
||||||
mesh = bmesh.new()
|
|
||||||
mesh.verts.ensure_lookup_table()
|
|
||||||
mesh.from_mesh(obj.data)
|
|
||||||
return obj, mesh
|
|
||||||
|
|
||||||
def assemble(obj, mesh):
|
|
||||||
mesh.to_mesh(obj.data)
|
|
||||||
return obj
|
|
||||||
|
|
||||||
def localize(obj, mesh):
|
|
||||||
# convert to camera coords
|
|
||||||
mesh.transform(camera.matrix_world.inverted() @ obj.matrix_world)
|
|
||||||
obj.matrix_world = camera.matrix_world
|
|
||||||
return obj, mesh
|
|
||||||
|
|
||||||
def clip(mesh):
|
|
||||||
# clip segment against camera view bounds
|
|
||||||
mesh.verts.ensure_lookup_table()
|
|
||||||
points = [v.co for v in mesh.verts[0:2]]
|
|
||||||
points = helper.clip_segment(bounds, points)
|
|
||||||
if points is None:
|
|
||||||
return None
|
|
||||||
mesh.verts[0].co = points[0]
|
|
||||||
mesh.verts[1].co = points[1]
|
|
||||||
return mesh
|
|
||||||
|
|
||||||
def elev(mesh):
|
|
||||||
# put camera-perpendicular segments vertically
|
|
||||||
mesh.verts.ensure_lookup_table()
|
|
||||||
points = [v.co for v in mesh.verts[0:2]]
|
|
||||||
points = helper.elevate_segment(bounds, points)
|
|
||||||
if points is None:
|
|
||||||
return None
|
|
||||||
points = helper.clip_segment(bounds, points)
|
|
||||||
if points is None:
|
|
||||||
return None
|
|
||||||
mesh.verts[0].co = points[0]
|
|
||||||
mesh.verts[1].co = points[1]
|
|
||||||
return mesh
|
|
||||||
|
|
||||||
for obj in grep(view_coll):
|
|
||||||
view_coll.objects.unlink(obj)
|
|
||||||
|
|
||||||
grids = []
|
|
||||||
for element in tool.Ifc.get().by_type("IfcGridAxis"):
|
|
||||||
obj = tool.Ifc.get_object(element)
|
|
||||||
if not obj:
|
|
||||||
continue
|
|
||||||
grids.append((*localize(*disassemble(clone(obj))), element))
|
|
||||||
|
|
||||||
if clipping:
|
|
||||||
grids = [(obj, clip(mesh), element) for obj, mesh, element in grids]
|
|
||||||
elif elevating:
|
|
||||||
grids = [(obj, elev(mesh), element) for obj, mesh, element in grids]
|
|
||||||
|
|
||||||
for obj, mesh, element in grids:
|
|
||||||
if mesh is not None:
|
|
||||||
view_coll.objects.link(assemble(obj, mesh))
|
|
||||||
bpy.ops.bim.assign_class(obj=obj.name, ifc_class="IfcAnnotation", context_id=subcontext.id())
|
|
||||||
annotation = tool.Ifc.get_entity(obj)
|
|
||||||
annotation.Name = element.AxisTag
|
|
||||||
annotation.ObjectType = "GRID"
|
|
||||||
return {"FINISHED"}
|
|
||||||
|
|
||||||
|
|
||||||
class AddSectionsAnnotations(bpy.types.Operator):
|
|
||||||
bl_idname = "bim.add_sections_annotations"
|
|
||||||
bl_label = "Add Sections"
|
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def poll(cls, context):
|
|
||||||
camera = helper.get_active_drawing(context.scene)[1]
|
|
||||||
return camera and camera.data.type == "ORTHO"
|
|
||||||
|
|
||||||
def execute(self, context):
|
|
||||||
scene = context.scene
|
|
||||||
view_coll, camera = helper.get_active_drawing(scene)
|
|
||||||
bounds = helper.ortho_view_frame(camera.data)
|
|
||||||
|
|
||||||
drawings = [
|
|
||||||
d
|
|
||||||
for d in scene.DocProperties.drawings
|
|
||||||
if (
|
|
||||||
d.camera is not camera
|
|
||||||
and d.camera.data.type == "ORTHO"
|
|
||||||
and d.camera.data.BIMCameraProperties.target_view == "SECTION_VIEW"
|
|
||||||
)
|
|
||||||
]
|
|
||||||
|
|
||||||
def sideview(cam):
|
|
||||||
# leftmost and rightmost points of camera view area, local coords
|
|
||||||
xmin, xmax, _, _, _, _ = helper.ortho_view_frame(cam.data, margin=0)
|
|
||||||
proj = camera.matrix_world.inverted() @ cam.matrix_world
|
|
||||||
p_l = proj @ Vector((xmin, 0, 0))
|
|
||||||
p_r = proj @ Vector((xmax, 0, 0))
|
|
||||||
return helper.clip_segment(bounds, (p_l, p_r))
|
|
||||||
|
|
||||||
def annotation(drawing, points):
|
|
||||||
# object with path geometry
|
|
||||||
name = drawing.name
|
|
||||||
curve = bpy.data.curves.new(f"Section/{name}", "CURVE")
|
|
||||||
spline = curve.splines.new("POLY") # has 1 initial point
|
|
||||||
spline.points.add(1)
|
|
||||||
p1, p2 = points
|
|
||||||
z = bounds[4] - 1e-5 # zmin
|
|
||||||
spline.points[0].co = (p1.x, p1.y, z, 1)
|
|
||||||
spline.points[1].co = (p2.x, p2.y, z, 1)
|
|
||||||
obj = bpy.data.objects.new(f"IfcAnnotation/Section/{name}", curve)
|
|
||||||
obj.matrix_world = camera.matrix_world
|
|
||||||
return obj
|
|
||||||
|
|
||||||
for d in drawings:
|
|
||||||
points = sideview(d.camera)
|
|
||||||
if points is None:
|
|
||||||
continue
|
|
||||||
obj = annotation(d, points)
|
|
||||||
view_coll.objects.link(obj)
|
|
||||||
|
|
||||||
return {"FINISHED"}
|
|
||||||
|
|
||||||
|
|
||||||
class EditTextPopup(bpy.types.Operator):
|
class EditTextPopup(bpy.types.Operator):
|
||||||
bl_idname = "bim.edit_text_popup"
|
bl_idname = "bim.edit_text_popup"
|
||||||
bl_label = "Edit Text"
|
bl_label = "Edit Text"
|
||||||
|
|||||||
Reference in New Issue
Block a user