Commit Graph

712 Commits

Author SHA1 Message Date
Andrej730 c1ec42c95b mathutils deprecation - circle, plane, placements, curves #5192 2024-12-19 18:31:47 +05:00
Andrej730 63f56d2f21 mathutils -> numpy - polyline, rectangle #5192 2024-12-19 18:31:47 +05:00
civilx64 ad35ceef2a add missing import for ifcopenshell.api.georeference 2024-12-07 18:17:36 +01:00
Andrej730 2da5f2d61e set_element_value - optimizations setting enum values
1) Identify from previous pset value whether prop was an enum (by checking if previous value is a list), instead of searching through prop templates

2) Compare previous and new enum values - if they match, skip editing IFC.
2024-12-06 18:57:54 +05:00
Andrej730 13106d255c int formatting function #5039
Example - https://i.imgur.com/wDGFNci.png
2024-12-05 15:52:27 +05:00
Andrej730 c9847caa6a ifccsv - support importing enum values #4608 2024-11-27 18:30:37 +05:00
Andrej730 ab069f431a typing 2024-11-27 18:30:37 +05:00
Andrej730 12c08b0697 typing 2024-11-26 18:12:05 +05:00
Andrej730 b2e3a4dd82 typing 2024-11-21 18:11:37 +05:00
Andrej730 5a4326eb0f Fix calculating cost item resource value ignoring resource inheritance
Mentioned in #5744
2024-11-18 15:01:49 +05:00
Andrej730 68208d88ea Migrate - convert IfcQuantityCounts using float values to IfcQuantityNumber in ifc4x3 #5752
Traceback:
Traceback (most recent call last):
File "\bonsai\bim\module\patch\operator.py", line 187, in execute
core.run_migrate_patch(tool.Patch, infile=self.infile, outfile=self.outfile, schema=self.schema)
File "\bonsai\core\patch.py", line 30, in run_migrate_patch
patch.run_migrate_patch(infile, outfile, schema)
File "\bonsai\tool\patch.py", line 28, in run_migrate_patch
output = ifcpatch.execute(
^^^^^^^^^^^^^^^^^
File "\ifcpatch\__init__.py", line 85, in execute
patcher.patch()
File "\ifcpatch\recipes\Migrate.py", line 58, in patch
new_element = migrator.migrate(element, self.file_patched)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 363, in migrate
new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 393, in migrate_attributes
self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
File "\ifcopenshell\util\schema.py", line 494, in migrate_attribute
new_value.append(self.migrate(item, new_file))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 363, in migrate
new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\ifcopenshell\util\schema.py", line 393, in migrate_attributes
self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
File "\ifcopenshell\util\schema.py", line 497, in migrate_attribute
setattr(new_element, attribute.name(), value)
File "\ifcopenshell\entity_instance.py", line 325, in __setattr__
self[index] = value
~~~~^^^^^^^
File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
raise TypeError(
TypeError: attribute 'CountValue' for entity 'IFC4X3_ADD2.IfcQuantityCount' is expecting value of type 'INT', got 'float'.
Error: Python: Traceback (most recent call last):
File "\ifcopenshell\entity_instance.py", line 361, in __setitem__
self.method_list[idx](self.wrapped_data, idx, entity_instance.unwrap_value(value))
File "\ifcopenshell\ifcopenshell_wrapper.py", line 9271, in setArgumentAsInt
return _ifcopenshell_wrapper.entity_instance_setArgumentAsInt(self, i, v)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: in method 'entity_instance_setArgumentAsInt', argument 3 of type 'int'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "\ifcopenshell\entity_instance.py", line 325, in __setattr__
self[index] = value
~~~~^^^^^^^
File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
raise TypeError(
TypeError: attribute 'CountValue' for entity 'IFC4X3_ADD2.IfcQuantityCount' is expecting value of type 'INT', got 'float'.
2024-11-18 15:01:49 +05:00
Andrej730 818c2714e8 Migrate - convert IfcCountMeasures using float values to IfcNumericMeasure in ifc4x3 #5752
Traceback:

Traceback (most recent call last):
  File "\bonsai\bim\module\patch\operator.py", line 187, in execute
    core.run_migrate_patch(tool.Patch, infile=self.infile, outfile=self.outfile, schema=self.schema)
  File "\bonsai\core\patch.py", line 30, in run_migrate_patch
    patch.run_migrate_patch(infile, outfile, schema)
  File "\bonsai\tool\patch.py", line 28, in run_migrate_patch
    output = ifcpatch.execute(
             ^^^^^^^^^^^^^^^^^
  File "\ifcpatch\__init__.py", line 85, in execute
    patcher.patch()
  File "\ifcpatch\recipes\Migrate.py", line 58, in patch
    new_element = migrator.migrate(element, self.file_patched)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 358, in migrate
    new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 388, in migrate_attributes
    self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
  File "\ifcopenshell\util\schema.py", line 489, in migrate_attribute
    new_value.append(self.migrate(item, new_file))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 358, in migrate
    new_element = self.migrate_attributes(element, new_file, new_element, new_element_schema)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 388, in migrate_attributes
    self.migrate_attribute(attribute, element, new_file, new_element, new_element_schema)
  File "\ifcopenshell\util\schema.py", line 484, in migrate_attribute
    value = self.migrate(value, new_file)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\util\schema.py", line 346, in migrate
    return new_file.create_entity(element.is_a(), element.wrappedValue)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "\ifcopenshell\file.py", line 400, in create_entity
    e[idx] = arg
    ~^^^^^
  File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
    raise TypeError(
TypeError: attribute 'wrappedValue' for entity 'IFC4X3_ADD2.IfcCountMeasure' is expecting value of type 'INT', got 'float'.
Error: Python: Traceback (most recent call last):
  File "\ifcopenshell\entity_instance.py", line 361, in __setitem__
    self.method_list[idx](self.wrapped_data, idx, entity_instance.unwrap_value(value))
  File "\ifcopenshell\ifcopenshell_wrapper.py", line 9271, in setArgumentAsInt
    return _ifcopenshell_wrapper.entity_instance_setArgumentAsInt(self, i, v)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: in method 'entity_instance_setArgumentAsInt', argument 3 of type 'int'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "\ifcopenshell\file.py", line 400, in create_entity
    e[idx] = arg
    ~^^^^^
  File "\ifcopenshell\entity_instance.py", line 363, in __setitem__
    raise TypeError(
TypeError: attribute 'wrappedValue' for entity 'IFC4X3_ADD2.IfcCountMeasure' is expecting value of type 'INT', got 'float'.
2024-11-18 15:01:48 +05:00
Andrej730 545431d95d shapebuilder - fix issue creating profiles on ifc2x3
Position argument was only required for IfcParameterizedProfileDef, not for IfcArbitraryClosedProfileDef
2024-11-18 15:01:48 +05:00
Andrej730 934869af98 add_prop_template - consider pset template type for prop/measure types 2024-11-15 18:25:48 +05:00
Andrej730 dd0d0ed1af typing 2024-11-15 18:25:46 +05:00
Andrej730 ecff7980b3 PsetQto - interpret IFC4X3 as IFC4X3_ADD2 #5732 2024-11-12 14:52:47 +05:00
Andrej730 c409258ff3 calculate_cost_item_resource_value not to skip resources without quantities
Noticed the discrepancies for total cost value for resources in Resource UI and in Cost Schedule UI when the same resources assigned to the item. In Resource UI it was considering omitted quantity as 1.0 (https://github.com/IfcOpenShell/IfcOpenShell/blob/c61e3670a8cf248aa5a229bae2dc29eef041fe47/src/ifcopenshell-python/ifcopenshell/util/cost.py#L53-L55) and in Cost Schedule UI it was skipping those resources completely.

For cost items it is documented in ifc that if quantity is omitted then costs are considered to be total. Perhaps it's just not documented for the resources? Anyway, not sure if this way is completly correct but making sure resource quantity to be treated similarly in different parts of the codebase.

Related to - https://github.com/buildingSMART/IFC4.3.x-development/issues/910
cc @myoualid
2024-11-11 18:30:55 +05:00
Andrej730 36f12b5145 Fix get_pset tests after 832ad6d31 2024-11-08 18:32:20 +05:00
Andrej730 5597095198 util.element - check schema version explicitly 2024-11-08 18:32:19 +05:00
Andrej730 1b2508f8de Fix util.element for cases with multiple rels #5713
Got report that there was an issue with get_parts not returning all parts if there are multiple IfcRelAggregates involved though it is valid ifc. Fixed the same possible issue for ContainsElements, IsNestedBy
2024-11-08 18:32:19 +05:00
Andrej730 fe8c396e12 typing 2024-11-08 18:32:19 +05:00
Andrej730 832ad6d318 Prioritize existing data types for templates props for safety
Noticed working on #5596 and #5708 a few issue when pset template is changing the prop types.

E.g. prop had string data type and now template suggests that it should be a float.
Previously, it might error trying to cast a string to a float. Now it will show a float until user will set it to null, then next time it will be loaded from the template data type.

Another example - prop was a string and now it's a boolean. Previously, it would be cast to boolean implicitly. E.g. "test" -> bool("test") -> True. And if user wouldn't be paying attention then enabling pset editing and saving it would make them lose "test" value.

Now - https://imgchest.com/p/na7ke99wb78
Before - https://imgchest.com/p/5xy23rr3z4l
2024-11-07 16:21:12 +05:00
Andrej730 3ad713d5c6 Patch Ifc4 psets that missing IfcThermalTransmittanceMeasure type in ThermalTransmittance props
Similar to #5708
Affected psets: Pset_RampCommon, Pset_StairCommon.
2024-11-07 16:21:12 +05:00
Andrej730 822107a6ed Patch Ifc4 psets that missing IfcBoolean type in LoadBearing props #5708
Affected psets: Pset_RoofCommon, Pset_RampCommon, Pset_StairCommon.
Also fixed the missing description for that prop.
2024-11-07 16:21:12 +05:00
Andrej730 4fdb313449 typing 2024-11-06 17:50:47 +05:00
Andrej730 36bd89bb40 ifcopenshell.util.element.get_type to be less strict again after d443c5e
I guess by accident in d443c5e I've made this method too strict and it broke get_references using it for IfcPropertySets. Maybe it's a good idea to make it more strict in the future, for now just restoring the previous behaviour.
2024-11-06 16:04:02 +05:00
Andrej730 b35ef2f101 black . 2024-10-31 18:40:13 +05:00
Thomas Krijnen 4cd8428d1d Update unit.py 2024-10-31 11:00:02 +01:00
Andrej730 cb2895cc41 util.shape for materials and material_ids 2024-10-15 17:57:00 +05:00
Andrej730 392b458563 ifcopenshell.util.element.replace_element 2024-10-03 17:15:34 +05:00
Andrej730 4b39631b98 get_element_by_style to support IfcFillAreaStyleTiles 2024-10-01 15:38:46 +05:00
Andrej730 e040dc4562 get_elements_by_style to support curve styles used in IfcFillAreaStyleHatching 2024-10-01 15:38:45 +05:00
Andrej730 0dff19ba6a Project library dropdown - show only libraries compatible with the current schema
To prevent errors trying to append elements from the wrong schema library
2024-09-27 19:06:31 +05:00
Dion Moult 4261fdbed6 Rewrite coordinate offset to use np.array not Vector() for precision 2024-09-27 23:09:00 +10:00
Andrej730 dd9de98290 Store edges representation item ids in Triangulation 2024-09-25 19:09:14 +05:00
Andrej730 7045fba9c0 black . 2024-09-24 19:30:00 +05:00
myoualid 455012de4c cost web ui:
- add "Linked rate" column,
- assign a cost rate to multiple cost items by selecting linked rate cells & clicking the "assign" button on the chosen cost rate
#5369
2024-09-23 20:19:06 +01:00
Andrej730 65f9a745a3 black . 2024-09-23 19:33:27 +05:00
myoualid 193daff617 web-ui: enable assigning parametric quantities from queries #5369 2024-09-23 02:21:15 +01:00
myoualid 9f542c30b3 cost module web ui:
- add setting options to hide/show columns
- Cost classification column
- New Cost Classification Form to display active classification library, add/delete classification references
2024-09-22 20:00:09 +01:00
Dion Moult 2a8d43c42c Basic editing of item attributes implemented 2024-09-21 14:27:17 +10:00
myoualid 8c4ab5bf03 enable displaying schedule of rates - web ui ref #5369 2024-09-21 00:16:11 +01:00
Andrej730 d4df21c4be ifcopenshell.util.shape.get_normals 2024-09-20 22:03:19 +05:00
Andrej730 4dbfeefe53 Fix UI errors getting elements using qset in IFC2X3
In IFC2X3 IfcQuantitySet didn't existed yet
Mentioned in #5404
2024-09-18 18:44:33 +05:00
Dion Moult dbfa4ecf65 Fix minor regression in fe0be0c 2024-09-18 22:58:22 +10:00
Dion Moult 736d91f38e Shape builder now supportes meshy things and faceted breps 2024-09-18 21:35:40 +10:00
Andrej730 6d8ffc27cc ifcopenshell.util.shape.get_material_colors 2024-09-16 18:54:13 +05:00
Andrej730 6a47e68b78 fix typo 2024-09-16 18:54:12 +05:00
Andrej730 b911b68aec typing 2024-09-13 18:50:54 +05:00
Thomas Krijnen 1697e49e65 Merge branch 'v0.8.0' into fix-ifccircle-ifcellipse-processing 2024-09-12 20:18:57 +02:00