mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 23:50:59 +00:00
ui and decorator handler
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
# addon writes tmp stuff directly to its dir
|
||||||
|
/data/
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
"""Viewport decorations"""
|
||||||
|
from bpy.types import SpaceView3D
|
||||||
|
import bpy
|
||||||
|
import blf
|
||||||
|
|
||||||
|
|
||||||
|
class ViewDecorator(object):
|
||||||
|
# class var for single handler
|
||||||
|
installed = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def install(cls, *args, **kwargs):
|
||||||
|
handler = cls(*args, **kwargs)
|
||||||
|
cls.installed = SpaceView3D.draw_handler_add(handler, (), 'WINDOW', 'POST_PIXEL')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def uninstall(cls):
|
||||||
|
SpaceView3D.draw_handler_remove(cls.installed, 'WINDOW')
|
||||||
|
cls.installed = None
|
||||||
|
|
||||||
|
|
||||||
|
class DimensionDecorator(ViewDecorator):
|
||||||
|
"""Decorates dimension curves
|
||||||
|
- outlines each segment with an arrow
|
||||||
|
- puts metric text next to each segment
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, scene, context):
|
||||||
|
self.scene = scene
|
||||||
|
self.context = context
|
||||||
|
self.font_id = 0
|
||||||
|
self.dpi = context.preferences.system.dpi
|
||||||
|
print("Created decorator", scene)
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
# get active drawing, if any
|
||||||
|
if self.scene.active_drawing_index is None or len(self.scene.drawings) == 0:
|
||||||
|
return
|
||||||
|
drawing = self.scene.drawings[self.scene.active_drawing_index]
|
||||||
|
collection = bpy.data.collections.get("IfcGroup/" + drawing.name)
|
||||||
|
if 'IfcAnnotation/Dimension' not in collection.all_objects:
|
||||||
|
return
|
||||||
|
curve = collection.all_objects['IfcAnnotation/Dimension'].data
|
||||||
|
text = repr(curve)
|
||||||
|
blf.position(self.font_id, 100, 100, 0)
|
||||||
|
blf.size(self.font_id, 10, self.dpi)
|
||||||
|
blf.draw(self.font_id, text)
|
||||||
@@ -8,6 +8,7 @@ from . import schema
|
|||||||
from . import bcf
|
from . import bcf
|
||||||
from . import ifc
|
from . import ifc
|
||||||
from . import annotation
|
from . import annotation
|
||||||
|
from . import decoration
|
||||||
import bpy
|
import bpy
|
||||||
from bpy.types import PropertyGroup
|
from bpy.types import PropertyGroup
|
||||||
from bpy.app.handlers import persistent
|
from bpy.app.handlers import persistent
|
||||||
@@ -357,6 +358,14 @@ def refreshTitleblocks(self, context):
|
|||||||
getTitleblocks(self, context)
|
getTitleblocks(self, context)
|
||||||
|
|
||||||
|
|
||||||
|
def toggleDimDecorations(self, context):
|
||||||
|
toggle = self.dim_decorations
|
||||||
|
if toggle:
|
||||||
|
decoration.DimensionDecorator.install(self, context)
|
||||||
|
else:
|
||||||
|
decoration.DimensionDecorator.uninstall()
|
||||||
|
|
||||||
|
|
||||||
def getScenarios(self, context):
|
def getScenarios(self, context):
|
||||||
global scenarios_enum
|
global scenarios_enum
|
||||||
if len(scenarios_enum) < 1:
|
if len(scenarios_enum) < 1:
|
||||||
@@ -668,6 +677,7 @@ class DocProperties(PropertyGroup):
|
|||||||
active_sheet_index: IntProperty(name="Active Sheet Index")
|
active_sheet_index: IntProperty(name="Active Sheet Index")
|
||||||
ifc_files: CollectionProperty(name="IFCs", type=StrProperty)
|
ifc_files: CollectionProperty(name="IFCs", type=StrProperty)
|
||||||
drawing_styles: CollectionProperty(name="Drawing Styles", type=DrawingStyle)
|
drawing_styles: CollectionProperty(name="Drawing Styles", type=DrawingStyle)
|
||||||
|
dim_decorations: BoolProperty(name="Decorate dimentions", update=toggleDimDecorations)
|
||||||
|
|
||||||
|
|
||||||
class BIMCameraProperties(PropertyGroup):
|
class BIMCameraProperties(PropertyGroup):
|
||||||
|
|||||||
@@ -2352,6 +2352,9 @@ class BIM_PT_annotation_utilities(Panel):
|
|||||||
row.operator("bim.remove_drawing", icon="X", text="").index = props.active_drawing_index
|
row.operator("bim.remove_drawing", icon="X", text="").index = props.active_drawing_index
|
||||||
layout.template_list("BIM_UL_generic", "", props, "drawings", props, "active_drawing_index")
|
layout.template_list("BIM_UL_generic", "", props, "drawings", props, "active_drawing_index")
|
||||||
|
|
||||||
|
row = layout.row()
|
||||||
|
row.prop(props, 'dim_decorations')
|
||||||
|
|
||||||
|
|
||||||
class BIM_PT_qto_utilities(Panel):
|
class BIM_PT_qto_utilities(Panel):
|
||||||
bl_idname = "BIM_PT_qto_utilities"
|
bl_idname = "BIM_PT_qto_utilities"
|
||||||
|
|||||||
Reference in New Issue
Block a user