mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 22:50:21 +00:00
Fix #6318. Fix warnings when decorator cannot convert 3D to 2D screen space location.
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
|
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import os
|
|
||||||
import gpu
|
import gpu
|
||||||
import bpy
|
import bpy
|
||||||
import blf
|
import blf
|
||||||
@@ -29,7 +28,7 @@ import ifcopenshell.util.unit
|
|||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
import bonsai.bim.module.drawing.helper as helper
|
import bonsai.bim.module.drawing.helper as helper
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from math import pi, sin, cos, tan, acos, atan, degrees, radians, ceil
|
from math import pi, sin, cos, acos, atan, degrees, radians
|
||||||
from bpy.types import SpaceView3D
|
from bpy.types import SpaceView3D
|
||||||
from mathutils import Vector, Matrix
|
from mathutils import Vector, Matrix
|
||||||
from bpy_extras.view3d_utils import location_3d_to_region_2d
|
from bpy_extras.view3d_utils import location_3d_to_region_2d
|
||||||
@@ -595,7 +594,8 @@ class BaseDecorator:
|
|||||||
region3d = context.region_data
|
region3d = context.region_data
|
||||||
text_dir = self.get_annotation_direction(context, obj)
|
text_dir = self.get_annotation_direction(context, obj)
|
||||||
|
|
||||||
pos = location_3d_to_region_2d(region, region3d, text_world_position)
|
if not (pos := location_3d_to_region_2d(region, region3d, text_world_position)):
|
||||||
|
return
|
||||||
props = tool.Drawing.get_text_props(obj)
|
props = tool.Drawing.get_text_props(obj)
|
||||||
text_data = DecoratorData.get_ifc_text_data(obj)
|
text_data = DecoratorData.get_ifc_text_data(obj)
|
||||||
if props.is_editing:
|
if props.is_editing:
|
||||||
@@ -728,6 +728,8 @@ class DimensionDecorator(BaseDecorator):
|
|||||||
v1 = Vector(vertices[i1])
|
v1 = Vector(vertices[i1])
|
||||||
p0 = location_3d_to_region_2d(region, region3d, v0)
|
p0 = location_3d_to_region_2d(region, region3d, v0)
|
||||||
p1 = location_3d_to_region_2d(region, region3d, v1)
|
p1 = location_3d_to_region_2d(region, region3d, v1)
|
||||||
|
if not p0 or not p1:
|
||||||
|
return
|
||||||
text_dir = p1 - p0
|
text_dir = p1 - p0
|
||||||
if text_dir.length < 1:
|
if text_dir.length < 1:
|
||||||
continue
|
continue
|
||||||
@@ -878,6 +880,8 @@ class AngleDecorator(BaseDecorator):
|
|||||||
|
|
||||||
# calculate angle position
|
# calculate angle position
|
||||||
p0, p1, p2 = [location_3d_to_region_2d(region, region3d, p) for p in vertices[i0 : i1 + 2]]
|
p0, p1, p2 = [location_3d_to_region_2d(region, region3d, p) for p in vertices[i0 : i1 + 2]]
|
||||||
|
if not p0 or not p1 or not p2:
|
||||||
|
continue
|
||||||
edge0 = p0 - p1
|
edge0 = p0 - p1
|
||||||
edge1 = p2 - p1
|
edge1 = p2 - p1
|
||||||
radius = min(edge0.length_squared, edge1.length_squared) ** 0.5
|
radius = min(edge0.length_squared, edge1.length_squared) ** 0.5
|
||||||
@@ -942,6 +946,8 @@ class RadiusDecorator(BaseDecorator):
|
|||||||
spline_points = self.get_spline_points(obj)
|
spline_points = self.get_spline_points(obj)
|
||||||
|
|
||||||
p0, p1 = [location_3d_to_region_2d(region, region3d, p) for p in self.get_spline_points(obj)]
|
p0, p1 = [location_3d_to_region_2d(region, region3d, p) for p in self.get_spline_points(obj)]
|
||||||
|
if not p0 or not p1:
|
||||||
|
return
|
||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
description = element.Description
|
description = element.Description
|
||||||
dimension_data = DecoratorData.get_dimension_data(obj)
|
dimension_data = DecoratorData.get_dimension_data(obj)
|
||||||
@@ -974,7 +980,8 @@ class FallDecorator(BaseDecorator):
|
|||||||
region = context.region
|
region = context.region
|
||||||
region3d = context.region_data
|
region3d = context.region_data
|
||||||
dir = Vector((1, 0))
|
dir = Vector((1, 0))
|
||||||
pos = location_3d_to_region_2d(region, region3d, self.get_spline_end(obj))
|
if not (pos := location_3d_to_region_2d(region, region3d, self.get_spline_end(obj))):
|
||||||
|
return
|
||||||
|
|
||||||
spline = obj.data.splines[0]
|
spline = obj.data.splines[0]
|
||||||
spline_points = spline.bezier_points if spline.bezier_points else spline.points
|
spline_points = spline.bezier_points if spline.bezier_points else spline.points
|
||||||
@@ -1165,7 +1172,6 @@ class PlanLevelDecorator(BaseDecorator):
|
|||||||
self.draw_labels(context, obj, self.get_splines(obj))
|
self.draw_labels(context, obj, self.get_splines(obj))
|
||||||
|
|
||||||
def draw_labels(self, context, obj, splines):
|
def draw_labels(self, context, obj, splines):
|
||||||
unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
|
|
||||||
region = context.region
|
region = context.region
|
||||||
region3d = context.region_data
|
region3d = context.region_data
|
||||||
|
|
||||||
@@ -1175,6 +1181,8 @@ class PlanLevelDecorator(BaseDecorator):
|
|||||||
|
|
||||||
for verts in splines:
|
for verts in splines:
|
||||||
p0, p1 = [location_3d_to_region_2d(region, region3d, v) for v in verts[:2]]
|
p0, p1 = [location_3d_to_region_2d(region, region3d, v) for v in verts[:2]]
|
||||||
|
if not p0 or not p1:
|
||||||
|
continue
|
||||||
text_dir = p1 - p0
|
text_dir = p1 - p0
|
||||||
if text_dir.length < 1:
|
if text_dir.length < 1:
|
||||||
continue
|
continue
|
||||||
@@ -1441,8 +1449,10 @@ class GridDecorator(BaseDecorator):
|
|||||||
p1 = location_3d_to_region_2d(region, region3d, v1)
|
p1 = location_3d_to_region_2d(region, region3d, v1)
|
||||||
dir = Vector((1, 0))
|
dir = Vector((1, 0))
|
||||||
text = obj.name.split("/")[1].split(".")[0]
|
text = obj.name.split("/")[1].split(".")[0]
|
||||||
self.draw_label(context, text, p0, dir, vcenter=True, gap=0)
|
if p0:
|
||||||
self.draw_label(context, text, p1, dir, vcenter=True, gap=0)
|
self.draw_label(context, text, p0, dir, vcenter=True, gap=0)
|
||||||
|
if p1:
|
||||||
|
self.draw_label(context, text, p1, dir, vcenter=True, gap=0)
|
||||||
|
|
||||||
|
|
||||||
class ElevationDecorator(BaseDecorator):
|
class ElevationDecorator(BaseDecorator):
|
||||||
|
|||||||
Reference in New Issue
Block a user