mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 09:02:44 +00:00
Rebuild text annotations to have leaders in the same object and use text literals. See #1153.
This commit is contained in:
@@ -21,6 +21,7 @@ from blenderbim.tool.blender import Blender
|
||||
from blenderbim.tool.brick import Brick
|
||||
from blenderbim.tool.collector import Collector
|
||||
from blenderbim.tool.context import Context
|
||||
from blenderbim.tool.drawing import Drawing
|
||||
from blenderbim.tool.geometry import Geometry
|
||||
from blenderbim.tool.ifc import Ifc
|
||||
from blenderbim.tool.material import Material
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# BlenderBIM Add-on - OpenBIM Blender Add-on
|
||||
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
|
||||
#
|
||||
# This file is part of BlenderBIM Add-on.
|
||||
#
|
||||
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# BlenderBIM Add-on is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import bpy
|
||||
import blenderbim.core.tool
|
||||
import blenderbim.tool as tool
|
||||
import ifcopenshell.util.representation
|
||||
|
||||
|
||||
class Drawing(blenderbim.core.tool.Drawing):
|
||||
@classmethod
|
||||
def disable_editing_text(cls, obj):
|
||||
obj.BIMTextProperties.is_editing = False
|
||||
|
||||
@classmethod
|
||||
def enable_editing_text(cls, obj):
|
||||
obj.BIMTextProperties.is_editing = True
|
||||
|
||||
@classmethod
|
||||
def export_text_literal_attributes(cls, obj):
|
||||
return blenderbim.bim.helper.export_attributes(obj.BIMTextProperties.attributes)
|
||||
|
||||
@classmethod
|
||||
def get_text_literal(cls, obj):
|
||||
element = tool.Ifc.get_entity(obj)
|
||||
if not element:
|
||||
return
|
||||
rep = ifcopenshell.util.representation.get_representation(element, "Plan", "Annotation")
|
||||
if not rep:
|
||||
return
|
||||
items = [i for i in rep.Items if i.is_a("IfcTextLiteral")]
|
||||
if items:
|
||||
return items[0]
|
||||
|
||||
@classmethod
|
||||
def import_text_attributes(cls, obj):
|
||||
props = obj.BIMTextProperties
|
||||
props.attributes.clear()
|
||||
text = cls.get_text_literal(obj)
|
||||
blenderbim.bim.helper.import_attributes2(text, props.attributes)
|
||||
|
||||
@classmethod
|
||||
def update_text_value(cls, obj):
|
||||
element = cls.get_text_literal(obj)
|
||||
if element:
|
||||
obj.BIMTextProperties.value = element.Literal
|
||||
@@ -105,6 +105,12 @@ class Geometry(blenderbim.core.tool.Geometry):
|
||||
|
||||
@classmethod
|
||||
def get_ifc_representation_class(cls, element, representation):
|
||||
if element.is_a("IfcAnnotation"):
|
||||
if element.ObjectType == "TEXT":
|
||||
return "IfcTextLiteral"
|
||||
elif element.ObjectType == "TEXT_LEADER":
|
||||
return "IfcGeometricCurveSet/IfcTextLiteral"
|
||||
|
||||
material = ifcopenshell.util.element.get_material(element)
|
||||
if material and material.is_a("IfcMaterialProfileSetUsage"):
|
||||
return "IfcExtrudedAreaSolid/IfcMaterialProfileSetUsage"
|
||||
@@ -151,6 +157,12 @@ class Geometry(blenderbim.core.tool.Geometry):
|
||||
def get_styles(cls, obj):
|
||||
return [tool.Style.get_style(s.material) for s in obj.material_slots if s.material]
|
||||
|
||||
@classmethod
|
||||
def get_text_literal(cls, representation):
|
||||
texts = [i for i in representation.Items if i.is_a("IfcTextLiteral")]
|
||||
if texts:
|
||||
return texts[0]
|
||||
|
||||
@classmethod
|
||||
def get_total_representation_items(cls, obj):
|
||||
return max(1, len(obj.material_slots))
|
||||
|
||||
Reference in New Issue
Block a user