mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 01:41:57 +00:00
#1153 Utility to convert an edge to an arc in preparation for angular dimensions
This commit is contained in:
@@ -34,6 +34,7 @@ classes = (
|
||||
operator.BuildSchedule,
|
||||
operator.CleanWireframes,
|
||||
operator.ContractSheet,
|
||||
operator.ConvertEdgeToArc,
|
||||
operator.CopyGrid,
|
||||
operator.CreateDrawing,
|
||||
operator.CreateSheets,
|
||||
|
||||
@@ -191,9 +191,7 @@ class CreateDrawing(bpy.types.Operator):
|
||||
return
|
||||
svg_path = os.path.join(context.scene.BIMProperties.data_dir, "cache", self.drawing_name + "-underlay.svg")
|
||||
context.scene.render.filepath = svg_path[0:-4] + ".png"
|
||||
drawing_style = context.scene.DocProperties.drawing_styles[
|
||||
self.cprops.active_drawing_style_index
|
||||
]
|
||||
drawing_style = context.scene.DocProperties.drawing_styles[self.cprops.active_drawing_style_index]
|
||||
|
||||
if drawing_style.render_type == "DEFAULT":
|
||||
bpy.ops.render.render(write_still=True)
|
||||
@@ -420,9 +418,7 @@ class CreateDrawing(bpy.types.Operator):
|
||||
camera = self.camera
|
||||
svg_writer = svgwriter.SvgWriter()
|
||||
|
||||
drawing_style = context.scene.DocProperties.drawing_styles[
|
||||
self.cprops.active_drawing_style_index
|
||||
]
|
||||
drawing_style = context.scene.DocProperties.drawing_styles[self.cprops.active_drawing_style_index]
|
||||
|
||||
render = context.scene.render
|
||||
if self.is_landscape(render):
|
||||
@@ -443,7 +439,7 @@ class CreateDrawing(bpy.types.Operator):
|
||||
svg_writer.camera_projection = tuple(camera.matrix_world.to_quaternion() @ Vector((0, 0, -1)))
|
||||
|
||||
elements = tool.Drawing.get_group_elements(tool.Drawing.get_drawing_group(self.camera_element))
|
||||
svg_writer.annotations = sorted(elements, key=lambda a : tool.Drawing.get_annotation_z_index(a))
|
||||
svg_writer.annotations = sorted(elements, key=lambda a: tool.Drawing.get_annotation_z_index(a))
|
||||
svg_writer.metadata = tool.Drawing.get_drawing_metadata(self.camera_element)
|
||||
|
||||
svg_writer.write("annotation")
|
||||
@@ -1317,3 +1313,44 @@ class ContractSheet(bpy.types.Operator):
|
||||
sheet.is_expanded = False
|
||||
core.load_sheets(tool.Drawing)
|
||||
return {"FINISHED"}
|
||||
|
||||
|
||||
class ConvertEdgeToArc(bpy.types.Operator):
|
||||
bl_idname = "bim.convert_edge_to_arc"
|
||||
bl_label = "Convert Edge to Arc"
|
||||
bl_options = {"REGISTER", "UNDO"}
|
||||
|
||||
resolution: bpy.props.IntProperty(name="Arc Resolution", min=1, default=1)
|
||||
should_flip: bpy.props.BoolProperty(name="Flip", description="Flip arc", default=False)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
for prop in self.__class__.__annotations__.keys():
|
||||
layout.prop(self, prop)
|
||||
|
||||
def execute(self, context):
|
||||
if bpy.context.mode != "EDIT_MESH":
|
||||
return {"CANCELLED"}
|
||||
obj = bpy.context.active_object
|
||||
cursor = obj.matrix_world.inverted() @ bpy.context.scene.cursor.location
|
||||
mesh = obj.data
|
||||
bm = bmesh.from_edit_mesh(mesh)
|
||||
selected_verts = [v for v in bm.verts if v.select]
|
||||
if len(selected_verts) != 2:
|
||||
return {"CANCELLED"}
|
||||
l1 = selected_verts[0].co - cursor
|
||||
l2 = selected_verts[1].co - cursor
|
||||
angle = l1.xy.angle_signed(l2.xy)
|
||||
|
||||
if self.should_flip:
|
||||
if angle > 0:
|
||||
angle = -((pi * 2) - angle)
|
||||
else:
|
||||
angle = (pi * 2) + angle
|
||||
|
||||
v = selected_verts[0]
|
||||
bm.verts.remove(selected_verts[1])
|
||||
bmesh.ops.spin(bm, geom=[v], axis=(0, 0, 1), cent=cursor, steps=self.resolution * 4, angle=-angle)
|
||||
bmesh.update_edit_mesh(mesh)
|
||||
mesh.update()
|
||||
return {"FINISHED"}
|
||||
|
||||
Reference in New Issue
Block a user