This commit is contained in:
Andrej730
2026-02-05 12:18:17 +05:00
parent 0234809d0b
commit 7322082a0d
4 changed files with 23 additions and 19 deletions
@@ -1077,7 +1077,7 @@ class ProductDecorator:
data["verts"] = [] data["verts"] = []
# Verts # Verts
polyline_vertices = [] polyline_vertices: list[Vector] = []
polyline_props = tool.Model.get_polyline_props() polyline_props = tool.Model.get_polyline_props()
polyline_data = polyline_props.insertion_polyline polyline_data = polyline_props.insertion_polyline
polyline_points = polyline_data[0].polyline_points if polyline_data else [] polyline_points = polyline_data[0].polyline_points if polyline_data else []
@@ -1197,7 +1197,7 @@ class ProductDecorator:
data = {} data = {}
data["verts"] = [] data["verts"] = []
# Verts # Verts
polyline_vertices = [] polyline_vertices: list[Vector] = []
polyline_props = tool.Model.get_polyline_props() polyline_props = tool.Model.get_polyline_props()
polyline_data = polyline_props.insertion_polyline polyline_data = polyline_props.insertion_polyline
polyline_points = polyline_data[0].polyline_points if polyline_data else [] polyline_points = polyline_data[0].polyline_points if polyline_data else []
@@ -19,7 +19,7 @@
import bisect import bisect
import json import json
import traceback import traceback
from typing import TYPE_CHECKING, Literal, assert_never, get_args from typing import TYPE_CHECKING, Any, Literal, assert_never, get_args
import bpy import bpy
import ifcopenshell import ifcopenshell
@@ -695,9 +695,9 @@ class EditFilterQuery(Operator, tool.Ifc.Operator):
filter_groups = tool.Search.get_filter_groups(module) filter_groups = tool.Search.get_filter_groups(module)
if tool.Blender.get_addon_preferences().chain_filter_with_set_operations: if tool.Blender.get_addon_preferences().chain_filter_with_set_operations:
filter_structure = [] filter_structure: list[list[dict[str, Any]]] = []
for filter_group in filter_groups: for filter_group in filter_groups:
group_data = [] group_data: list[dict[str, Any]] = []
for ifc_filter in filter_group.filters: for ifc_filter in filter_group.filters:
filter_data = { filter_data = {
"type": ifc_filter.type, "type": ifc_filter.type,
@@ -852,9 +852,9 @@ class SaveSearch(Operator, tool.Ifc.Operator):
query = tool.Search.export_filter_query(filter_groups) query = tool.Search.export_filter_query(filter_groups)
results = tool.Search.execute_filter_groups(filter_groups) results = tool.Search.execute_filter_groups(filter_groups)
filter_structure = [] filter_structure: list[list[dict[str, Any]]] = []
for filter_group in filter_groups: for filter_group in filter_groups:
group_data = [] group_data: list[dict[str, Any]] = []
for ifc_filter in filter_group.filters: for ifc_filter in filter_group.filters:
filter_data = { filter_data = {
"type": ifc_filter.type, "type": ifc_filter.type,
+2 -2
View File
@@ -2626,7 +2626,7 @@ class Model(bonsai.core.tool.Model):
reference_obj: bpy.types.Object, reference_obj: bpy.types.Object,
objs: Iterable[bpy.types.Object], objs: Iterable[bpy.types.Object],
align_type: Literal["CENTER", "POSITIVE", "NEGATIVE"], align_type: Literal["CENTER", "POSITIVE", "NEGATIVE"],
): ) -> None:
if align_type == "CENTER": if align_type == "CENTER":
point = reference_obj.matrix_world @ (Vector(reference_obj.bound_box[0]) + (reference_obj.dimensions / 2)) point = reference_obj.matrix_world @ (Vector(reference_obj.bound_box[0]) + (reference_obj.dimensions / 2))
elif align_type == "POSITIVE": elif align_type == "POSITIVE":
@@ -2771,7 +2771,7 @@ class Model(bonsai.core.tool.Model):
SvIfcStore.use_bonsai_file = False SvIfcStore.use_bonsai_file = False
@classmethod @classmethod
def create_bmesh_from_vertices(cls, vertices, is_closed=False): def create_bmesh_from_vertices(cls, vertices: list[Vector], is_closed: bool = False) -> bmesh.types.BMesh:
bm = bmesh.new() bm = bmesh.new()
new_verts = [bm.verts.new(v) for v in vertices] new_verts = [bm.verts.new(v) for v in vertices]
+14 -10
View File
@@ -20,7 +20,7 @@ from __future__ import annotations
import json import json
from itertools import cycle from itertools import cycle
from typing import TYPE_CHECKING, Literal, Union from typing import TYPE_CHECKING, Any, Literal, Union
import bpy import bpy
import ifcopenshell.guid import ifcopenshell.guid
@@ -51,7 +51,9 @@ class Search(bonsai.core.tool.Search):
@classmethod @classmethod
def import_filter_structure( def import_filter_structure(
cls, filter_structure: list, filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup] cls,
filter_structure: list[list[dict[str, Any]]],
filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup],
) -> None: ) -> None:
filter_groups.clear() filter_groups.clear()
@@ -188,7 +190,9 @@ class Search(bonsai.core.tool.Search):
return "" return ""
@classmethod @classmethod
def execute_filter_groups(cls, filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup]) -> set: def execute_filter_groups(
cls, filter_groups: bpy.types.bpy_prop_collection_idprop[BIMFilterGroup]
) -> set[ifcopenshell.entity_instance]:
""" """
Execute filter groups with simplified chaining support. Execute filter groups with simplified chaining support.
Within a single group chain, all filters chain sequentially with ADD/SUBTRACT/FILTER modes. Within a single group chain, all filters chain sequentially with ADD/SUBTRACT/FILTER modes.
@@ -196,10 +200,10 @@ class Search(bonsai.core.tool.Search):
""" """
preferences = tool.Blender.get_addon_preferences() preferences = tool.Blender.get_addon_preferences()
all_group_results = [] all_group_results: list[set[ifcopenshell.entity_instance]] = []
for group_idx, filter_group in enumerate(filter_groups): for filter_group in filter_groups:
group_results = set() group_results: set[ifcopenshell.entity_instance] = set()
for filter_index, ifc_filter in enumerate(filter_group.filters): for filter_index, ifc_filter in enumerate(filter_group.filters):
if not ifc_filter.value: if not ifc_filter.value:
@@ -245,7 +249,7 @@ class Search(bonsai.core.tool.Search):
if group_results: if group_results:
all_group_results.append(group_results) all_group_results.append(group_results)
final_results = set() final_results: set[ifcopenshell.entity_instance] = set()
for group_results in all_group_results: for group_results in all_group_results:
final_results.update(group_results) final_results.update(group_results)
@@ -262,9 +266,9 @@ class Search(bonsai.core.tool.Search):
""" """
filter_structure = data.get("filter_structure", []) filter_structure = data.get("filter_structure", [])
all_group_results = [] all_group_results: list[set[ifcopenshell.entity_instance]] = []
for group_data in filter_structure: for group_data in filter_structure:
group_results = set() group_results: set[ifcopenshell.entity_instance] = set()
for filter_data in group_data: for filter_data in group_data:
filter_mode = filter_data.get("filter_mode", "ADD") filter_mode = filter_data.get("filter_mode", "ADD")
@@ -332,7 +336,7 @@ class Search(bonsai.core.tool.Search):
if group_results: if group_results:
all_group_results.append(group_results) all_group_results.append(group_results)
final_results = set() final_results: set[ifcopenshell.entity_instance] = set()
for group_results in all_group_results: for group_results in all_group_results:
final_results.update(group_results) final_results.update(group_results)