diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index fc75125dbb..f48183d29d 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -58,6 +58,7 @@ classes = ( operator.RemoveClassification, operator.FetchLibraryInformation, operator.FetchExternalMaterial, + operator.FetchObjectPassport, prop.BIMProperties, prop.BIMLibrary, prop.MapConversion, diff --git a/src/ifcblenderexport/blenderbim/data/doc/proxy.opass b/src/ifcblenderexport/blenderbim/data/doc/proxy.opass new file mode 100644 index 0000000000..c2dcd24e5f --- /dev/null +++ b/src/ifcblenderexport/blenderbim/data/doc/proxy.opass @@ -0,0 +1,6 @@ +{ + "blender": { + "uri": "high-res.blend", + "identification": "high-res" + } +} diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index e015a70723..d4863f525a 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -680,3 +680,29 @@ class FetchLibraryInformation(bpy.types.Operator): def execute(self, context): # TODO return {'FINISHED'} + + +class FetchObjectPassport(bpy.types.Operator): + bl_idname = 'bim.fetch_object_passport' + bl_label = 'Fetch Object Passport' + + def execute(self, context): + for document in bpy.context.active_object.BIMObjectProperties.documents: + if not document.file[-6:] == '.opass': + continue + with open(os.path.join(bpy.context.scene.BIMProperties.data_dir, 'doc', document.file)) as f: + self.object_pass = json.load(f) + if 'blender' in self.object_pass: + self.fetch_blender() + return {'FINISHED'} + + def fetch_blender(self): + identification = self.object_pass['blender']['identification'] + uri = os.path.join(bpy.context.scene.BIMProperties.data_dir, + 'doc', + self.object_pass['blender']['uri']) + bpy.ops.wm.link( + filename=identification, + directory=os.path.join(uri, 'Mesh') + ) + bpy.context.active_object.data = bpy.data.meshes[identification] diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index 8844865b35..e3012d8f4a 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -11,9 +11,9 @@ class BIM_PT_object(Panel): @classmethod def poll(cls, context): return context.active_object is not None and hasattr(context.active_object, "BIMObjectProperties") - + def draw(self, context): - + if context.active_object is None: return layout = self.layout @@ -55,6 +55,9 @@ class BIM_PT_object(Panel): row.prop(props, 'applicable_documents', text='') row.operator('bim.add_document') + row = layout.row() + row.operator('bim.fetch_object_passport') + for index, document in enumerate(props.documents): row = layout.row(align=True) row.prop(document, 'file', text='') @@ -86,7 +89,7 @@ class BIM_PT_mesh(Panel): def poll(cls, context): return context.active_object is not None and context.active_object.type == "MESH" and \ hasattr(context.active_object.data, "BIMMeshProperties") - + def draw(self, context): if not context.active_object.data: return @@ -123,11 +126,11 @@ class BIM_PT_material(Panel): bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' bl_context = 'material' - + @classmethod def poll(cls, context): return context.active_object is not None and context.active_object.active_material is not None - + def draw(self, context): if not bpy.context.active_object.active_material: return