Commit Graph

3720 Commits

Author SHA1 Message Date
Raj 124c02897c Feature faster unit method ---> Main (#5257)
* feature_faster_unit_method > main: added constants

* feature_faster_unit_method > main: extended `file` class to dynamically save unit information

* feature_faster_unit_method > main: refactored `get_property_unit` method

1. split out case that returns the wrong type (dictionary of units) into its own method

2. cleaned up (but preserved) logic

3. refactored common part of all cases (the method which prioritises unit then value-entity then measure_class)

---------

Co-authored-by: raj-open <raj-open@users.noreply.github.com>
Co-authored-by: Dion Moult <dion@thinkmoult.com>
2025-01-26 19:04:49 +11:00
Bruno Perdigão 2b1a59a4f8 Refactor how offset and direction sense interact for wall and slabs. 2025-01-25 16:05:04 -03:00
Dion Moult 38835a4092 See #6030. You can now select elements in groups recursively. 2025-01-25 14:11:42 +11:00
Andrej730 f3fc55f246 Change <logical> primitive data type from bool to enum
As it also has a third value "UNKNOWN" which has it's own meanig in IFC and therefore IfcLogical cannot be represented by simple booleans.

Example in Bonsai - https://i.imgur.com/xuPMcwA.png
2025-01-24 18:45:13 +05:00
Andrej730 d37caedda7 layer.add_layer_with_style 2025-01-24 18:45:12 +05:00
Dion Moult 1083651d0a Bump IOS back up to 2024-12-14 2025-01-24 09:49:44 +11:00
Andrej730 3eeb58dded assign_structural_analysis_model to support batching 2025-01-23 18:14:17 +05:00
Andrej730 42d01ac222 Fix append_asset conversion issue after 3ffc0bc #6012
Custom file.add wasn't considering IfcLengthMeasure attributes...
2025-01-23 18:14:16 +05:00
Andrej730 5bc91ec4e4 append_asset - fix bug identifying None profiles as equivalent 2025-01-23 18:14:16 +05:00
Andrej730 5c3045b4db Temporarily disable 3ffc0bc due to a bug with units conversion 2025-01-22 20:45:06 +05:00
Andrej730 b812d21282 Fix non-existent name argument in add_si_unit docs 2025-01-22 19:07:44 +05:00
Andrej730 605a29786c Fix tests after 7b62b03
Since calculate_unit_scale now requires a project.

    def calculate_unit_scale(ifc_file: ifcopenshell.file, unit_type: str = "LENGTHUNIT") -> float:
        """Returns a unit scale factor to convert to and from IFC project units and SI units.

        Example:

        .. code:: python

            ifc_project_length * unit_scale = si_meters
            si_meters / unit_scale = ifc_project_length

        :param ifc_file: The IFC file.
        :param unit_type: The type of SI unit, defaults to "LENGTHUNIT"
        :returns: The scale factor
        """
>       if not (units := ifc_file.by_type("IfcProject")[0].UnitsInContext):
E       IndexError: list index out of range
2025-01-22 18:24:52 +05:00
Andrej730 74a9669fa8 Fix error tabbing into IfcRevolvedAreaSolid with a boolean + add resolve_base_items
resolve_items couldn't find IfcRevolvedAreaSolid inside a boolean result
2025-01-22 16:35:22 +05:00
Andrej730 391091ad12 typing 2025-01-22 16:34:58 +05:00
Andrej730 a774a75509 black . 2025-01-22 16:00:11 +05:00
Bruno Perdigão c72f17068c Add support for direction sense and offset in slabs with x_angle 2025-01-21 10:49:29 -03:00
Bruno Perdigão 5cf4740f8e Add direction sense and offset support for slabs 2025-01-21 10:49:29 -03:00
Bruno Perdigão 3740b86678 Add handlers to update layer when adding and removing material layer 2025-01-21 10:49:29 -03:00
Dion Moult 7b62b035c9 Fix #5964. Only get the unit assignment from the project to prevent ambiguity.
I really don't know why I didn't do this before.
2025-01-20 23:50:03 +11:00
Andrej730 3ffc0bc39c append_asset to use custom file.add to prevent duplicating profiles and materials #5925 2025-01-20 16:23:31 +05:00
Andrej730 ecf0d255f7 Roll back build from a65aa92 #6001 2025-01-20 16:16:39 +05:00
Andrej730 c0499a2c88 black . 2025-01-20 16:16:38 +05:00
Dion Moult a65aa92c87 See #5999. Revert to older bot build before speed regression. 2025-01-20 12:15:36 +11:00
Dion Moult 5c058dff3e Fix #5766. Bump IOS. 2025-01-19 21:49:51 +11:00
Dion Moult a57a0eb4eb See #5972. Prioritise clipping results where possible. 2025-01-19 01:09:11 +11:00
Dion Moult e40644c4f6 See #5972. You can now remove boolean operations in the stack without deleting operands. 2025-01-19 01:08:47 +11:00
Dion Moult 8c746b1a2c Validate representation type items when leaving item mode. 2025-01-19 00:30:30 +11:00
Dion Moult 8e98aecc0b Document add boolean API 2025-01-19 00:30:30 +11:00
Dion Moult a12427e44a See #5972. Add tests for adding boolean and check against recursive booleans and invalid boolean items. 2025-01-18 21:13:54 +11:00
Dion Moult 35734f4b67 Guess representation type from items based on where rule
Previously we never implemented this in a very strict way so it was
prone to mistakes.
2025-01-18 18:35:13 +11:00
Dion Moult c54ea1e5d2 Shape builder can now create blocks 2025-01-18 18:34:40 +11:00
Andrej730 133459faec typo 2025-01-16 17:36:10 +05:00
Andrej730 521a8183e7 Fix #5953 after d6e6a6d 2025-01-16 17:36:09 +05:00
Taku Makoni 21624d6065 Wrong Import Package (#5982) 2025-01-16 12:20:59 +11:00
Taku Makoni b9f40342b2 Grammatical error 2025-01-16 11:52:09 +11:00
Andrej730 0ea513818b Support assigning material sets as usages from UI #5933
It's on alt+click in Materials UI, see example - https://imgur.com/a/8gP7iAZ
2025-01-15 18:41:19 +05:00
Andrej730 a52e3615d6 Map ifc2x3 IfcAnnotationOccurrence to IfcStyledItems in ifc4 #5917 2025-01-14 17:41:58 +05:00
Andrej730 b7c18221f4 get_bbox - optimize by using numpy arrays 2025-01-13 17:53:02 +05:00
Andrej730 7a49f1611e get_shape_matrix - small optimization
reuse existing matrix instead of recreating new
2025-01-13 17:53:02 +05:00
Andrej730 a968b61d02 np_matrix_to_euler, np_matrix_normalized 2025-01-13 17:53:01 +05:00
Andrej730 0ac9d739f8 remove unused code 2025-01-13 17:53:01 +05:00
Andrej730 0601802005 typing 2025-01-13 17:53:01 +05:00
Dion Moult e29f686d3f Update setting literal from old name of "debug" to new name "debug-boolean". 2025-01-13 15:45:27 +11:00
Dion Moult 8cf7057abc Fix #5954. Special automatic movement of features shouldn't then also move children of those features.
If you move a wall, and that wall has features (e.g. openings), it's
desirable to also move those openings (because they are invisible). This
is a special exception to `should_transform_children` because the
definition of the feature (opening) is inherently tied to the parent
(wall).

What wasn't considered is that this would typically then also move
subchildren of the features (e.g. fills like doors). I'm surprised
nobody caught this earlier.

I did also consider another approach where if you move a wall, it moves
all unfilled openings, and if you move a door which fills a opening, it
moves the opening too. Intuitively it sounds nice, but it doesn't work
because:

 - Openings can have multiple fillings. If you move all fillings, they
all fight to move the openings.
 - All logic about children goes one way: a placement may have child
placements relative to it. This breaks the convention (if moving a door
instead moves its opening) which can make brains explode.
 - It starts to conflate rules about relative / referenced placements
with spatial decomposition. We assume all IFCs are valid and follows the
convention of relative placement but we cannot guarantee this. This also
leads to brain explosion.
2025-01-13 15:44:52 +11:00
Dion Moult 316b9554d4 Fix #5959. Bug where default selection basket in selector query was not added per facet list.
Previously the code looked for additive facets (entity, instance)
anywhere in the query, and then only added the default basket once at
the beginning of the query. This change makes it look for additive
facets in order (that way you could start with a default selection, and
then later use an additive facet) and does it per facet list (so you can
omit the additive facet at the beginning of each list).
2025-01-13 12:46:44 +11:00
Dion Moult 0eb987fc07 Black 2025-01-12 22:43:41 +11:00
LM-Nascimento 80996dee1f Update unit.py 2025-01-12 17:25:21 +11:00
c4rlosdias d1ad082979 Add derived unit 2025-01-12 17:12:20 +11:00
Thomas Krijnen ba9693519b Remove mathutils import from shape_builder.py 2025-01-12 17:05:32 +11:00
Thomas Krijnen 1b6ee26854 Don't fail on empty ReferencedSource in IfcTester 2025-01-05 14:40:27 +01:00