mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 14:23:53 +00:00
snap: black formatting
This commit is contained in:
committed by
Bruno Perdigão
parent
105d186a34
commit
e9c7203c23
@@ -42,7 +42,6 @@ import bonsai.tool as tool
|
|||||||
from bonsai.bim.module.drawing.data import DecoratorData
|
from bonsai.bim.module.drawing.data import DecoratorData
|
||||||
from bonsai.bim.module.drawing.decoration import CutDecorator
|
from bonsai.bim.module.drawing.decoration import CutDecorator
|
||||||
|
|
||||||
|
|
||||||
_wireframe_batch_cache: dict[int, dict[str, tuple[GPUBatch, int, list]]] = {}
|
_wireframe_batch_cache: dict[int, dict[str, tuple[GPUBatch, int, list]]] = {}
|
||||||
_wireframe_vert_fmt: GPUVertFormat | None = None
|
_wireframe_vert_fmt: GPUVertFormat | None = None
|
||||||
_triangle_batch_cache: dict[int, tuple[GPUBatch, int]] = {}
|
_triangle_batch_cache: dict[int, tuple[GPUBatch, int]] = {}
|
||||||
@@ -158,6 +157,7 @@ def _get_solid_triangles(obj: bpy.types.Object) -> list[tuple[tuple, tuple, tupl
|
|||||||
eval_obj.to_mesh_clear()
|
eval_obj.to_mesh_clear()
|
||||||
return tris
|
return tris
|
||||||
|
|
||||||
|
|
||||||
def _get_cut_object_solid_triangles(obj: bpy.types.Object) -> list[tuple[tuple, tuple, tuple]]:
|
def _get_cut_object_solid_triangles(obj: bpy.types.Object) -> list[tuple[tuple, tuple, tuple]]:
|
||||||
"""
|
"""
|
||||||
Gets all the triangles from cut decorator fill, in local space
|
Gets all the triangles from cut decorator fill, in local space
|
||||||
@@ -306,6 +306,7 @@ def _get_boundary_features(obj: bpy.types.Object) -> tuple[list[tuple[float, flo
|
|||||||
eval_obj.to_mesh_clear()
|
eval_obj.to_mesh_clear()
|
||||||
return verts, edge_pairs
|
return verts, edge_pairs
|
||||||
|
|
||||||
|
|
||||||
def _get_cut_object_features(
|
def _get_cut_object_features(
|
||||||
obj: bpy.types.Object,
|
obj: bpy.types.Object,
|
||||||
) -> (list[tuple[float, float, float]], list[tuple[tuple[float, float, float], tuple[float, float, float]]]):
|
) -> (list[tuple[float, float, float]], list[tuple[tuple[float, float, float], tuple[float, float, float]]]):
|
||||||
@@ -322,7 +323,11 @@ def _get_cut_object_features(
|
|||||||
model_props = tool.Model.get_model_props()
|
model_props = tool.Model.get_model_props()
|
||||||
if not (element := tool.Ifc.get_entity(obj)):
|
if not (element := tool.Ifc.get_entity(obj)):
|
||||||
return [], []
|
return [], []
|
||||||
if model_props.show_cut_decorator and element.id() in DecoratorData.cut_cache and (hasattr(obj.data, "polygons") and len(obj.data.polygons) > 0):
|
if (
|
||||||
|
model_props.show_cut_decorator
|
||||||
|
and element.id() in DecoratorData.cut_cache
|
||||||
|
and (hasattr(obj.data, "polygons") and len(obj.data.polygons) > 0)
|
||||||
|
):
|
||||||
verts, edges = DecoratorData.cut_cache[element.id()]
|
verts, edges = DecoratorData.cut_cache[element.id()]
|
||||||
if not verts or not edges:
|
if not verts or not edges:
|
||||||
return {}, {}
|
return {}, {}
|
||||||
@@ -373,8 +378,6 @@ def _ensure_wireframe_batches(obj: bpy.types.Object) -> dict[str, tuple[GPUBatch
|
|||||||
|
|
||||||
all_vert_coords, edge_pairs = _get_boundary_features(obj)
|
all_vert_coords, edge_pairs = _get_boundary_features(obj)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
batches: dict[str, tuple[GPUBatch, int, list]] = {}
|
batches: dict[str, tuple[GPUBatch, int, list]] = {}
|
||||||
|
|
||||||
# POINTS batch (all wireframe vertices)
|
# POINTS batch (all wireframe vertices)
|
||||||
@@ -410,6 +413,7 @@ def _ensure_wireframe_batches(obj: bpy.types.Object) -> dict[str, tuple[GPUBatch
|
|||||||
_wireframe_batch_cache[cache_key] = batches
|
_wireframe_batch_cache[cache_key] = batches
|
||||||
return batches
|
return batches
|
||||||
|
|
||||||
|
|
||||||
def _get_tris_render_ops(objs_to_raycast: list[bpy.types.Object]) -> list[tuple[GPUBatch, Matrix, int]]:
|
def _get_tris_render_ops(objs_to_raycast: list[bpy.types.Object]) -> list[tuple[GPUBatch, Matrix, int]]:
|
||||||
"""Build render ops for solid (triangle) objects to raycast.
|
"""Build render ops for solid (triangle) objects to raycast.
|
||||||
|
|
||||||
@@ -447,7 +451,10 @@ def _get_tris_render_ops(objs_to_raycast: list[bpy.types.Object]) -> list[tuple[
|
|||||||
render_ops.append((batch, snap_obj.matrix_world.copy(), slot_base))
|
render_ops.append((batch, snap_obj.matrix_world.copy(), slot_base))
|
||||||
return render_ops
|
return render_ops
|
||||||
|
|
||||||
def _create_tris_snaps(context: bpy.types.Context, event: bpy.types.Event, mouse_read_rect, buffers_list, last_buf, xray_mode) -> tuple[list[dict], bpy.types.Object | None]:
|
|
||||||
|
def _create_tris_snaps(
|
||||||
|
context: bpy.types.Context, event: bpy.types.Event, mouse_read_rect, buffers_list, last_buf, xray_mode
|
||||||
|
) -> tuple[list[dict], bpy.types.Object | None]:
|
||||||
"""Decode the triangle readback buffer(s) into face snaps.
|
"""Decode the triangle readback buffer(s) into face snaps.
|
||||||
|
|
||||||
In xray mode each object is read back as a single pixel under the
|
In xray mode each object is read back as a single pixel under the
|
||||||
@@ -525,7 +532,7 @@ def _create_tris_snaps(context: bpy.types.Context, event: bpy.types.Event, mouse
|
|||||||
"group": "Object",
|
"group": "Object",
|
||||||
"object": hit_obj,
|
"object": hit_obj,
|
||||||
"face_index": face_index,
|
"face_index": face_index,
|
||||||
"is_cut": is_cut_face, # Used later in snap
|
"is_cut": is_cut_face, # Used later in snap
|
||||||
"distance": 9, # High value so it has low priority
|
"distance": 9, # High value so it has low priority
|
||||||
}
|
}
|
||||||
dist = (hit - ray_origin).length
|
dist = (hit - ray_origin).length
|
||||||
@@ -537,7 +544,10 @@ def _create_tris_snaps(context: bpy.types.Context, event: bpy.types.Event, mouse
|
|||||||
|
|
||||||
return snaps, closest_obj
|
return snaps, closest_obj
|
||||||
|
|
||||||
def _get_wireframe_render_ops(objs_to_raycast: list[bpy.types.Objects]) -> tuple[list[tuple[GPUBatch, Matrix, int]], list[tuple]]:
|
|
||||||
|
def _get_wireframe_render_ops(
|
||||||
|
objs_to_raycast: list[bpy.types.Objects],
|
||||||
|
) -> tuple[list[tuple[GPUBatch, Matrix, int]], list[tuple]]:
|
||||||
"""Build render ops for wireframe (non-solid) objects.
|
"""Build render ops for wireframe (non-solid) objects.
|
||||||
|
|
||||||
Boundary points and lines of each object are assigned sequential slot
|
Boundary points and lines of each object are assigned sequential slot
|
||||||
@@ -589,7 +599,10 @@ def _get_wireframe_render_ops(objs_to_raycast: list[bpy.types.Objects]) -> tuple
|
|||||||
|
|
||||||
return render_ops, obj_slots
|
return render_ops, obj_slots
|
||||||
|
|
||||||
def _create_wireframe_snaps(context: bpy.types.Context, event: bpy.types.Event, mouse_read_rect, obj_slots, last_buf) -> tuple[list[dict], None]:
|
|
||||||
|
def _create_wireframe_snaps(
|
||||||
|
context: bpy.types.Context, event: bpy.types.Event, mouse_read_rect, obj_slots, last_buf
|
||||||
|
) -> tuple[list[dict], None]:
|
||||||
"""Decode the wireframe readback buffer into vertex/edge snaps.
|
"""Decode the wireframe readback buffer into vertex/edge snaps.
|
||||||
|
|
||||||
Finds the closest non-zero pixel to the cursor, maps its encoded slot ID
|
Finds the closest non-zero pixel to the cursor, maps its encoded slot ID
|
||||||
@@ -692,7 +705,7 @@ def _create_wireframe_snaps(context: bpy.types.Context, event: bpy.types.Event,
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Edge Center snap (midpoint)
|
# Edge Center snap (midpoint)
|
||||||
mid = (v0 + v1) / 2 # TODO Allow divisions by other values
|
mid = (v0 + v1) / 2 # TODO Allow divisions by other values
|
||||||
mid_proj = tool.Cad.point_on_edge(mid, (ray_target, loc))
|
mid_proj = tool.Cad.point_on_edge(mid, (ray_target, loc))
|
||||||
mid_dist = (mid - mid_proj).length
|
mid_dist = (mid - mid_proj).length
|
||||||
snaps.append(
|
snaps.append(
|
||||||
@@ -723,6 +736,7 @@ def _create_wireframe_snaps(context: bpy.types.Context, event: bpy.types.Event,
|
|||||||
|
|
||||||
return snaps, None
|
return snaps, None
|
||||||
|
|
||||||
|
|
||||||
class Raycast(bonsai.core.tool.Raycast):
|
class Raycast(bonsai.core.tool.Raycast):
|
||||||
offset = 10
|
offset = 10
|
||||||
mouse_offset = (
|
mouse_offset = (
|
||||||
@@ -1163,12 +1177,12 @@ class Raycast(bonsai.core.tool.Raycast):
|
|||||||
def clear_cache(cls):
|
def clear_cache(cls):
|
||||||
global _wireframe_batch_cache, _wireframe_vert_fmt, _triangle_batch_cache, _triangle_vert_fmt, _encoding_shader, _offscreen, _obj_list
|
global _wireframe_batch_cache, _wireframe_vert_fmt, _triangle_batch_cache, _triangle_vert_fmt, _encoding_shader, _offscreen, _obj_list
|
||||||
_wireframe_batch_cache = {}
|
_wireframe_batch_cache = {}
|
||||||
_wireframe_vert_fmt= None
|
_wireframe_vert_fmt = None
|
||||||
_triangle_batch_cache= {}
|
_triangle_batch_cache = {}
|
||||||
_triangle_vert_fmt= None
|
_triangle_vert_fmt = None
|
||||||
_encoding_shader= None
|
_encoding_shader = None
|
||||||
_offscreen= None
|
_offscreen = None
|
||||||
_obj_list= []
|
_obj_list = []
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def ray_cast_by_proximity(
|
def ray_cast_by_proximity(
|
||||||
|
|||||||
@@ -435,7 +435,7 @@ class Snap(bonsai.core.tool.Snap):
|
|||||||
|
|
||||||
detected_snaps.extend(wireframe_snaps)
|
detected_snaps.extend(wireframe_snaps)
|
||||||
|
|
||||||
# Axis and Plane
|
# Axis and Plane
|
||||||
if tool.Ifc.get():
|
if tool.Ifc.get():
|
||||||
elevation = tool.Root.get_default_container_elevation()
|
elevation = tool.Root.get_default_container_elevation()
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user