mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 14:31:39 +00:00
typing
This commit is contained in:
@@ -1143,7 +1143,7 @@ class IfcImportSettings:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def factory(context=None, input_file=None, logger=None):
|
def factory(context=None, input_file=None, logger=None):
|
||||||
scene_diff = bpy.context.scene.DiffProperties
|
scene_diff = bpy.context.scene.DiffProperties
|
||||||
props = bpy.context.scene.BIMProjectProperties
|
props = tool.Project.get_project_props()
|
||||||
settings = IfcImportSettings()
|
settings = IfcImportSettings()
|
||||||
settings.input_file = input_file
|
settings.input_file = input_file
|
||||||
if logger is None:
|
if logger is None:
|
||||||
|
|||||||
@@ -111,6 +111,14 @@ class Material(PropertyGroup):
|
|||||||
has_style: BoolProperty(name="Has Style", default=True)
|
has_style: BoolProperty(name="Has Style", default=True)
|
||||||
total_elements: IntProperty(name="Total Elements")
|
total_elements: IntProperty(name="Total Elements")
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
name: str
|
||||||
|
ifc_definition_id: int
|
||||||
|
is_category: bool
|
||||||
|
is_expanded: bool
|
||||||
|
has_style: bool
|
||||||
|
total_elements: int
|
||||||
|
|
||||||
|
|
||||||
class BIMMaterialProperties(PropertyGroup):
|
class BIMMaterialProperties(PropertyGroup):
|
||||||
is_editing: BoolProperty(name="Is Editing", default=False)
|
is_editing: BoolProperty(name="Is Editing", default=False)
|
||||||
@@ -126,9 +134,21 @@ class BIMMaterialProperties(PropertyGroup):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def active_material(self):
|
def active_material(self):
|
||||||
if self.active_material_index < len(self.materials):
|
if 0 <= self.active_material_index < len(self.materials):
|
||||||
return self.materials[self.active_material_index]
|
return self.materials[self.active_material_index]
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
is_editing: bool
|
||||||
|
material_type: str
|
||||||
|
materials: bpy.types.bpy_prop_collection_idprop[Material]
|
||||||
|
active_material_index: int
|
||||||
|
profiles: str
|
||||||
|
active_material_id: int
|
||||||
|
material_attributes: bpy.types.bpy_prop_collection_idprop[Attribute]
|
||||||
|
editing_material_type: str
|
||||||
|
styles: str
|
||||||
|
contexts: str
|
||||||
|
|
||||||
|
|
||||||
class BIMObjectMaterialProperties(PropertyGroup):
|
class BIMObjectMaterialProperties(PropertyGroup):
|
||||||
material_type: EnumProperty(items=get_object_material_type, name="Material Type")
|
material_type: EnumProperty(items=get_object_material_type, name="Material Type")
|
||||||
@@ -146,3 +166,16 @@ class BIMObjectMaterialProperties(PropertyGroup):
|
|||||||
parameterized_profile_classes: EnumProperty(
|
parameterized_profile_classes: EnumProperty(
|
||||||
items=get_parameterized_profile_classes, name="Parameterized Profile Classes"
|
items=get_parameterized_profile_classes, name="Parameterized Profile Classes"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
material_type: str
|
||||||
|
material: str
|
||||||
|
is_editing: bool
|
||||||
|
material_set_usage_attributes: bpy.types.bpy_prop_collection_idprop[Attribute]
|
||||||
|
material_set_attributes: bpy.types.bpy_prop_collection_idprop[Attribute]
|
||||||
|
active_material_set_item_id: int
|
||||||
|
material_set_item_attributes: bpy.types.bpy_prop_collection_idprop[Attribute]
|
||||||
|
material_set_item_profile_attributes: bpy.types.bpy_prop_collection_idprop[Attribute]
|
||||||
|
material_set_item_material: str
|
||||||
|
profile_classes: str
|
||||||
|
parameterized_profile_classes: str
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
# 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/>.
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
import bonsai.bim.helper
|
import bonsai.bim.helper
|
||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
import bpy
|
import bpy
|
||||||
@@ -25,6 +26,10 @@ from bonsai.bim.helper import draw_attributes
|
|||||||
from bonsai.bim.helper import prop_with_search
|
from bonsai.bim.helper import prop_with_search
|
||||||
from bonsai.bim.module.material.data import MaterialsData, ObjectMaterialData
|
from bonsai.bim.module.material.data import MaterialsData, ObjectMaterialData
|
||||||
from bonsai.bim.module.drawing.helper import format_distance
|
from bonsai.bim.module.drawing.helper import format_distance
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from bonsai.bim.module.material.prop import Material
|
||||||
|
|
||||||
|
|
||||||
class BIM_PT_materials(Panel):
|
class BIM_PT_materials(Panel):
|
||||||
@@ -395,7 +400,9 @@ class BIM_PT_object_material(Panel):
|
|||||||
|
|
||||||
|
|
||||||
class BIM_UL_materials(UIList):
|
class BIM_UL_materials(UIList):
|
||||||
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
|
def draw_item(
|
||||||
|
self, context, layout: bpy.types.UILayout, data, item: Material, icon, active_data, active_propname
|
||||||
|
) -> None:
|
||||||
mprops = context.scene.BIMMaterialProperties
|
mprops = context.scene.BIMMaterialProperties
|
||||||
material_type = mprops.material_type
|
material_type = mprops.material_type
|
||||||
|
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ class RefreshLibrary(bpy.types.Operator):
|
|||||||
bl_label = "Refresh Library"
|
bl_label = "Refresh Library"
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
self.props = context.scene.BIMProjectProperties
|
self.props = tool.Project.get_project_props()
|
||||||
|
|
||||||
self.props.library_elements.clear()
|
self.props.library_elements.clear()
|
||||||
self.props.library_breadcrumb.clear()
|
self.props.library_breadcrumb.clear()
|
||||||
@@ -227,11 +227,16 @@ class ChangeLibraryElement(bpy.types.Operator):
|
|||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
element_name: bpy.props.StringProperty()
|
element_name: bpy.props.StringProperty()
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
element_name: str
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
self.props = context.scene.BIMProjectProperties
|
self.props = tool.Project.get_project_props()
|
||||||
self.file = IfcStore.get_file()
|
self.file = tool.Ifc.get()
|
||||||
self.library_file = IfcStore.library_file
|
library_file = IfcStore.library_file
|
||||||
ifc_classes = set()
|
assert library_file
|
||||||
|
self.library_file = library_file
|
||||||
|
ifc_classes: set[str] = set()
|
||||||
self.props.active_library_element = self.element_name
|
self.props.active_library_element = self.element_name
|
||||||
|
|
||||||
crumb = self.props.library_breadcrumb.add()
|
crumb = self.props.library_breadcrumb.add()
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ from bpy.props import (
|
|||||||
IntProperty,
|
IntProperty,
|
||||||
StringProperty,
|
StringProperty,
|
||||||
)
|
)
|
||||||
|
from typing import TYPE_CHECKING, Literal, Union
|
||||||
|
|
||||||
|
|
||||||
def get_export_schema(self: "BIMProjectProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]:
|
def get_export_schema(self: "BIMProjectProperties", context: bpy.types.Context) -> list[tuple[str, str, str]]:
|
||||||
@@ -97,11 +98,18 @@ def update_filter_mode(self: "BIMProjectProperties", context: bpy.types.Context)
|
|||||||
|
|
||||||
|
|
||||||
class LibraryElement(PropertyGroup):
|
class LibraryElement(PropertyGroup):
|
||||||
|
# For IFC class groups only name is filled, for assets - all fields.
|
||||||
name: StringProperty(name="Name")
|
name: StringProperty(name="Name")
|
||||||
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
||||||
is_declared: BoolProperty(name="Is Declared", default=False)
|
is_declared: BoolProperty(name="Is Declared", default=False)
|
||||||
is_appended: BoolProperty(name="Is Appended", default=False)
|
is_appended: BoolProperty(name="Is Appended", default=False)
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
name: str
|
||||||
|
ifc_definition_id: int
|
||||||
|
is_declared: bool
|
||||||
|
is_appended: bool
|
||||||
|
|
||||||
|
|
||||||
class FilterCategory(PropertyGroup):
|
class FilterCategory(PropertyGroup):
|
||||||
name: StringProperty(name="Name")
|
name: StringProperty(name="Name")
|
||||||
@@ -109,6 +117,12 @@ class FilterCategory(PropertyGroup):
|
|||||||
is_selected: BoolProperty(name="Is Selected", default=False)
|
is_selected: BoolProperty(name="Is Selected", default=False)
|
||||||
total_elements: IntProperty(name="Total Elements")
|
total_elements: IntProperty(name="Total Elements")
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
name: str
|
||||||
|
ifc_definition_id: int
|
||||||
|
is_selected: bool
|
||||||
|
total_elements: int
|
||||||
|
|
||||||
|
|
||||||
class Link(PropertyGroup):
|
class Link(PropertyGroup):
|
||||||
name: StringProperty(
|
name: StringProperty(
|
||||||
@@ -125,10 +139,21 @@ class Link(PropertyGroup):
|
|||||||
type=bpy.types.Object,
|
type=bpy.types.Object,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
name: str
|
||||||
|
is_loaded: bool
|
||||||
|
is_selectable: bool
|
||||||
|
is_wireframe: bool
|
||||||
|
is_hidden: bool
|
||||||
|
empty_handle: Union[bpy.types.Object, None]
|
||||||
|
|
||||||
|
|
||||||
class EditedObj(PropertyGroup):
|
class EditedObj(PropertyGroup):
|
||||||
obj: PointerProperty(type=bpy.types.Object)
|
obj: PointerProperty(type=bpy.types.Object)
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
obj: Union[bpy.types.Object, None]
|
||||||
|
|
||||||
|
|
||||||
class BIMProjectProperties(PropertyGroup):
|
class BIMProjectProperties(PropertyGroup):
|
||||||
is_editing: BoolProperty(name="Is Editing", default=False)
|
is_editing: BoolProperty(name="Is Editing", default=False)
|
||||||
@@ -238,12 +263,62 @@ class BIMProjectProperties(PropertyGroup):
|
|||||||
edited_objs: bpy.props.CollectionProperty(type=EditedObj)
|
edited_objs: bpy.props.CollectionProperty(type=EditedObj)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def clipping_planes_objs(self):
|
def clipping_planes_objs(self) -> list[bpy.types.Object]:
|
||||||
return list({cp.obj for cp in self.clipping_planes if cp.obj})
|
return list({cp.obj for cp in self.clipping_planes if cp.obj})
|
||||||
|
|
||||||
def get_library_element_index(self, lib_element):
|
def get_library_element_index(self, lib_element: LibraryElement) -> int:
|
||||||
return next((i for i in range(len(self.library_elements)) if self.library_elements[i] == lib_element))
|
return next((i for i in range(len(self.library_elements)) if self.library_elements[i] == lib_element))
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
is_editing: bool
|
||||||
|
is_loading: bool
|
||||||
|
mvd: str
|
||||||
|
author_name: str
|
||||||
|
author_email: str
|
||||||
|
organisation_name: str
|
||||||
|
organisation_email: str
|
||||||
|
authorisation: str
|
||||||
|
active_library_element: str
|
||||||
|
library_breadcrumb: bpy.types.bpy_prop_collection_idprop[StrProperty]
|
||||||
|
library_elements: bpy.types.bpy_prop_collection_idprop[LibraryElement]
|
||||||
|
active_library_element_index: int
|
||||||
|
filter_mode: Literal["NONE", "DECOMPOSITION", "IFC_CLASS", "IFC_TYPE", "WHITELIST", "BLACKLIST"]
|
||||||
|
total_elements: int
|
||||||
|
filter_categories: bpy.types.bpy_prop_collection_idprop[FilterCategory]
|
||||||
|
active_filter_category_index: int
|
||||||
|
filter_query: str
|
||||||
|
should_filter_spatial_elements: bool
|
||||||
|
geometry_library: Literal["opencascade", "cgal", "cgal-simple", "hybrid-cgal-simple-opencascade"]
|
||||||
|
should_use_cpu_multiprocessing: bool
|
||||||
|
should_merge_materials_by_colour: bool
|
||||||
|
should_stream: bool
|
||||||
|
should_load_geometry: bool
|
||||||
|
should_clean_mesh: bool
|
||||||
|
should_cache: bool
|
||||||
|
deflection_tolerance: float
|
||||||
|
angular_tolerance: float
|
||||||
|
void_limit: int
|
||||||
|
distance_limit: float
|
||||||
|
false_origin_mode: Literal["AUTOMATIC", "MANUAL", "DISABLED"]
|
||||||
|
false_origin: str
|
||||||
|
project_north: str
|
||||||
|
element_limit_mode: Literal["UNLIMITED", "RANGE"]
|
||||||
|
element_offset: int
|
||||||
|
element_limit: int
|
||||||
|
load_indexed_maps: bool
|
||||||
|
should_disable_undo_on_save: bool
|
||||||
|
links: bpy.types.bpy_prop_collection_idprop[Link]
|
||||||
|
active_link_index: int
|
||||||
|
export_schema: str
|
||||||
|
template_file: str
|
||||||
|
library_file: str
|
||||||
|
use_relative_project_path: bool
|
||||||
|
queried_obj: Union[bpy.types.Object, None]
|
||||||
|
queried_obj_root: Union[bpy.types.Object, None]
|
||||||
|
clipping_planes: bpy.types.bpy_prop_collection_idprop[ObjProperty]
|
||||||
|
clipping_planes_active: int
|
||||||
|
edited_objs: bpy.types.bpy_prop_collection_idprop[EditedObj]
|
||||||
|
|
||||||
|
|
||||||
class MeasureToolSettings(PropertyGroup):
|
class MeasureToolSettings(PropertyGroup):
|
||||||
measurement_type_items = [
|
measurement_type_items = [
|
||||||
@@ -253,3 +328,6 @@ class MeasureToolSettings(PropertyGroup):
|
|||||||
]
|
]
|
||||||
|
|
||||||
measurement_type: bpy.props.EnumProperty(items=measurement_type_items, default="POLYLINE")
|
measurement_type: bpy.props.EnumProperty(items=measurement_type_items, default="POLYLINE")
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
measurement_type: Literal["SINGLE", "POLYLINE", "AREA"]
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
# 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/>.
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
import bpy
|
||||||
import os
|
import os
|
||||||
import bonsai.bim
|
import bonsai.bim
|
||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
@@ -23,6 +25,10 @@ from bonsai.bim.helper import prop_with_search
|
|||||||
from bpy.types import Panel, Menu, UIList
|
from bpy.types import Panel, Menu, UIList
|
||||||
from bonsai.bim.ifc import IfcStore
|
from bonsai.bim.ifc import IfcStore
|
||||||
from bonsai.bim.module.project.data import ProjectData, LinksData
|
from bonsai.bim.module.project.data import ProjectData, LinksData
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from bonsai.bim.module.project.prop import LibraryElement, BIMProjectProperties
|
||||||
|
|
||||||
|
|
||||||
def file_import_menu(self, context):
|
def file_import_menu(self, context):
|
||||||
@@ -441,7 +447,16 @@ class BIM_PT_links(Panel):
|
|||||||
|
|
||||||
|
|
||||||
class BIM_UL_library(UIList):
|
class BIM_UL_library(UIList):
|
||||||
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
|
def draw_item(
|
||||||
|
self,
|
||||||
|
context,
|
||||||
|
layout: bpy.types.UILayout,
|
||||||
|
data: BIMProjectProperties,
|
||||||
|
item: LibraryElement,
|
||||||
|
icon,
|
||||||
|
active_data,
|
||||||
|
active_propname,
|
||||||
|
):
|
||||||
if item:
|
if item:
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
if not item.ifc_definition_id:
|
if not item.ifc_definition_id:
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
# 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/>.
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
import os
|
import os
|
||||||
import bpy
|
import bpy
|
||||||
import ifcopenshell
|
import ifcopenshell
|
||||||
@@ -33,10 +34,17 @@ import bonsai.tool as tool
|
|||||||
from bonsai.bim.ifc import IfcStore
|
from bonsai.bim.ifc import IfcStore
|
||||||
from ifcopenshell.api.project.append_asset import APPENDABLE_ASSET_TYPES
|
from ifcopenshell.api.project.append_asset import APPENDABLE_ASSET_TYPES
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union, TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from bonsai.bim.module.project.prop import BIMProjectProperties
|
||||||
|
|
||||||
|
|
||||||
class Project(bonsai.core.tool.Project):
|
class Project(bonsai.core.tool.Project):
|
||||||
|
@classmethod
|
||||||
|
def get_project_props(cls) -> BIMProjectProperties:
|
||||||
|
return bpy.context.scene.BIMProjectProperties
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def append_all_types_from_template(cls, template: str) -> None:
|
def append_all_types_from_template(cls, template: str) -> None:
|
||||||
# TODO refactor
|
# TODO refactor
|
||||||
|
|||||||
Reference in New Issue
Block a user