mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +00:00
fix #4729: add a description and category when creating a new material
This commit is contained in:
@@ -120,6 +120,8 @@ class AddMaterial(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
bl_options = {"REGISTER", "UNDO"}
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
obj: bpy.props.StringProperty(name="Material Name")
|
obj: bpy.props.StringProperty(name="Material Name")
|
||||||
name: bpy.props.StringProperty(default="Default")
|
name: bpy.props.StringProperty(default="Default")
|
||||||
|
category: bpy.props.StringProperty(default="")
|
||||||
|
description: bpy.props.StringProperty(default="")
|
||||||
|
|
||||||
def invoke(self, context, event):
|
def invoke(self, context, event):
|
||||||
return context.window_manager.invoke_props_dialog(self)
|
return context.window_manager.invoke_props_dialog(self)
|
||||||
@@ -127,10 +129,14 @@ class AddMaterial(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
row = self.layout
|
row = self.layout
|
||||||
row.prop(self, "name", text="Name")
|
row.prop(self, "name", text="Name")
|
||||||
|
row = self.layout
|
||||||
|
row.prop(self, "description", text="Description")
|
||||||
|
row = self.layout
|
||||||
|
row.prop(self, "category", text="Category")
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
obj = bpy.data.materials.get(self.obj) if self.obj else None
|
obj = bpy.data.materials.get(self.obj) if self.obj else None
|
||||||
core.add_material(tool.Ifc, tool.Material, tool.Style, obj=obj, name=self.name)
|
core.add_material(tool.Ifc, tool.Material, tool.Style, obj=obj, name=self.name, category=self.category, description=self.description)
|
||||||
material_prop_purge()
|
material_prop_purge()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ def unlink_material(ifc, obj=None):
|
|||||||
ifc.unlink(obj=obj)
|
ifc.unlink(obj=obj)
|
||||||
|
|
||||||
|
|
||||||
def add_material(ifc, material, style, obj=None, name=None):
|
def add_material(ifc, material, style, obj=None, name=None, category=None, description=None):
|
||||||
if not obj:
|
if not obj:
|
||||||
obj = material.add_default_material_object(name)
|
obj = material.add_default_material_object(name)
|
||||||
ifc_material = ifc.run("material.add_material", name=material.get_name(obj))
|
ifc_material = ifc.run("material.add_material", name=material.get_name(obj), category=category, description=description)
|
||||||
ifc.link(ifc_material, obj)
|
ifc.link(ifc_material, obj)
|
||||||
ifc_style = style.get_style(obj)
|
ifc_style = style.get_style(obj)
|
||||||
if ifc_style:
|
if ifc_style:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from typing import Optional
|
|||||||
|
|
||||||
|
|
||||||
def add_material(
|
def add_material(
|
||||||
file: ifcopenshell.file, name: Optional[str] = None, category: Optional[str] = None
|
file: ifcopenshell.file, name: Optional[str] = None, category: Optional[str] = None, description: Optional[str] = None
|
||||||
) -> ifcopenshell.entity_instance:
|
) -> ifcopenshell.entity_instance:
|
||||||
"""Adds a new material
|
"""Adds a new material
|
||||||
|
|
||||||
@@ -50,11 +50,16 @@ def add_material(
|
|||||||
Note that categories are not available in IFC2X3. This shortcoming is
|
Note that categories are not available in IFC2X3. This shortcoming is
|
||||||
one of the big reasons projects should upgrade to IFC4.
|
one of the big reasons projects should upgrade to IFC4.
|
||||||
|
|
||||||
|
Additionally, a material's description provides more information beyond
|
||||||
|
its name or category.
|
||||||
|
|
||||||
:param name: The name of the material, typically tagged in a finishes
|
:param name: The name of the material, typically tagged in a finishes
|
||||||
drawing or schedule.
|
drawing or schedule.
|
||||||
:type name: str, optional
|
:type name: str, optional
|
||||||
:param category: The category of the material.
|
:param category: The category of the material.
|
||||||
:type category: str, optional
|
:type category: str, optional
|
||||||
|
:param description: A description of the material.
|
||||||
|
:type description: str, optional
|
||||||
:return: The newly created IfcMaterial
|
:return: The newly created IfcMaterial
|
||||||
:rtype: ifcopenshell.entity_instance
|
:rtype: ifcopenshell.entity_instance
|
||||||
|
|
||||||
@@ -63,8 +68,8 @@ def add_material(
|
|||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
# Let's create two materials with their respective categories
|
# Let's create two materials with their respective categories
|
||||||
concrete = ifcopenshell.api.run("material.add_material", model, name="CON01", category="concrete")
|
concrete = ifcopenshell.api.run("material.add_material", model, name="CON01", category="concrete", description="Garage Slab")
|
||||||
steel = ifcopenshell.api.run("material.add_material", model, name="ST01", category="steel")
|
steel = ifcopenshell.api.run("material.add_material", model, name="ST01", category="steel", description="Corten Steel")
|
||||||
|
|
||||||
# Let's imagine an urban concrete bench which is purely made out of concrete
|
# Let's imagine an urban concrete bench which is purely made out of concrete
|
||||||
concrete_bench = ifcopenshell.api.run("root.create_entity", model, ifc_class="IfcFurnitureType")
|
concrete_bench = ifcopenshell.api.run("root.create_entity", model, ifc_class="IfcFurnitureType")
|
||||||
@@ -73,9 +78,11 @@ def add_material(
|
|||||||
# "Style" has been specified.
|
# "Style" has been specified.
|
||||||
ifcopenshell.api.run("material.assign_material", model, products=[concrete_bench], material=concrete)
|
ifcopenshell.api.run("material.assign_material", model, products=[concrete_bench], material=concrete)
|
||||||
"""
|
"""
|
||||||
settings = {"name": name or "Unnamed", "category": category}
|
settings = {"name": name or "Unnamed", "category": category, "description": description }
|
||||||
|
|
||||||
material = file.create_entity("IfcMaterial", **{"Name": settings["name"] or "Unnamed"})
|
material = file.create_entity("IfcMaterial", **{"Name": settings["name"] or "Unnamed"})
|
||||||
if settings["category"]:
|
if settings["category"]:
|
||||||
material.Category = settings["category"]
|
material.Category = settings["category"]
|
||||||
|
if settings["description"]:
|
||||||
|
material.Description = settings["description"]
|
||||||
return material
|
return material
|
||||||
|
|||||||
Reference in New Issue
Block a user