Fix bug where you could accidentally add a context other than what you selected in the UI

This commit is contained in:
Dion Moult
2021-09-30 12:08:07 +10:00
parent 352a4866dd
commit 9753ed07a0
13 changed files with 214 additions and 196 deletions
+3 -3
View File
@@ -23,7 +23,7 @@ import ifcopenshell.api.owner.settings
from blenderbim.bim.module.drawing.prop import RasterStyleProperty
from bpy.app.handlers import persistent
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.owner.prop import getPersons, getOrganisations
from blenderbim.bim.module.owner.prop import get_user_person, get_user_organisation
from ifcopenshell.api.attribute.data import Data as AttributeData
from ifcopenshell.api.material.data import Data as MaterialData
from ifcopenshell.api.style.data import Data as StyleData
@@ -230,12 +230,12 @@ def setDefaultProperties(scene):
)
ifcopenshell.api.owner.settings.get_person = (
lambda ifc: ifc.by_id(int(bpy.context.scene.BIMOwnerProperties.user_person))
if getPersons(None, None) and bpy.context.scene.BIMOwnerProperties.user_person
if get_user_person(None, None) and bpy.context.scene.BIMOwnerProperties.user_person
else None
)
ifcopenshell.api.owner.settings.get_organisation = (
lambda ifc: ifc.by_id(int(bpy.context.scene.BIMOwnerProperties.user_organisation))
if getOrganisations(None, None) and bpy.context.scene.BIMOwnerProperties.user_organisation
if get_user_organisation(None, None) and bpy.context.scene.BIMOwnerProperties.user_organisation
else None
)
ifcopenshell.api.owner.settings.get_application = get_application
@@ -17,18 +17,19 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
from . import ui, operator
from . import ui, prop, operator
classes = (
operator.AddSubcontext,
operator.RemoveSubcontext,
prop.BIMContextProperties,
ui.BIM_PT_context,
)
def register():
pass
bpy.types.Scene.BIMContextProperties = bpy.props.PointerProperty(type=prop.BIMContextProperties)
def unregister():
pass
del bpy.types.Scene.BIMContextProperties
@@ -0,0 +1,34 @@
import blenderbim.tool as tool
class ContextData:
data = {}
is_loaded = False
@classmethod
def load(cls):
cls.data = {"contexts": cls.get_contexts()}
cls.is_loaded = True
@classmethod
def get_contexts(cls):
results = []
for context in tool.Ifc.get().by_type("IfcGeometricRepresentationContext", include_subtypes=False):
results.append(
{"id": context.id(), "context_type": context.ContextType, "subcontexts": cls.get_subcontexts(context)}
)
return results
@classmethod
def get_subcontexts(cls, context):
results = []
for subcontext in context.HasSubContexts:
results.append(
{
"id": subcontext.id(),
"context_type": subcontext.ContextType,
"context_identifier": subcontext.ContextIdentifier,
"target_view": subcontext.TargetView,
}
)
return results
@@ -19,11 +19,19 @@
import bpy
import blenderbim.tool as tool
import blenderbim.core.context as core
import blenderbim.bim.module.context.data
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.context.data import Data
class AddSubcontext(bpy.types.Operator):
class Operator:
def execute(self, context):
IfcStore.execute_ifc_operator(self, context)
blenderbim.bim.module.context.data.ContextData.is_loaded = False
return {"FINISHED"}
class AddSubcontext(bpy.types.Operator, Operator):
bl_idname = "bim.add_subcontext"
bl_label = "Add Subcontext"
bl_options = {"REGISTER", "UNDO"}
@@ -31,31 +39,15 @@ class AddSubcontext(bpy.types.Operator):
subcontext: bpy.props.StringProperty()
target_view: bpy.props.StringProperty()
def execute(self, context):
return IfcStore.execute_ifc_operator(self, context)
def _execute(self, context):
core.add_context(
tool.Ifc(),
context=self.context or context.scene.BIMProperties.available_contexts,
subcontext=self.subcontext or context.scene.BIMProperties.available_subcontexts,
target_view=self.target_view or context.scene.BIMProperties.available_target_views,
)
Data.load(IfcStore.get_file())
return {"FINISHED"}
core.add_context(tool.Ifc, context=self.context, subcontext=self.subcontext, target_view=self.target_view)
class RemoveSubcontext(bpy.types.Operator):
class RemoveSubcontext(bpy.types.Operator, Operator):
bl_idname = "bim.remove_subcontext"
bl_label = "Remove Context"
bl_options = {"REGISTER", "UNDO"}
ifc_definition_id: bpy.props.IntProperty()
def execute(self, context):
return IfcStore.execute_ifc_operator(self, context)
context: bpy.props.IntProperty()
def _execute(self, context):
self.file = IfcStore.get_file()
core.remove_context(tool.Ifc(), context=self.file.by_id(self.ifc_definition_id))
Data.load(self.file)
return {"FINISHED"}
core.remove_context(tool.Ifc, context=tool.Ifc.get().by_id(self.context))
@@ -0,0 +1,48 @@
import bpy
from blenderbim.bim.prop import StrProperty, Attribute
from blenderbim.bim.module.context.data import ContextData
from bpy.types import PropertyGroup
from bpy.props import (
PointerProperty,
StringProperty,
EnumProperty,
BoolProperty,
IntProperty,
FloatProperty,
FloatVectorProperty,
CollectionProperty,
)
class BIMContextProperties(PropertyGroup):
contexts: EnumProperty(items=[("Model", "Model", ""), ("Plan", "Plan", "")], name="Contexts")
subcontexts: EnumProperty(
items=[
("Annotation", "Annotation", ""),
("Axis", "Axis", ""),
("Box", "Box", ""),
("FootPrint", "FootPrint", ""),
("Reference", "Reference", ""),
("Body", "Body", ""),
("Clearance", "Clearance", ""),
("CoG", "CoG", ""),
("Profile", "Profile", ""),
("SurveyPoints", "SurveyPoints", ""),
("Lighting", "Lighting", ""),
],
name="Subcontexts",
)
target_views: EnumProperty(
items=[
("GRAPH_VIEW", "GRAPH_VIEW", ""),
("SKETCH_VIEW", "SKETCH_VIEW", ""),
("MODEL_VIEW", "MODEL_VIEW", ""),
("PLAN_VIEW", "PLAN_VIEW", ""),
("REFLECTED_PLAN_VIEW", "REFLECTED_PLAN_VIEW", ""),
("SECTION_VIEW", "SECTION_VIEW", ""),
("ELEVATION_VIEW", "ELEVATION_VIEW", ""),
("USERDEFINED", "USERDEFINED", ""),
("NOTDEFINED", "NOTDEFINED", ""),
],
name="Target Views",
)
@@ -16,12 +16,12 @@
# 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/>.
from bpy.types import Panel
from ifcopenshell.api.context.data import Data
from blenderbim.bim.ifc import IfcStore
import bpy
import blenderbim.tool as tool
from blenderbim.bim.module.context.data import ContextData
class BIM_PT_context(Panel):
class BIM_PT_context(bpy.types.Panel):
bl_label = "IFC Geometric Representation Contexts"
bl_idname = "BIM_PT_context"
bl_options = {"DEFAULT_CLOSED"}
@@ -31,28 +31,31 @@ class BIM_PT_context(Panel):
@classmethod
def poll(cls, context):
return IfcStore.get_file()
return tool.Ifc.get()
def draw(self, context):
if not Data.is_loaded:
Data.load(IfcStore.get_file())
if not ContextData.is_loaded:
ContextData.load()
props = context.scene.BIMProperties
props = context.scene.BIMContextProperties
row = self.layout.row(align=True)
row.prop(props, "available_contexts", text="")
row.prop(props, "available_subcontexts", text="")
row.prop(props, "available_target_views", text="")
row.operator("bim.add_subcontext", icon="ADD", text="")
row.prop(props, "contexts", text="")
row.prop(props, "subcontexts", text="")
row.prop(props, "target_views", text="")
op = row.operator("bim.add_subcontext", icon="ADD", text="")
op.context = props.contexts
op.subcontext = props.subcontexts
op.target_view = props.target_views
for ifc_definition_id, context in Data.contexts.items():
for context in ContextData.data["contexts"]:
box = self.layout.box()
row = box.row(align=True)
row.label(text=context["ContextType"])
row.operator("bim.remove_subcontext", icon="X", text="").ifc_definition_id = ifc_definition_id
for ifc_definition_id2, subcontext in context["HasSubContexts"].items():
row.label(text=context["context_type"])
row.operator("bim.remove_subcontext", icon="X", text="").context = context["id"]
for subcontext in context["subcontexts"]:
row = box.row(align=True)
row.label(text=subcontext["ContextType"])
row.label(text=subcontext["ContextIdentifier"])
row.label(text=subcontext["TargetView"])
row.operator("bim.remove_subcontext", icon="X", text="").ifc_definition_id = ifc_definition_id2
row.label(text=subcontext["context_type"])
row.label(text=subcontext["context_identifier"])
row.label(text=subcontext["target_view"])
row.operator("bim.remove_subcontext", icon="X", text="").context = subcontext["id"]
@@ -20,30 +20,30 @@ import bpy
from . import ui, prop, operator
classes = (
operator.EnableEditingPerson,
operator.DisableEditingPerson,
operator.AddPerson,
operator.EditPerson,
operator.RemovePerson,
operator.AddPersonAttribute,
operator.RemovePersonAttribute,
operator.EnableEditingOrganisation,
operator.DisableEditingOrganisation,
operator.AddOrganisation,
operator.EditOrganisation,
operator.RemoveOrganisation,
operator.EnableEditingRole,
operator.DisableEditingRole,
operator.AddRole,
operator.EditRole,
operator.RemoveRole,
operator.EnableEditingAddress,
operator.DisableEditingAddress,
operator.AddAddress,
operator.AddAddressAttribute,
operator.RemoveAddressAttribute,
operator.AddOrganisation,
operator.AddPerson,
operator.AddPersonAttribute,
operator.AddRole,
operator.DisableEditingAddress,
operator.DisableEditingOrganisation,
operator.DisableEditingPerson,
operator.DisableEditingRole,
operator.EditAddress,
operator.EditOrganisation,
operator.EditPerson,
operator.EditRole,
operator.EnableEditingAddress,
operator.EnableEditingOrganisation,
operator.EnableEditingPerson,
operator.EnableEditingRole,
operator.RemoveAddress,
operator.RemoveAddressAttribute,
operator.RemoveOrganisation,
operator.RemovePerson,
operator.RemovePersonAttribute,
operator.RemoveRole,
prop.BIMOwnerProperties,
ui.BIM_PT_people,
ui.BIM_PT_organisations,
@@ -85,7 +85,7 @@ class PeopleData(RolesAddressesData):
@classmethod
def get_people(cls):
people = []
for person in tool.Ifc().get().by_type("IfcPerson"):
for person in tool.Ifc.get().by_type("IfcPerson"):
people.append(
{
"id": person.id(),
@@ -102,7 +102,7 @@ class PeopleData(RolesAddressesData):
@classmethod
def get_person_name(cls, person):
if tool.Ifc().get_schema() == "IFC2X3":
if tool.Ifc.get_schema() == "IFC2X3":
name = person.Id
else:
name = person.Identification
@@ -143,7 +143,7 @@ class OrganisationsData(RolesAddressesData):
@classmethod
def get_organisations(cls):
organisations = []
for organisation in tool.Ifc().get().by_type("IfcOrganization"):
for organisation in tool.Ifc.get().by_type("IfcOrganization"):
organisations.append(
{
"id": organisation.id(),
@@ -156,3 +156,21 @@ class OrganisationsData(RolesAddressesData):
}
)
return organisations
class OwnerData:
data = {}
is_loaded = False
@classmethod
def load(cls):
cls.data = {"user_person": cls.get_user_person(), "user_organisation": cls.get_user_organisation()}
cls.is_loaded = True
@classmethod
def get_user_person(cls):
return [(str(p.id()), p[0] or "Unnamed", "") for p in tool.Ifc.get().by_type("IfcPerson")]
@classmethod
def get_user_organisation(cls):
return [(str(p.id()), p[0] or "Unnamed", "") for p in tool.Ifc.get().by_type("IfcOrganization")]
@@ -22,15 +22,14 @@ import blenderbim.tool as tool
import blenderbim.core.owner as core
import blenderbim.bim.module.owner.data
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.owner.data import Data
# TODO: Just testing
class Operator:
def execute(self, context):
IfcStore.execute_ifc_operator(self, context)
blenderbim.bim.module.owner.data.PeopleData.is_loaded = False
blenderbim.bim.module.owner.data.OrganisationsData.is_loaded = False
blenderbim.bim.module.owner.data.OwnerData.is_loaded = False
return {"FINISHED"}
@@ -41,7 +40,7 @@ class EnableEditingPerson(bpy.types.Operator, Operator):
person: bpy.props.IntProperty()
def _execute(self, context):
core.enable_editing_person(tool.PersonEditor(), person=tool.Ifc().get().by_id(self.person))
core.enable_editing_person(tool.PersonEditor, person=tool.Ifc.get().by_id(self.person))
class DisableEditingPerson(bpy.types.Operator, Operator):
@@ -50,7 +49,7 @@ class DisableEditingPerson(bpy.types.Operator, Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.disable_editing_person(tool.PersonEditor())
core.disable_editing_person(tool.PersonEditor)
class AddPerson(bpy.types.Operator, Operator):
@@ -59,7 +58,7 @@ class AddPerson(bpy.types.Operator, Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.add_person(tool.Ifc())
core.add_person(tool.Ifc)
class EditPerson(bpy.types.Operator, Operator):
@@ -68,7 +67,7 @@ class EditPerson(bpy.types.Operator, Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.edit_person(tool.Ifc(), tool.PersonEditor())
core.edit_person(tool.Ifc, tool.PersonEditor)
class RemovePerson(bpy.types.Operator, Operator):
@@ -78,7 +77,7 @@ class RemovePerson(bpy.types.Operator, Operator):
person: bpy.props.IntProperty()
def _execute(self, context):
core.remove_person(tool.Ifc(), person=tool.Ifc().get().by_id(self.person))
core.remove_person(tool.Ifc, person=tool.Ifc.get().by_id(self.person))
class AddPersonAttribute(bpy.types.Operator, Operator):
@@ -88,7 +87,7 @@ class AddPersonAttribute(bpy.types.Operator, Operator):
name: bpy.props.StringProperty()
def _execute(self, context):
core.add_person_attribute(tool.PersonEditor(), name=self.name)
core.add_person_attribute(tool.PersonEditor, name=self.name)
class RemovePersonAttribute(bpy.types.Operator, Operator):
@@ -99,7 +98,7 @@ class RemovePersonAttribute(bpy.types.Operator, Operator):
id: bpy.props.IntProperty()
def _execute(self, context):
core.remove_person_attribute(tool.PersonEditor(), name=self.name, id=self.id)
core.remove_person_attribute(tool.PersonEditor, name=self.name, id=self.id)
class EnableEditingRole(bpy.types.Operator, Operator):
@@ -109,7 +108,7 @@ class EnableEditingRole(bpy.types.Operator, Operator):
role: bpy.props.IntProperty()
def _execute(self, context):
core.enable_editing_role(tool.RoleEditor(), role=tool.Ifc().get().by_id(self.role))
core.enable_editing_role(tool.RoleEditor, role=tool.Ifc.get().by_id(self.role))
class DisableEditingRole(bpy.types.Operator, Operator):
@@ -118,7 +117,7 @@ class DisableEditingRole(bpy.types.Operator, Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.disable_editing_role(tool.RoleEditor())
core.disable_editing_role(tool.RoleEditor)
class AddRole(bpy.types.Operator, Operator):
@@ -128,7 +127,7 @@ class AddRole(bpy.types.Operator, Operator):
parent: bpy.props.IntProperty()
def _execute(self, context):
core.add_role(tool.Ifc(), parent=tool.Ifc().get().by_id(self.parent))
core.add_role(tool.Ifc, parent=tool.Ifc.get().by_id(self.parent))
class EditRole(bpy.types.Operator, Operator):
@@ -137,7 +136,7 @@ class EditRole(bpy.types.Operator, Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.edit_role(tool.Ifc(), tool.RoleEditor())
core.edit_role(tool.Ifc, tool.RoleEditor)
class RemoveRole(bpy.types.Operator, Operator):
@@ -147,7 +146,7 @@ class RemoveRole(bpy.types.Operator, Operator):
role: bpy.props.IntProperty()
def _execute(self, context):
core.remove_role(tool.Ifc(), role=tool.Ifc().get().by_id(self.role))
core.remove_role(tool.Ifc, role=tool.Ifc.get().by_id(self.role))
class AddAddress(bpy.types.Operator, Operator):
@@ -158,7 +157,7 @@ class AddAddress(bpy.types.Operator, Operator):
ifc_class: bpy.props.StringProperty()
def _execute(self, context):
core.add_address(tool.Ifc(), parent=tool.Ifc().get().by_id(self.parent), ifc_class=self.ifc_class)
core.add_address(tool.Ifc, parent=tool.Ifc.get().by_id(self.parent), ifc_class=self.ifc_class)
class AddAddressAttribute(bpy.types.Operator, Operator):
@@ -189,7 +188,7 @@ class EnableEditingAddress(bpy.types.Operator, Operator):
address: bpy.props.IntProperty()
def _execute(self, context):
core.enable_editing_address(tool.AddressEditor(), address=tool.Ifc().get().by_id(self.address))
core.enable_editing_address(tool.AddressEditor, address=tool.Ifc.get().by_id(self.address))
class DisableEditingAddress(bpy.types.Operator, Operator):
@@ -198,7 +197,7 @@ class DisableEditingAddress(bpy.types.Operator, Operator):
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.disable_editing_address(tool.AddressEditor())
core.disable_editing_address(tool.AddressEditor)
class EditAddress(bpy.types.Operator, Operator):
@@ -217,7 +216,7 @@ class RemoveAddress(bpy.types.Operator, Operator):
address: bpy.props.IntProperty()
def _execute(self, context):
core.remove_address(tool.Ifc(), address=tool.Ifc().get().by_id(self.address))
core.remove_address(tool.Ifc, address=tool.Ifc.get().by_id(self.address))
class EnableEditingOrganisation(bpy.types.Operator, Operator):
@@ -228,7 +227,7 @@ class EnableEditingOrganisation(bpy.types.Operator, Operator):
def _execute(self, context):
core.enable_editing_organisation(
tool.OrganisationEditor, organisation=tool.Ifc().get().by_id(self.organisation)
tool.OrganisationEditor, organisation=tool.Ifc.get().by_id(self.organisation)
)
@@ -18,8 +18,7 @@
import bpy
from blenderbim.bim.prop import StrProperty, Attribute
from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.owner.data import Data
from blenderbim.bim.module.owner.data import OwnerData
from bpy.types import PropertyGroup
from bpy.props import (
PointerProperty,
@@ -32,47 +31,25 @@ from bpy.props import (
CollectionProperty,
)
_persons_enum = []
_organisations_enum = []
def get_user_person(self, context):
if not OwnerData.is_loaded:
OwnerData.load()
return OwnerData.data["user_person"]
def purge():
global _persons_enum
global _organisations_enum
_persons_enum.clear()
_organisations_enum.clear()
def getPersons(self, context):
global _persons_enum
if not Data.is_loaded:
Data.load(IfcStore.get_file())
_persons_enum.clear()
for ifc_id, person in Data.people.items():
if "Id" in person:
identifier = person["Id"] or ""
else:
identifier = person["Identification"] or ""
_persons_enum.append((str(ifc_id), identifier, ""))
return _persons_enum
def getOrganisations(self, context):
global _organisations_enum
if not Data.is_loaded:
Data.load(IfcStore.get_file())
_organisations_enum.clear()
for ifc_id, organisation in Data.organisations.items():
_organisations_enum.append((str(ifc_id), organisation["Name"], ""))
return _organisations_enum
def get_user_organisation(self, context):
if not OwnerData.is_loaded:
OwnerData.load()
return OwnerData.data["user_organisation"]
class BIMOwnerProperties(PropertyGroup):
active_person_id: IntProperty(name="Active Person Id")
person_attributes: CollectionProperty(name="Person Attributes", type=Attribute)
middle_names: CollectionProperty(type=StrProperty, name="Middle Names")
prefix_titles: CollectionProperty(type=StrProperty, name="Prefixes")
suffix_titles: CollectionProperty(type=StrProperty, name="Suffixes")
active_person_id: IntProperty(name="Active Person Id")
active_organisation_id: IntProperty(name="Active Organisation Id")
organisation_attributes: CollectionProperty(name="Organisation Attributes", type=Attribute)
active_role_id: IntProperty(name="Active Role Id")
@@ -84,5 +61,5 @@ class BIMOwnerProperties(PropertyGroup):
facsimile_numbers: CollectionProperty(type=StrProperty, name="Facsimile Numbers")
electronic_mail_addresses: CollectionProperty(type=StrProperty, name="Emails")
messaging_ids: CollectionProperty(type=StrProperty, name="IMs")
user_person: EnumProperty(items=getPersons, name="Person")
user_organisation: EnumProperty(items=getOrganisations, name="Organisation")
user_person: EnumProperty(items=get_user_person, name="Person")
user_organisation: EnumProperty(items=get_user_organisation, name="Organisation")
@@ -19,16 +19,7 @@
import bpy
import blenderbim.bim.helper
import blenderbim.tool as tool
from blenderbim.bim.module.owner.data import PeopleData, OrganisationsData
from bpy.types import Panel
from ifcopenshell.api.owner.data import Data
from blenderbim.bim.ifc import IfcStore
def draw_prop_on_new_row(layout, owner, attribute, align=False, **kwargs):
row = layout.row(align=align)
row.prop(owner, attribute, **kwargs)
return row
from blenderbim.bim.module.owner.data import PeopleData, OrganisationsData, OwnerData
def draw_roles(box, parent):
@@ -95,7 +86,7 @@ class BIM_PT_people(bpy.types.Panel):
@classmethod
def poll(cls, context):
return tool.Ifc().get()
return tool.Ifc.get()
def draw(self, context):
if not PeopleData.is_loaded:
@@ -141,7 +132,7 @@ class BIM_PT_people(bpy.types.Panel):
row.operator("bim.remove_person", icon="X", text="").person = person["id"]
class BIM_PT_organisations(Panel):
class BIM_PT_organisations(bpy.types.Panel):
bl_label = "IFC Organisations"
bl_idname = "BIM_PT_organisations"
bl_options = {"DEFAULT_CLOSED"}
@@ -151,7 +142,7 @@ class BIM_PT_organisations(Panel):
@classmethod
def poll(cls, context):
return IfcStore.get_file()
return tool.Ifc.get()
def draw(self, context):
if not OrganisationsData.is_loaded:
@@ -185,7 +176,7 @@ class BIM_PT_organisations(Panel):
row.operator("bim.remove_organisation", icon="X", text="").organisation = organisation["id"]
class BIM_PT_owner(Panel):
class BIM_PT_owner(bpy.types.Panel):
bl_label = "IFC Owner History"
bl_idname = "BIM_PT_owner"
bl_options = {"DEFAULT_CLOSED"}
@@ -195,22 +186,24 @@ class BIM_PT_owner(Panel):
@classmethod
def poll(cls, context):
return IfcStore.get_file()
return tool.Ifc.get()
def draw(self, context):
if not Data.is_loaded:
Data.load(IfcStore.get_file())
if not OwnerData.is_loaded:
OwnerData.load()
self.layout.use_property_split = True
self.layout.use_property_decorate = False
props = context.scene.BIMOwnerProperties
if not Data.people:
if not OwnerData.data["user_person"]:
self.layout.label(text="No people found.")
else:
draw_prop_on_new_row(self.layout, props, "user_person")
row = self.layout.row()
row.prop(props, "user_person")
if not Data.organisations:
if not OwnerData.data["user_organisation"]:
self.layout.label(text="No organisations found.")
else:
draw_prop_on_new_row(self.layout, props, "user_organisation")
row = self.layout.row()
row.prop(props, "user_organisation")
-47
View File
@@ -39,9 +39,6 @@ from bpy.props import (
cwd = os.path.dirname(os.path.realpath(__file__))
materialpsetnames_enum = []
contexts_enum = []
subcontexts_enum = []
target_views_enum = []
def getAttributeEnumValues(self, context):
@@ -99,47 +96,6 @@ def getContexts(self, context):
return results
def getSubcontexts(self, context):
global subcontexts_enum
subcontexts_enum.clear()
# TODO: allow override of generated subcontexts?
subcontexts = [
"Annotation",
"Axis",
"Box",
"FootPrint",
"Reference",
"Body",
"Clearance",
"CoG",
"Profile",
"SurveyPoints",
"Lighting",
]
for subcontext in subcontexts:
subcontexts_enum.append((subcontext, subcontext, ""))
return subcontexts_enum
def getTargetViews(self, context):
global target_views_enum
target_views_enum.clear()
target_views = [
"GRAPH_VIEW",
"SKETCH_VIEW",
"MODEL_VIEW",
"PLAN_VIEW",
"REFLECTED_PLAN_VIEW",
"SECTION_VIEW",
"ELEVATION_VIEW",
"USERDEFINED",
"NOTDEFINED",
]
for target_view in target_views:
target_views_enum.append((target_view, target_view, ""))
return target_views_enum
class StrProperty(PropertyGroup):
pass
@@ -225,9 +181,6 @@ class BIMProperties(PropertyGroup):
export_schema: EnumProperty(items=[("IFC4", "IFC4", ""), ("IFC2X3", "IFC2X3", "")], name="IFC Schema")
last_transaction: StringProperty(name="Last Transaction")
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")
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
@@ -4,11 +4,11 @@ Feature: Context
Scenario: Add subcontext
Given an empty IFC project
When I press "bim.add_subcontext(context='Model')"
When I press "bim.add_subcontext(context='Model', subcontext='Body', target_view='MODEL_VIEW')"
Then nothing happens
Scenario: Remove subcontext
Given an empty IFC project
When the variable "context_id" is "IfcStore.get_file().by_type('IfcGeometricRepresentationContext')[0].id()"
And I press "bim.remove_subcontext(ifc_definition_id={context_id})"
When the variable "context" is "IfcStore.get_file().by_type('IfcGeometricRepresentationContext')[0].id()"
And I press "bim.remove_subcontext(context={context})"
Then nothing happens