Run black, and add black to a "qa" target to make it a standardised process.

This commit is contained in:
Dion Moult
2021-09-09 21:27:23 +10:00
parent 95903c965d
commit 865c0f4895
305 changed files with 1968 additions and 1143 deletions
+4
View File
@@ -457,6 +457,10 @@ test-core:
test-bim: test-bim:
pytest test/bim pytest test/bim
.PHONY: qa
qa:
black .
.PHONY: coverage .PHONY: coverage
coverage: coverage:
coverage run --source blenderbim.core -m pytest -p no:pytest-blender test/core coverage run --source blenderbim.core -m pytest -p no:pytest-blender test/core
-1
View File
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -158,7 +157,6 @@ class IfcExporter:
else: else:
parent_collection = obj.users_collection[0] parent_collection = obj.users_collection[0]
parent_obj = bpy.data.objects.get(parent_collection.name) parent_obj = bpy.data.objects.get(parent_collection.name)
if not parent_obj or not parent_obj.BIMObjectProperties.ifc_definition_id: if not parent_obj or not parent_obj.BIMObjectProperties.ifc_definition_id:
return return
-1
View File
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
-1
View File
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
-1
View File
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
+3 -4
View File
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -456,9 +455,9 @@ class IfcImporter:
obj.BIMObjectProperties.blender_offset_type = "CARTESIAN_POINT" obj.BIMObjectProperties.blender_offset_type = "CARTESIAN_POINT"
if self.ifc_import_settings.should_offset_model: if self.ifc_import_settings.should_offset_model:
matrix[0,3] += self.ifc_import_settings.model_offset_coordinates[0] matrix[0, 3] += self.ifc_import_settings.model_offset_coordinates[0]
matrix[1,3] += self.ifc_import_settings.model_offset_coordinates[1] matrix[1, 3] += self.ifc_import_settings.model_offset_coordinates[1]
matrix[2,3] += self.ifc_import_settings.model_offset_coordinates[2] matrix[2, 3] += self.ifc_import_settings.model_offset_coordinates[2]
return mathutils.Matrix(matrix.tolist()) return mathutils.Matrix(matrix.tolist())
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -16,4 +15,3 @@
# #
# 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 BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -56,7 +55,9 @@ class BIM_PT_aggregate(Panel):
row = self.layout.row(align=True) row = self.layout.row(align=True)
row.prop(props, "relating_object", text="") row.prop(props, "relating_object", text="")
if props.relating_object: if props.relating_object:
row.operator("bim.assign_object", icon="CHECKMARK", text="").relating_object = props.relating_object.name row.operator(
"bim.assign_object", icon="CHECKMARK", text=""
).relating_object = props.relating_object.name
row.operator("bim.disable_editing_aggregate", icon="CANCEL", text="") row.operator("bim.disable_editing_aggregate", icon="CANCEL", text="")
else: else:
row = self.layout.row(align=True) row = self.layout.row(align=True)
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -119,9 +118,7 @@ class EditAttributes(bpy.types.Operator):
elif attribute["type"] == "enum": elif attribute["type"] == "enum":
attributes[attribute["name"]] = blender_attribute.enum_value attributes[attribute["name"]] = blender_attribute.enum_value
product = self.file.by_id(oprops.ifc_definition_id) product = self.file.by_id(oprops.ifc_definition_id)
ifcopenshell.api.run( ifcopenshell.api.run("attribute.edit_attributes", self.file, **{"product": product, "attributes": attributes})
"attribute.edit_attributes", self.file, **{"product": product, "attributes": attributes}
)
Data.load(IfcStore.get_file(), oprops.ifc_definition_id) Data.load(IfcStore.get_file(), oprops.ifc_definition_id)
bpy.ops.bim.disable_editing_attributes(obj=obj.name, obj_type=self.obj_type) bpy.ops.bim.disable_editing_attributes(obj=obj.name, obj_type=self.obj_type)
return {"FINISHED"} return {"FINISHED"}
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -32,6 +31,7 @@ from bpy.props import (
CollectionProperty, CollectionProperty,
) )
class BIMAttributeProperties(PropertyGroup): class BIMAttributeProperties(PropertyGroup):
attributes: CollectionProperty(name="Attributes", type=Attribute) attributes: CollectionProperty(name="Attributes", type=Attribute)
is_editing_attributes: BoolProperty(name="Is Editing Attributes") is_editing_attributes: BoolProperty(name="Is Editing Attributes")
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -68,6 +67,7 @@ class AuginCreateNewModel(bpy.types.Operator):
def execute(self, context): def execute(self, context):
import boto3 import boto3
from botocore.config import Config from botocore.config import Config
props = context.scene.AuginProperties props = context.scene.AuginProperties
# Create project # Create project
@@ -135,7 +135,6 @@ class AuginCreateNewModel(bpy.types.Operator):
client.upload_file(context.scene.BIMProperties.ifc_file, result["s3_bucket"], result["model_path"]) client.upload_file(context.scene.BIMProperties.ifc_file, result["s3_bucket"], result["model_path"])
client.upload_file(thumb_path, result["s3_bucket"], result["thumb_path"]) client.upload_file(thumb_path, result["s3_bucket"], result["thumb_path"])
# Notify done # Notify done
url = "https://server.auge.pro.br/API/v3/augin_rest.php/files_uploaded" url = "https://server.auge.pro.br/API/v3/augin_rest.php/files_uploaded"
payload = { payload = {
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -20,6 +19,7 @@
import bcf import bcf
import bcf.v2.bcfxml import bcf.v2.bcfxml
class BcfStore: class BcfStore:
bcfxml = None bcfxml = None
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -31,6 +30,7 @@ from blenderbim.bim.ifc import IfcStore
from math import radians, degrees, atan, tan, cos, sin from math import radians, degrees, atan, tan, cos, sin
from mathutils import Vector, Matrix, Euler, geometry from mathutils import Vector, Matrix, Euler, geometry
class NewBcfProject(bpy.types.Operator): class NewBcfProject(bpy.types.Operator):
bl_idname = "bim.new_bcf_project" bl_idname = "bim.new_bcf_project"
bl_label = "New BCF Project" bl_label = "New BCF Project"
@@ -79,7 +79,7 @@ class LoadBcfTopics(bpy.types.Operator):
context.scene.BCFProperties.topics.clear() context.scene.BCFProperties.topics.clear()
for index, topic_guid in enumerate(bcfxml.topics.keys()): for index, topic_guid in enumerate(bcfxml.topics.keys()):
new = context.scene.BCFProperties.topics.add() new = context.scene.BCFProperties.topics.add()
bpy.ops.bim.load_bcf_topic(topic_guid = topic_guid, topic_index = index) bpy.ops.bim.load_bcf_topic(topic_guid=topic_guid, topic_index=index)
return {"FINISHED"} return {"FINISHED"}
@@ -107,7 +107,7 @@ class LoadBcfTopic(bpy.types.Operator):
"modified_author": topic.modified_author, "modified_author": topic.modified_author,
"assigned_to": topic.assigned_to, "assigned_to": topic.assigned_to,
"due_date": topic.due_date, "due_date": topic.due_date,
"description": topic.description "description": topic.description,
} }
for key, value in data_map.items(): for key, value in data_map.items():
if value is not None: if value is not None:
@@ -128,7 +128,7 @@ class LoadBcfTopic(bpy.types.Operator):
"type": topic.bim_snippet.snippet_type, "type": topic.bim_snippet.snippet_type,
"is_external": topic.bim_snippet.is_external, "is_external": topic.bim_snippet.is_external,
"reference": topic.bim_snippet.reference, "reference": topic.bim_snippet.reference,
"schema": topic.bim_snippet.reference_schema "schema": topic.bim_snippet.reference_schema,
} }
for key, value in data_map.items(): for key, value in data_map.items():
if value is not None: if value is not None:
@@ -141,7 +141,7 @@ class LoadBcfTopic(bpy.types.Operator):
"reference": doc.referenced_document, "reference": doc.referenced_document,
"description": doc.description, "description": doc.description,
"guid": doc.guid, "guid": doc.guid,
"is_external": doc.is_external "is_external": doc.is_external,
} }
for key, value in data_map.items(): for key, value in data_map.items():
if value is not None: if value is not None:
@@ -152,7 +152,7 @@ class LoadBcfTopic(bpy.types.Operator):
new_related_topic = new.related_topics.add() new_related_topic = new.related_topics.add()
new_related_topic.name = related_topic.guid new_related_topic.name = related_topic.guid
bpy.ops.bim.load_bcf_comments(topic_guid = topic.guid) bpy.ops.bim.load_bcf_comments(topic_guid=topic.guid)
return {"FINISHED"} return {"FINISHED"}
@@ -287,11 +287,12 @@ class AddBcfBimSnippet(bpy.types.Operator):
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):
return all((getattr(context.scene.BCFProperties, attr, False) for attr in ( return all(
"bim_snippet_reference", (
"bim_snippet_schema", getattr(context.scene.BCFProperties, attr, False)
"bim_snippet_type" for attr in ("bim_snippet_reference", "bim_snippet_schema", "bim_snippet_type")
))) )
)
def execute(self, context): def execute(self, context):
bcfxml = bcfstore.BcfStore.get_bcfxml() bcfxml = bcfstore.BcfStore.get_bcfxml()
@@ -303,7 +304,7 @@ class AddBcfBimSnippet(bpy.types.Operator):
bim_snippet.reference_schema = props.bim_snippet_schema bim_snippet.reference_schema = props.bim_snippet_schema
bim_snippet.snippet_type = props.bim_snippet_type bim_snippet.snippet_type = props.bim_snippet_type
bcfxml.add_bim_snippet(topic, bim_snippet) bcfxml.add_bim_snippet(topic, bim_snippet)
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
bim_snippet.reference = "" bim_snippet.reference = ""
bim_snippet.reference_schema = "" bim_snippet.reference_schema = ""
bim_snippet.snippet_type = "" bim_snippet.snippet_type = ""
@@ -347,7 +348,7 @@ class AddBcfRelatedTopic(bpy.types.Operator):
topic = bcfxml.topics[blender_topic.name] topic = bcfxml.topics[blender_topic.name]
topic.related_topics.append(related_topic) topic.related_topics.append(related_topic)
bcfxml.edit_topic(topic) bcfxml.edit_topic(topic)
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
props.related_topic = "" props.related_topic = ""
return {"FINISHED"} return {"FINISHED"}
@@ -516,7 +517,7 @@ class AddBcfReferenceLink(bpy.types.Operator):
topic = bcfxml.topics[blender_topic.name] topic = bcfxml.topics[blender_topic.name]
topic.reference_links.append(props.reference_link) topic.reference_links.append(props.reference_link)
bcfxml.edit_topic(topic) bcfxml.edit_topic(topic)
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
props.reference_link = "" props.reference_link = ""
return {"FINISHED"} return {"FINISHED"}
@@ -539,7 +540,7 @@ class AddBcfDocumentReference(bpy.types.Operator):
document_reference.referenced_document = props.document_reference document_reference.referenced_document = props.document_reference
document_reference.description = props.document_reference_description or None document_reference.description = props.document_reference_description or None
bcfxml.add_document_reference(topic, document_reference) bcfxml.add_document_reference(topic, document_reference)
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
props.document_reference = "" props.document_reference = ""
props.document_reference_description = "" props.document_reference_description = ""
return {"FINISHED"} return {"FINISHED"}
@@ -668,7 +669,7 @@ class RemoveBcfDocumentReference(bpy.types.Operator):
blender_topic = props.active_topic blender_topic = props.active_topic
topic = bcfxml.topics[blender_topic.name] topic = bcfxml.topics[blender_topic.name]
bcfxml.delete_document_reference(topic, self.index) bcfxml.delete_document_reference(topic, self.index)
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
return {"FINISHED"} return {"FINISHED"}
@@ -685,7 +686,7 @@ class RemoveBcfRelatedTopic(bpy.types.Operator):
topic = bcfxml.topics[blender_topic.name] topic = bcfxml.topics[blender_topic.name]
del topic.related_topics[self.index] del topic.related_topics[self.index]
bcfxml.edit_topic(topic) bcfxml.edit_topic(topic)
bpy.ops.bim.load_bcf_topic(topic_guid = topic.guid, topic_index = props.active_topic_index) bpy.ops.bim.load_bcf_topic(topic_guid=topic.guid, topic_index=props.active_topic_index)
return {"FINISHED"} return {"FINISHED"}
@@ -701,7 +702,7 @@ class RemoveBcfComment(bpy.types.Operator):
blender_topic = props.active_topic blender_topic = props.active_topic
topic = bcfxml.topics[blender_topic.name] topic = bcfxml.topics[blender_topic.name]
bcfxml.delete_comment(self.comment_guid, topic) bcfxml.delete_comment(self.comment_guid, topic)
bpy.ops.bim.load_bcf_comments(topic_guid = topic.guid) bpy.ops.bim.load_bcf_comments(topic_guid=topic.guid)
return {"FINISHED"} return {"FINISHED"}
@@ -720,7 +721,7 @@ class EditBcfComment(bpy.types.Operator):
comment = topic.comments[self.comment_guid] comment = topic.comments[self.comment_guid]
comment.comment = blender_comment.comment comment.comment = blender_comment.comment
bcfxml.edit_comment(comment, topic) bcfxml.edit_comment(comment, topic)
bpy.ops.bim.load_bcf_comments(topic_guid = topic.guid) bpy.ops.bim.load_bcf_comments(topic_guid=topic.guid)
return {"FINISHED"} return {"FINISHED"}
@@ -750,7 +751,7 @@ class AddBcfComment(bpy.types.Operator):
comment.viewpoint = bcf.v2.data.Viewpoint() comment.viewpoint = bcf.v2.data.Viewpoint()
comment.viewpoint.guid = blender_topic.viewpoints comment.viewpoint.guid = blender_topic.viewpoints
bcfxml.add_comment(topic, comment) bcfxml.add_comment(topic, comment)
bpy.ops.bim.load_bcf_comments(topic_guid = topic.guid) bpy.ops.bim.load_bcf_comments(topic_guid=topic.guid)
props.comment = "" props.comment = ""
props.has_related_viewpoint = False props.has_related_viewpoint = False
return {"FINISHED"} return {"FINISHED"}
@@ -792,9 +793,7 @@ class ActivateBcfViewpoint(bpy.types.Operator):
obj.data.show_background_images = True obj.data.show_background_images = True
obj.data.background_images.clear() obj.data.background_images.clear()
background = obj.data.background_images.new() background = obj.data.background_images.new()
background.image = bpy.data.images.load( background.image = bpy.data.images.load(os.path.join(bcfxml.filepath, topic.guid, viewpoint.snapshot))
os.path.join(bcfxml.filepath, topic.guid, viewpoint.snapshot)
)
src_width = background.image.size[0] src_width = background.image.size[0]
src_height = background.image.size[1] src_height = background.image.size[1]
src_aspect = src_width / src_height src_aspect = src_width / src_height
@@ -839,19 +838,25 @@ class ActivateBcfViewpoint(bpy.types.Operator):
obj.data.angle = radians(camera.field_of_view) obj.data.angle = radians(camera.field_of_view)
else: else:
# https://blender.stackexchange.com/questions/23431/how-to-set-camera-horizontal-and-vertical-fov # https://blender.stackexchange.com/questions/23431/how-to-set-camera-horizontal-and-vertical-fov
obj.data.angle = 2 * atan((0.5 * cam_height) / (0.5 * cam_width / tan(radians(camera.field_of_view) / 2))) obj.data.angle = 2 * atan(
(0.5 * cam_height) / (0.5 * cam_width / tan(radians(camera.field_of_view) / 2))
)
z_axis = Vector((-camera.camera_direction.x, -camera.camera_direction.y, -camera.camera_direction.z)).normalized() z_axis = Vector(
(-camera.camera_direction.x, -camera.camera_direction.y, -camera.camera_direction.z)
).normalized()
y_axis = Vector((camera.camera_up_vector.x, camera.camera_up_vector.y, camera.camera_up_vector.z)).normalized() y_axis = Vector((camera.camera_up_vector.x, camera.camera_up_vector.y, camera.camera_up_vector.z)).normalized()
x_axis = y_axis.cross(z_axis).normalized() x_axis = y_axis.cross(z_axis).normalized()
rotation = Matrix((x_axis, y_axis, z_axis)) rotation = Matrix((x_axis, y_axis, z_axis))
rotation.invert() rotation.invert()
matrix = np.matrix(( matrix = np.matrix(
[x_axis[0], y_axis[0], z_axis[0], camera.camera_view_point.x], (
[x_axis[1], y_axis[1], z_axis[1], camera.camera_view_point.y], [x_axis[0], y_axis[0], z_axis[0], camera.camera_view_point.x],
[x_axis[2], y_axis[2], z_axis[2], camera.camera_view_point.z], [x_axis[1], y_axis[1], z_axis[1], camera.camera_view_point.y],
[0, 0, 0, 1], [x_axis[2], y_axis[2], z_axis[2], camera.camera_view_point.z],
)) [0, 0, 0, 1],
)
)
props = context.scene.BIMGeoreferenceProperties props = context.scene.BIMGeoreferenceProperties
if props.has_blender_offset: if props.has_blender_offset:
unit_scale = ifcopenshell.util.unit.calculate_unit_scale(self.file) unit_scale = ifcopenshell.util.unit.calculate_unit_scale(self.file)
@@ -961,7 +966,9 @@ class ActivateBcfViewpoint(bpy.types.Operator):
stroke.points.add(len(viewpoint.lines) * 2) stroke.points.add(len(viewpoint.lines) * 2)
coords = [] coords = []
for l in viewpoint.lines: for l in viewpoint.lines:
coords.extend([l.start_point.x, l.start_point.y, l.start_point.z, l.end_point.x, l.end_point.y, l.end_point.z]) coords.extend(
[l.start_point.x, l.start_point.y, l.start_point.z, l.end_point.x, l.end_point.y, l.end_point.z]
)
stroke.points.foreach_set("co", coords) stroke.points.foreach_set("co", coords)
def create_clipping_planes(self, viewpoint): def create_clipping_planes(self, viewpoint):
@@ -1025,6 +1032,7 @@ class ActivateBcfViewpoint(bpy.types.Operator):
t = tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) t = tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3))
return [t[0] / 255.0, t[1] / 255.0, t[2] / 255.0, 1] return [t[0] / 255.0, t[1] / 255.0, t[2] / 255.0, 1]
class OpenBcfReferenceLink(bpy.types.Operator): class OpenBcfReferenceLink(bpy.types.Operator):
bl_idname = "bim.open_bcf_reference_link" bl_idname = "bim.open_bcf_reference_link"
bl_label = "Open BCF Reference Link" bl_label = "Open BCF Reference Link"
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -73,7 +72,7 @@ def updateBcfTopicIsEditable(self, context):
def updateBcfCommentIsEditable(self, context): def updateBcfCommentIsEditable(self, context):
if context.scene.BCFProperties.is_loaded and not self.is_editable: if context.scene.BCFProperties.is_loaded and not self.is_editable:
bpy.ops.bim.edit_bcf_comment(comment_guid = self.name) bpy.ops.bim.edit_bcf_comment(comment_guid=self.name)
def refreshBcfTopic(self, context): def refreshBcfTopic(self, context):
@@ -91,7 +90,7 @@ class BcfLabel(PropertyGroup):
def getBcfViewpoints(self, context, force_update=False): def getBcfViewpoints(self, context, force_update=False):
global bcfviewpoints_enum global bcfviewpoints_enum
if bcfviewpoints_enum is None or force_update: # Retrieving Viewpoints is slow. Make sure we only do when needed if bcfviewpoints_enum is None or force_update: # Retrieving Viewpoints is slow. Make sure we only do when needed
bcfviewpoints_enum = [] bcfviewpoints_enum = []
props = context.scene.BCFProperties props = context.scene.BCFProperties
bcfxml = bcfstore.BcfStore.get_bcfxml() bcfxml = bcfstore.BcfStore.get_bcfxml()
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -22,6 +21,7 @@ import bpy
from . import bcfstore from . import bcfstore
from bpy.types import Panel from bpy.types import Panel
class BIM_PT_bcf(Panel): class BIM_PT_bcf(Panel):
bl_label = "BCF Project" bl_label = "BCF Project"
bl_idname = "BIM_PT_bcf" bl_idname = "BIM_PT_bcf"
@@ -235,8 +235,8 @@ class BIM_PT_bcf_metadata(Panel):
try: try:
row = layout.row(align=True) row = layout.row(align=True)
op = row.operator( op = row.operator(
"bim.view_bcf_topic", "bim.view_bcf_topic", text=f"Select {bcfxml.topics[related_topic.name.lower()].title}"
text=f"Select {bcfxml.topics[related_topic.name.lower()].title}") )
op.topic_guid = related_topic.name op.topic_guid = related_topic.name
row.operator("bim.remove_bcf_related_topic", icon="X", text="").index = index row.operator("bim.remove_bcf_related_topic", icon="X", text="").index = index
except KeyError: except KeyError:
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -20,9 +19,7 @@
import bpy import bpy
from . import ui from . import ui
classes = ( classes = (ui.BIM_PT_boundary,)
ui.BIM_PT_boundary,
)
def register(): def register():
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -232,9 +231,7 @@ class ExecuteIfcClash(bpy.types.Operator):
context.scene.render.resolution_x = 480 context.scene.render.resolution_x = 480
context.scene.render.resolution_y = 270 context.scene.render.resolution_y = 270
context.scene.render.image_settings.file_format = "PNG" context.scene.render.image_settings.file_format = "PNG"
context.scene.render.filepath = os.path.join( context.scene.render.filepath = os.path.join(context.scene.BIMProperties.data_dir, "snapshot.png")
context.scene.BIMProperties.data_dir, "snapshot.png"
)
bpy.ops.render.opengl(write_still=True) bpy.ops.render.opengl(write_still=True)
return context.scene.render.filepath return context.scene.render.filepath
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -69,6 +68,7 @@ class ExecuteIfcCobie(bpy.types.Operator):
def execute(self, context): def execute(self, context):
from cobie import IfcCobieParser from cobie import IfcCobieParser
props = context.scene.COBieProperties props = context.scene.COBieProperties
if props.should_load_from_memory: if props.should_load_from_memory:
@@ -122,4 +122,3 @@ class ExecuteIfcCobie(bpy.types.Operator):
webbrowser.open("file://" + output_dir) webbrowser.open("file://" + output_dir)
webbrowser.open("file://" + output_dir + "/cobie.log") webbrowser.open("file://" + output_dir + "/cobie.log")
return {"FINISHED"} return {"FINISHED"}
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -37,4 +36,3 @@ class COBieProperties(PropertyGroup):
cobie_components: StringProperty(default=".COBie", name="COBie Components") cobie_components: StringProperty(default=".COBie", name="COBie Components")
cobie_json_file: StringProperty(default="", name="COBie JSON File") cobie_json_file: StringProperty(default="", name="COBie JSON File")
should_load_from_memory: BoolProperty(default=False, name="Load from Memory") should_load_from_memory: BoolProperty(default=False, name="Load from Memory")
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -36,7 +35,6 @@ class BIM_PT_cobie(Panel):
scene = context.scene scene = context.scene
props = scene.COBieProperties props = scene.COBieProperties
if IfcStore.get_file(): if IfcStore.get_file():
row = layout.row() row = layout.row()
row.prop(props, "should_load_from_memory") row.prop(props, "should_load_from_memory")
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -105,7 +104,7 @@ class BIM_PT_object_constraints(Panel):
constraint = Data.objectives[constraint_id] constraint = Data.objectives[constraint_id]
icon = "LIGHT" icon = "LIGHT"
except: except:
pass # Metric not implemented pass # Metric not implemented
row = self.layout.row(align=True) row = self.layout.row(align=True)
row.label(text=constraint.get("Name") or "Unnamed") row.label(text=constraint.get("Name") or "Unnamed")
row.operator("bim.unassign_constraint", text="", icon="X").constraint = constraint_id row.operator("bim.unassign_constraint", text="", icon="X").constraint = constraint_id
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -463,6 +463,7 @@ class BIM_PT_cost_item_quantities(Panel):
row2 = col.row() row2 = col.row()
row2.prop(self.props, "resource_quantity_names", text="") row2.prop(self.props, "resource_quantity_names", text="")
class BIM_PT_cost_item_rates(Panel): class BIM_PT_cost_item_rates(Panel):
bl_label = "IFC Cost Item Rates" bl_label = "IFC Cost Item Rates"
bl_idname = "BIM_PT_cost_item_rates" bl_idname = "BIM_PT_cost_item_rates"
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -32,11 +31,9 @@ classes = (
) )
def register(): def register():
bpy.types.Scene.CsvProperties = bpy.props.PointerProperty(type=prop.CsvProperties) bpy.types.Scene.CsvProperties = bpy.props.PointerProperty(type=prop.CsvProperties)
def unregister(): def unregister():
del bpy.types.Scene.CsvProperties del bpy.types.Scene.CsvProperties
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -164,9 +163,11 @@ class SelectHighPolygonMeshes(bpy.types.Operator):
bl_options = {"REGISTER", "UNDO"} bl_options = {"REGISTER", "UNDO"}
def execute(self, context): def execute(self, context):
[o.select_set(True) for o in context.view_layer.objects [
if o.type == "MESH" o.select_set(True)
and len(o.data.polygons) > context.scene.BIMDebugProperties.number_of_polygons] for o in context.view_layer.objects
if o.type == "MESH" and len(o.data.polygons) > context.scene.BIMDebugProperties.number_of_polygons
]
return {"FINISHED"} return {"FINISHED"}
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -31,11 +30,9 @@ classes = (
) )
def register(): def register():
bpy.types.Scene.DiffProperties = bpy.props.PointerProperty(type=prop.DiffProperties) bpy.types.Scene.DiffProperties = bpy.props.PointerProperty(type=prop.DiffProperties)
def unregister(): def unregister():
del bpy.types.Scene.DiffProperties del bpy.types.Scene.DiffProperties
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -24,7 +23,6 @@ import json
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
class SelectDiffJsonFile(bpy.types.Operator): class SelectDiffJsonFile(bpy.types.Operator):
bl_idname = "bim.select_diff_json_file" bl_idname = "bim.select_diff_json_file"
bl_label = "Select Diff JSON File" bl_label = "Select Diff JSON File"
@@ -46,8 +44,8 @@ class VisualiseDiff(bpy.types.Operator):
bl_options = {"REGISTER", "UNDO"} bl_options = {"REGISTER", "UNDO"}
def execute(self, context): def execute(self, context):
#ifc_file = IfcStore.get_file() # In case we get from Store # ifc_file = IfcStore.get_file() # In case we get from Store
ifc_file = ifcopenshell.open(context.scene.DiffProperties.diff_new_file) # for Now refer to the new file ifc_file = ifcopenshell.open(context.scene.DiffProperties.diff_new_file) # for Now refer to the new file
with open(context.scene.DiffProperties.diff_json_file, "r") as file: with open(context.scene.DiffProperties.diff_json_file, "r") as file:
diff = json.load(file) diff = json.load(file)
for obj in context.visible_objects: for obj in context.visible_objects:
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com> # Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com>
# #
@@ -171,16 +170,14 @@ class Annotator:
camera = context.scene.camera camera = context.scene.camera
z_offset = camera.matrix_world.to_quaternion() @ Vector((0, 0, -1)) z_offset = camera.matrix_world.to_quaternion() @ Vector((0, 0, -1))
if context.scene.render.resolution_x > context.scene.render.resolution_y: if context.scene.render.resolution_x > context.scene.render.resolution_y:
y = ( y = camera.data.ortho_scale * (context.scene.render.resolution_y / context.scene.render.resolution_x) / 4
camera.data.ortho_scale
* (context.scene.render.resolution_y / context.scene.render.resolution_x)
/ 4
)
else: else:
y = camera.data.ortho_scale / 4 y = camera.data.ortho_scale / 4
y_offset = camera.matrix_world.to_quaternion() @ Vector((0, y, 0)) y_offset = camera.matrix_world.to_quaternion() @ Vector((0, y, 0))
x_offset = camera.matrix_world.to_quaternion() @ Vector((y/2, 0, 0)) x_offset = camera.matrix_world.to_quaternion() @ Vector((y / 2, 0, 0))
return (camera.location + z_offset, return (
camera.location + z_offset + y_offset, camera.location + z_offset,
camera.location + z_offset + x_offset, camera.location + z_offset + y_offset,
camera.location + z_offset + x_offset + y_offset) camera.location + z_offset + x_offset,
camera.location + z_offset + x_offset + y_offset,
)
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com> # Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com>
# #
@@ -35,7 +34,7 @@ from gpu_extras.batch import batch_for_shader
import blenderbim.bim.module.drawing.helper as helper import blenderbim.bim.module.drawing.helper as helper
class BaseDecorator(): class BaseDecorator:
# base name of objects to decorate # base name of objects to decorate
basename = "IfcAnnotation/Something" basename = "IfcAnnotation/Something"
@@ -128,10 +127,12 @@ class BaseDecorator():
def __init__(self): def __init__(self):
# NB: libcode param doesn't work # NB: libcode param doesn't work
self.shader = GPUShader(vertexcode=self.VERT_GLSL, self.shader = GPUShader(
fragcode=self.FRAG_GLSL, vertexcode=self.VERT_GLSL,
geocode=self.LIB_GLSL + self.GEOM_GLSL, fragcode=self.FRAG_GLSL,
defines=self.DEF_GLSL) geocode=self.LIB_GLSL + self.GEOM_GLSL,
defines=self.DEF_GLSL,
)
def get_objects(self, collection): def get_objects(self, collection):
"""find relevant objects """find relevant objects
@@ -172,7 +173,7 @@ class BaseDecorator():
topology.append(1) topology.append(1)
topology.extend([0] * max(0, cnt - 2)) topology.extend([0] * max(0, cnt - 2))
topology.append(2) topology.append(2)
indices.extend((idx+i, idx+i+1) for i in range(cnt-1)) indices.extend((idx + i, idx + i + 1) for i in range(cnt - 1))
idx += cnt idx += cnt
return vertices, indices, topology return vertices, indices, topology
@@ -192,8 +193,7 @@ class BaseDecorator():
return vertices, indices return vertices, indices
def get_editmesh_geom(self, obj): def get_editmesh_geom(self, obj):
"""Parses editmode mesh geometry into line segments """Parses editmode mesh geometry into line segments"""
"""
mesh = bmesh.from_edit_mesh(obj.data) mesh = bmesh.from_edit_mesh(obj.data)
vertices = [] vertices = []
indices = [] indices = []
@@ -201,7 +201,7 @@ class BaseDecorator():
for edge in mesh.edges: for edge in mesh.edges:
vertices.extend(edge.verts) vertices.extend(edge.verts)
indices.append((idx, idx+1)) indices.append((idx, idx + 1))
idx += 2 idx += 2
vertices = [obj.matrix_world @ v.co for v in vertices] vertices = [obj.matrix_world @ v.co for v in vertices]
@@ -217,18 +217,18 @@ class BaseDecorator():
color = context.scene.DocProperties.decorations_colour color = context.scene.DocProperties.decorations_colour
fmt = GPUVertFormat() fmt = GPUVertFormat()
fmt.attr_add(id="pos", comp_type='F32', len=3, fetch_mode='FLOAT') fmt.attr_add(id="pos", comp_type="F32", len=3, fetch_mode="FLOAT")
if topology: if topology:
fmt.attr_add(id="topo", comp_type='U8', len=1, fetch_mode='INT') fmt.attr_add(id="topo", comp_type="U8", len=1, fetch_mode="INT")
vbo = GPUVertBuf(len=len(vertices), format=fmt) vbo = GPUVertBuf(len=len(vertices), format=fmt)
vbo.attr_fill(id="pos", data=vertices) vbo.attr_fill(id="pos", data=vertices)
if topology: if topology:
vbo.attr_fill(id="topo", data=topology) vbo.attr_fill(id="topo", data=topology)
ibo = GPUIndexBuf(type='LINES', seq=indices) ibo = GPUIndexBuf(type="LINES", seq=indices)
batch = GPUBatch(type='LINES', buf=vbo, elem=ibo) batch = GPUBatch(type="LINES", buf=vbo, elem=ibo)
bgl.glEnable(bgl.GL_LINE_SMOOTH) bgl.glEnable(bgl.GL_LINE_SMOOTH)
bgl.glHint(bgl.GL_LINE_SMOOTH_HINT, bgl.GL_NICEST) bgl.glHint(bgl.GL_LINE_SMOOTH_HINT, bgl.GL_NICEST)
@@ -289,7 +289,7 @@ class BaseDecorator():
def format_value(self, context, value): def format_value(self, context, value):
unit_system = context.scene.unit_settings.system unit_system = context.scene.unit_settings.system
if unit_system == 'IMPERIAL': if unit_system == "IMPERIAL":
precision = context.scene.BIMProperties.imperial_precision precision = context.scene.BIMProperties.imperial_precision
if precision == "NONE": if precision == "NONE":
precision = 256 precision = 256
@@ -297,12 +297,12 @@ class BaseDecorator():
precision = 1 precision = 1
elif "/" in precision: elif "/" in precision:
precision = int(precision.split("/")[1]) precision = int(precision.split("/")[1])
elif unit_system == 'METRIC': elif unit_system == "METRIC":
precision = 3 precision = 3
else: else:
return return
return bpy.utils.units.to_string(unit_system, 'LENGTH', value, precision, split_unit=True) return bpy.utils.units.to_string(unit_system, "LENGTH", value, precision, split_unit=True)
class DimensionDecorator(BaseDecorator): class DimensionDecorator(BaseDecorator):
@@ -310,12 +310,16 @@ class DimensionDecorator(BaseDecorator):
- each edge of a segment with arrow - each edge of a segment with arrow
- puts metric text next to each segment - puts metric text next to each segment
""" """
basename = "IfcAnnotation/Dimension" basename = "IfcAnnotation/Dimension"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define ARROW_ANGLE PI / 12.0 #define ARROW_ANGLE PI / 12.0
#define ARROW_SIZE 16.0 #define ARROW_SIZE 16.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -392,7 +396,7 @@ class DimensionDecorator(BaseDecorator):
continue continue
length = (v1 - v0).length length = (v1 - v0).length
text = self.format_value(context, length) text = self.format_value(context, length)
self.draw_label(context, text, p0 + (dir) * .5, dir) self.draw_label(context, text, p0 + (dir) * 0.5, dir)
class EqualityDecorator(DimensionDecorator): class EqualityDecorator(DimensionDecorator):
@@ -401,6 +405,7 @@ class EqualityDecorator(DimensionDecorator):
- augments with arrows on both sides - augments with arrows on both sides
- puts 'EQ' label - puts 'EQ' label
""" """
basename = "IfcAnnotation/Equal" basename = "IfcAnnotation/Equal"
def draw_labels(self, context, obj, vertices, indices): def draw_labels(self, context, obj, vertices, indices):
@@ -414,7 +419,7 @@ class EqualityDecorator(DimensionDecorator):
dir = p1 - p0 dir = p1 - p0
if dir.length < 1: if dir.length < 1:
continue continue
self.draw_label(context, "EQ", p0 + (dir) * .5, dir) self.draw_label(context, "EQ", p0 + (dir) * 0.5, dir)
class LeaderDecorator(BaseDecorator): class LeaderDecorator(BaseDecorator):
@@ -422,12 +427,16 @@ class LeaderDecorator(BaseDecorator):
- head point with arrow - head point with arrow
- middle points w/out decorations - middle points w/out decorations
""" """
basename = "IfcAnnotation/Leader" basename = "IfcAnnotation/Leader"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define ARROW_ANGLE PI / 12.0 #define ARROW_ANGLE PI / 12.0
#define ARROW_SIZE 16.0 #define ARROW_SIZE 16.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -490,13 +499,17 @@ class StairDecorator(BaseDecorator):
- tail point with circle - tail point with circle
- middle points w/out decorations - middle points w/out decorations
""" """
basename = "IfcAnnotation/Stair" basename = "IfcAnnotation/Stair"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define CIRCLE_SIZE 8.0 #define CIRCLE_SIZE 8.0
#define ARROW_ANGLE PI / 3.0 #define ARROW_ANGLE PI / 3.0
#define ARROW_SIZE 24.0 #define ARROW_SIZE 24.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -572,10 +585,13 @@ class StairDecorator(BaseDecorator):
class HiddenDecorator(BaseDecorator): class HiddenDecorator(BaseDecorator):
basename = "IfcAnnotation/Hidden" basename = "IfcAnnotation/Hidden"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define DASH_SIZE 16.0 #define DASH_SIZE 16.0
#define DASH_PATTERN 0x0000FFFFU #define DASH_PATTERN 0x0000FFFFU
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -639,7 +655,6 @@ class MiscDecorator(HiddenDecorator):
class LevelDecorator(BaseDecorator): class LevelDecorator(BaseDecorator):
def get_splines(self, obj): def get_splines(self, obj):
"""Iterates through splines """Iterates through splines
Args: Args:
@@ -664,10 +679,13 @@ class LevelDecorator(BaseDecorator):
class PlanLevelDecorator(LevelDecorator): class PlanLevelDecorator(LevelDecorator):
basename = "IfcAnnotation/Plan Level" basename = "IfcAnnotation/Plan Level"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define CIRCLE_SIZE 8.0 #define CIRCLE_SIZE 8.0
#define CROSS_SIZE 16.0 #define CROSS_SIZE 16.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -746,10 +764,13 @@ class PlanLevelDecorator(LevelDecorator):
class SectionLevelDecorator(LevelDecorator): class SectionLevelDecorator(LevelDecorator):
basename = "IfcAnnotation/Section Level" basename = "IfcAnnotation/Section Level"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define CALLOUT_GAP 8.0 #define CALLOUT_GAP 8.0
#define CALLOUT_SIZE 64.0 #define CALLOUT_SIZE 64.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -828,12 +849,16 @@ class BreakDecorator(BaseDecorator):
Uses first two vertices in verts list. Uses first two vertices in verts list.
""" """
basename = "IfcAnnotation/Break" basename = "IfcAnnotation/Break"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define BREAK_LENGTH 32.0 #define BREAK_LENGTH 32.0
#define BREAK_WIDTH 16.0 #define BREAK_WIDTH 16.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -905,11 +930,14 @@ class BreakDecorator(BaseDecorator):
class GridDecorator(BaseDecorator): class GridDecorator(BaseDecorator):
basename = "IfcGridAxis/" basename = "IfcGridAxis/"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define CIRCLE_SIZE 16.0 #define CIRCLE_SIZE 16.0
#define DASH_SIZE 48.0 #define DASH_SIZE 48.0
#define DASH_PATTERN 0x03C0FFFFU #define DASH_PATTERN 0x03C0FFFFU
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -1019,11 +1047,14 @@ class GridDecorator(BaseDecorator):
class SectionViewDecorator(LevelDecorator): class SectionViewDecorator(LevelDecorator):
basename = "IfcAnnotation/Section" basename = "IfcAnnotation/Section"
DEF_GLSL = BaseDecorator.DEF_GLSL + """ DEF_GLSL = (
BaseDecorator.DEF_GLSL
+ """
#define CIRCLE_SIZE 8.0 #define CIRCLE_SIZE 8.0
#define TRIANGLE_L 32.0 #define TRIANGLE_L 32.0
#define TRIANGLE_W 16.0 #define TRIANGLE_W 16.0
""" """
)
GEOM_GLSL = """ GEOM_GLSL = """
uniform vec2 winsize; uniform vec2 winsize;
@@ -1118,7 +1149,7 @@ class SectionViewDecorator(LevelDecorator):
self.draw_lines(context, obj, verts, [(0, 1)]) self.draw_lines(context, obj, verts, [(0, 1)])
class DecorationsHandler(): class DecorationsHandler:
decorators_classes = [ decorators_classes = [
DimensionDecorator, DimensionDecorator,
EqualityDecorator, EqualityDecorator,
@@ -1130,7 +1161,7 @@ class DecorationsHandler():
SectionLevelDecorator, SectionLevelDecorator,
StairDecorator, StairDecorator,
BreakDecorator, BreakDecorator,
SectionViewDecorator SectionViewDecorator,
] ]
installed = None installed = None
@@ -1140,12 +1171,12 @@ class DecorationsHandler():
if cls.installed: if cls.installed:
cls.uninstall() cls.uninstall()
handler = cls() handler = cls()
cls.installed = SpaceView3D.draw_handler_add(handler, (context,), 'WINDOW', 'POST_PIXEL') cls.installed = SpaceView3D.draw_handler_add(handler, (context,), "WINDOW", "POST_PIXEL")
@classmethod @classmethod
def uninstall(cls): def uninstall(cls):
try: try:
SpaceView3D.draw_handler_remove(cls.installed, 'WINDOW') SpaceView3D.draw_handler_remove(cls.installed, "WINDOW")
except ValueError: except ValueError:
pass pass
cls.installed = None cls.installed = None
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com> # Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -125,15 +124,19 @@ class CreateDrawing(bpy.types.Operator):
- IFC file is created - IFC file is created
- Camera is in Orthographic mode - Camera is in Orthographic mode
""" """
bl_idname = "bim.create_drawing" bl_idname = "bim.create_drawing"
bl_label = "Create Drawing" bl_label = "Create Drawing"
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):
camera = context.scene.camera camera = context.scene.camera
return IfcStore.get_file() \ return (
and camera.type == "CAMERA" and camera.data.type == "ORTHO" \ IfcStore.get_file()
and camera.type == "CAMERA"
and camera.data.type == "ORTHO"
and camera.BIMObjectProperties.ifc_definition_id and camera.BIMObjectProperties.ifc_definition_id
)
def execute(self, context): def execute(self, context):
self.camera = context.scene.camera self.camera = context.scene.camera
@@ -568,9 +571,7 @@ class OpenSheet(bpy.types.Operator):
props = context.scene.DocProperties props = context.scene.DocProperties
open_with_user_command( open_with_user_command(
context.preferences.addons["blenderbim"].preferences.svg_command, context.preferences.addons["blenderbim"].preferences.svg_command,
os.path.join( os.path.join(context.scene.BIMProperties.data_dir, "sheets", props.active_sheet.name + ".svg"),
context.scene.BIMProperties.data_dir, "sheets", props.active_sheet.name + ".svg"
),
) )
return {"FINISHED"} return {"FINISHED"}
@@ -661,6 +662,7 @@ class OpenView(bpy.types.Operator):
class OpenViewCamera(bpy.types.Operator): class OpenViewCamera(bpy.types.Operator):
"""Select this drawing's camera object and expand its drawing properties""" """Select this drawing's camera object and expand its drawing properties"""
bl_idname = "bim.open_view_camera" bl_idname = "bim.open_view_camera"
bl_label = "Open View Camera" bl_label = "Open View Camera"
bl_options = {"REGISTER", "UNDO"} bl_options = {"REGISTER", "UNDO"}
@@ -947,9 +949,7 @@ class ActivateDrawingStyle(bpy.types.Operator):
def execute(self, context): def execute(self, context):
scene = context.scene scene = context.scene
if scene.camera.data.BIMCameraProperties.active_drawing_style_index < len( if scene.camera.data.BIMCameraProperties.active_drawing_style_index < len(scene.DocProperties.drawing_styles):
scene.DocProperties.drawing_styles
):
self.drawing_style = scene.DocProperties.drawing_styles[ self.drawing_style = scene.DocProperties.drawing_styles[
scene.camera.data.BIMCameraProperties.active_drawing_style_index scene.camera.data.BIMCameraProperties.active_drawing_style_index
] ]
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -281,6 +280,7 @@ class DocProperties(PropertyGroup):
def active_sheet(self): def active_sheet(self):
return self.sheets[self.active_sheet_index] return self.sheets[self.active_sheet_index]
class BIMCameraProperties(PropertyGroup): class BIMCameraProperties(PropertyGroup):
view_name: StringProperty(name="View Name") view_name: StringProperty(name="View Name")
target_view: EnumProperty( target_view: EnumProperty(
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -27,7 +26,11 @@ from odf.style import Style
class Scheduler: class Scheduler:
def schedule(self, infile, outfile): def schedule(self, infile, outfile):
self.svg = svgwrite.Drawing(outfile, debug=False, id="root",) self.svg = svgwrite.Drawing(
outfile,
debug=False,
id="root",
)
self.padding = 1 self.padding = 1
self.margin = 1 self.margin = 1
doc = load(infile) doc = load(infile)
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com> # Copyright (C) 2020, 2021 Maxim Vasilyev <qwiglydee@gmail.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -45,7 +44,7 @@ class External(svgwrite.container.Group):
self.xml = xml self.xml = xml
# Remove namespace # Remove namespace
ns = u"{http://www.w3.org/2000/svg}" ns = "{http://www.w3.org/2000/svg}"
nsl = len(ns) nsl = len(ns)
for elem in self.xml.iter(): for elem in self.xml.iter():
if elem.tag.startswith(ns): if elem.tag.startswith(ns):
@@ -123,12 +122,12 @@ class SvgWriter:
self.svg.add( self.svg.add(
self.svg.image( self.svg.image(
os.path.join("..", "diagrams", os.path.basename(self.background_image)), os.path.join("..", "diagrams", os.path.basename(self.background_image)),
**{"width": self.width, "height": self.height} **{"width": self.width, "height": self.height},
) )
) )
def draw_background_elements(self): def draw_background_elements(self):
return # TODO purge? return # TODO purge?
for element in self.ifc_cutter.background_elements: for element in self.ifc_cutter.background_elements:
if element["type"] == "polygon": if element["type"] == "polygon":
self.draw_polygon(element, "background") self.draw_polygon(element, "background")
@@ -180,7 +179,7 @@ class SvgWriter:
"text-anchor": "middle", "text-anchor": "middle",
"alignment-baseline": "middle", "alignment-baseline": "middle",
"dominant-baseline": "middle", "dominant-baseline": "middle",
} },
) )
) )
self.svg.add( self.svg.add(
@@ -193,7 +192,7 @@ class SvgWriter:
"text-anchor": "middle", "text-anchor": "middle",
"alignment-baseline": "middle", "alignment-baseline": "middle",
"dominant-baseline": "middle", "dominant-baseline": "middle",
} },
) )
) )
@@ -252,7 +251,7 @@ class SvgWriter:
"text-anchor": text_anchor, "text-anchor": text_anchor,
"alignment-baseline": "baseline", "alignment-baseline": "baseline",
"dominant-baseline": "baseline", "dominant-baseline": "baseline",
} },
) )
) )
@@ -294,7 +293,7 @@ class SvgWriter:
"text-anchor": "start", "text-anchor": "start",
"alignment-baseline": "baseline", "alignment-baseline": "baseline",
"dominant-baseline": "baseline", "dominant-baseline": "baseline",
} },
) )
) )
@@ -325,7 +324,7 @@ class SvgWriter:
"text-anchor": "middle", "text-anchor": "middle",
"alignment-baseline": "middle", "alignment-baseline": "middle",
"dominant-baseline": "middle", "dominant-baseline": "middle",
} },
) )
) )
self.draw_text_annotations() self.draw_text_annotations()
@@ -473,7 +472,9 @@ class SvgWriter:
) )
transform = "rotate({}, {}, {})".format( transform = "rotate({}, {}, {})".format(
angle, (text_position * self.scale)[0], (text_position * self.scale)[1], angle,
(text_position * self.scale)[0],
(text_position * self.scale)[1],
) )
if text_obj.data.BIMTextProperties.symbol != "None": if text_obj.data.BIMTextProperties.symbol != "None":
@@ -516,7 +517,7 @@ class SvgWriter:
"alignment-baseline": alignment_baseline, "alignment-baseline": alignment_baseline,
"dominant-baseline": alignment_baseline, "dominant-baseline": alignment_baseline,
"transform": transform, "transform": transform,
} },
) )
) )
@@ -607,7 +608,7 @@ class SvgWriter:
"font-size": annotation.Annotator.get_svg_text_size(2.5), "font-size": annotation.Annotator.get_svg_text_size(2.5),
"font-family": "OpenGost Type B TT", "font-family": "OpenGost Type B TT",
"text-anchor": "middle", "text-anchor": "middle",
} },
) )
) )
@@ -623,7 +624,7 @@ class SvgWriter:
return spline.bezier_points if spline.bezier_points else spline.points return spline.bezier_points if spline.bezier_points else spline.points
def draw_cut_polygons(self): def draw_cut_polygons(self):
return # deprecate? return # deprecate?
for polygon in self.ifc_cutter.cut_polygons: for polygon in self.ifc_cutter.cut_polygons:
self.draw_polygon(polygon, "cut") self.draw_polygon(polygon, "cut")
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -150,7 +149,6 @@ class BIM_PT_drawing_underlay(Panel):
row.operator("bim.activate_drawing_style") row.operator("bim.activate_drawing_style")
class BIM_PT_drawings(Panel): class BIM_PT_drawings(Panel):
bl_label = "SVG Drawings" bl_label = "SVG Drawings"
bl_idname = "BIM_PT_drawings" bl_idname = "BIM_PT_drawings"
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -91,12 +90,12 @@ class BIM_PT_mesh(Panel):
row = layout.row(align=True) row = layout.row(align=True)
op = row.operator("bim.switch_representation", text="Bake Voids", icon="SELECT_SUBTRACT") op = row.operator("bim.switch_representation", text="Bake Voids", icon="SELECT_SUBTRACT")
op.should_switch_all_meshes=True op.should_switch_all_meshes = True
op.should_reload = True op.should_reload = True
op.ifc_definition_id = props.ifc_definition_id op.ifc_definition_id = props.ifc_definition_id
op.disable_opening_subtractions = False op.disable_opening_subtractions = False
op = row.operator("bim.switch_representation", text="Dynamic Voids", icon="SELECT_INTERSECT") op = row.operator("bim.switch_representation", text="Dynamic Voids", icon="SELECT_INTERSECT")
op.should_switch_all_meshes=True op.should_switch_all_meshes = True
op.should_reload = True op.should_reload = True
op.ifc_definition_id = props.ifc_definition_id op.ifc_definition_id = props.ifc_definition_id
op.disable_opening_subtractions = True op.disable_opening_subtractions = True
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -36,8 +35,8 @@ class BIMGeoreferenceProperties(PropertyGroup):
is_editing: BoolProperty(name="Is Editing") is_editing: BoolProperty(name="Is Editing")
map_conversion: CollectionProperty(name="Map Conversion", type=Attribute) map_conversion: CollectionProperty(name="Map Conversion", type=Attribute)
projected_crs: CollectionProperty(name="Projected CRS", type=Attribute) projected_crs: CollectionProperty(name="Projected CRS", type=Attribute)
coordinate_input: StringProperty(name="Coordinate Input", description="Formatted \"x,y,z\" (without quotes)") coordinate_input: StringProperty(name="Coordinate Input", description='Formatted "x,y,z" (without quotes)')
coordinate_output: StringProperty(name="Coordinate Output", description="Formatted \"x,y,z\" (without quotes)") coordinate_output: StringProperty(name="Coordinate Output", description='Formatted "x,y,z" (without quotes)')
has_blender_offset: BoolProperty(name="Has Blender Offset") has_blender_offset: BoolProperty(name="Has Blender Offset")
blender_eastings: StringProperty(name="Blender Eastings", default="0") blender_eastings: StringProperty(name="Blender Eastings", default="0")
blender_northings: StringProperty(name="Blender Northings", default="0") blender_northings: StringProperty(name="Blender Northings", default="0")
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #
@@ -1,4 +1,3 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on # BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com> # Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# #

Some files were not shown because too many files have changed in this diff Show More