mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 09:32:37 +00:00
Fix #3596. Fix bug where objects marked as edited were not unmarked after saving when toggling mode. Also fix bug where updating representation didn't check whether or not the meshlike representation has openings applied (which would bake the openings, instead of leaving them dynamic).
This commit is contained in:
@@ -16,14 +16,15 @@
|
|||||||
# 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/>.
|
||||||
|
|
||||||
import bpy
|
|
||||||
import ifccsv
|
|
||||||
import ifcopenshell
|
|
||||||
import os
|
import os
|
||||||
import logging
|
import bpy
|
||||||
import json
|
import json
|
||||||
import webbrowser
|
import ifccsv
|
||||||
|
import logging
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import webbrowser
|
||||||
|
import ifcopenshell
|
||||||
|
import blenderbim.tool as tool
|
||||||
from blenderbim.bim.ifc import IfcStore
|
from blenderbim.bim.ifc import IfcStore
|
||||||
from blenderbim.bim.handler import purge_module_data
|
from blenderbim.bim.handler import purge_module_data
|
||||||
|
|
||||||
|
|||||||
@@ -239,6 +239,10 @@ class UpdateRepresentation(bpy.types.Operator, Operator):
|
|||||||
product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
|
product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
|
||||||
material = ifcopenshell.util.element.get_material(product, should_skip_usage=True)
|
material = ifcopenshell.util.element.get_material(product, should_skip_usage=True)
|
||||||
|
|
||||||
|
if getattr(product, "HasOpenings", False) and obj.data.BIMMeshProperties.has_openings_applied:
|
||||||
|
# Meshlike things with openings can only be updated without openings applied.
|
||||||
|
return
|
||||||
|
|
||||||
if not product.is_a("IfcGridAxis"):
|
if not product.is_a("IfcGridAxis"):
|
||||||
tool.Geometry.clear_cache(product)
|
tool.Geometry.clear_cache(product)
|
||||||
|
|
||||||
@@ -1442,9 +1446,11 @@ class OverrideModeSetObject(bpy.types.Operator):
|
|||||||
self.reload_representation(obj)
|
self.reload_representation(obj)
|
||||||
else:
|
else:
|
||||||
self.reload_representation(obj)
|
self.reload_representation(obj)
|
||||||
|
tool.Ifc.finish_edit(obj)
|
||||||
|
|
||||||
for obj in self.unchanged_objs_with_openings:
|
for obj in self.unchanged_objs_with_openings:
|
||||||
self.reload_representation(obj)
|
self.reload_representation(obj)
|
||||||
|
tool.Ifc.finish_edit(obj)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
def reload_representation(self, obj):
|
def reload_representation(self, obj):
|
||||||
|
|||||||
@@ -435,6 +435,7 @@ class BIMMeshProperties(PropertyGroup):
|
|||||||
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
ifc_definition_id: IntProperty(name="IFC Definition ID")
|
||||||
ifc_boolean_id: IntProperty(name="IFC Boolean ID")
|
ifc_boolean_id: IntProperty(name="IFC Boolean ID")
|
||||||
obj: bpy.props.PointerProperty(type=bpy.types.Object)
|
obj: bpy.props.PointerProperty(type=bpy.types.Object)
|
||||||
|
has_openings_applied: BoolProperty(name="Has Openings Applied", default=True)
|
||||||
is_native: BoolProperty(name="Is Native", default=False)
|
is_native: BoolProperty(name="Is Native", default=False)
|
||||||
is_swept_solid: BoolProperty(name="Is Swept Solid")
|
is_swept_solid: BoolProperty(name="Is Swept Solid")
|
||||||
is_parametric: BoolProperty(name="Is Parametric", default=False)
|
is_parametric: BoolProperty(name="Is Parametric", default=False)
|
||||||
|
|||||||
@@ -460,6 +460,7 @@ class Geometry(blenderbim.core.tool.Geometry):
|
|||||||
mesh = ifc_importer.create_mesh(element, shape)
|
mesh = ifc_importer.create_mesh(element, shape)
|
||||||
ifc_importer.material_creator.load_existing_materials()
|
ifc_importer.material_creator.load_existing_materials()
|
||||||
ifc_importer.material_creator.create(element, obj, mesh)
|
ifc_importer.material_creator.create(element, obj, mesh)
|
||||||
|
mesh.BIMMeshProperties.has_openings_applied = apply_openings
|
||||||
|
|
||||||
return mesh
|
return mesh
|
||||||
|
|
||||||
|
|||||||
@@ -146,6 +146,13 @@ class Ifc(blenderbim.core.tool.Ifc):
|
|||||||
def edit(cls, obj):
|
def edit(cls, obj):
|
||||||
IfcStore.edited_objs.add(obj)
|
IfcStore.edited_objs.add(obj)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def finish_edit(cls, obj):
|
||||||
|
try:
|
||||||
|
IfcStore.edited_objs.remove(obj)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resolve_uri(cls, uri):
|
def resolve_uri(cls, uri):
|
||||||
if os.path.isabs(uri):
|
if os.path.isabs(uri):
|
||||||
|
|||||||
Reference in New Issue
Block a user