mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-11 22:31:55 +00:00
be2ea335f5
* Previously, IfcPerson was not imported. Now it is! Funky.
1555 lines
66 KiB
Python
1555 lines
66 KiB
Python
import json
|
|
import os
|
|
import ifcopenshell
|
|
from pathlib import Path
|
|
from . import export_ifc
|
|
from . import schema
|
|
from . import ifc
|
|
from . import annotation
|
|
from . import decoration
|
|
import bpy
|
|
from blenderbim.bim.ifc import IfcStore
|
|
from bpy.types import PropertyGroup
|
|
from bpy.app.handlers import persistent
|
|
from bpy.props import (
|
|
PointerProperty,
|
|
StringProperty,
|
|
EnumProperty,
|
|
BoolProperty,
|
|
IntProperty,
|
|
FloatProperty,
|
|
FloatVectorProperty,
|
|
CollectionProperty,
|
|
)
|
|
|
|
cwd = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
diagram_scales_enum = []
|
|
products_enum = []
|
|
profiledef_enum = []
|
|
classes_enum = []
|
|
types_enum = []
|
|
availablematerialpsets_enum = []
|
|
ifcpatchrecipes_enum = []
|
|
featuresfiles_enum = []
|
|
titleblocks_enum = []
|
|
scenarios_enum = []
|
|
materialpsetnames_enum = []
|
|
psetfiles_enum = []
|
|
psettemplatefiles_enum = []
|
|
propertysettemplates_enum = []
|
|
classification_enum = []
|
|
attributes_enum = []
|
|
psetnames = {}
|
|
qtonames_enum = []
|
|
materialattributes_enum = []
|
|
materialtypes_enum = []
|
|
contexts_enum = []
|
|
subcontexts_enum = []
|
|
target_views_enum = []
|
|
persons_enum = []
|
|
organisations_enum = []
|
|
sheets_enum = []
|
|
vector_styles_enum = []
|
|
|
|
|
|
@persistent
|
|
def setDefaultProperties(scene):
|
|
if len(bpy.context.scene.DocProperties.drawing_styles) == 0:
|
|
drawing_style = bpy.context.scene.DocProperties.drawing_styles.add()
|
|
drawing_style.name = "Technical"
|
|
drawing_style.render_type = "VIEWPORT"
|
|
drawing_style.raster_style = json.dumps(
|
|
{
|
|
"bpy.data.worlds[0].color": (1, 1, 1),
|
|
"bpy.context.scene.render.engine": "BLENDER_WORKBENCH",
|
|
"bpy.context.scene.render.film_transparent": False,
|
|
"bpy.context.scene.display.shading.show_object_outline": True,
|
|
"bpy.context.scene.display.shading.show_cavity": False,
|
|
"bpy.context.scene.display.shading.cavity_type": "BOTH",
|
|
"bpy.context.scene.display.shading.curvature_ridge_factor": 1,
|
|
"bpy.context.scene.display.shading.curvature_valley_factor": 1,
|
|
"bpy.context.scene.view_settings.view_transform": "Standard",
|
|
"bpy.context.scene.display.shading.light": "FLAT",
|
|
"bpy.context.scene.display.shading.color_type": "SINGLE",
|
|
"bpy.context.scene.display.shading.single_color": (1, 1, 1),
|
|
"bpy.context.scene.display.shading.show_shadows": False,
|
|
"bpy.context.scene.display.shading.shadow_intensity": 0.5,
|
|
"bpy.context.scene.display.light_direction": (0.5, 0.5, 0.5),
|
|
"bpy.context.scene.view_settings.use_curve_mapping": False,
|
|
"space.overlay.show_wireframes": True,
|
|
"space.overlay.wireframe_threshold": 0,
|
|
"space.overlay.show_floor": False,
|
|
"space.overlay.show_axis_x": False,
|
|
"space.overlay.show_axis_y": False,
|
|
"space.overlay.show_axis_z": False,
|
|
"space.overlay.show_object_origins": False,
|
|
"space.overlay.show_relationship_lines": False,
|
|
}
|
|
)
|
|
drawing_style = bpy.context.scene.DocProperties.drawing_styles.add()
|
|
drawing_style.name = "Shaded"
|
|
drawing_style.render_type = "VIEWPORT"
|
|
drawing_style.raster_style = json.dumps(
|
|
{
|
|
"bpy.data.worlds[0].color": (1, 1, 1),
|
|
"bpy.context.scene.render.engine": "BLENDER_WORKBENCH",
|
|
"bpy.context.scene.render.film_transparent": False,
|
|
"bpy.context.scene.display.shading.show_object_outline": True,
|
|
"bpy.context.scene.display.shading.show_cavity": True,
|
|
"bpy.context.scene.display.shading.cavity_type": "BOTH",
|
|
"bpy.context.scene.display.shading.curvature_ridge_factor": 1,
|
|
"bpy.context.scene.display.shading.curvature_valley_factor": 1,
|
|
"bpy.context.scene.view_settings.view_transform": "Standard",
|
|
"bpy.context.scene.display.shading.light": "STUDIO",
|
|
"bpy.context.scene.display.shading.color_type": "MATERIAL",
|
|
"bpy.context.scene.display.shading.single_color": (1, 1, 1),
|
|
"bpy.context.scene.display.shading.show_shadows": True,
|
|
"bpy.context.scene.display.shading.shadow_intensity": 0.5,
|
|
"bpy.context.scene.display.light_direction": (0.5, 0.5, 0.5),
|
|
"bpy.context.scene.view_settings.use_curve_mapping": False,
|
|
"space.overlay.show_wireframes": True,
|
|
"space.overlay.wireframe_threshold": 0,
|
|
"space.overlay.show_floor": False,
|
|
"space.overlay.show_axis_x": False,
|
|
"space.overlay.show_axis_y": False,
|
|
"space.overlay.show_axis_z": False,
|
|
"space.overlay.show_object_origins": False,
|
|
"space.overlay.show_relationship_lines": False,
|
|
}
|
|
)
|
|
drawing_style = bpy.context.scene.DocProperties.drawing_styles.add()
|
|
drawing_style.name = "Blender Default"
|
|
drawing_style.render_type = "DEFAULT"
|
|
bpy.ops.bim.save_drawing_style(index="2")
|
|
|
|
|
|
def getIfcPredefinedTypes(self, context):
|
|
global types_enum
|
|
file = IfcStore.get_file()
|
|
if len(types_enum) < 1 and file:
|
|
declaration = IfcStore.get_schema().declaration_by_name(self.ifc_class)
|
|
for attribute in declaration.attributes():
|
|
if attribute.name() == "PredefinedType":
|
|
types_enum.extend([(e, e, "") for e in attribute.type_of_attribute().declared_type().enumeration_items()])
|
|
break
|
|
return types_enum
|
|
|
|
|
|
def refreshClasses(self, context):
|
|
global classes_enum
|
|
classes_enum.clear()
|
|
enum = getIfcClasses(self, context)
|
|
context.scene.BIMProperties.ifc_class = enum[0][0]
|
|
|
|
|
|
def refreshPredefinedTypes(self, context):
|
|
global types_enum
|
|
types_enum.clear()
|
|
enum = getIfcPredefinedTypes(self, context)
|
|
context.scene.BIMProperties.ifc_predefined_type = enum[0][0]
|
|
|
|
|
|
def getDiagramScales(self, context):
|
|
global diagram_scales_enum
|
|
if (
|
|
len(diagram_scales_enum) < 1
|
|
or (bpy.context.scene.unit_settings.system == "IMPERIAL" and len(diagram_scales_enum) == 13)
|
|
or (bpy.context.scene.unit_settings.system == "METRIC" and len(diagram_scales_enum) == 31)
|
|
):
|
|
if bpy.context.scene.unit_settings.system == "IMPERIAL":
|
|
diagram_scales_enum = [
|
|
("CUSTOM", "Custom", ""),
|
|
("1'=1'-0\"|1/1", "1'=1'-0\"", ""),
|
|
('6"=1\'-0"|1/6', '6"=1\'-0"', ""),
|
|
('1-1/2"=1\'-0"|1/8', '1-1/2"=1\'-0"', ""),
|
|
('1"=1\'-0"|1/12', '1"=1\'-0"', ""),
|
|
('3/4"=1\'-0"|1/16', '3/4"=1\'-0"', ""),
|
|
('1/2"=1\'-0"|1/24', '1/2"=1\'-0"', ""),
|
|
('3/8"=1\'-0"|1/32', '3/8"=1\'-0"', ""),
|
|
('1/4"=1\'-0"|1/48', '1/4"=1\'-0"', ""),
|
|
('3/16"=1\'-0"|1/64', '3/16"=1\'-0"', ""),
|
|
('1/8"=1\'-0"|1/96', '1/8"=1\'-0"', ""),
|
|
('3/32"=1\'-0"|1/128', '3/32"=1\'-0"', ""),
|
|
('1/16"=1\'-0"|1/192', '1/16"=1\'-0"', ""),
|
|
('1/32"=1\'-0"|1/384', '1/32"=1\'-0"', ""),
|
|
('1/64"=1\'-0"|1/768', '1/64"=1\'-0"', ""),
|
|
('1/128"=1\'-0"|1/1536', '1/128"=1\'-0"', ""),
|
|
("1\"=10'|1/120", "1\"=10'", ""),
|
|
("1\"=20'|1/240", "1\"=20'", ""),
|
|
("1\"=30'|1/360", "1\"=30'", ""),
|
|
("1\"=40'|1/480", "1\"=40'", ""),
|
|
("1\"=50'|1/600", "1\"=50'", ""),
|
|
("1\"=60'|1/720", "1\"=60'", ""),
|
|
("1\"=70'|1/840", "1\"=70'", ""),
|
|
("1\"=80'|1/960", "1\"=80'", ""),
|
|
("1\"=90'|1/1080", "1\"=90'", ""),
|
|
("1\"=100'|1/1200", "1\"=100'", ""),
|
|
("1\"=150'|1/1800", "1\"=150'", ""),
|
|
("1\"=200'|1/2400", "1\"=200'", ""),
|
|
("1\"=300'|1/3600", "1\"=300'", ""),
|
|
("1\"=400'|1/4800", "1\"=400'", ""),
|
|
("1\"=500'|1/6000", "1\"=500'", ""),
|
|
]
|
|
else:
|
|
diagram_scales_enum = [
|
|
("CUSTOM", "Custom", ""),
|
|
("1:5000|1/5000", "1:5000", ""),
|
|
("1:2000|1/2000", "1:2000", ""),
|
|
("1:1000|1/1000", "1:1000", ""),
|
|
("1:500|1/500", "1:500", ""),
|
|
("1:200|1/200", "1:200", ""),
|
|
("1:100|1/100", "1:100", ""),
|
|
("1:50|1/50", "1:50", ""),
|
|
("1:20|1/20", "1:20", ""),
|
|
("1:10|1/10", "1:10", ""),
|
|
("1:5|1/5", "1:5", ""),
|
|
("1:2|1/2", "1:2", ""),
|
|
("1:1|1/1", "1:1", ""),
|
|
]
|
|
return diagram_scales_enum
|
|
|
|
|
|
def updateDrawingName(self, context):
|
|
if not self.camera:
|
|
return
|
|
if self.camera.name == self.name:
|
|
return
|
|
self.camera.name = "IfcGroup/{}".format(self.name)
|
|
self.camera.users_collection[0].name = self.camera.name
|
|
self.name = self.camera.name.split("/")[1]
|
|
|
|
|
|
def getBoundaryConditionClasses(self, context):
|
|
return [
|
|
(c, c, "")
|
|
for c in [
|
|
"IfcBoundaryEdgeCondition",
|
|
"IfcBoundaryFaceCondition",
|
|
"IfcBoundaryNodeCondition",
|
|
"IfcBoundaryNodeConditionWarping",
|
|
]
|
|
]
|
|
|
|
|
|
def refreshBoundaryConditionAttributes(self, context):
|
|
while len(context.active_object.BIMObjectProperties.boundary_condition.attributes) > 0:
|
|
context.active_object.BIMObjectProperties.boundary_condition.attributes.remove(0)
|
|
for attribute in schema.ifc.elements[context.active_object.BIMObjectProperties.boundary_condition.name][
|
|
"complex_attributes"
|
|
]:
|
|
new_attribute = context.active_object.BIMObjectProperties.boundary_condition.attributes.add()
|
|
new_attribute.name = attribute["name"]
|
|
|
|
|
|
def refreshActiveDrawingIndex(self, context):
|
|
bpy.ops.bim.activate_view(drawing_index=context.scene.DocProperties.active_drawing_index)
|
|
|
|
|
|
def getIfcProducts(self, context):
|
|
global products_enum
|
|
file = IfcStore.get_file()
|
|
if len(products_enum) < 1:
|
|
products_enum.extend(
|
|
[
|
|
(e, e, "")
|
|
for e in [
|
|
"IfcElement",
|
|
"IfcElementType",
|
|
"IfcSpatialElement",
|
|
"IfcGroup",
|
|
"IfcStructuralItem",
|
|
"IfcContext",
|
|
"IfcAnnotation",
|
|
]
|
|
]
|
|
)
|
|
if file.schema == "IFC2X3":
|
|
products_enum[2] = ("IfcSpatialStructureElement", "IfcSpatialStructureElement", "")
|
|
return products_enum
|
|
|
|
|
|
def getIfcClasses(self, context):
|
|
global classes_enum
|
|
file = IfcStore.get_file()
|
|
if len(classes_enum) < 1 and file:
|
|
declaration = IfcStore.get_schema().declaration_by_name(self.ifc_product)
|
|
def get_classes(declaration):
|
|
results = []
|
|
if not declaration.is_abstract():
|
|
results.append(declaration.name())
|
|
for subtype in declaration.subtypes():
|
|
results.extend(get_classes(subtype))
|
|
return results
|
|
classes = get_classes(declaration)
|
|
classes_enum.extend([(c, c, "") for c in sorted(classes)])
|
|
return classes_enum
|
|
|
|
|
|
def getAttributeEnumValues(self, context):
|
|
return [(e, e, "") for e in json.loads(self.enum_items)]
|
|
|
|
|
|
def getProfileDef(self, context):
|
|
global profiledef_enum
|
|
if len(profiledef_enum) < 1:
|
|
profiledef_enum.extend([(e, e, "") for e in getattr(schema.ifc, "IfcParameterizedProfileDef")])
|
|
return profiledef_enum
|
|
|
|
|
|
def getPersons(self, context):
|
|
global persons_enum
|
|
persons_enum.clear()
|
|
persons_enum.extend([(p.name, p.name, "") for p in bpy.context.scene.BIMProperties.people])
|
|
return persons_enum
|
|
|
|
|
|
def getOrganisations(self, context):
|
|
global organisations_enum
|
|
organisations_enum.clear()
|
|
organisations_enum.extend([(o.name, o.name, "") for o in bpy.context.scene.BIMProperties.organisations])
|
|
return organisations_enum
|
|
|
|
|
|
def getIfcPatchRecipes(self, context):
|
|
global ifcpatchrecipes_enum
|
|
if len(ifcpatchrecipes_enum) < 1:
|
|
ifcpatchrecipes_enum.clear()
|
|
for filename in Path(os.path.join(cwd, "..", "libs", "site", "packages", "recipes")).glob("*.py"):
|
|
f = str(filename.stem)
|
|
if f == "__init__":
|
|
continue
|
|
ifcpatchrecipes_enum.append((f, f, ""))
|
|
return ifcpatchrecipes_enum
|
|
|
|
|
|
def getFeaturesFiles(self, context):
|
|
global featuresfiles_enum
|
|
if len(featuresfiles_enum) < 1:
|
|
featuresfiles_enum.clear()
|
|
for filename in Path(context.scene.BIMProperties.features_dir).glob("*.feature"):
|
|
f = str(filename.stem)
|
|
featuresfiles_enum.append((f, f, ""))
|
|
return featuresfiles_enum
|
|
|
|
|
|
def refreshFeaturesFiles(self, context):
|
|
global featuresfiles_enum
|
|
featuresfiles_enum.clear()
|
|
getFeaturesFiles(self, context)
|
|
|
|
|
|
def getTitleblocks(self, context):
|
|
global titleblocks_enum
|
|
if len(titleblocks_enum) < 1:
|
|
titleblocks_enum.clear()
|
|
for filename in Path(os.path.join(context.scene.BIMProperties.data_dir, "templates", "titleblocks")).glob(
|
|
"*.svg"
|
|
):
|
|
f = str(filename.stem)
|
|
titleblocks_enum.append((f, f, ""))
|
|
return titleblocks_enum
|
|
|
|
|
|
def refreshTitleblocks(self, context):
|
|
global titleblocks_enum
|
|
titleblocks_enum.clear()
|
|
getTitleblocks(self, context)
|
|
|
|
|
|
def toggleDecorations(self, context):
|
|
toggle = self.should_draw_decorations
|
|
if toggle:
|
|
decoration.DecorationsHandler.install(context)
|
|
else:
|
|
decoration.DecorationsHandler.uninstall()
|
|
|
|
|
|
@persistent
|
|
def toggleDecorationsOnLoad(*args):
|
|
toggle = bpy.context.scene.DocProperties.should_draw_decorations
|
|
if toggle:
|
|
decoration.DecorationsHandler.install(bpy.context)
|
|
else:
|
|
decoration.DecorationsHandler.uninstall()
|
|
|
|
|
|
def getScenarios(self, context):
|
|
global scenarios_enum
|
|
if len(scenarios_enum) < 1:
|
|
scenarios_enum.clear()
|
|
filename = os.path.join(
|
|
context.scene.BIMProperties.features_dir, context.scene.BIMProperties.features_file + ".feature"
|
|
)
|
|
with open(filename, "r") as feature_file:
|
|
lines = feature_file.readlines()
|
|
for line in lines:
|
|
if "Scenario:" in line:
|
|
s = line.strip()[len("Scenario: ") :]
|
|
scenarios_enum.append((s, s, ""))
|
|
return scenarios_enum
|
|
|
|
|
|
def refreshScenarios(self, context):
|
|
global scenarios_enum
|
|
scenarios_enum.clear()
|
|
getScenarios(self, context)
|
|
|
|
|
|
def getPsetTemplateFiles(self, context):
|
|
global psettemplatefiles_enum
|
|
if len(psettemplatefiles_enum) < 1:
|
|
files = os.listdir(os.path.join(self.data_dir, "pset"))
|
|
psettemplatefiles_enum.extend([(f.replace(".ifc", ""), f.replace(".ifc", ""), "") for f in files])
|
|
return psettemplatefiles_enum
|
|
|
|
|
|
def refreshPropertySetTemplates(self, context):
|
|
global propertysettemplates_enum
|
|
propertysettemplates_enum.clear()
|
|
getPropertySetTemplates(self, context)
|
|
|
|
|
|
def getPropertySetTemplates(self, context):
|
|
global propertysettemplates_enum
|
|
if len(propertysettemplates_enum) < 1:
|
|
ifc.IfcStore.pset_template_path = os.path.join(
|
|
context.scene.BIMProperties.data_dir, "pset", context.scene.BIMProperties.pset_template_files + ".ifc"
|
|
)
|
|
ifc.IfcStore.pset_template_file = ifcopenshell.open(ifc.IfcStore.pset_template_path)
|
|
templates = ifc.IfcStore.pset_template_file.by_type("IfcPropertySetTemplate")
|
|
propertysettemplates_enum.extend([(t.GlobalId, t.Name, "") for t in templates])
|
|
return propertysettemplates_enum
|
|
|
|
|
|
def getClassifications(self, context):
|
|
global classification_enum
|
|
if len(classification_enum) < 1:
|
|
classification_enum.clear()
|
|
files = os.listdir(os.path.join(self.schema_dir, "classifications"))
|
|
classification_enum.extend([(f.replace(".ifc", ""), f.replace(".ifc", ""), "") for f in files])
|
|
return classification_enum
|
|
|
|
|
|
def refreshReferences(self, context):
|
|
context.scene.BIMProperties.classification_references.root = None
|
|
ClassificationView.raw_data = schema.ifc.load_classification(context.scene.BIMProperties.classification)
|
|
context.scene.BIMProperties.classification_references.root = ""
|
|
|
|
|
|
def getPsetNames(self, context):
|
|
global psetnames
|
|
if "/" in context.active_object.name:
|
|
ifc_class = context.active_object.name.split("/")[0]
|
|
if ifc_class not in psetnames:
|
|
psets = schema.ifc.psetqto.get_applicable(ifc_class, pset_only=True)
|
|
psetnames[ifc_class] = [(p.Name, p.Name, "") for p in psets]
|
|
return psetnames[ifc_class]
|
|
return []
|
|
|
|
|
|
def getMaterialPsetNames(self, context):
|
|
global materialpsetnames_enum
|
|
materialpsetnames_enum.clear()
|
|
pset_names = schema.ifc.psetqto.get_applicable_names("IfcMaterial", pset_only=True)
|
|
materialpsetnames_enum.extend([(p, p, "") for p in pset_names])
|
|
return materialpsetnames_enum
|
|
|
|
|
|
def getQtoNames(self, context):
|
|
global qtonames_enum
|
|
qtonames_enum.clear()
|
|
if "/" in context.active_object.name and context.active_object.name.split("/")[0] in schema.ifc.elements:
|
|
qto_names = schema.ifc.psetqto.get_applicable_names(context.active_object.name.split("/")[0], qto_only=True)
|
|
qtonames_enum.extend([(q, q, "") for q in qto_names])
|
|
return qtonames_enum
|
|
|
|
|
|
def getApplicableMaterialAttributes(self, context):
|
|
global materialattributes_enum
|
|
materialattributes_enum.clear()
|
|
if "/" in context.active_object.name:
|
|
ifc_schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(bpy.context.scene.BIMProperties.export_schema)
|
|
entity = ifc_schema.declaration_by_name("IfcMaterial")
|
|
materialattributes_enum.extend(
|
|
[(a.name(), a.name(), "") for a in entity.all_attributes() if self.attributes.find(a.name()) == -1]
|
|
)
|
|
return materialattributes_enum
|
|
|
|
|
|
def refreshProfileAttributes(self, context):
|
|
if not context.active_object:
|
|
return
|
|
props = context.active_object.BIMObjectProperties
|
|
profile = props.material_set.material_profiles[props.material_set.active_material_profile_index]
|
|
while len(profile.profile_attributes) > 0:
|
|
profile.profile_attributes.remove(0)
|
|
for attribute in schema.ifc.IfcParameterizedProfileDef[profile.profile]["attributes"]:
|
|
profile_attribute = profile.profile_attributes.add()
|
|
profile_attribute.name = attribute["name"]
|
|
|
|
|
|
def getMaterialTypes(self, context):
|
|
global materialtypes_enum
|
|
materialtypes_enum.clear()
|
|
materialtypes_enum = [
|
|
(m, m, "") for m in ["None", "IfcMaterial", "IfcMaterialConstituentSet", "IfcMaterialLayerSet", "IfcMaterialProfileSet"]
|
|
]
|
|
return materialtypes_enum
|
|
|
|
|
|
def getContexts(self, context):
|
|
from blenderbim.bim.module.context.data import Data
|
|
if not Data.is_loaded:
|
|
Data.load()
|
|
results = []
|
|
for ifc_id, context in Data.contexts.items():
|
|
results.append((str(ifc_id), context["ContextType"], ""))
|
|
for ifc_id2, subcontext in context["HasSubContexts"].items():
|
|
results.append((str(ifc_id2), "{}/{}/{}".format(
|
|
subcontext["ContextType"], subcontext["ContextIdentifier"], subcontext["TargetView"]), ""))
|
|
return results
|
|
|
|
|
|
def getSubcontexts(self, context):
|
|
global subcontexts_enum
|
|
subcontexts_enum.clear()
|
|
# TODO: allow override of generated subcontexts?
|
|
subcontexts = export_ifc.IfcExportSettings().subcontexts
|
|
for subcontext in subcontexts:
|
|
subcontexts_enum.append((subcontext, subcontext, ""))
|
|
return subcontexts_enum
|
|
|
|
|
|
def getTargetViews(self, context):
|
|
global target_views_enum
|
|
target_views_enum.clear()
|
|
for target_view in export_ifc.IfcExportSettings().target_views:
|
|
target_views_enum.append((target_view, target_view, ""))
|
|
return target_views_enum
|
|
|
|
|
|
def getVectorStyles(self, context):
|
|
global vector_styles_enum
|
|
if len(vector_styles_enum) < 1:
|
|
sheets_enum.clear()
|
|
for filename in Path(os.path.join(context.scene.BIMProperties.data_dir, "styles")).glob("*.css"):
|
|
f = str(filename.stem)
|
|
vector_styles_enum.append((f, f, ""))
|
|
return vector_styles_enum
|
|
|
|
|
|
def refreshFontSize(self, context):
|
|
annotation.Annotator.resize_text(context.active_object)
|
|
|
|
|
|
class StrProperty(PropertyGroup):
|
|
pass
|
|
|
|
|
|
class Variable(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
prop_key: StringProperty(name="Property Key")
|
|
|
|
|
|
class Attribute(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
data_type: StringProperty(name="Data Type")
|
|
string_value: StringProperty(name="Value")
|
|
bool_value: BoolProperty(name="Value")
|
|
int_value: IntProperty(name="Value")
|
|
float_value: FloatProperty(name="Value")
|
|
is_null: BoolProperty(name="Is Null")
|
|
enum_items: StringProperty(name="Value")
|
|
enum_value: EnumProperty(items=getAttributeEnumValues, name="Value")
|
|
|
|
|
|
class MaterialLayer(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
material: PointerProperty(name="Material", type=bpy.types.Material)
|
|
layer_thickness: FloatProperty(name="Layer Thickness")
|
|
is_ventilated: EnumProperty(
|
|
items=[
|
|
("TRUE", "True", "Is an air gap and provides air exchange from the layer to outside air"),
|
|
("FALSE", "False", "Is a solid material layer"),
|
|
("UNKNOWN", "Unknown", "Is an air gap but does not provide air exchange or not known"),
|
|
],
|
|
name="Is Ventilated",
|
|
default="FALSE",
|
|
)
|
|
description: StringProperty(name="Description")
|
|
category: EnumProperty(
|
|
items=[
|
|
("None", "None", ""),
|
|
("LoadBearing", "Load Bearing", ""),
|
|
("Insulation", "Insulation", ""),
|
|
("Finish", "Finish", ""),
|
|
("Custom", "Custom", ""),
|
|
],
|
|
name="Category",
|
|
default="None",
|
|
)
|
|
custom_category: StringProperty(name="Custom Category")
|
|
priority: IntProperty(name="Priority")
|
|
|
|
|
|
class MaterialConstituent(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
material: PointerProperty(name="Material", type=bpy.types.Material)
|
|
fraction: FloatProperty(name="Fraction")
|
|
category: StringProperty(name="Category")
|
|
|
|
|
|
class MaterialProfile(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
material: PointerProperty(name="Material", type=bpy.types.Material)
|
|
profile: EnumProperty(items=getProfileDef, name="Parameterized Profile Def", update=refreshProfileAttributes)
|
|
profile_attributes: CollectionProperty(name="Profile Attributes", type=Attribute)
|
|
priority: IntProperty(name="Priority")
|
|
category: StringProperty(name="Category")
|
|
|
|
|
|
class MaterialSet(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
active_material_layer_index: IntProperty(name="Active Material Layer Index")
|
|
material_layers: CollectionProperty(name="Material Layers", type=MaterialLayer)
|
|
active_material_constituent_index: IntProperty(name="Active Material Constituent Index")
|
|
material_constituents: CollectionProperty(name="Material Constituents", type=MaterialConstituent)
|
|
active_material_profile_index: IntProperty(name="Active Material Profile Index")
|
|
material_profiles: CollectionProperty(name="Material Profiles", type=MaterialProfile)
|
|
|
|
|
|
class Drawing(PropertyGroup):
|
|
name: StringProperty(name="Name", update=updateDrawingName)
|
|
camera: PointerProperty(name="Camera", type=bpy.types.Object)
|
|
|
|
|
|
class Schedule(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
file: StringProperty(name="File")
|
|
|
|
|
|
class Sheet(PropertyGroup):
|
|
def set_name(self, new):
|
|
old = self.get("name")
|
|
path = os.path.join(bpy.context.scene.BIMProperties.data_dir, "sheets")
|
|
if old and os.path.isfile(os.path.join(path, old + ".svg")):
|
|
os.rename(os.path.join(path, old + ".svg"), os.path.join(path, new + ".svg"))
|
|
self["name"] = new
|
|
|
|
def get_name(self):
|
|
return self.get("name")
|
|
|
|
name: StringProperty(name="Name", get=get_name, set=set_name)
|
|
drawings: CollectionProperty(name="Drawings", type=Drawing)
|
|
active_drawing_index: IntProperty(name="Active Drawing Index")
|
|
|
|
|
|
class DrawingStyle(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
raster_style: StringProperty(name="Raster Style")
|
|
render_type: EnumProperty(
|
|
items=[("NONE", "None", ""), ("DEFAULT", "Default", ""), ("VIEWPORT", "Viewport", ""),],
|
|
name="Render Type",
|
|
default="VIEWPORT",
|
|
)
|
|
vector_style: EnumProperty(items=getVectorStyles, name="Vector Style")
|
|
include_query: StringProperty(name="Include Query")
|
|
exclude_query: StringProperty(name="Exclude Query")
|
|
attributes: CollectionProperty(name="Attributes", type=StrProperty)
|
|
|
|
|
|
class DocProperties(PropertyGroup):
|
|
should_recut: BoolProperty(name="Should Recut", default=True)
|
|
should_recut_selected: BoolProperty(name="Should Recut Selected Only", default=False)
|
|
should_extract: BoolProperty(name="Should Extract", default=True)
|
|
drawings: CollectionProperty(name="Drawings", type=Drawing)
|
|
active_drawing_index: IntProperty(name="Active Drawing Index", update=refreshActiveDrawingIndex)
|
|
current_drawing_index: IntProperty(name="Current Drawing Index")
|
|
schedules: CollectionProperty(name="Schedules", type=Schedule)
|
|
active_schedule_index: IntProperty(name="Active Schedule Index")
|
|
titleblock: EnumProperty(items=getTitleblocks, name="Titleblock", update=refreshTitleblocks)
|
|
sheets: CollectionProperty(name="Sheets", type=Sheet)
|
|
active_sheet_index: IntProperty(name="Active Sheet Index")
|
|
ifc_files: CollectionProperty(name="IFCs", type=StrProperty)
|
|
drawing_styles: CollectionProperty(name="Drawing Styles", type=DrawingStyle)
|
|
should_draw_decorations: BoolProperty(name="Should Draw Decorations", update=toggleDecorations)
|
|
decorations_colour: FloatVectorProperty(name="Decorations Colour", subtype="COLOR", default=(1, 0, 0, 1),
|
|
min=0.0, max=1.0, size=4)
|
|
|
|
|
|
class BIMCameraProperties(PropertyGroup):
|
|
view_name: StringProperty(name="View Name")
|
|
target_view: EnumProperty(
|
|
items=[
|
|
("PLAN_VIEW", "PLAN_VIEW", ""),
|
|
("ELEVATION_VIEW", "ELEVATION_VIEW", ""),
|
|
("SECTION_VIEW", "SECTION_VIEW", ""),
|
|
("REFLECTED_PLAN_VIEW", "REFLECTED_PLAN_VIEW", ""),
|
|
("MODEL_VIEW", "MODEL_VIEW", ""),
|
|
],
|
|
name="Target View",
|
|
default="PLAN_VIEW",
|
|
)
|
|
diagram_scale: EnumProperty(items=getDiagramScales, name="Drawing Scale")
|
|
custom_diagram_scale: StringProperty(name="Custom Scale")
|
|
raster_x: IntProperty(name="Raster X", default=1000)
|
|
raster_y: IntProperty(name="Raster Y", default=1000)
|
|
is_nts: BoolProperty(name="Is NTS")
|
|
cut_objects: EnumProperty(
|
|
items=[
|
|
(
|
|
".IfcWall|.IfcSlab|.IfcCurtainWall|.IfcStair|.IfcStairFlight|.IfcColumn|.IfcBeam|.IfcMember|.IfcCovering|.IfcSpace",
|
|
"Overall Plan / Section",
|
|
"",
|
|
),
|
|
(".IfcElement", "Detail Drawing", ""),
|
|
("CUSTOM", "Custom", ""),
|
|
],
|
|
name="Cut Objects",
|
|
)
|
|
cut_objects_custom: StringProperty(name="Custom Cut")
|
|
active_drawing_style_index: IntProperty(name="Active Drawing Style Index")
|
|
|
|
|
|
class BIMTextProperties(PropertyGroup):
|
|
font_size: EnumProperty(
|
|
items=[
|
|
("1.8", "1.8 - Small", ""),
|
|
("2.5", "2.5 - Regular", ""),
|
|
("3.5", "3.5 - Large", ""),
|
|
("5.0", "5.0 - Header", ""),
|
|
("7.0", "7.0 - Title", ""),
|
|
],
|
|
update=refreshFontSize,
|
|
name="Font Size",
|
|
)
|
|
symbol: EnumProperty(
|
|
items=[("None", "None", ""), ("rectangle-tag", "Rectangle Tag", ""), ("door-tag", "Door Tag", ""),],
|
|
update=refreshFontSize,
|
|
name="Symbol",
|
|
)
|
|
related_element: PointerProperty(name="Related Element", type=bpy.types.Object)
|
|
variables: CollectionProperty(name="Variables", type=Variable)
|
|
|
|
|
|
class DocumentInformation(PropertyGroup):
|
|
name: StringProperty(name="Identification")
|
|
human_name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
location: StringProperty(name="Location")
|
|
purpose: StringProperty(name="Purpose")
|
|
intended_use: StringProperty(name="Intended Use")
|
|
scope: StringProperty(name="Scope")
|
|
revision: StringProperty(name="Revision")
|
|
document_owner: StringProperty(name="Owner")
|
|
editors: StringProperty(name="Editors")
|
|
creation_time: StringProperty(name="Created On")
|
|
last_revision_time: StringProperty(name="Last Revised")
|
|
electronic_format: StringProperty(name="Format")
|
|
valid_from: StringProperty(name="Valid From")
|
|
valid_until: StringProperty(name="Valid Until")
|
|
confidentiality: EnumProperty(
|
|
items=[
|
|
("NOTDEFINED", "NOTDEFINED", "Not defined."),
|
|
("PUBLIC", "PUBLIC", "Document is publicly available."),
|
|
("RESTRICTED", "RESTRICTED", "Document availability is restricted."),
|
|
(
|
|
"CONFIDENTIAL",
|
|
"CONFIDENTIAL",
|
|
"Document is confidential and its contents should not be revealed without permission.",
|
|
),
|
|
("PERSONAL", "PERSONAL", "Document is personal to the author."),
|
|
("USERDEFINED", "USERDEFINED", "Describe confidentiality elsewhere."),
|
|
],
|
|
name="Confidentiality",
|
|
)
|
|
status: EnumProperty(
|
|
items=[
|
|
("NOTDEFINED", "NOTDEFINED", "Not defined"),
|
|
("DRAFT", "DRAFT", "Document is a draft."),
|
|
("FINALDRAFT", "FINALDRAFT", "Document is a final draft."),
|
|
("FINAL", "FINAL", "Document is final."),
|
|
("REVISION", "REVISION", "Document has undergone revision."),
|
|
],
|
|
name="Status",
|
|
)
|
|
|
|
|
|
class DocumentReference(PropertyGroup):
|
|
location: StringProperty(name="Location")
|
|
name: StringProperty(name="Identification")
|
|
human_name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
referenced_document: StringProperty(name="Referenced Document")
|
|
|
|
|
|
class ClashSource(PropertyGroup):
|
|
name: StringProperty(name="File")
|
|
selector: StringProperty(name="Selector")
|
|
mode: EnumProperty(
|
|
items=[
|
|
("i", "Include", "Only the selected objects are included for clashing"),
|
|
("e", "Exclude", "All objects except the selected objects are included for clashing"),
|
|
],
|
|
name="Mode",
|
|
)
|
|
|
|
|
|
class ClashSet(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
tolerance: FloatProperty(name="Tolerance")
|
|
a: CollectionProperty(name="Group A", type=ClashSource)
|
|
b: CollectionProperty(name="Group B", type=ClashSource)
|
|
|
|
|
|
class PresentationLayer(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
identifier: StringProperty(name="Identifier")
|
|
layer_on: BoolProperty(name="LayerOn", default=True)
|
|
layer_frozen: BoolProperty(name="LayerFrozen", default=False)
|
|
layer_blocked: BoolProperty(name="LayerBlocked", default=False)
|
|
|
|
class SmartClashGroup(PropertyGroup):
|
|
number: StringProperty(name="Number")
|
|
global_ids: CollectionProperty(name="GlobalIDs", type=StrProperty)
|
|
|
|
|
|
class Constraint(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
constraint_grade: EnumProperty(
|
|
items=[
|
|
(
|
|
"HARD",
|
|
"HARD",
|
|
"Qualifies a constraint such that it must be followed rigidly within or at the values set.",
|
|
),
|
|
("SOFT", "SOFT", "Qualifies a constraint such that it should be followed within or at the values set."),
|
|
(
|
|
"ADVISORY",
|
|
"ADVISORY",
|
|
"Qualifies a constraint such that it is advised that it is followed within or at the values set.",
|
|
),
|
|
(
|
|
"USERDEFINED",
|
|
"USERDEFINED",
|
|
"A user-defined grade indicated by a separate attribute at the referencing entity.",
|
|
),
|
|
("NOTDEFINED", "NOTDEFINED", "Grade has not been specified."),
|
|
],
|
|
name="Grade",
|
|
)
|
|
constraint_source: StringProperty(name="Source")
|
|
user_defined_grade: StringProperty(name="Custom Grade")
|
|
objective_qualifier: EnumProperty(
|
|
items=[
|
|
(
|
|
"CODECOMPLIANCE",
|
|
"CODECOMPLIANCE",
|
|
"A constraint whose objective is to ensure satisfaction of a code compliance provision.",
|
|
),
|
|
(
|
|
"CODEWAIVER",
|
|
"CODEWAIVER",
|
|
"A constraint whose objective is to identify an agreement that code compliance requirements (the waiver) will not be enforced.",
|
|
),
|
|
(
|
|
"DESIGNINTENT",
|
|
"DESIGNINTENT",
|
|
"A constraint whose objective is to ensure satisfaction of a design intent provision.",
|
|
),
|
|
(
|
|
"EXTERNAL",
|
|
"EXTERNAL",
|
|
"A constraint whose objective is to synchronize data with an external source such as a file",
|
|
),
|
|
(
|
|
"HEALTHANDSAFETY",
|
|
"HEALTHANDSAFETY",
|
|
"A constraint whose objective is to ensure satisfaction of a health and safety provision.",
|
|
),
|
|
(
|
|
"MERGECONFLICT",
|
|
"MERGECONFLICT",
|
|
"A constraint whose objective is to resolve a conflict such as merging data from multiple sources.",
|
|
),
|
|
(
|
|
"MODELVIEW",
|
|
"MODELVIEW",
|
|
"A constraint whose objective is to ensure data conforms to a model view definition.",
|
|
),
|
|
(
|
|
"PARAMETER",
|
|
"PARAMETER",
|
|
"A constraint whose objective is to calculate a value based on other referenced values.",
|
|
),
|
|
(
|
|
"REQUIREMENT",
|
|
"REQUIREMENT",
|
|
"A constraint whose objective is to ensure satisfaction of a project requirement provision.",
|
|
),
|
|
(
|
|
"SPECIFICATION",
|
|
"SPECIFICATION",
|
|
"A constraint whose objective is to ensure satisfaction of a specification provision.",
|
|
),
|
|
(
|
|
"TRIGGERCONDITION",
|
|
"TRIGGERCONDITION",
|
|
"A constraint whose objective is to indicate a limiting value beyond which the condition of an object requires a particular form of attention.",
|
|
),
|
|
("USERDEFINED", "USERDEFINED", ""),
|
|
("NOTDEFINED", "NOTDEFINED", ""),
|
|
],
|
|
name="Qualifier",
|
|
)
|
|
user_defined_qualifier: StringProperty(name="Custom Qualifier")
|
|
|
|
|
|
class PropertySetTemplate(PropertyGroup):
|
|
global_id: StringProperty(name="Global ID")
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
template_type: EnumProperty(
|
|
items=[
|
|
(
|
|
"PSET_TYPEDRIVENONLY",
|
|
"Pset - IfcTypeObject",
|
|
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
|
|
),
|
|
(
|
|
"PSET_TYPEDRIVENOVERRIDE",
|
|
"Pset - IfcTypeObject - Override",
|
|
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
|
|
),
|
|
(
|
|
"PSET_OCCURRENCEDRIVEN",
|
|
"Pset - IfcObject",
|
|
"The property sets defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcObject.",
|
|
),
|
|
(
|
|
"PSET_PERFORMANCEDRIVEN",
|
|
"Pset - IfcPerformanceHistory",
|
|
"The property sets defined by this IfcPropertySetTemplate can only be assigned to IfcPerformanceHistory.",
|
|
),
|
|
(
|
|
"QTO_TYPEDRIVENONLY",
|
|
"Qto - IfcTypeObject",
|
|
"The element quantity defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcTypeObject.",
|
|
),
|
|
(
|
|
"QTO_TYPEDRIVENOVERRIDE",
|
|
"Qto - IfcTypeObject - Override",
|
|
"The element quantity defined by this IfcPropertySetTemplate can be assigned to subtypes of IfcTypeObject and can be overridden by an element quantity with same name at subtypes of IfcObject.",
|
|
),
|
|
(
|
|
"QTO_OCCURRENCEDRIVEN",
|
|
"Qto - IfcObject",
|
|
"The element quantity defined by this IfcPropertySetTemplate can only be assigned to subtypes of IfcObject.",
|
|
),
|
|
(
|
|
"NOTDEFINED",
|
|
"Not defined",
|
|
"No restriction provided, the property sets defined by this IfcPropertySetTemplate can be assigned to any entity, if not otherwise restricted by the ApplicableEntity attribute.",
|
|
),
|
|
],
|
|
name="Template Type",
|
|
)
|
|
applicable_entity: StringProperty(name="Applicable Entity")
|
|
|
|
|
|
class PropertyTemplate(PropertyGroup):
|
|
global_id: StringProperty(name="Global ID")
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
primary_measure_type: EnumProperty(
|
|
items=[
|
|
(x, x, "")
|
|
for x in [
|
|
"IfcInteger",
|
|
"IfcReal",
|
|
"IfcBoolean",
|
|
"IfcIdentifier",
|
|
"IfcText",
|
|
"IfcLabel",
|
|
"IfcLogical",
|
|
"IfcDateTime",
|
|
"IfcDate",
|
|
"IfcTime",
|
|
"IfcDuration",
|
|
"IfcTimeStamp",
|
|
"IfcPositiveInteger",
|
|
"IfcBinary",
|
|
"IfcVolumeMeasure",
|
|
"IfcTimeMeasure",
|
|
"IfcThermodynamicTemperatureMeasure",
|
|
"IfcSolidAngleMeasure",
|
|
"IfcPositiveRatioMeasure",
|
|
"IfcRatioMeasure",
|
|
"IfcPositivePlaneAngleMeasure",
|
|
"IfcPlaneAngleMeasure",
|
|
"IfcParameterValue",
|
|
"IfcNumericMeasure",
|
|
"IfcMassMeasure",
|
|
"IfcPositiveLengthMeasure",
|
|
"IfcLengthMeasure",
|
|
"IfcElectricCurrentMeasure",
|
|
"IfcDescriptiveMeasure",
|
|
"IfcCountMeasure",
|
|
"IfcContextDependentMeasure",
|
|
"IfcAreaMeasure",
|
|
"IfcAmountOfSubstanceMeasure",
|
|
"IfcLuminousIntensityMeasure",
|
|
"IfcNormalisedRatioMeasure",
|
|
"IfcComplexNumber",
|
|
"IfcNonNegativeLengthMeasure",
|
|
"IfcAbsorbedDoseMeasure",
|
|
"IfcAccelerationMeasure",
|
|
"IfcAngularVelocityMeasure",
|
|
"IfcAreaDensityMeasure",
|
|
"IfcCompoundPlaneAngleMeasure",
|
|
"IfcCurvatureMeasure",
|
|
"IfcDoseEquivalentMeasure",
|
|
"IfcDynamicViscosityMeasure",
|
|
"IfcElectricCapacitanceMeasure",
|
|
"IfcElectricChargeMeasure",
|
|
"IfcElectricConductanceMeasure",
|
|
"IfcElectricResistanceMeasure",
|
|
"IfcElectricVoltageMeasure",
|
|
"IfcEnergyMeasure",
|
|
"IfcForceMeasure",
|
|
"IfcFrequencyMeasure",
|
|
"IfcHeatFluxDensityMeasure",
|
|
"IfcHeatingValueMeasure",
|
|
"IfcIlluminanceMeasure",
|
|
"IfcInductanceMeasure",
|
|
"IfcIntegerCountRateMeasure",
|
|
"IfcIonConcentrationMeasure",
|
|
"IfcIsothermalMoistureCapacityMeasure",
|
|
"IfcKinematicViscosityMeasure",
|
|
"IfcLinearForceMeasure",
|
|
"IfcLinearMomentMeasure",
|
|
"IfcLinearStiffnessMeasure",
|
|
"IfcLinearVelocityMeasure",
|
|
"IfcLuminousFluxMeasure",
|
|
"IfcLuminousIntensityDistributionMeasure",
|
|
"IfcMagneticFluxDensityMeasure",
|
|
"IfcMagneticFluxMeasure",
|
|
"IfcMassDensityMeasure",
|
|
"IfcMassFlowRateMeasure",
|
|
"IfcMassPerLengthMeasure",
|
|
"IfcModulusOfElasticityMeasure",
|
|
"IfcModulusOfLinearSubgradeReactionMeasure",
|
|
"IfcModulusOfRotationalSubgradeReactionMeasure",
|
|
"IfcModulusOfSubgradeReactionMeasure",
|
|
"IfcMoistureDiffusivityMeasure",
|
|
"IfcMolecularWeightMeasure",
|
|
"IfcMomentOfInertiaMeasure",
|
|
"IfcMonetaryMeasure",
|
|
"IfcPHMeasure",
|
|
"IfcPlanarForceMeasure",
|
|
"IfcPowerMeasure",
|
|
"IfcPressureMeasure",
|
|
"IfcRadioActivityMeasure",
|
|
"IfcRotationalFrequencyMeasure",
|
|
"IfcRotationalMassMeasure",
|
|
"IfcRotationalStiffnessMeasure",
|
|
"IfcSectionModulusMeasure",
|
|
"IfcSectionalAreaIntegralMeasure",
|
|
"IfcShearModulusMeasure",
|
|
"IfcSoundPowerLevelMeasure",
|
|
"IfcSoundPowerMeasure",
|
|
"IfcSoundPressureLevelMeasure",
|
|
"IfcSoundPressureMeasure",
|
|
"IfcSpecificHeatCapacityMeasure",
|
|
"IfcTemperatureGradientMeasure",
|
|
"IfcTemperatureRateOfChangeMeasure",
|
|
"IfcThermalAdmittanceMeasure",
|
|
"IfcThermalConductivityMeasure",
|
|
"IfcThermalExpansionCoefficientMeasure",
|
|
"IfcThermalResistanceMeasure",
|
|
"IfcThermalTransmittanceMeasure",
|
|
"IfcTorqueMeasure",
|
|
"IfcVaporPermeabilityMeasure",
|
|
"IfcVolumetricFlowRateMeasure",
|
|
"IfcWarpingConstantMeasure",
|
|
"IfcWarpingMomentMeasure",
|
|
]
|
|
],
|
|
name="Primary Measure Type",
|
|
)
|
|
|
|
|
|
class Address(PropertyGroup):
|
|
name: StringProperty(name="Name", default="IfcPostalAddress") # Stores IfcPostalAddress or IfcTelecomAddress
|
|
purpose: EnumProperty(
|
|
items=[
|
|
("OFFICE", "OFFICE", "An office address."),
|
|
("SITE", "SITE", "A site address."),
|
|
("HOME", "HOME", "A home address."),
|
|
("DISTRIBUTIONPOINT", "DISTRIBUTIONPOINT", "A postal distribution point address."),
|
|
("USERDEFINED", "USERDEFINED", "A user defined address type to be provided."),
|
|
],
|
|
name="Purpose",
|
|
)
|
|
description: StringProperty(name="Description")
|
|
user_defined_purpose: StringProperty(name="Custom Purpose")
|
|
|
|
internal_location: StringProperty(name="Internal Location")
|
|
address_lines: StringProperty(name="Address")
|
|
postal_box: StringProperty(name="Postal Box")
|
|
town: StringProperty(name="Town")
|
|
region: StringProperty(name="Region")
|
|
postal_code: StringProperty(name="Postal Code")
|
|
country: StringProperty(name="Country")
|
|
|
|
telephone_numbers: StringProperty(name="Telephone Numbers")
|
|
fascimile_numbers: StringProperty(name="Fascimile Numbers")
|
|
pager_number: StringProperty(name="Pager Number")
|
|
electronic_mail_addresses: StringProperty(name="Emails")
|
|
www_home_page_url: StringProperty(name="Websites")
|
|
messaging_ids: StringProperty(name="IMs")
|
|
|
|
|
|
class Role(PropertyGroup):
|
|
name: EnumProperty(
|
|
items=[
|
|
("SUPPLIER", "SUPPLIER", ""),
|
|
("MANUFACTURER", "MANUFACTURER", ""),
|
|
("CONTRACTOR", "CONTRACTOR", ""),
|
|
("SUBCONTRACTOR", "SUBCONTRACTOR", ""),
|
|
("ARCHITECT", "ARCHITECT", ""),
|
|
("STRUCTURALENGINEER", "STRUCTURALENGINEER", ""),
|
|
("COSTENGINEER", "COSTENGINEER", ""),
|
|
("CLIENT", "CLIENT", ""),
|
|
("BUILDINGOWNER", "BUILDINGOWNER", ""),
|
|
("BUILDINGOPERATOR", "BUILDINGOPERATOR", ""),
|
|
("MECHANICALENGINEER", "MECHANICALENGINEER", ""),
|
|
("ELECTRICALENGINEER", "ELECTRICALENGINEER", ""),
|
|
("PROJECTMANAGER", "PROJECTMANAGER", ""),
|
|
("FACILITIESMANAGER", "FACILITIESMANAGER", ""),
|
|
("CIVILENGINEER", "CIVILENGINEER", ""),
|
|
("COMMISSIONINGENGINEER", "COMMISSIONINGENGINEER", ""),
|
|
("ENGINEER", "ENGINEER", ""),
|
|
("OWNER", "OWNER", ""),
|
|
("CONSULTANT", "CONSULTANT", ""),
|
|
("CONSTRUCTIONMANAGER", "CONSTRUCTIONMANAGER", ""),
|
|
("FIELDCONSTRUCTIONMANAGER", "FIELDCONSTRUCTIONMANAGER", ""),
|
|
("RESELLER", "RESELLER", ""),
|
|
("USERDEFINED", "USERDEFINED", ""),
|
|
],
|
|
name="Name",
|
|
)
|
|
user_defined_role: StringProperty(name="Custom Role")
|
|
description: StringProperty(name="Description")
|
|
|
|
|
|
class Organisation(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
roles: CollectionProperty(name="Roles", type=Role)
|
|
active_role_index: bpy.props.IntProperty()
|
|
addresses: CollectionProperty(name="Addresses", type=Address)
|
|
active_address_index: bpy.props.IntProperty()
|
|
|
|
|
|
class Person(PropertyGroup):
|
|
name: StringProperty(name="Identification")
|
|
family_name: StringProperty(name="Family Name")
|
|
given_name: StringProperty(name="Given Name")
|
|
middle_names: StringProperty(name="Middle Names")
|
|
prefix_titles: StringProperty(name="Prefixes")
|
|
suffix_titles: StringProperty(name="Suffixes")
|
|
roles: CollectionProperty(name="Roles", type=Role)
|
|
active_role_index: bpy.props.IntProperty()
|
|
addresses: CollectionProperty(name="Addresses", type=Address)
|
|
active_address_index: bpy.props.IntProperty()
|
|
|
|
|
|
class Classification(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
source: StringProperty(name="Source")
|
|
edition: StringProperty(name="Edition")
|
|
edition_date: StringProperty(name="Edition Date")
|
|
description: StringProperty(name="Description")
|
|
location: StringProperty(name="Location")
|
|
reference_tokens: StringProperty(name="Reference Tokens")
|
|
data: StringProperty(name="Data")
|
|
|
|
|
|
class ClassificationReference(PropertyGroup):
|
|
name: StringProperty(name="Identification")
|
|
location: StringProperty(name="Location")
|
|
human_name: StringProperty(name="Name")
|
|
referenced_source: StringProperty(name="Source")
|
|
description: StringProperty(name="Description")
|
|
sort: StringProperty(name="Sort")
|
|
|
|
|
|
class ClassificationView(PropertyGroup):
|
|
crumbs: None
|
|
children: None
|
|
active_index: bpy.props.IntProperty()
|
|
raw_data = {}
|
|
|
|
@property
|
|
def root(self):
|
|
data = self.raw_data
|
|
for crumb in self.crumbs:
|
|
data = data["children"].get(crumb.name)
|
|
if not data:
|
|
raise TypeError("Cannot resolve crumb path")
|
|
return data
|
|
|
|
@root.setter
|
|
def root(self, rt):
|
|
if rt == None:
|
|
self.crumbs.clear()
|
|
self.children.clear()
|
|
elif rt == "":
|
|
if self.crumbs:
|
|
self.crumbs.remove(len(self.crumbs) - 1)
|
|
self.children.clear()
|
|
for child in self.root["children"].keys():
|
|
self.children.add().name = child
|
|
else:
|
|
data = self.root
|
|
if rt in data["children"].keys():
|
|
self.crumbs.add().name = rt
|
|
self.children.clear()
|
|
for child in data["children"][rt]["children"].keys():
|
|
self.children.add().name = child
|
|
|
|
def draw_stub(self, context, layout):
|
|
if not self.children:
|
|
op = layout.operator("bim.change_classification_level", text="@Toplevel")
|
|
else:
|
|
op = layout.operator("bim.change_classification_level", text=self.root["name"])
|
|
op.path_sid = "%r" % self.id_data
|
|
op.path_lst = self.path_from_id()
|
|
op.path_itm = ""
|
|
layout.template_list("BIM_UL_classifications", self.path_from_id(), self, "children", self, "active_index")
|
|
|
|
|
|
# Monkey-patched, just to keep registration in one block
|
|
ClassificationView.__annotations__["crumbs"] = bpy.props.CollectionProperty(type=StrProperty)
|
|
ClassificationView.__annotations__["children"] = bpy.props.CollectionProperty(type=StrProperty)
|
|
|
|
|
|
class BIMProperties(PropertyGroup):
|
|
schema_dir: StringProperty(default=os.path.join(cwd, "schema") + os.path.sep, name="Schema Directory")
|
|
data_dir: StringProperty(default=os.path.join(cwd, "data") + os.path.sep, name="Data Directory")
|
|
ifc_file: StringProperty(name="IFC File")
|
|
ifc_cache: StringProperty(name="IFC Cache")
|
|
audit_ifc_class: EnumProperty(items=getIfcClasses, name="Audit Class")
|
|
ifc_product: EnumProperty(items=getIfcProducts, name="Products", update=refreshClasses)
|
|
ifc_class: EnumProperty(items=getIfcClasses, name="Class", update=refreshPredefinedTypes)
|
|
ifc_predefined_type: EnumProperty(items=getIfcPredefinedTypes, name="Predefined Type", default=None)
|
|
ifc_userdefined_type: StringProperty(name="Userdefined Type")
|
|
export_schema: EnumProperty(items=[("IFC4", "IFC4", ""), ("IFC2X3", "IFC2X3", "")], name="IFC Schema")
|
|
export_json_version: EnumProperty(items=[("4", "4", ""), ("5a", "5a", "")], name="IFC JSON Version")
|
|
export_json_compact: BoolProperty(name="Export Compact IFCJSON", default=False)
|
|
export_has_representations: BoolProperty(name="Export Representations", default=True)
|
|
export_should_guess_quantities: BoolProperty(name="Export with Guessed Quantities", default=False)
|
|
export_should_use_presentation_style_assignment: BoolProperty(
|
|
name="Export with Presentation Style Assignment", default=False
|
|
)
|
|
export_should_force_faceted_brep: BoolProperty(name="Export with Faceted Breps", default=False)
|
|
export_should_force_triangulation: BoolProperty(name="Export with Triangulation", default=False)
|
|
export_should_export_from_memory: BoolProperty(name="Export from Memory", default=True)
|
|
import_should_ignore_site_coordinates: BoolProperty(name="Import Ignoring Site Coordinates", default=False)
|
|
import_should_ignore_building_coordinates: BoolProperty(name="Import Ignoring Building Coordinates", default=False)
|
|
import_should_reset_absolute_coordinates: BoolProperty(name="Import Resetting Absolute Coordinates", default=False)
|
|
import_should_guess_georeferencing: BoolProperty(name="Import Guessing Georeferencing", default=False)
|
|
import_should_import_type_representations: BoolProperty(name="Import Type Representations", default=False)
|
|
import_should_import_curves: BoolProperty(name="Import Curves", default=False)
|
|
import_should_import_opening_elements: BoolProperty(name="Import Opening Elements", default=False)
|
|
import_should_import_spaces: BoolProperty(name="Import Spaces", default=False)
|
|
import_should_auto_set_workarounds: BoolProperty(name="Automatically Set Vendor Workarounds", default=True)
|
|
import_should_use_legacy: BoolProperty(name="Import with Legacy Importer", default=False)
|
|
import_should_import_native: BoolProperty(name="Import Native Representations", default=False)
|
|
import_export_should_roundtrip_native: BoolProperty(name="Roundtrip Native Representations", default=True)
|
|
import_should_use_cpu_multiprocessing: BoolProperty(name="Import with CPU Multiprocessing", default=True)
|
|
import_should_import_with_profiling: BoolProperty(name="Import with Profiling", default=True)
|
|
import_should_import_aggregates: BoolProperty(name="Import Aggregates", default=True)
|
|
import_should_merge_aggregates: BoolProperty(name="Import and Merge Aggregates", default=False)
|
|
import_should_merge_by_class: BoolProperty(name="Import and Merge by Class", default=False)
|
|
import_should_merge_by_material: BoolProperty(name="Import and Merge by Material", default=False)
|
|
import_should_merge_materials_by_colour: BoolProperty(name="Import and Merge Materials by Colour", default=False)
|
|
import_should_clean_mesh: BoolProperty(name="Import and Clean Mesh", default=True)
|
|
import_deflection_tolerance: FloatProperty(name="Import Deflection Tolerance", default=0.001)
|
|
import_angular_tolerance: FloatProperty(name="Import Angular Tolerance", default=0.5)
|
|
import_should_allow_non_element_aggregates: BoolProperty(name="Import Non-Element Aggregates", default=False)
|
|
import_should_offset_model: BoolProperty(name="Import and Offset Model", default=False)
|
|
import_model_offset_coordinates: StringProperty(name="Model Offset Coordinates", default="0,0,0")
|
|
qa_reject_element_reason: StringProperty(name="Element Rejection Reason")
|
|
person: PointerProperty(type=Person)
|
|
organisation: EnumProperty(items=getOrganisations, name="Organisation")
|
|
people: CollectionProperty(name="People", type=Person)
|
|
organisations: CollectionProperty(name="Organisations", type=Organisation)
|
|
active_person_id: IntProperty(name="Active Person Id")
|
|
active_organisation_index: IntProperty(name="Active Organisation Index")
|
|
has_georeferencing: BoolProperty(name="Has Georeferencing", default=False)
|
|
has_library: BoolProperty(name="Has Project Library", default=False)
|
|
search_regex: BoolProperty(name="Search With Regex", default=False)
|
|
search_ignorecase: BoolProperty(name="Search Ignoring Case", default=True)
|
|
global_id: StringProperty(name="GlobalId")
|
|
search_attribute_name: StringProperty(name="Search Attribute Name")
|
|
search_attribute_value: StringProperty(name="Search Attribute Value")
|
|
search_pset_name: StringProperty(name="Search Pset Name")
|
|
search_prop_name: StringProperty(name="Search Prop Name")
|
|
search_pset_value: StringProperty(name="Search Pset Value")
|
|
features_dir: StringProperty(default="", name="Features Directory", update=refreshFeaturesFiles)
|
|
features_file: EnumProperty(items=getFeaturesFiles, name="Features File", update=refreshScenarios)
|
|
scenario: EnumProperty(items=getScenarios, name="Scenario")
|
|
cobie_ifc_file: StringProperty(default="", name="COBie IFC File")
|
|
cobie_types: StringProperty(default=".COBieType", name="COBie Types")
|
|
cobie_components: StringProperty(default=".COBie", name="COBie Components")
|
|
cobie_json_file: StringProperty(default="", name="COBie JSON File")
|
|
diff_json_file: StringProperty(default="", name="Diff JSON File")
|
|
diff_old_file: StringProperty(default="", name="Diff Old IFC File")
|
|
diff_new_file: StringProperty(default="", name="Diff New IFC File")
|
|
diff_relationships: StringProperty(default="", name="Diff Relationships")
|
|
aggregate_class: EnumProperty(items=getIfcClasses, name="Aggregate Class")
|
|
aggregate_name: StringProperty(name="Aggregate Name")
|
|
classification: EnumProperty(items=getClassifications, name="Classification", update=refreshReferences)
|
|
active_classification_name: StringProperty(name="Active Classification Name")
|
|
classifications: CollectionProperty(name="Classifications", type=Classification)
|
|
contexts: EnumProperty(items=getContexts, name="Contexts")
|
|
available_contexts: EnumProperty(items=[("Model", "Model", ""), ("Plan", "Plan", "")], name="Available Contexts")
|
|
available_subcontexts: EnumProperty(items=getSubcontexts, name="Available Subcontexts")
|
|
available_target_views: EnumProperty(items=getTargetViews, name="Available Target Views")
|
|
classification_references: PointerProperty(type=ClassificationView)
|
|
pset_template_files: EnumProperty(
|
|
items=getPsetTemplateFiles, name="Pset Template Files", update=refreshPropertySetTemplates
|
|
)
|
|
property_set_templates: EnumProperty(items=getPropertySetTemplates, name="Pset Template Files")
|
|
active_property_set_template: PointerProperty(type=PropertySetTemplate)
|
|
property_templates: CollectionProperty(name="Property Templates", type=PropertyTemplate)
|
|
should_section_selected_objects: BoolProperty(name="Section Selected Objects", default=False)
|
|
section_plane_colour: FloatVectorProperty(
|
|
name="Temporary Section Cutaway Colour", subtype="COLOR", default=(1, 0, 0), min=0.0, max=1.0
|
|
)
|
|
ifc_import_filter: EnumProperty(
|
|
items=[("NONE", "None", ""), ("WHITELIST", "Whitelist", ""), ("BLACKLIST", "Blacklist", ""),],
|
|
name="Import Filter",
|
|
)
|
|
ifc_selector: StringProperty(default="", name="IFC Selector")
|
|
csv_attributes: CollectionProperty(name="CSV Attributes", type=StrProperty)
|
|
csv_delimiter: EnumProperty(
|
|
items=[(";", ";", ""), (",", ",", ""), (".", ".", ""), ("CUSTOM", "Custom", ""),],
|
|
name="IFC CSV Delimiter",
|
|
default=";",
|
|
)
|
|
csv_custom_delimiter: StringProperty(default="", name="Custom Delimiter")
|
|
document_information: CollectionProperty(name="Document Information", type=DocumentInformation)
|
|
active_document_information_index: IntProperty(name="Active Document Information Index")
|
|
document_references: CollectionProperty(name="Document References", type=DocumentReference)
|
|
active_document_reference_index: IntProperty(name="Active Document Reference Index")
|
|
blender_clash_set_a: CollectionProperty(name="Blender Clash Set A", type=StrProperty)
|
|
blender_clash_set_b: CollectionProperty(name="Blender Clash Set B", type=StrProperty)
|
|
clash_sets: CollectionProperty(name="Clash Sets", type=ClashSet)
|
|
should_create_clash_snapshots: BoolProperty(name="Create Snapshots", default=True)
|
|
clash_results_path: StringProperty(name="Clash Results Path")
|
|
smart_grouped_clashes_path: StringProperty(name="Smart Grouped Clashes Path")
|
|
active_clash_set_index: IntProperty(name="Active Clash Set Index")
|
|
smart_clash_groups: CollectionProperty(name="Smart Clash Groups", type=SmartClashGroup)
|
|
active_smart_group_index: IntProperty(name="Active Smart Group Index")
|
|
smart_clash_grouping_max_distance: IntProperty(name="Smart Clash Grouping Max Distance", default=3, soft_min=1, soft_max=10)
|
|
constraints: CollectionProperty(name="Constraints", type=Constraint)
|
|
active_constraint_index: IntProperty(name="Active Constraint Index")
|
|
eastings: StringProperty(name="Eastings")
|
|
northings: StringProperty(name="Northings")
|
|
orthogonal_height: StringProperty(name="Orthogonal Height")
|
|
ifc_patch_recipes: EnumProperty(items=getIfcPatchRecipes, name="Recipes")
|
|
ifc_patch_input: StringProperty(default="", name="IFC Patch Input IFC")
|
|
ifc_patch_output: StringProperty(default="", name="IFC Patch Output IFC")
|
|
ifc_patch_args: StringProperty(default="", name="Arguments")
|
|
qto_result: StringProperty(default="", name="Qto Result")
|
|
area_unit: EnumProperty(
|
|
default="SQUARE_METRE",
|
|
items=[
|
|
("MILLI/SQUARE_METRE", "Square Millimetre", ""),
|
|
("CENTI/SQUARE_METRE", "Square Centimetre", ""),
|
|
("SQUARE_METRE", "Square Metre", ""),
|
|
("KILO/SQUARE_METRE", "Square Kilometre", ""),
|
|
("square inch", "Square Inch", ""),
|
|
("square foot", "Square Foot", ""),
|
|
("square yard", "Square Yard", ""),
|
|
("square mile", "Square Mile", ""),
|
|
],
|
|
name="IFC Area Unit",
|
|
)
|
|
volume_unit: EnumProperty(
|
|
default="CUBIC_METRE",
|
|
items=[
|
|
("MILLI/CUBIC_METRE", "Cubic Millimetre", ""),
|
|
("CENTI/CUBIC_METRE", "Cubic Centimetre", ""),
|
|
("CUBIC_METRE", "Cubic Metre", ""),
|
|
("KILO/CUBIC_METRE", "Cubic Kilometre", ""),
|
|
("cubic inch", "Cubic Inch", ""),
|
|
("cubic foot", "Cubic Foot", ""),
|
|
("cubic yard", "Cubic Yard", ""),
|
|
],
|
|
name="IFC Volume Unit",
|
|
)
|
|
metric_precision: FloatProperty(default=0, name="Drawing Metric Precision")
|
|
imperial_precision: EnumProperty(
|
|
items=[
|
|
("NONE", "No rounding", ""),
|
|
("1", 'Nearest 1"', ""),
|
|
("1/2", 'Nearest 1/2"', ""),
|
|
("1/4", 'Nearest 1/4"', ""),
|
|
("1/8", 'Nearest 1/8"', ""),
|
|
("1/16", 'Nearest 1/16"', ""),
|
|
("1/32", 'Nearest 1/32"', ""),
|
|
("1/64", 'Nearest 1/64"', ""),
|
|
("1/128", 'Nearest 1/128"', ""),
|
|
("1/256", 'Nearest 1/256"', ""),
|
|
],
|
|
name="Drawing Imperial Precision",
|
|
)
|
|
override_colour: FloatVectorProperty(
|
|
name="Override Colour", subtype="COLOR", default=(1, 0, 0, 1), min=0.0, max=1.0, size=4
|
|
)
|
|
active_presentation_layer_index: IntProperty(name="Active Presentation Layer Index")
|
|
presentation_layers: CollectionProperty(name="Presentation Layers", type=PresentationLayer)
|
|
|
|
|
|
class MapConversion(PropertyGroup):
|
|
eastings: StringProperty(name="Eastings")
|
|
northings: StringProperty(name="Northings")
|
|
orthogonal_height: StringProperty(name="Orthogonal Height")
|
|
x_axis_abscissa: StringProperty(name="X Axis Abscissa")
|
|
x_axis_ordinate: StringProperty(name="X Axis Ordinate")
|
|
scale: StringProperty(name="Scale")
|
|
|
|
|
|
class TargetCRS(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
description: StringProperty(name="Description")
|
|
geodetic_datum: StringProperty(name="Geodetic Datum")
|
|
vertical_datum: StringProperty(name="Vertical Datum")
|
|
map_projection: StringProperty(name="Map Projection")
|
|
map_zone: StringProperty(name="Map Zone")
|
|
map_unit: StringProperty(name="Map Unit")
|
|
|
|
|
|
class BIMLibrary(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
version: StringProperty(name="Version")
|
|
publisher: StringProperty(name="Publisher")
|
|
version_date: StringProperty(name="Version Date")
|
|
location: StringProperty(name="Location")
|
|
description: StringProperty(name="Description")
|
|
|
|
|
|
class IfcParameter(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
step_id: IntProperty(name="STEP ID")
|
|
index: IntProperty(name="Index")
|
|
value: FloatProperty(name="Value") # For now, only floats
|
|
type: StringProperty(name="Type")
|
|
|
|
|
|
class PsetQto(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
properties: CollectionProperty(name="Properties", type=Attribute)
|
|
is_expanded: BoolProperty(name="Is Expanded", default=True)
|
|
is_editable: BoolProperty(name="Is Editable")
|
|
|
|
|
|
class GlobalId(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
|
|
|
|
class BoundaryCondition(PropertyGroup):
|
|
name: EnumProperty(
|
|
items=getBoundaryConditionClasses, name="Boundary Type", update=refreshBoundaryConditionAttributes
|
|
)
|
|
attributes: CollectionProperty(name="Attributes", type=Attribute)
|
|
|
|
|
|
class BIMObjectProperties(PropertyGroup):
|
|
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
|
is_reassigning_class: BoolProperty(name="Is Reassigning Class")
|
|
global_ids: CollectionProperty(name="GlobalIds", type=GlobalId)
|
|
attributes: CollectionProperty(name="Attributes", type=Attribute)
|
|
is_editing_attributes: BoolProperty(name="Is Editing Attributes")
|
|
relating_object: PointerProperty(name="Aggregate", type=bpy.types.Object)
|
|
is_editing_aggregate: BoolProperty(name="Is Editing Aggregate")
|
|
is_editing_container: BoolProperty(name="Is Editing Container")
|
|
relating_type: PointerProperty(name="Type", type=bpy.types.Object)
|
|
is_editing_type: BoolProperty(name="Is Editing Type")
|
|
relating_type: PointerProperty(name="Type Product", type=bpy.types.Object)
|
|
relating_structure: PointerProperty(name="Spatial Container", type=bpy.types.Object)
|
|
active_pset_id: IntProperty(name="Active Pset ID")
|
|
active_pset_name: StringProperty(name="Pset Name")
|
|
properties: CollectionProperty(name="Properties", type=Attribute)
|
|
psets: CollectionProperty(name="Psets", type=PsetQto)
|
|
qtos: CollectionProperty(name="Qtos", type=PsetQto)
|
|
document_references: CollectionProperty(name="Document References", type=DocumentReference)
|
|
active_document_reference_index: IntProperty(name="Active Document Reference Index")
|
|
constraints: CollectionProperty(name="Constraints", type=Constraint)
|
|
active_constraint_index: IntProperty(name="Active Constraint Index")
|
|
classifications: CollectionProperty(name="Classifications", type=ClassificationReference)
|
|
material_type: EnumProperty(items=getMaterialTypes, name="Material Type")
|
|
material: PointerProperty(name="Material", type=bpy.types.Material)
|
|
material_set: PointerProperty(name="Material Set", type=MaterialSet)
|
|
pset_name: EnumProperty(items=getPsetNames, name="Pset Name")
|
|
qto_name: EnumProperty(items=getQtoNames, name="Qto Name")
|
|
has_boundary_condition: BoolProperty(name="Has Boundary Condition")
|
|
boundary_condition: PointerProperty(name="Boundary Condition", type=BoundaryCondition)
|
|
structural_member_connection: PointerProperty(name="Structural Member Connection", type=bpy.types.Object)
|
|
# Address applies to IfcSite's SiteAddress and IfcBuilding's BuildingAddress
|
|
address: PointerProperty(name="Address", type=Address)
|
|
|
|
|
|
class BIMMaterialProperties(PropertyGroup):
|
|
is_external: BoolProperty(name="Has External Definition")
|
|
location: StringProperty(name="Location")
|
|
identification: StringProperty(name="Identification")
|
|
name: StringProperty(name="Name")
|
|
pset_name: EnumProperty(items=getMaterialPsetNames, name="Pset Name")
|
|
psets: CollectionProperty(name="Psets", type=PsetQto)
|
|
attributes: CollectionProperty(name="Attributes", type=Attribute)
|
|
applicable_attributes: EnumProperty(items=getApplicableMaterialAttributes, name="Attribute Names")
|
|
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
|
# In Blender, a material object can map to an IFC material, IFC surface style, or both
|
|
ifc_style_id: IntProperty(name="IFC Style ID")
|
|
|
|
|
|
class SweptSolid(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
outer_curve: StringProperty(name="Outer Curve")
|
|
inner_curves: StringProperty(name="Inner Curves")
|
|
extrusion: StringProperty(name="Extrusion")
|
|
|
|
|
|
class RepresentationItem(PropertyGroup):
|
|
name: StringProperty(name="Name")
|
|
vgroup: StringProperty(name="Vertex Group")
|
|
|
|
|
|
class ItemSlotMap(PropertyGroup):
|
|
name: StringProperty(name="Item Element ID")
|
|
slot_index: IntProperty(name="Material Slot Index")
|
|
|
|
|
|
class BIMMeshProperties(PropertyGroup):
|
|
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
|
is_native: BoolProperty(name="Is Native", default=False)
|
|
is_swept_solid: BoolProperty(name="Is Swept Solid")
|
|
swept_solids: CollectionProperty(name="Swept Solids", type=SweptSolid)
|
|
is_parametric: BoolProperty(name="Is Parametric", default=False)
|
|
ifc_definition: StringProperty(name="IFC Definition")
|
|
ifc_parameters: CollectionProperty(name="IFC Parameters", type=IfcParameter)
|
|
active_representation_item_index: IntProperty(name="Active Representation Item Index")
|
|
presentation_layer_index: IntProperty(name="Presentation Layer Index", default=-1)
|
|
ifc_item_ids: CollectionProperty(name="IFC Item IDs", type=ItemSlotMap)
|