mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 05:10:53 +00:00
New purge classifications feature, and imported systems shows up immediately
This commit is contained in:
@@ -184,6 +184,7 @@ if bpy is not None:
|
|||||||
operator.SaveDrawingStyle,
|
operator.SaveDrawingStyle,
|
||||||
operator.ActivateDrawingStyle,
|
operator.ActivateDrawingStyle,
|
||||||
operator.EditVectorStyle,
|
operator.EditVectorStyle,
|
||||||
|
operator.PurgeProjectClassifications,
|
||||||
prop.StrProperty,
|
prop.StrProperty,
|
||||||
prop.Variable,
|
prop.Variable,
|
||||||
prop.Role,
|
prop.Role,
|
||||||
|
|||||||
@@ -1431,11 +1431,16 @@ class IfcImporter():
|
|||||||
classification_filename = '{}-{}'.format(
|
classification_filename = '{}-{}'.format(
|
||||||
Path(os.path.basename(self.ifc_import_settings.input_file)).stem, element.Name)
|
Path(os.path.basename(self.ifc_import_settings.input_file)).stem, element.Name)
|
||||||
classification_file.write(os.path.join(
|
classification_file.write(os.path.join(
|
||||||
bpy.context.scene.BIMProperties.schema_dir, 'classifications',
|
bpy.context.scene.BIMProperties.schema_dir, 'project_classifications',
|
||||||
'{}.ifc'.format(classification_filename)))
|
'{}.ifc'.format(classification_filename)))
|
||||||
classification.filename = classification_filename
|
classification.filename = classification_filename
|
||||||
self.classifications[classification.filename] = classification
|
self.classifications[classification.filename] = classification
|
||||||
|
|
||||||
|
self.schema_dir = bpy.context.scene.BIMProperties.schema_dir
|
||||||
|
from . import prop
|
||||||
|
prop.classification_enum.clear()
|
||||||
|
prop.getClassifications(self, bpy.context)
|
||||||
|
|
||||||
def get_classification_references(self, references):
|
def get_classification_references(self, references):
|
||||||
results = []
|
results = []
|
||||||
for reference in references:
|
for reference in references:
|
||||||
|
|||||||
@@ -1871,7 +1871,7 @@ class AddClassification(bpy.types.Operator):
|
|||||||
'reference_tokens': 'ReferenceTokens'
|
'reference_tokens': 'ReferenceTokens'
|
||||||
}
|
}
|
||||||
for key, value in data_map.items():
|
for key, value in data_map.items():
|
||||||
if getattr(data, value):
|
if hasattr(data, value) and getattr(data, value):
|
||||||
setattr(classification, key, str(getattr(data, value)))
|
setattr(classification, key, str(getattr(data, value)))
|
||||||
classification.filename = context.scene.BIMProperties.classification
|
classification.filename = context.scene.BIMProperties.classification
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
@@ -3572,10 +3572,25 @@ class RemoveDrawing(bpy.types.Operator):
|
|||||||
class EditVectorStyle(bpy.types.Operator):
|
class EditVectorStyle(bpy.types.Operator):
|
||||||
bl_idname = 'bim.edit_vector_style'
|
bl_idname = 'bim.edit_vector_style'
|
||||||
bl_label = 'Edit Vector Style'
|
bl_label = 'Edit Vector Style'
|
||||||
index: bpy.props.IntProperty()
|
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
camera = context.scene.camera
|
camera = context.scene.camera
|
||||||
vector_style = context.scene.DocProperties.drawing_styles[camera.data.BIMCameraProperties.active_drawing_style_index].vector_style
|
vector_style = context.scene.DocProperties.drawing_styles[camera.data.BIMCameraProperties.active_drawing_style_index].vector_style
|
||||||
bpy.data.texts.load(os.path.join(context.scene.BIMProperties.data_dir, 'styles', vector_style + '.css'))
|
bpy.data.texts.load(os.path.join(context.scene.BIMProperties.data_dir, 'styles', vector_style + '.css'))
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
|
class PurgeProjectClassifications(bpy.types.Operator):
|
||||||
|
bl_idname = 'bim.purge_project_classifications'
|
||||||
|
bl_label = 'Purge Project Classifications'
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
self.schema_dir = bpy.context.scene.BIMProperties.schema_dir
|
||||||
|
path = os.path.join(self.schema_dir, 'project_classifications')
|
||||||
|
files = os.listdir(path)
|
||||||
|
for f in files:
|
||||||
|
os.remove(os.path.join(path, f))
|
||||||
|
from . import prop
|
||||||
|
prop.classification_enum.clear()
|
||||||
|
prop.getClassifications(self, context)
|
||||||
|
return {'FINISHED'}
|
||||||
|
|||||||
@@ -304,6 +304,8 @@ def getClassifications(self, context):
|
|||||||
classification_enum.clear()
|
classification_enum.clear()
|
||||||
files = os.listdir(os.path.join(self.schema_dir, 'classifications'))
|
files = os.listdir(os.path.join(self.schema_dir, 'classifications'))
|
||||||
classification_enum.extend([(f.replace('.ifc', ''), f.replace('.ifc', ''), '') for f in files])
|
classification_enum.extend([(f.replace('.ifc', ''), f.replace('.ifc', ''), '') for f in files])
|
||||||
|
files = os.listdir(os.path.join(self.schema_dir, 'project_classifications'))
|
||||||
|
classification_enum.extend([(f.replace('.ifc', ''), f.replace('.ifc', ''), '') for f in files])
|
||||||
return classification_enum
|
return classification_enum
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ class IfcSchema():
|
|||||||
def load_classification(self, filename):
|
def load_classification(self, filename):
|
||||||
if filename not in self.classifications:
|
if filename not in self.classifications:
|
||||||
classification_path = os.path.join(self.schema_dir, 'classifications', '{}.ifc'.format(filename))
|
classification_path = os.path.join(self.schema_dir, 'classifications', '{}.ifc'.format(filename))
|
||||||
|
if not os.path.isfile(classification_path):
|
||||||
|
classification_path = os.path.join(self.schema_dir, 'project_classifications', '{}.ifc'.format(filename))
|
||||||
self.classification_files[filename] = ifcopenshell.open(classification_path)
|
self.classification_files[filename] = ifcopenshell.open(classification_path)
|
||||||
self.classifications[filename] = self.classification_files[filename].by_type('IfcClassification')[0]
|
self.classifications[filename] = self.classification_files[filename].by_type('IfcClassification')[0]
|
||||||
classification = self.classifications[filename]
|
classification = self.classifications[filename]
|
||||||
|
|||||||
@@ -512,6 +512,7 @@ class BIM_PT_classifications(Panel):
|
|||||||
|
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
row.prop(props, "classification", text='')
|
row.prop(props, "classification", text='')
|
||||||
|
row.operator("bim.purge_project_classifications", text='', icon='TRASH')
|
||||||
row.operator("bim.add_classification", text='', icon='ADD')
|
row.operator("bim.add_classification", text='', icon='ADD')
|
||||||
|
|
||||||
if context.scene.BIMProperties.classification_references.raw_data:
|
if context.scene.BIMProperties.classification_references.raw_data:
|
||||||
|
|||||||
Reference in New Issue
Block a user