Compare commits

...

194 Commits

Author SHA1 Message Date
Dion Moult 968cceb725 Fix #3627. Bug where exclude didn't take into account entities are "OR" not "AND". Whoops. 2023-08-24 11:50:48 +10:00
Sigma Dimensions (Yass) 002985a446 run black 2023-08-23 21:21:19 +01:00
Sigma Dimensions (Yass) 5adc29b0b3 Feature to calculate required resources 2023-08-23 21:21:03 +01:00
Sigma Dimensions (Yass) 52ea4ff44d Calculates the number of resources based on required person-hours. 2023-08-23 21:19:16 +01:00
Sigma Dimensions (Yass) 4e31a87c20 clean up Resource UI using column layout 2023-08-23 21:15:59 +01:00
Jesusbill 5d85390715 Fix duplicate id in EP_set_Drawing template 2023-08-23 17:01:25 +02:00
Andrej730 3e13eb8942 bump ifcsverchok release in readme 2023-08-23 18:43:27 +05:00
Andrej730 262c6d1fcb added UI to display connections for realizing elements
Example - https://imgur.com/a/1ZZlTwp
2023-08-23 18:42:07 +05:00
Andrej730 12b5a88861 Added small UI to show realizing elements for the connections
Example - https://i.imgur.com/JLDcnbK.png
2023-08-23 18:42:06 +05:00
Andrej730 2ccc9d886e test to make sure nothing happened to ifcsverchok 😅 2023-08-23 18:42:06 +05:00
Andrej730 a78769c8ff a bit faster renaming ifc elements when renaming blender objects
Previously when you renamed blender object it was requiring the "Ifc.../" prefix so it would also change the name for ifc element. So when you wanted to rename something you'd only select and change the name part without prefix.

Now you can just type the name right in after using F2 which seems a bit quicker by a few less clicks.

Before - https://imgur.com/a/Rn7a17W
After - https://imgur.com/a/a3lmxte
2023-08-23 18:42:06 +05:00
Andrej730 1a142ad5eb fixed bug in mep transitions
it wasn't taking into account that offset can be too big to sustain the angle
2023-08-23 18:42:06 +05:00
Andrej730 2bc22e150c added tests for shape builder transition length calculator 2023-08-23 18:42:06 +05:00
Sigma Dimensions (Yass) aad5d280fd you can now also update resource numbers (usage) from the task ICOM resource list 2023-08-23 14:13:16 +01:00
Sigma Dimensions (Yass) 7ab07ed149 refactor highligh_task code 2023-08-23 14:04:39 +01:00
Dion Moult 3690998dbc Fix #3620. Bug where manually inserted windows should preseve the existing Z value. 2023-08-23 23:03:13 +10:00
Sigma Dimensions (Yass) 1b83fcc1c7 when editing sequence relationships, enabling selecting successor and predecessor task 2023-08-23 14:02:53 +01:00
Sigma Dimensions (Yass) 5cf25c45f9 feature to select a resource in resource tree from task ICOM list 2023-08-23 13:59:31 +01:00
Dion Moult efa734c06e Fix #3628. Minor issue where regex queries didn't load properly. 2023-08-23 22:42:21 +10:00
Dion Moult e242244ec0 The copy property tool now works on enumerated properties. Hooray for copying over statuses! 2023-08-23 17:47:20 +10:00
Andrej730 6f9da163fb Small fix for 422f772c4 2023-08-23 12:32:37 +05:00
Dion Moult a3fd169bb6 IfcPatch now uses the new facet selector syntax. 2023-08-23 17:10:17 +10:00
Dion Moult 899056f929 Due to popular demand, custom EPset_Status to be used for "userdefined" status values as well as for things which don't have a status. 2023-08-23 17:10:17 +10:00
Dion Moult 132fef1b76 New Status panel for managing statuses in the costing / scheduling tab. 2023-08-23 17:10:17 +10:00
Andrej730 422f772c40 Fixed bug with remembering materials assigned to faces
The problem was that bim.update_representation was assigning representation styles without taking into account that some styles may not be actually used in the mesh, so it was always assigning first style (blender material) to the first IFCPOLYGONALFACESET even though it might be using for example the 3rd style.

More - https://community.osarch.org/discussion/1636/materials-not-remembering-their-assigment
2023-08-23 11:07:57 +05:00
Sigma Dimensions (Yass) 66f5081ada implement calculating task duration based on resource usage change for fixed person-hours and prevent constrained attributes from updating 2023-08-23 02:19:44 +01:00
Dion Moult 839e35f1da Fix #3627. Error where using filters incorrectly applied includes / excludes. 2023-08-23 11:15:38 +10:00
Sigma Dimensions (Yass) 40d9713326 consolidate constraint utilities into ifcopenshell.util.constraint and refactor 2023-08-23 02:11:18 +01:00
rileywong311 17b04ad697 Update Brick feature tests 2023-08-22 13:15:01 -07:00
rileywong311 2f99dd8e98 Catch Assign_Brick_Reference with no selections 2023-08-22 13:15:01 -07:00
rileywong311 49f825ba82 Refactor+polish Brick UI 2023-08-22 13:15:01 -07:00
rileywong311 3f18ad0bc5 Use "split" in Brick relations list to better align layout 2023-08-22 13:15:01 -07:00
rileywong311 991c42e816 Update Brick References Panel 2023-08-22 13:15:01 -07:00
rileywong311 20d6eae50a Export/assign Brick library reference uses "label" if there is one 2023-08-22 13:15:01 -07:00
rileywong311 9740582a84 Brick UI relations list uses "label" if there is one 2023-08-22 13:15:01 -07:00
rileywong311 a8046a6d69 Restore Brick select ifcGlobalID functionality 2023-08-22 13:15:01 -07:00
rileywong311 d6655a5c14 Move Brick "set last saved" to BrickStore 2023-08-22 13:15:01 -07:00
rileywong311 0a3a2db4ae Simplify buttons for add Brick relations manually 2023-08-22 13:15:01 -07:00
rileywong311 499eb5ea14 Rework Brick UI into toggle panels 2023-08-22 13:15:01 -07:00
rileywong311 b8ca287883 Fix up convert_ifc_to_brick
Remove line separation between code, but add comments
Add full URI to Brick relations
Fix typo where "system_uris" was written as "space_uris"
Remove unnecessary get of "distribution_elements = brick.get_convertable_brick_elements()" again
2023-08-22 13:15:01 -07:00
rileywong311 52f3392ece Remove Brick data debugging printouts 2023-08-22 13:15:01 -07:00
rileywong311 d53641ce5e Check Brick library location exists 2023-08-22 13:15:01 -07:00
Sigma Dimensions (Yass) 7a3ad6c3a1 forgotten bits and bobs + run black 2023-08-22 20:03:09 +01:00
Sigma Dimensions (Yass) 0b2007011e Feature to constrain a resource work or number of used resources 2023-08-22 20:01:19 +01:00
Sigma Dimensions (Yass) eae6983ca5 Fix calculating resource work based from parent's productivity and improve UI to show this 2023-08-22 19:54:37 +01:00
Sigma Dimensions (Yass) 0ec337748f improve purge of remove_metric usecase 2023-08-22 19:36:01 +01:00
Sigma Dimensions (Yass) 2699278ba3 api usecase to add a reference path to a metric objective 2023-08-22 19:34:47 +01:00
Sigma Dimensions (Yass) 0406166d8a fix updating an objective's metric 2023-08-22 19:21:26 +01:00
Andrej730 2128eda87b Save blenderbim last commit hash to the ifc header
Now it's possible to identify blenderbim version from .ifc file which is useful for debugging

Example:
FILE_NAME('test.ifc','2023-08-22T18:07:07+05:00',(),(),'IfcOpenShell v0.7.0-fc50bdd3a','BlenderBIM 0.0.999999-64bc7af','Nobody');
2023-08-22 19:59:46 +05:00
Dion Moult 21f4fb169f New util function to format a length value in preparation for custom formatting rules in drawings and schedules. 2023-08-22 23:12:37 +10:00
Thomas Krijnen 30fc52ebd9 #3616 Only consider distance orthogonal to projection vector for 2d boolean preprocessing 2023-08-22 15:00:25 +02:00
Andrej730 64bc7af4ef mep transitions - correct angle when connected segments share the same dimensions
Basically there are 3 methods to define the transition angle (https://i.imgur.com/AtCIJty.png). Before we supported only the second method, now we support 1 and 3 too.
2023-08-22 16:06:24 +05:00
Dion Moult b3f1fc667a IfcCSV can now create summary rows (e.g. total, average) at the end of the table (may or may not be in addition to group totals). 2023-08-22 21:04:59 +10:00
Dion Moult fcbb28f9d8 When you force an object to be a tessellation, automatically remove all parametric constraints for you. 2023-08-22 17:32:29 +10:00
Dion Moult 240a31db3a Fix bug where split elements by plane didn't work on multiple elements due to forgetting to toggle normals of the cutting plane. 2023-08-22 17:31:54 +10:00
Dion Moult c1bde09585 IfcCSV now supports grouping and group operations like concat, sum, min, max, etc. 2023-08-22 15:43:31 +10:00
Dion Moult 5dd2b5e555 New support for sorting IfcCSV outputs 2023-08-22 14:32:26 +10:00
Dion Moult 37dcb92220 Drawing include/exclude filters now use the new facet selector syntax 2023-08-22 11:31:18 +10:00
Dion Moult 6c43c60d04 Drawings now can include non-drawing specific annotations too. 2023-08-22 11:30:48 +10:00
Dion Moult b8d191ac1c Now support custom queries for advanced users in the facet selector (similar to old selector). Also support types and count keys. (e.g. filter by objects with zero types, or zero materials, etc). 2023-08-21 23:44:20 +10:00
Dion Moult 57173c7740 You can now get specific container types via util.element or util.selector. E.g. if you wanted to know what building an object is in or what storey an object is on. 2023-08-21 23:07:02 +10:00
Andrej730 2d3295ec54 more work on transitions for MEP
- support transitions from and to circle profiles
- reworked transition length algorithm now it should be more accurate
- added support for creating transitions between profiles that are parallel but not collinear
2023-08-21 17:56:17 +05:00
Andrej730 941ede117c show error if transition length is more the segments length 2023-08-21 17:56:17 +05:00
Andrej730 4210b8333f fix the errors occured trying to find compatible fitting type
1) It would stop if the first occurence would be connected to a segment without type
2) It would raise an error if one of the fitting's ports was not connected.
2023-08-21 17:56:17 +05:00
Sigma Dimensions (Yass) 1723d1e5a9 Update tests for editing sequence relationships 2023-08-21 13:43:43 +01:00
Sigma Dimensions (Yass) 3ee06ee7a0 remove unused function 2023-08-21 13:41:42 +01:00
Sigma Dimensions (Yass) d3e8da58dc stop committing print statements 2023-08-21 13:30:20 +01:00
Sigma Dimensions (Yass) 29e000b939 clean up updating selected task ICOM and UI re-ordering for work schedule subpanels 2023-08-21 13:28:08 +01:00
Sigma Dimensions (Yass) 6686a72d1f editing sequence relationships now requires less clicks 2023-08-21 13:24:36 +01:00
Sigma Dimensions (Yass) 7dd20f69d7 ligten up add cost schedule UI 2023-08-21 01:13:17 +01:00
Dion Moult 0044ef5588 Close #3615. Follow (terrible, unofficial) convention that boolean result is intentional and boolean clipping result is automated. 2023-08-21 08:53:14 +10:00
Dion Moult ffa5686b22 Fix #3614. Remove_pset API now supports removing predefined property sets (E.g. door lining properties). 2023-08-21 08:44:24 +10:00
Sigma Dimensions (Yass) ab8d6bea99 update sequence tool functions 2023-08-20 23:02:31 +01:00
Sigma Dimensions (Yass) e7bb89f582 You can now save and load 4D animation color schemes 2023-08-20 21:39:00 +01:00
Dion Moult c80b0464e5 Fix #3551. Project specific pset templates now show up in the pset template editor. 2023-08-20 23:51:38 +10:00
Dion Moult 7e3547b309 Fix #3610. Glitch where editing existing float cells in IfcCSV ODS files created new cells or didn't update. 2023-08-20 23:42:11 +10:00
Dion Moult 45c7432ff7 Minor fix 2023-08-20 22:53:32 +10:00
Dion Moult c98c20d403 Fix #3583. BaseQuantity QTOs in IFC4 can now be set on types. 2023-08-20 20:50:46 +10:00
Dion Moult d26a2580ea Fix #3605. Bug where invalid representation type was created when booleans are added / removed. 2023-08-20 17:12:01 +10:00
Dion Moult f84c4ab2e5 IfcCSV now supports importing from ODS, XLSX, and Pandas dataframes in addition to CSV 2023-08-20 16:55:01 +10:00
Dion Moult de6676a516 Fix #3609. IfcCSV can now optionally attempt to "preserve" formatting for XLSX and ODS. 2023-08-20 16:34:42 +10:00
Dion Moult bfbb7bec94 Fix #2973. Bundle pandas, openpyxl, and odfpy in preprataion for upgrades in IfcCSV and IfcFM. 2023-08-20 15:28:09 +10:00
Dion Moult ac00aaae4d Fix #3607. IfcCSV now supports omitting the GlobalId column. This is great for presentation schedules, but the tradeoff is that you can't use it for imports. 2023-08-20 14:41:34 +10:00
Dion Moult 422222a7cb Bump IOS 2023-08-19 23:13:25 +10:00
Dion Moult e1c7b37d62 See #3587. IfcCSV now supports custom header titles. 2023-08-19 23:09:40 +10:00
Ryan Schultz dec978743b small fix on 'Live development environment' instructions 2023-08-18 13:15:35 -05:00
Sigma Dimensions (Yass) 10fae033c8 fix saving and loading coulour schemes 2023-08-18 17:09:00 +01:00
Sigma Dimensions (Yass) b23180d287 fix enumartion of saved searches 2023-08-18 17:08:01 +01:00
Gorgious56 99ccd81b3f You can now purge unused representations from the purge data panel 2023-08-18 16:20:41 +02:00
Gorgious56 e2d3f3a351 You can now purge types from the Purge data panel
And refactor a bit the purge profiles code to make use of the profile tool module
2023-08-18 16:04:08 +02:00
Dion Moult 5e6a444aa2 Advanced users can now directly edit search filter queries. 2023-08-18 23:39:13 +10:00
Dion Moult 72cf5cfc59 Minor fix to allow edit_work_time to work seamlessly for IFC4X3. 2023-08-18 23:01:24 +10:00
Andrej730 75cb68d2f1 Refactored svg angle decorator code, solves #3602, more constistency between viewport and svg
Now it should be more consistent and more stable since svg and viewport are now using much more similar approach.
2023-08-18 17:59:40 +05:00
Dion Moult 7f40a9d723 See #3603. Base64 encode gantt chart JSON data to prevent JSON parsing problems. 2023-08-18 22:19:27 +10:00
Andrej730 dcc9d0e9cd set_objects_selection to set selection only if active_object is not None
It was creating errors if you'd try to add angle annotation without having any objects active.
2023-08-18 15:37:04 +05:00
Sigma Dimensions (Yass) 7228329f5e Start improving UI for clash detection and management 2023-08-18 11:04:21 +01:00
Gorgious56 d8786717b6 Active profil users count is now dynamically fetched when the profile is clicked in the UI list 2023-08-18 09:43:46 +02:00
Andrej730 b73bd3506f Fixed clearing scales (after 3345d7e)
It was producing a bug with text rotation in elevation view
Added fix to make matrix normalization work for the cases when matrix is rotated and I've just found that mathutils.Matrix.normalize(d) is very conveniently ignoring 4th column (translation) (same for mathutils.Vector)
2023-08-18 12:05:53 +05:00
Andrej730 bdb2791b35 Fill-bg for template tags #3594
Also simplified create_text_tag a bit - now it adds fill_bg by just by copying text tags and adding fill_bg filter to them instead of going through the entire logic again.
2023-08-18 12:04:42 +05:00
Dion Moult 549ea11945 Support arbitrary element selection for manual groups in search / IfcCSV, with support for huge element selections. 2023-08-18 16:58:07 +10:00
Dion Moult aed01b5703 IfcCSV can now use the graphical filter query builder too. 2023-08-18 13:43:42 +10:00
Dion Moult 13eb8562e0 Add support for converting IFC spaces, systems, and feed / location / part relationships into Brick. Brick utilities can now get downstream equipment, and system util can now take into account port flow direction. 2023-08-18 10:25:06 +10:00
rileywong311 c022a12835 Support displaying Brick Bnode relations
- Important for Ifc External References and other data.
- Set predicate_uri of predicates of the Bnode to None, which is used to remove the ability to delete the relationship in the UI.
- Also added try/excepts to difficult edge cases such as the object_uri not having a "#" character in it (such as "<http://qudt.org/vocab/unit/>") and the object_uri not being a brick class, which breaks "view_brick_item".
- Removing a Bnode type from the entity's relation removes all relations of the Bnode also
2023-08-17 16:19:49 -07:00
rileywong311 04eb47ff65 HIde Brick "Create Relation:" when not toggled 2023-08-17 16:19:49 -07:00
rileywong311 10ecd16f0c Refresh Brick split screen on ConvertIfcToBrick 2023-08-17 16:19:49 -07:00
rileywong311 75852bfa75 Rework "view brick item" conditional access
Change from never show the operator if the relation is "type" to not showing it only if the "type" is the current class being viewed.

This may come in handy if other list views other than hierarchy are implemented.

It also implies why we don't want to show "view brick item" here: because we already viewing it.
2023-08-17 16:19:49 -07:00
rileywong311 750c720c9b Support Add Brick with IfcEntity selected (part 2 aka references)
Can now assign references again.
See https://github.com/BrickSchema/Brick/tree/master/examples/ifc for examples.
2023-08-17 16:19:49 -07:00
rileywong311 4697681fcb Support Add Brick with IfcEntity selected (part 1)
Next is to add the reference
2023-08-17 16:19:49 -07:00
Dion Moult 9398363cbf Fix #3589. Users can now configure how the null values are represented in IfcCSV. 2023-08-18 08:50:48 +10:00
Massimo Fabbro ae45e6b960 Clone opening initial draft 2023-08-18 08:30:36 +10:00
Gorgious 88c002703e Move profile data and inverse check in data class 2023-08-17 21:00:03 +02:00
Gorgious56 51c78a89bd simplify ifc class suggestions json file and operator 2023-08-17 17:31:00 +02:00
Gorgious56 e36a958c0d Scene properties : Highlight buttons to make them stand out more (#3598) 2023-08-17 16:56:26 +02:00
Gorgious56 a8126a6f90 You can now purge unused profiles 2023-08-17 16:26:21 +02:00
Dion Moult 9b857cdefa 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). 2023-08-18 00:04:02 +10:00
Gorgious56 90e6400115 Active Profile's inverse relationships count is now displayed in the profiles editor 2023-08-17 15:44:37 +02:00
Dion Moult 2dcfcf9708 Fix #3591. Fix bug where IfcCSV import was not symmetric capability wise. Now you can set all sorts of complex values with the exact same keys you are using to query. 2023-08-17 23:33:40 +10:00
Thomas Krijnen f4971da42e #3429 Fix b operand non-planar face check 2023-08-17 11:28:02 +02:00
Andrej730 008f953b6c Fix tests errors after 8689164
Error was AttributeError: module 'blenderbim.bim.handler' has no attribute 'setDefaultProperties'
2023-08-17 13:18:27 +05:00
Andrej730 5481237480 geometry.edit_object_placement was producing orphaned placements
It was producing orphaned IfcLocalPlacement if placement was parent to some other one. During edit_object_placement we were replacing all parent references with the new placement but wasn't removing the old one.
2023-08-17 13:18:27 +05:00
Andrej730 4f7564e5ae misspelling 😅 2023-08-17 13:18:27 +05:00
Dion Moult d214cbaece Fix #3590. Update dev instructions to symlink other utility libraries in BBIM. 2023-08-17 17:37:37 +10:00
Dion Moult d0c5f1e69f Fix #2626. New IFC overrides for setting object origins. 2023-08-17 17:25:40 +10:00
Massimo Fabbro 4ba3240fb4 fix #3213 Problem related with sheet created on windows and opened on Linux 2023-08-17 16:22:16 +10:00
rileywong311 6d8e5e4c83 Merge Brick classification
https://github.com/rileywong311/BrickIfcClassification
2023-08-17 16:21:29 +10:00
rileywong311 cd1402570b Merge IfcClassification
https://github.com/Moult/IfcClassification/tree/master
2023-08-17 16:21:29 +10:00
Sigma Dimensions (Yass) 6c0e528dd2 enable an object to take part in an object type decomposition #3592 2023-08-16 16:08:27 +01:00
Dion Moult 297a513d21 Don't strictly require guids / class filters that exist in new facet selector. 2023-08-16 14:05:26 +10:00
Andrej730 9f0a4ba064 Calculate/guess quantity descriptions to avoid confusion 2023-08-15 14:42:31 +05:00
Dion Moult 8813ed66e0 See #3582. Fix bug where switching representations didn't handle curves in a body / model_view.
This means that if you created a curve body, you couldn't switch to it, or if you deleted everything, you ended up with an empty object. If you then tried to switch to that, it would "sync" the empty object and leave you with an empty cartesian point list. E.g:

 1. Create cube and assign IFC element.
 2. Remove all faces only (leaving edges and verts). Save changes.
 3. Switch to representation (bug!)
 4. Delete everything (no verts, edges, or faces). Attempt to save.
 5. "Revert" switch will fail, leading to empty mesh.
 6. Manually try to switch. Empty mesh will sync, creating an empty point list.
2023-08-15 18:06:16 +10:00
Andrej730 fafcd5dfca root.copy_class to remove connections from previously connected ports 2023-08-15 10:35:36 +05:00
Dion Moult f523870b57 Fix #3584. Support matching enumerated properties in new facet selector. 2023-08-15 09:59:50 +10:00
Sigma Dimensions (Yass) 2ed24434c8 experimental import plot coordinates 2023-08-14 18:22:11 +01:00
Andrej730 6878b2c072 Handle ods schedules without column styles #3573
Turned out there are ODS files (and turned out we're producing them ourselves from ifccsv) where column styles are not defined and therefore no width/style assigned to each column which was resulting in errors on building schedule.
2023-08-14 17:46:10 +05:00
Dion Moult 0ed8dc970d New simplified IfcFM parser for basic object data. 2023-08-14 16:14:57 +10:00
Andrej730 bc85f09109 Small info message on using validate 2023-08-14 11:09:26 +05:00
Andrej730 793b28e43b Remove empty IfcDocumentInformationRelationship #3581 2023-08-14 11:09:26 +05:00
Dion Moult ed4abacd1e Fix #3578. Support querying surface styles in tools like IfcCSV. 2023-08-14 11:55:15 +10:00
Dion Moult 8bf55ab46c See #3561. Misc annotation decorator now only highlights non-internal edges. 2023-08-13 23:34:06 +10:00
Dion Moult 7edabce657 Fix #3562. Non-manifold geometry is no longer considered in join criteria as there is no such thing as a closed polygon. 2023-08-13 23:04:32 +10:00
Sigma Dimensions (Yass) 56187e4da3 Improve Cost Schedule Layout 2023-08-13 13:23:31 +01:00
Sigma Dimensions (Yass) 31a12faef1 woopsies 2023-08-13 12:18:48 +01:00
Sigma Dimensions (Yass) eb94c16465 fix the bug fix #07b5c49 - where counting objects controlled by a cost item stopped working 2023-08-13 12:16:29 +01:00
Dion Moult e8437a9c54 Fix #3253. Bug where duplicating elements with fillings incorrectly recreated fillings at the cursor (i.e. the cursor was used as a target destination).
Now, instead of trying to be clever and regenerating filling locations and opening types, we simply copy the existing scenario. This also means it'll be more stable for weird fillings coming from proprietary apps.
2023-08-13 20:07:33 +10:00
Dion Moult 840039ef1e Fix #3472. You can now toggle selectability of linked IFCs. 2023-08-13 15:49:23 +10:00
Dion Moult 84a749605e See #3579. Support Google Colab as an installation option. 2023-08-13 14:48:49 +10:00
Bruno Postle c1283d2ab0 fix SyntaxError: '(' was never closed 2023-08-12 21:36:40 +01:00
Sigma Dimensions (Yass) 07b5c4918b fix api logic where only quantities of the same type can be assignmed to a cost control 2023-08-12 15:17:32 +01:00
Sigma Dimensions (Yass) 703f0a6b70 fix orphaned data when unassigning element quantities from cost item control 2023-08-12 14:57:01 +01:00
Dion Moult 5e98dee46f Fix #3554. Support editing IfcIndexedPolyCurve profiles where IfcLineIndex has >2 indices. 2023-08-12 22:25:34 +10:00
Sigma Dimensions (Yass) b2eddf55d2 Fix contracting/expanding cost schedule tree and add tests to avoid proof changes 2023-08-12 12:58:16 +01:00
Massimo Fabbro db7be640d4 Fix #3569 Variable name override caused the bug (#3575) 2023-08-12 19:03:58 +10:00
Dion Moult 04fa597844 Fix #3564. Bug where IfcBuiltSystems didn't show up due to missing icon in IFC4X3. 2023-08-12 17:09:48 +10:00
Dion Moult 694dbeb96c Fix #3576. Explicit drawing annotations are now immune to "include / exclude" filters. 2023-08-12 17:06:22 +10:00
Dion Moult 7afd358c3c Fix #3556. Bug where quantities could not be imported using IfcCSV. Also make IfcCSV support any qset name, not just "Qto" prefixed names. 2023-08-12 16:41:57 +10:00
Dion Moult b0a5a570a9 IfcCSV now uses the new filter query system. 2023-08-12 16:40:59 +10:00
Dion Moult c45b84c850 Fix #3577. Don't force uppercase in schedules. 2023-08-12 16:16:51 +10:00
rileywong311 d575a43aee Make refresh Brick viewer refresh both screens 2023-08-11 16:14:41 -07:00
rileywong311 0b151ea559 Second level query for Brick equipment+point roots 2023-08-11 16:14:41 -07:00
rileywong311 926970b256 Polish Brick UI and add "last saved" label 2023-08-11 16:14:41 -07:00
rileywong311 d58af0bfa5 Filter Brick class if deprecated 2023-08-11 16:14:41 -07:00
rileywong311 429da7c6f3 Filter more (all) Brick ontology namespaces
I'm not sure if this method of filtering out the entire domain will cause problems. This could use investigation.
2023-08-11 16:14:41 -07:00
rileywong311 60a7433573 Clear Brick breadcrumbs on close project 2023-08-11 16:14:41 -07:00
rileywong311 08a5d444d4 Remove another needless BrickStore.graph.triples check
As before, this returns a generator type which always evaluates true, even if it is empty.
2023-08-11 16:14:41 -07:00
rileywong311 1982069b69 Add description to Brick operators 2023-08-11 16:14:41 -07:00
rileywong311 7c06c65df3 Move Brick "set root" button and change roots on update instead of operator 2023-08-11 16:14:41 -07:00
Sigma Dimensions (Yass) 6263766202 fix Cost schedule of rates UI bug where linked types dont't refresh correctly (and black formatting) 2023-08-11 14:57:43 +01:00
Dion Moult 66fbbeff54 See #3561. Fix bug where schedules couldn't be removed. 2023-08-11 22:47:42 +10:00
Dion Moult 3c5ad1328f Auto create relevant context when attempting to add an annotation to make it friendlier for new users. 2023-08-11 22:41:47 +10:00
Dion Moult 3345d7e088 Fix #2894. Implement reflected ceiling plans. Note that this requires new bot build. 2023-08-11 22:41:47 +10:00
Dion Moult 2bb25cb874 See #3501. Minor matrix math fix that caused annotations to not appear in global coordinates. 2023-08-11 22:41:47 +10:00
Dion Moult 444a728e7a Improve default search filter to include types and spatial elements. 2023-08-11 22:41:47 +10:00
Sigma Dimensions (Yass) 70bea0c865 Feature to add a camera to extents of the scene objects 2023-08-11 13:39:58 +01:00
Sigma Dimensions (Yass) 6eea1e9035 feature to clear previous 4D Animation (object keyframes & colors) 2023-08-11 13:36:14 +01:00
Kristoffer Andersen 4deb1836ad Update bld.bat
reduce number of schema variations on windows as well
2023-08-11 11:42:08 +02:00
Kristoffer Andersen 4c8007dcfe Update meta.yaml
pin compatible boost, occt and cgal-cpp
2023-08-11 08:44:25 +02:00
Kristoffer Andersen 000116bb3d Update build.sh
limit number of schema variants
2023-08-11 08:22:52 +02:00
Dion Moult a2b6f21c7a See #2894. Implement SVG mirroring options (typically used for RCPs or useful when converting to other things like DXF). 2023-08-11 16:01:01 +10:00
Sigma Dimensions (Yass) a374ee39d3 simplify setup_default_task_columns 2023-08-11 02:06:49 +01:00
Sigma Dimensions (Yass) 0f5c82dffd animation settings now use human readable durations to make it less confusing 2023-08-11 02:05:37 +01:00
Sigma Dimensions (Yass) 268fed761e simplify updateTaskDuration 2023-08-11 02:03:07 +01:00
Sigma Dimensions (Yass) fe01d252db WIP - Scheduling UI improvements 2023-08-10 22:07:34 +01:00
Sigma Dimensions (Yass) dc36d74337 Hide Header for Costing and Schedule Tab 2023-08-10 16:36:35 +01:00
Sigma Dimensions (Yass) 7a0da7bd8e Revert "Rename and move sub panels of Costing and Schedule Tab"
This reverts commit 9d4715c0a9.
2023-08-10 16:20:13 +01:00
Andrej730 530d5a4e63 plug add_transition to fit_flow_segments 2023-08-10 17:37:52 +05:00
Andrej730 2d847d1704 Adjusting connected elements on bim.regenerate_distribution_element
Basically commented out automatic adjustment after 45f81b478 - now it's hapenning only when you decide to regenerate it.

It's adjusting connected segments extrusion and location, for all other elements besides segments it's adjusting only location. The idea is it will try to change as less as possible.

Demo - https://imgur.com/oZ1I2Bl
2023-08-10 16:31:08 +05:00
Andrej730 631d8fcfb1 quickly connect mep elements if they have matching ports
Demo - https://imgur.com/a/o9u8M1u
2023-08-10 15:06:16 +05:00
Andrej730 a8888efb88 fixed bug getting port relating element in ifc2x3 2023-08-10 14:12:20 +05:00
Andrej730 a51ecea9b1 More descriptive error message on attempt to delete drawings category 2023-08-10 13:55:46 +05:00
Andrej730 4d49517111 small refactor 2023-08-10 13:49:35 +05:00
Thomas Krijnen d5d1b3567b Update draw.py --include-curves 2023-08-10 15:44:21 +08:00
Kristoffer Andersen 7827ce3448 Update build.sh
fix env var declaration
2023-08-10 08:22:07 +02:00
Kristoffer Andersen a05059db01 Update build.sh
Reduce number of schema versions
2023-08-10 08:06:38 +02:00
Thomas Krijnen b78490ca56 #3510 Sample points along diagonal as well for quick and dirty occlusion detection 2023-08-10 10:52:06 +08:00
240 changed files with 987153 additions and 2013 deletions
+1
View File
@@ -4,6 +4,7 @@ set MY_PY_VER=%PY_VER:.=%
set LIBXML2="%LIBRARY_PREFIX%/lib/libxml2.lib"
cmake -G "Ninja" ^
-D SCHEMA_VERSIONS="2x3;4;4x1;4x3;4x3_add1" ^
-D CMAKE_BUILD_TYPE:STRING=Release ^
-D CMAKE_INSTALL_PREFIX:FILEPATH="%LIBRARY_PREFIX%" ^
-D CMAKE_PREFIX_PATH:FILEPATH="%LIBRARY_PREFIX%" ^
+1
View File
@@ -13,6 +13,7 @@ if [ `uname` == Darwin ]; then
fi
cmake -G Ninja \
-DSCHEMA_VERSIONS="2x3;4;4x1;4x3;4x3_add1" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
${CMAKE_PLATFORM_FLAGS[@]} \
+3 -3
View File
@@ -36,10 +36,10 @@ requirements:
run:
- python
- boost-cpp
- occt ==7.7.0
- {{ pin_compatible('occt', max_pin='x.x.x') }}
- {{ pin_compatible('cgal-cpp', max_pin='x.x.x') }}
- {{ pin_compatible('boost-cpp', max_pin='x.x.x') }}
- libxml2
- cgal-cpp
- hdf5
- mpfr
- gmp # [unix]
+12 -15
View File
@@ -38,17 +38,21 @@ endif
VERSION:=`date '+%y%m%d'`
LAST_COMMIT_HASH:=$(shell git rev-parse HEAD)
PYVERSION:=py310
PYPI_IMP:=cp
ifeq ($(PYVERSION), py39)
PYLIBDIR:=python3.9
PYNUMBER:=39
PYPI_VERSION:=3.9
endif
ifeq ($(PYVERSION), py310)
PYLIBDIR:=python3.10
PYNUMBER:=310
PYPI_VERSION:=3.10
endif
ifeq ($(PLATFORM), linux)
PYPI_PLATFORM:=--platform manylinux_2_17_x86_64
ifeq ($(PYVERSION), py39)
HPPFCL_URL:=https://anaconda.org/conda-forge/hpp-fcl/2.3.4/download/linux-64/hpp-fcl-2.3.4-py39h40a70d0_0.conda
EIGENPY_URL:=https://anaconda.org/conda-forge/eigenpy/3.1.0/download/linux-64/eigenpy-3.1.0-py39hdfdd6bb_0.conda
@@ -74,6 +78,7 @@ ZLIB_URL:=https://anaconda.org/conda-forge/zlib/1.2.11/download/linux-64/zlib-1.
endif
ifeq ($(PLATFORM), macos)
PYPI_PLATFORM:=--platform macosx_10_9_x86_64
ifeq ($(PYVERSION), py39)
HPPFCL_URL:=https://anaconda.org/conda-forge/hpp-fcl/2.3.4/download/osx-64/hpp-fcl-2.3.4-py39hd85b194_0.conda
EIGENPY_URL:=https://anaconda.org/conda-forge/eigenpy/3.1.0/download/osx-64/eigenpy-3.1.0-py39hc4d6e28_0.conda
@@ -99,6 +104,7 @@ ZLIB_URL:=https://anaconda.org/conda-forge/zlib/1.2.11/download/osx-64/zlib-1.2.
endif
ifeq ($(PLATFORM), macosm1)
PYPI_PLATFORM:=--platform macosx_11_0_arm64
ifeq ($(PYVERSION), py39)
HPPFCL_URL:=https://anaconda.org/conda-forge/hpp-fcl/2.3.4/download/osx-arm64/hpp-fcl-2.3.4-py39hc34188a_0.conda
EIGENPY_URL:=https://anaconda.org/conda-forge/eigenpy/3.1.0/download/osx-arm64/eigenpy-3.1.0-py39h13cfc01_0.conda
@@ -124,6 +130,7 @@ ZLIB_URL:=https://anaconda.org/conda-forge/zlib/1.2.11/download/osx-arm64/zlib-1
endif
ifeq ($(PLATFORM), win)
PYPI_PLATFORM:=--platform win_amd64
ifeq ($(PYVERSION), py39)
HPPFCL_URL:=https://anaconda.org/conda-forge/hpp-fcl/2.3.4/download/win-64/hpp-fcl-2.3.4-py39h39b25cb_0.conda
EIGENPY_URL:=https://anaconda.org/conda-forge/eigenpy/3.1.0/download/win-64/eigenpy-3.1.0-py39hb6c915b_0.conda
@@ -164,7 +171,7 @@ endif
cp -r blenderbim/* dist/blenderbim/
# Provides IfcOpenShell Python functionality
cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.0-fc50bdd-$(PLATFORM)64.zip
cd dist/working && wget https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-$(PYNUMBER)-v0.7.0-dcc9d0e-$(PLATFORM)64.zip
cd dist/working && unzip ifcopenshell-python*
cp -r dist/working/ifcopenshell dist/blenderbim/libs/site/packages/
@@ -376,6 +383,10 @@ endif
mkdir dist/working
cd dist/working && $(PYTHON) -m venv env
cd dist/working && mkdir site-packages
# Required by IfcCSV
cd dist/working && . env/bin/activate && $(PIP) install pandas $(PYPI_PLATFORM) --python-version $(PYPI_VERSION) --implementation $(PYPI_IMP) --only-binary=:all: --target=./site-packages
cd dist/working && . env/bin/activate && $(PIP) install openpyxl --target=./site-packages
cd dist/working && . env/bin/activate && $(PIP) install odfpy --target=./site-packages
# Required by IFCCityJSON
cd dist/working && . env/bin/activate && $(PIP) install cjio --target=./site-packages
# Provides express rule validation for ifcopenshell.validate
@@ -590,20 +601,6 @@ endif
cd dist/working/XlsxWriter-1.2.9/ && cp -r xlsxwriter ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by IFCCOBie for ODS support
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/97/73/8ade73f6749177003f7ce3304f524774adda96e6aaab30ea79fd8fda7934/odfpy-1.4.1.tar.gz
cd dist/working && tar -xzvf odfpy*
cd dist/working/odfpy-1.4.1/ && cp -r odf ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by odfpy
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/a4/5f/f8aa58ca0cf01cbcee728abc9d88bfeb74e95e6cb4334cfd5bed5673ea77/defusedxml-0.6.0.tar.gz
cd dist/working && tar -xzvf defusedxml*
cd dist/working/defusedxml-0.6.0/ && cp -r defusedxml ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by augin
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/76/b4/b7baffbda025efd5dc8fcd8d2e953e3aa939c236a484084fa8f4c3588ee9/boto3-1.17.17.tar.gz
@@ -145,11 +145,17 @@ classes = [
ui.BIM_PT_tab_services_object,
# Structural analysis
ui.BIM_PT_tab_structural,
# Construction scheduling
ui.BIM_PT_tab_status,
ui.BIM_PT_tab_resources,
ui.BIM_PT_tab_cost,
ui.BIM_PT_tab_sequence,
# Facility management
ui.BIM_PT_tab_handover,
ui.BIM_PT_tab_operations,
# Quality and coordination
ui.BIM_PT_tab_quality_control,
ui.BIM_PT_tab_clash_detection,
ui.BIM_PT_tab_collaboration,
ui.BIM_PT_tab_sandbox,
# TODO: move this somewhere else and clean it up
@@ -44,17 +44,17 @@
<circle r="5" fill="white" stroke="black" style="stroke-width: 0.25;" />
<line x1="-5" y1="0" x2="5" y2="0" style="stroke: black; stroke-width: 0.25;" />
</g>
<g id="SurveyArea">
<g id="SURVEY">
<circle r="1" fill="black" stroke="black" style="stroke-width: 0.25;" />
</g>
<g id="SurveyArea-CONTROLPOINT">
<g id="SURVEY-CONTROLPOINT">
<path style="fill: white; stroke: black; stroke-width: 0.25;" d="M 2.286165,1.4798666 H -1.0000316e-7 -2.2861651 L -1.1430826,-0.5000101 -1.0000316e-7,-2.479888 1.1430827,-0.5000101 Z" />
<circle r="0.5" fill="black" stroke="black" style="stroke-width: 0.25;" />
</g>
<g id="SurveyArea-TRAVERSEPOINT">
<g id="SURVEY-TRAVERSEPOINT">
<path style="fill: white; stroke: black; stroke-width: 0.5;" d="M -2,-2 2,2 M -2,2 2,-2" />
</g>
<g id="SurveyArea-SPOTELEVATION">
<g id="SURVEY-SPOTELEVATION">
<path style="fill: white; stroke: black; stroke-width: 0.5;" d="M 0,-2 0,2 M -2,0 2,0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

@@ -51,5 +51,5 @@ var json_data = `{{{json_data}}}`;
<script>
var data = `{{{data}}}`;
setupPage(data);
create_gantt_chart(json_data)
</script>
create_gantt_chart(atob(json_data))
</script>
@@ -5,27 +5,27 @@ FILE_NAME('EPset_Drawing.ifc','2020-01-01T00:00:00',(),(),'EPset_Drawing','EPset
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROPERTYSETTEMPLATE('2JhNIvqZrFnAgxfhK0XVQX',$,'EPset_Drawing','',.PSET_OCCURRENCEDRIVEN.,'IfcAnnotation',(#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,#16,#17,#18,#19,#20,#21));
#1=IFCPROPERTYSETTEMPLATE('2JhNIvqZrFnAgxfhK0XVQX',$,'EPset_Drawing','',.PSET_OCCURRENCEDRIVEN.,'IfcAnnotation',(#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15,#16,#17,#18,#19,#20,#21,#22));
#2=IFCSIMPLEPROPERTYTEMPLATE('23JavTMk98ZxXhrUEnjAcf',$,'TargetView','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
#3=IFCSIMPLEPROPERTYTEMPLATE('1yVWUt5H9DAOuu0OaMMLpe',$,'Scale','The scale of this drawing represented as a numerator and denominator, such as 1/100',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
#4=IFCSIMPLEPROPERTYTEMPLATE('3gsuPBtU93b8f0gg1pjkq6',$,'HumanScale','The scale of this drawing in human readable format, such as 1:100',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
#4=IFCSIMPLEPROPERTYTEMPLATE('2T$a4OFsv2LeD5JeBKEV4f',$,'IsNTS','Whether or not the scale is intended to be significant',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#5=IFCSIMPLEPROPERTYTEMPLATE('0AK5C2UpL4$eaac2LszAx$',$,'HasUnderlay','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#6=IFCSIMPLEPROPERTYTEMPLATE('2j2ZEZR8X5tONm7kli5hM6',$,'HasLinework','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#7=IFCSIMPLEPROPERTYTEMPLATE('1ttChRysH9UuEX2FeMj5Hu',$,'HasAnnotation','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#8=IFCSIMPLEPROPERTYTEMPLATE('2NPPxuABv1huDTVh32TFgw',$,'GlobalReferencing','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#9=IFCSIMPLEPROPERTYTEMPLATE('10hT_1zrzEbRRKMXYAWvtD',$,'Metadata','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#10=IFCSIMPLEPROPERTYTEMPLATE('3Z0BXPSG5CWgtI33ioV7aj',$,'Include','Selector expression to include ifc elements in the drawing',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#11=IFCSIMPLEPROPERTYTEMPLATE('1RVts_g3PAw98PJA2yL3bO',$,'Exclude','Selector expression to exclude ifc elements in the drawing',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#12=IFCSIMPLEPROPERTYTEMPLATE('0c1$8NpYDEaBiJrj16jHIo',$,'Stylesheet','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#13=IFCSIMPLEPROPERTYTEMPLATE('3mRF52q81FQB$h4oTh7M45',$,'Markers','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#14=IFCSIMPLEPROPERTYTEMPLATE('1rhr_0N3LDtuORcEJP0KXM',$,'Symbols','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#15=IFCSIMPLEPROPERTYTEMPLATE('2sHDBuW7P4TROy$hL2w7ct',$,'Patterns','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#16=IFCSIMPLEPROPERTYTEMPLATE('1$xfo9EVb26QLqmPll2_RK',$,'MetricPrecision','',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
#17=IFCSIMPLEPROPERTYTEMPLATE('38uAtrp9nD_901NO42zd$7',$,'ImperialPrecision','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
#18=IFCSIMPLEPROPERTYTEMPLATE('1MX0uffTL6TOvtvEJpxFmk',$,'DecimalPlaces','',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
#19=IFCSIMPLEPROPERTYTEMPLATE('0joEq0Rd10cxweEh0NeHT6',$,'JoinCriteria','Comma separated selection keys which determine what cut objects are to be joined.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#20=IFCSIMPLEPROPERTYTEMPLATE('0nYMT3OSj5gArVniCWZRtv',$,'ShadingStyles','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#21=IFCSIMPLEPROPERTYTEMPLATE('3VWG22eZXBdQwdKlzMeVQH',$,'CurrentShadingStyle','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
#5=IFCSIMPLEPROPERTYTEMPLATE('2T$a4OFsv2LeD5JeBKEV4f',$,'IsNTS','Whether or not the scale is intended to be significant',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#6=IFCSIMPLEPROPERTYTEMPLATE('0AK5C2UpL4$eaac2LszAx$',$,'HasUnderlay','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#7=IFCSIMPLEPROPERTYTEMPLATE('2j2ZEZR8X5tONm7kli5hM6',$,'HasLinework','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#8=IFCSIMPLEPROPERTYTEMPLATE('1ttChRysH9UuEX2FeMj5Hu',$,'HasAnnotation','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#9=IFCSIMPLEPROPERTYTEMPLATE('2NPPxuABv1huDTVh32TFgw',$,'GlobalReferencing','',.P_SINGLEVALUE.,'IfcBoolean',$,$,$,$,$,.READWRITE.);
#10=IFCSIMPLEPROPERTYTEMPLATE('10hT_1zrzEbRRKMXYAWvtD',$,'Metadata','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#11=IFCSIMPLEPROPERTYTEMPLATE('3Z0BXPSG5CWgtI33ioV7aj',$,'Include','Selector expression to include ifc elements in the drawing',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#12=IFCSIMPLEPROPERTYTEMPLATE('1RVts_g3PAw98PJA2yL3bO',$,'Exclude','Selector expression to exclude ifc elements in the drawing',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#13=IFCSIMPLEPROPERTYTEMPLATE('0c1$8NpYDEaBiJrj16jHIo',$,'Stylesheet','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#14=IFCSIMPLEPROPERTYTEMPLATE('3mRF52q81FQB$h4oTh7M45',$,'Markers','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#15=IFCSIMPLEPROPERTYTEMPLATE('1rhr_0N3LDtuORcEJP0KXM',$,'Symbols','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#16=IFCSIMPLEPROPERTYTEMPLATE('2sHDBuW7P4TROy$hL2w7ct',$,'Patterns','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#17=IFCSIMPLEPROPERTYTEMPLATE('1$xfo9EVb26QLqmPll2_RK',$,'MetricPrecision','',.P_SINGLEVALUE.,'IfcReal',$,$,$,$,$,.READWRITE.);
#18=IFCSIMPLEPROPERTYTEMPLATE('38uAtrp9nD_901NO42zd$7',$,'ImperialPrecision','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
#19=IFCSIMPLEPROPERTYTEMPLATE('1MX0uffTL6TOvtvEJpxFmk',$,'DecimalPlaces','',.P_SINGLEVALUE.,'IfcInteger',$,$,$,$,$,.READWRITE.);
#20=IFCSIMPLEPROPERTYTEMPLATE('0joEq0Rd10cxweEh0NeHT6',$,'JoinCriteria','Comma separated selection keys which determine what cut objects are to be joined.',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#21=IFCSIMPLEPROPERTYTEMPLATE('0nYMT3OSj5gArVniCWZRtv',$,'ShadingStyles','',.P_SINGLEVALUE.,'IfcText',$,$,$,$,$,.READWRITE.);
#22=IFCSIMPLEPROPERTYTEMPLATE('3VWG22eZXBdQwdKlzMeVQH',$,'CurrentShadingStyle','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,13 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION((),'2;1');
FILE_NAME('EPset_Status.ifc','2020-01-01T00:00:00',(),(),'EPset_Status','EPset_Status',$);
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROPERTYSETTEMPLATE('3JoyTt$cz4fhYuQvJeTMhs',$,'EPset_Status','',.PSET_TYPEDRIVENOVERRIDE.,'IfcProduct',(#2,#4));
#2= IFCSIMPLEPROPERTYTEMPLATE('2HBOdOfz5E3hZ7IBLCq$$D',$,'Status','Status of the element, predominately used in renovation or retrofitting projects. The status can be assigned to as "New" - element designed as new addition, "Existing" - element exists and remains, "Demolish" - element existed but is to be demolished, "Temporary" - element will exists only temporary (like a temporary support structure).',.P_ENUMERATEDVALUE.,'IfcLabel',$,#3,$,$,$,.READWRITE.);
#3= IFCPROPERTYENUMERATION('EPEnum_ElementStatus',(IFCLABEL('NEW'),IFCLABEL('EXISTING'),IFCLABEL('DEMOLISH'),IFCLABEL('TEMPORARY'),IFCLABEL('OTHER'),IFCLABEL('NOTKNOWN'),IFCLABEL('UNSET')),$);
#4=IFCSIMPLEPROPERTYTEMPLATE('3ttXxqmlz62BlxjzEPpqvH',$,'UserDefinedStatus','',.P_SINGLEVALUE.,'IfcLabel',$,$,$,$,$,.READWRITE.);
ENDSEC;
END-ISO-10303-21;
+5 -2
View File
@@ -82,7 +82,7 @@ class IfcExporter:
)
self.file.wrapped_data.header.file_name.preprocessor_version = "IfcOpenShell {}".format(ifcopenshell.version)
self.file.wrapped_data.header.file_name.originating_system = "{} {}".format(
self.get_application_name(), self.get_application_version()
self.get_application_name(), tool.Blender.get_blenderbim_version()
)
def sync_all_objects(self):
@@ -162,7 +162,7 @@ class IfcExporter:
return "BlenderBIM"
def get_application_version(self):
return ".".join(
version = ".".join(
[
str(x)
for x in [
@@ -172,6 +172,9 @@ class IfcExporter:
][0]
]
)
if blenderbim.bim.last_commit_hash != "8888888":
version += f"-{blenderbim.bim.last_commit_hash[:7]}"
return version
class IfcExportSettings:
+14 -4
View File
@@ -73,17 +73,27 @@ def name_callback(obj, data):
refresh_ui_data()
return
if not obj.BIMObjectProperties.ifc_definition_id or "/" not in obj.name:
if not obj.BIMObjectProperties.ifc_definition_id:
return
element = IfcStore.get_file().by_id(obj.BIMObjectProperties.ifc_definition_id)
if "/" in obj.name:
object_name = obj.name
element_name = obj.name.split("/", 1)[1]
else:
element_name = obj.name
object_name = element.is_a() + f"/{element_name}"
obj.name = object_name # NOTE: doesn't trigger infinite recursion
if element.is_a("IfcGridAxis"):
element.AxisTag = obj.name.split("/")[1]
element.AxisTag = object_name.split("/")[1]
refresh_ui_data()
if not element.is_a("IfcRoot"):
return
element.Name = element_name
if obj.BIMObjectProperties.collection:
obj.BIMObjectProperties.collection.name = obj.name
element.Name = "/".join(obj.name.split("/")[1:])
obj.BIMObjectProperties.collection.name = object_name
refresh_ui_data()
+73
View File
@@ -273,6 +273,79 @@ def convert_property_group_from_si(property_group, skip_props=()):
setattr(property_group, prop_name, prop_value)
def draw_filter(layout, props, data, module):
if not data.is_loaded:
data.load()
if tool.Ifc.get():
row = layout.row(align=True)
row.label(text=f"{len(data.data['saved_searches'])} Saved Searches")
if data.data["saved_searches"]:
row.operator("bim.load_search", text="", icon="IMPORT").module = module
row.operator("bim.save_search", text="", icon="EXPORT").module = module
row = layout.row(align=True)
row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD").module = module
row.operator("bim.edit_filter_query", text="", icon="FILTER").module = module
for i, filter_group in enumerate(props.filter_groups):
box = layout.box()
row = box.row(align=True)
row.prop(props, "facet", text="")
op = row.operator("bim.add_filter", text="Add Filter", icon="ADD")
op.type = props.facet
op.index = i
op.module = module
for j, ifc_filter in enumerate(filter_group.filters):
if ifc_filter.type == "entity":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="FILE_3D")
elif ifc_filter.type == "attribute":
row = box.row(align=True)
row.prop(ifc_filter, "name", text="", icon="COPY_ID")
row.prop(ifc_filter, "value", text="")
elif ifc_filter.type == "type":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="FILE_VOLUME")
elif ifc_filter.type == "material":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="MATERIAL")
elif ifc_filter.type == "property":
row = box.row(align=True)
row.prop(ifc_filter, "pset", text="", icon="PROPERTIES")
row.prop(ifc_filter, "name", text="")
row.prop(ifc_filter, "value", text="")
elif ifc_filter.type == "classification":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="OUTLINER")
elif ifc_filter.type == "location":
row = box.row(align=True)
row.prop(ifc_filter, "name", text="", icon="PACKAGE")
elif ifc_filter.type == "query":
row = box.row(align=True)
row.prop(ifc_filter, "name", text="", icon="POINTCLOUD_DATA")
row.prop(ifc_filter, "value", text="")
elif ifc_filter.type == "instance":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="GRIP")
op = row.operator("bim.select_filter_elements", text="", icon="EYEDROPPER")
op.group_index = i
op.index = j
op.module = module
op = row.operator("bim.remove_filter", text="", icon="X")
op.group_index = i
op.index = j
op.module = module
row = box.row()
op = row.operator("bim.remove_filter_group", icon="X")
op.index = i
op.module = module
# TODO this should move into ifcopenshell.util
@@ -35,13 +35,16 @@ classes = (
operator.ViewBrickItem,
operator.SerializeBrick,
operator.AddBrickNamespace,
operator.SetBrickListRoot,
operator.RemoveBrickRelation,
prop.Brick,
prop.BIMBrickProperties,
ui.BIM_PT_brickschema,
ui.BIM_PT_ifc_brickschema_references,
ui.BIM_PT_brickschema_project_info,
ui.BIM_PT_brickschema_namespaces,
ui.BIM_PT_brickschema_create_entity,
ui.BIM_PT_brickschema_viewport,
ui.BIM_UL_bricks,
ui.BIM_PT_ifc_brickschema_references,
)
@@ -67,45 +67,63 @@ class BrickschemaData:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?predicate ?object ?sp ?sv WHERE {
<{uri}> ?predicate ?object .
OPTIONAL {
{ ?predicate rdfs:range brick:TimeseriesReference . }
UNION
{ ?predicate a brick:EntityProperty . }
?object ?sp ?sv }
SELECT DISTINCT ?predicate ?object ?label ?sp ?sv WHERE {
<{uri}> ?predicate ?object .
OPTIONAL {
?object rdfs:label ?label .
}
OPTIONAL {
{ ?predicate rdfs:range brick:TimeseriesReference . }
UNION
{ ?predicate a brick:EntityProperty . }
?object ?sp ?sv .
}
}
GROUP BY ?object
""".replace(
"{uri}", uri
)
)
for row in query:
predicate = row.get("predicate")
predicate_name = predicate.toPython().split("#")[-1]
object = row.get("object")
object_name = object.toPython().split("#")[-1]
predicate_uri = row.get("predicate")
predicate_name = predicate_uri.toPython().split("#")[-1]
object_uri = row.get("object")
object_name = row.get("label")
if not object_name:
if isinstance(object_uri, BNode):
object_name = "[]"
else:
try:
object_name = object_uri.toPython().split("#")[-1]
except:
object_name = str(object_uri)
results.append(
{
"predicate": predicate,
"predicate_uri": predicate_uri,
"predicate_name": predicate_name,
"object": object,
"object_uri": object_uri,
"object_name": object_name,
"is_uri": isinstance(object, URIRef),
"object_uri": object.toPython(),
"is_globalid": predicate == "globalID",
"is_uri": isinstance(object_uri, URIRef),
"is_globalid": predicate_name == "ifcGlobalID",
}
)
# if isinstance(row.get("object"), BNode):
# for s, p, o in BrickStore.graph.triples((object, None, None)):
# results.append(
# {
# "predicate": predicate + ":" + p.toPython().split("#")[-1],
# "object": o.toPython().split("#")[-1],
# "is_uri": isinstance(o, URIRef),
# "object_uri": o.toPython(),
# "is_globalid": p.toPython().split("#")[-1] == "globalID",
# }
# )
if isinstance(object_uri, BNode):
for subject2, predicate2, object2 in BrickStore.graph.triples((object_uri, None, None)):
predicate2_name = predicate2.toPython().split("#")[-1]
try:
object2_name = object2.toPython().split("#")[-1]
except:
object2_name = str(object2)
results.append(
{
"predicate_uri": None,
"predicate_name": predicate_name + ":" + predicate2_name,
"object_uri": object2,
"object_name": object2_name,
"is_uri": isinstance(object2, URIRef),
"is_globalid": predicate2_name == "ifcGlobalID",
}
)
return results
@@ -131,7 +149,7 @@ class BrickschemaReferencesData:
for library in ifc.by_type("IfcLibraryInformation"):
if tool.Ifc.get_schema() == "IFC2X3":
results.append((str(library.id()), library.Name or "Unnamed", ""))
elif ".ttl" in library.Location:
elif library.Location and ".ttl" in library.Location:
results.append((str(library.id()), library.Name or "Unnamed", ""))
return results
@@ -37,6 +37,7 @@ class LoadBrickProject(bpy.types.Operator, Operator):
bl_idname = "bim.load_brick_project"
bl_label = "Load Brickschema Project"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Load in a Brick project from a file"
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
filter_glob: bpy.props.StringProperty(default="*.ttl", options={"HIDDEN"})
@@ -56,6 +57,7 @@ class ViewBrickClass(bpy.types.Operator, Operator):
bl_idname = "bim.view_brick_class"
bl_label = "View Brick Class"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Inspect the subclasses of this class"
brick_class: bpy.props.StringProperty(name="Brick Class")
split_screen: bpy.props.BoolProperty(name="Split Screen", default=False, options={"HIDDEN"})
@@ -67,17 +69,22 @@ class ViewBrickItem(bpy.types.Operator, Operator):
bl_idname = "bim.view_brick_item"
bl_label = "View Brick Item"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Inspect this entity in the viewer"
item: bpy.props.StringProperty(name="Brick Item")
split_screen: bpy.props.BoolProperty(name="Split Screen", default=False, options={"HIDDEN"})
def _execute(self, context):
core.view_brick_item(tool.Brick, item=self.item, split_screen=self.split_screen)
try:
core.view_brick_item(tool.Brick, item=self.item, split_screen=self.split_screen)
except:
self.report({'ERROR'}, f'Could not find {self.item}')
class RewindBrickClass(bpy.types.Operator, Operator):
bl_idname = "bim.rewind_brick_class"
bl_label = "Rewind Brick Class"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Go back to the previous list view"
split_screen: bpy.props.BoolProperty(name="Split Screen", default=False, options={"HIDDEN"})
def _execute(self, context):
@@ -88,6 +95,7 @@ class CloseBrickProject(bpy.types.Operator, Operator):
bl_idname = "bim.close_brick_project"
bl_label = "Close Brick Project"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Close the Brick project"
def _execute(self, context):
core.close_brick_project(tool.Brick)
@@ -97,6 +105,7 @@ class ConvertBrickProject(bpy.types.Operator, Operator):
bl_idname = "bim.convert_brick_project"
bl_label = "Convert Brick Project"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Create an Ifc library for this Brick project"
def _execute(self, context):
core.convert_brick_project(tool.Ifc, tool.Brick)
@@ -106,9 +115,18 @@ class AssignBrickReference(bpy.types.Operator, Operator):
bl_idname = "bim.assign_brick_reference"
bl_label = "Assign Brick Reference"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Assign the selected Ifc entity to the selected Brick entity"
def _execute(self, context):
if not context.active_object:
self.report({'ERROR'}, f'No Ifc selected')
return
props = context.scene.BIMBrickProperties
try:
props.bricks[props.active_brick_index]
except:
self.report({'ERROR'}, f'No Brick selected')
return
core.assign_brick_reference(
tool.Ifc,
tool.Brick,
@@ -122,19 +140,17 @@ class AddBrick(bpy.types.Operator, Operator):
bl_idname = "bim.add_brick"
bl_label = "Add Brick"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Create the Brick entity"
def _execute(self, context):
props = context.scene.BIMBrickProperties
library = None
if props.libraries:
library = tool.Ifc.get().by_id(int(props.libraries))
core.add_brick(
tool.Ifc,
tool.Brick,
element=tool.Ifc.get_entity(context.active_object) if context.selected_objects else None,
namespace=props.namespace,
brick_class=props.brick_entity_class,
library=library,
library=tool.Ifc.get().by_id(int(props.libraries)) if props.libraries else None,
label=props.new_brick_label,
)
@@ -143,6 +159,7 @@ class AddBrickRelation(bpy.types.Operator, Operator):
bl_idname = "bim.add_brick_relation"
bl_label = "Add Brick Relation"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Create the Brick relationship"
def _execute(self, context):
props = context.scene.BIMBrickProperties
@@ -152,7 +169,7 @@ class AddBrickRelation(bpy.types.Operator, Operator):
elif props.split_screen_toggled:
object = props.split_screen_bricks[props.split_screen_active_brick_index].uri
else:
object = props.new_brick_relation_namespace + props.new_brick_relation_object
object = props.namespace + props.new_brick_relation_object
core.add_brick_relation(
tool.Brick,
brick_uri=brick.uri,
@@ -165,6 +182,7 @@ class ConvertIfcToBrick(bpy.types.Operator, Operator):
bl_idname = "bim.convert_ifc_to_brick"
bl_label = "Convert IFC To Brick"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Convert Ifc entities and relations to Brick entities and relations"
def _execute(self, context):
props = context.scene.BIMBrickProperties
@@ -178,6 +196,7 @@ class NewBrickFile(bpy.types.Operator):
bl_idname = "bim.new_brick_file"
bl_label = "New Brick File"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Create a Brick project from scratch"
def execute(self, context):
IfcStore.begin_transaction(self)
@@ -210,16 +229,18 @@ class RefreshBrickViewer(bpy.types.Operator, Operator):
bl_idname = "bim.refresh_brick_viewer"
bl_label = "Refresh Brick Viewer"
bl_options = {"REGISTER", "UNDO"}
split_screen: bpy.props.BoolProperty(name="Split Screen", default=False, options={"HIDDEN"})
bl_description = "Refresh the list view"
def _execute(self, context):
core.refresh_brick_viewer(tool.Brick, split_screen=self.split_screen)
core.refresh_brick_viewer(tool.Brick)
core.refresh_brick_viewer(tool.Brick, split_screen=True)
class RemoveBrick(bpy.types.Operator, Operator):
bl_idname = "bim.remove_brick"
bl_label = "Remove Brick"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Delete this entity"
def _execute(self, context):
props = context.scene.BIMBrickProperties
@@ -262,6 +283,7 @@ class SerializeBrick(bpy.types.Operator):
class AddBrickNamespace(bpy.types.Operator, Operator):
bl_idname = "bim.add_brick_namespace"
bl_label = "Add Brick Namespace"
bl_description = "Bind a new namespace to the Brick project"
def _execute(self, context):
props = context.scene.BIMBrickProperties
@@ -270,24 +292,11 @@ class AddBrickNamespace(bpy.types.Operator, Operator):
core.add_namespace(tool.Brick, alias=alias, uri=uri)
class SetBrickListRoot(bpy.types.Operator, Operator):
bl_idname = "bim.set_brick_list_root"
bl_label = "Set Brick View Type"
bl_options = {"REGISTER", "UNDO"}
split_screen: bpy.props.BoolProperty(name="Split Screen", default=False, options={"HIDDEN"})
def _execute(self, context):
if self.split_screen:
root = context.scene.BIMBrickProperties.split_screen_brick_list_root
else:
root = context.scene.BIMBrickProperties.brick_list_root
core.set_brick_list_root(tool.Brick, brick_root=root, split_screen=self.split_screen)
class RemoveBrickRelation(bpy.types.Operator, Operator):
bl_idname = "bim.remove_brick_relation"
bl_label = "Remove Relation"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Delete this relationship"
predicate: bpy.props.StringProperty(name="Relation")
object: bpy.props.StringProperty(name="Object")
@@ -30,6 +30,8 @@ from bpy.props import (
FloatVectorProperty,
CollectionProperty,
)
import blenderbim.core.brick as core
import blenderbim.tool.brick as tool
from blenderbim.tool.brick import BrickStore
def update_active_brick_index(self, context):
@@ -65,6 +67,15 @@ def get_brick_relations(self, context):
return BrickStore.relationships
def update_view(self, context):
root = context.scene.BIMBrickProperties.brick_list_root
core.set_brick_list_root(tool.Brick, brick_root=root, split_screen=False)
def split_screen_update_view(self, context):
root = context.scene.BIMBrickProperties.split_screen_brick_list_root
core.set_brick_list_root(tool.Brick, brick_root=root, split_screen=True)
class Brick(PropertyGroup):
name: StringProperty(name="Name")
label: StringProperty(name="Label")
@@ -79,10 +90,9 @@ class BIMBrickProperties(PropertyGroup):
active_brick_index: IntProperty(name="Active Brick Index", update=update_active_brick_index)
libraries: EnumProperty(name="Libraries", items=get_libraries)
set_list_root_toggled: BoolProperty(name="Set List Root Toggled", default=False)
brick_list_root: EnumProperty(name="Brick List Root", items=get_brick_roots)
brick_list_root: EnumProperty(name="Brick List Root", items=get_brick_roots, update=update_view)
# namespace manager
namespace: EnumProperty(name="Namespace", items=get_namespaces)
brick_settings_toggled: BoolProperty(name="Brick Settings Toggled", default=False)
new_brick_namespace_alias: StringProperty(name="New Brick Namespace Alias")
new_brick_namespace_uri: StringProperty(name="New Brick Namespace URI")
# create brick entity
@@ -93,7 +103,6 @@ class BIMBrickProperties(PropertyGroup):
brick_create_relations_toggled: BoolProperty(name="Brick Create Relations Toggled", default=False)
brick_edit_relations_toggled: BoolProperty(name="Brick Edit Relations Toggled", default=False)
new_brick_relation_type: EnumProperty(name="New Brick Relation Type", items=get_brick_relations)
new_brick_relation_namespace: EnumProperty(name="New Brick Relation Namespace", items=get_namespaces)
new_brick_relation_object: StringProperty(name="New Brick Relation Object")
add_relation_failed: BoolProperty(name="Add Relation Failed", default=False)
# create relations split screen
@@ -102,4 +111,4 @@ class BIMBrickProperties(PropertyGroup):
split_screen_active_brick_index: IntProperty(name="Split Screen Active Brick Index", update=update_active_brick_index)
split_screen_active_brick_class: StringProperty(name="Split Screen Active Brick Class")
split_screen_brick_breadcrumbs: CollectionProperty(name="Split Screen Brick Breadcrumbs", type=StrProperty)
split_screen_brick_list_root: EnumProperty(name="Split Screen Brick List Root", items=get_brick_roots)
split_screen_brick_list_root: EnumProperty(name="Split Screen Brick List Root", items=get_brick_roots, update=split_screen_update_view)
+148 -82
View File
@@ -34,17 +34,36 @@ class BIM_PT_brickschema(Panel):
def draw(self, context):
if not BrickschemaData.is_loaded:
BrickschemaData.load()
self.props = context.scene.BIMBrickProperties
class BIM_PT_brickschema_project_info(Panel):
bl_label = "Project Info"
bl_idname = "BIM_PT_brickschema_project_info"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_brickschema"
def draw(self, context):
self.props = context.scene.BIMBrickProperties
if not BrickschemaData.data["is_loaded"]:
row = self.layout.row(align=True)
row.operator("bim.new_brick_file", text="Create Project")
row.operator("bim.load_brick_project", text="Load Project")
return
row = self.layout.row(align=True)
if BrickStore.path:
row = self.layout.row(align=True)
row.label(text=BrickStore.path, icon="FILEBROWSER")
else:
row.label(text="No file", icon="FILEBROWSER")
row = self.layout.row(align=True)
if BrickStore.last_saved:
row.label(text=BrickStore.last_saved, icon="TIME")
else:
row.label(text="Not saved", icon="TIME")
row = self.layout.row(align=True)
op = row.operator("bim.serialize_brick", icon="EXPORT", text="Save")
@@ -53,101 +72,138 @@ class BIM_PT_brickschema(Panel):
op.should_save_as = True
row.operator("bim.close_brick_project", text="", icon="CANCEL")
row = self.layout.row(align=True)
row.prop(data=self.props, property="brick_settings_toggled", text="", icon="PREFERENCES")
if self.props.brick_settings_toggled:
box = self.layout.box()
row = box.row(align=True)
row.label(text="Active Namespace:")
row = box.row(align=True)
prop_with_search(row, self.props, "namespace", text="")
class BIM_PT_brickschema_namespaces(Panel):
bl_label = "Namespaces"
bl_idname = "BIM_PT_brickschema_namespaces"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_brickschema"
row = box.row(align=True)
row.label(text="Bind New Namespace:")
@classmethod
def poll(cls, context):
return BrickStore.graph != None
row = box.row(align=True)
row.prop(data=self.props, property="new_brick_namespace_alias", text="")
col = row.column()
col.alignment = "CENTER"
col.scale_x = 1.1
col.label(text=":")
row.prop(data=self.props, property="new_brick_namespace_uri", text="")
row.operator("bim.add_brick_namespace", text="", icon="ADD")
def draw(self, context):
self.props = context.scene.BIMBrickProperties
row = self.layout.row(align=True)
row.label(text="Create Entity:")
row.label(text="Active Namespace:")
row = self.layout.row(align=True)
row.prop(data=self.props, property="brick_entity_create_type", text="")
prop_with_search(row, self.props, "namespace", text="")
row = self.layout.row(align=True)
row.prop(data=self.props, property="new_brick_label", text="")
prop_with_search(row, self.props, "brick_entity_class", text="")
row.operator("bim.add_brick", text="", icon="ADD")
# row.operator("bim.refresh_brick_viewer", text="", icon="FILE_REFRESH")
row.label(text="Bind New Namespace:")
row = self.layout.row(align=True)
row.prop(data=self.props, property="new_brick_namespace_alias", text="")
col = row.column()
col.alignment = "RIGHT"
col.alignment = "CENTER"
col.scale_x = 1.1
col.label(text=":")
row.prop(data=self.props, property="new_brick_namespace_uri", text="")
row.operator("bim.add_brick_namespace", text="", icon="ADD")
class BIM_PT_brickschema_create_entity(Panel):
bl_label = "Create Entity"
bl_idname = "BIM_PT_brickschema_create_entity"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_brickschema"
@classmethod
def poll(cls, context):
return BrickStore.graph != None
def draw(self, context):
self.props = context.scene.BIMBrickProperties
# TO DO: hide this if selected entity already has a reference, or something similar
row = self.layout.row(align=True)
row.prop(data=self.props, property="brick_entity_create_type", text="Class")
row = self.layout.row(align=True)
prop_with_search(row, self.props, "brick_entity_class", text="Type")
row = self.layout.row(align=True)
active = tool.Ifc.get_entity(context.active_object)
if active and context.selected_objects:
row.label(text="Label:")
row.label(text=active.Name if active.Name else "Unnamed")
else:
row.prop(data=self.props, property="new_brick_label", text="Label")
row = self.layout.row(align=True)
row.operator("bim.add_brick", text="Create Entity")
class BIM_PT_brickschema_viewport(Panel):
bl_label = "Viewport"
bl_idname = "BIM_PT_brickschema_viewport"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_brickschema"
@classmethod
def poll(cls, context):
return BrickStore.graph != None
def draw(self, context):
self.props = context.scene.BIMBrickProperties
row = self.layout.row(align=True)
row.column().alignment = "RIGHT"
row.prop(data=self.props, property="set_list_root_toggled", text="", icon="OUTLINER")
row.prop(data=self.props, property="split_screen_toggled", text="", icon="WINDOW")
row.operator("bim.refresh_brick_viewer", text="", icon="FILE_REFRESH")
grid = self.layout.grid_flow(even_columns=True)
grid1 = grid.column(align=True)
row = grid1.row(align=True)
grid_left = grid.column(align=True)
row = grid_left.row(align=True)
if len(self.props.brick_breadcrumbs):
op = row.operator("bim.rewind_brick_class", text="", icon="FRAME_PREV")
op.split_screen = False
row.prop(data=self.props, property="set_list_root_toggled", text="", icon="OUTLINER")
row.label(text=self.props.active_brick_class)
if self.props.set_list_root_toggled:
row = grid1.row(align=True)
op = row.operator("bim.set_brick_list_root", text="Set View")
op.split_screen = False
row = grid_left.row(align=True)
row.prop(data=self.props, property="brick_list_root", text="")
row = grid1.row()
row = grid_left.row()
BIM_UL_bricks.split_screen = False
row.template_list("BIM_UL_bricks", "", self.props, "bricks", self.props, "active_brick_index")
if self.props.split_screen_toggled:
grid2 = grid.column(align=True)
row = grid2.row(align=True)
grid_right = grid.column(align=True)
row = grid_right.row(align=True)
if len(self.props.split_screen_brick_breadcrumbs):
op = row.operator("bim.rewind_brick_class", text="", icon="FRAME_PREV")
op.split_screen = True
row.label(text=self.props.split_screen_active_brick_class)
if self.props.set_list_root_toggled:
row = grid2.row(align=True)
op = row.operator("bim.set_brick_list_root", text="Set View")
op.split_screen = True
row = grid_right.row(align=True)
row.prop(data=self.props, property="split_screen_brick_list_root", text="")
row = grid2.row()
row = grid_right.row()
BIM_UL_bricks.split_screen = True
row.template_list("BIM_UL_bricks", "", self.props, "split_screen_bricks", self.props, "split_screen_active_brick_index")
if BrickschemaData.data["active_relations"]:
row = self.layout.row(align=True)
col = row.column()
col.alignment = "RIGHT"
row.column().alignment = "RIGHT"
row.prop(data=self.props, property="brick_create_relations_toggled", text="", icon="PLUGIN")
row.prop(data=self.props, property="brick_edit_relations_toggled", text="", icon="TOOL_SETTINGS")
row.operator("bim.remove_brick", text="", icon="X")
row = self.layout.row(align=True)
row.label(text="Create Relation:")
if self.props.brick_create_relations_toggled and self.props.new_brick_relation_type == "http://www.w3.org/2000/01/rdf-schema#label":
row = self.layout.row(align=True)
prop_with_search(row, self.props, "new_brick_relation_type", text="")
row.prop(data=self.props, property="new_brick_relation_object", text="")
row.operator("bim.add_brick_relation", text="", icon="ADD")
elif self.props.brick_create_relations_toggled and self.props.split_screen_toggled:
if self.props.brick_create_relations_toggled and self.props.split_screen_toggled:
row = self.layout.row(align=True)
split_screen_selection = self.props.split_screen_bricks[self.props.split_screen_active_brick_index]
if split_screen_selection.total_items:
@@ -157,30 +213,29 @@ class BIM_PT_brickschema(Panel):
row.label(text=split_screen_selection.label if split_screen_selection.label else split_screen_selection.name)
row.operator("bim.add_brick_relation", text="", icon="ADD")
elif self.props.brick_create_relations_toggled:
row = self.layout.row(align=True)
prop_with_search(row, self.props, "new_brick_relation_namespace", text="")
elif self.props.brick_create_relations_toggled:
row = self.layout.row(align=True)
prop_with_search(row, self.props, "new_brick_relation_type", text="")
row.prop(data=self.props, property="new_brick_relation_object", text="")
row.operator("bim.add_brick_relation", text="", icon="ADD")
if self.props.brick_create_relations_toggled and self.props.add_relation_failed:
row = self.layout.row(align=True)
row.label(text="Failed to find this entity!", icon="ERROR")
for relation in BrickschemaData.data["active_relations"]:
row = self.layout.row(align=True)
split = self.layout.split(factor=0.85, align=True)
row = split.row(align=True)
row.label(text=relation["predicate_name"])
row.separator()
row.label(text=relation["object_name"])
if self.props.brick_edit_relations_toggled and relation["predicate_name"] != "type":
row = split.row(align=True)
row.column().alignment = "RIGHT"
if self.props.brick_edit_relations_toggled and relation["predicate_uri"] and relation["predicate_name"] != "type":
op = row.operator("bim.remove_brick_relation", text="", icon="UNLINKED")
op.predicate = relation["predicate"]
op.object = relation["object"]
if relation["is_uri"] and relation["predicate_name"] != "type":
op.predicate = relation["predicate_uri"]
op.object = relation["object_uri"]
if relation["is_uri"] and relation["object_name"] != self.props.active_brick_class:
op = row.operator("bim.view_brick_item", text="", icon="DISCLOSURE_TRI_RIGHT")
op.item = relation["object_uri"]
if relation["is_globalid"]:
@@ -188,6 +243,23 @@ class BIM_PT_brickschema(Panel):
op.global_id = relation["object_name"]
class BIM_UL_bricks(UIList):
split_screen = False
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
split = layout.split(factor=0.85, align=True)
row = split.row()
label = item.label if item.label else item.name
if item.total_items:
op = row.operator("bim.view_brick_class", text="", icon="DISCLOSURE_TRI_RIGHT", emboss=False)
op.brick_class = item.name
op.split_screen = self.split_screen
row.label(text=label)
if item.total_items:
row = split.row()
row.label(text=str(item.total_items))
class BIM_PT_ifc_brickschema_references(Panel):
bl_label = "Brickschema References"
bl_idname = "BIM_PT_ifc_brickschema_references"
@@ -211,15 +283,24 @@ class BIM_PT_ifc_brickschema_references(Panel):
row.label(text="No Brickschema Project Loaded")
return
if not BrickschemaReferencesData.data["libraries"]:
if not BrickschemaReferencesData.data["libraries"] and BrickStore.path:
row = self.layout.row(align=True)
row.label(text="No IFC Libraries")
row.operator("bim.convert_brick_project", text="", icon="ADD")
return
elif not BrickschemaReferencesData.data["libraries"]:
row = self.layout.row(align=True)
row.label(text="No IFC Libraries: save the Brick project to create a new library", icon="ERROR")
row = self.layout.row(align=True)
row.label(text="Libraries must have location pointing to a \".ttl\" file", icon="INFO")
return
row = self.layout.row(align=True)
prop_with_search(row, self.props, "libraries")
row.operator("bim.convert_brick_project", text="", icon="ADD")
if BrickStore.path:
row.operator("bim.convert_brick_project", text="", icon="ADD")
row = self.layout.row(align=True)
row.operator("bim.assign_brick_reference", icon="ADD")
@@ -234,19 +315,4 @@ class BIM_PT_ifc_brickschema_references(Panel):
row.label(text=reference["identification"], icon="ASSET_MANAGER")
row.label(text=reference["name"])
row.operator("bim.unassign_library_reference", text="", icon="X").reference = reference["id"]
row.operator("bim.view_brick_item", text="", icon="DISCLOSURE_TRI_RIGHT").item = reference["identification"]
class BIM_UL_bricks(UIList):
split_screen = False
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
row = layout.row(align=True)
label = item.label if item.label else item.name
if item.total_items:
op = row.operator("bim.view_brick_class", text="", icon="DISCLOSURE_TRI_RIGHT", emboss=False)
op.brick_class = item.name
op.split_screen = self.split_screen
label = label + " (" + str(item.total_items) + ")"
row.label(text=label)
row.operator("bim.view_brick_item", text="", icon="DISCLOSURE_TRI_RIGHT").item = reference["identification"]
@@ -27,7 +27,7 @@ class BIM_PT_ifcclash(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_quality_control"
bl_parent_id = "BIM_PT_tab_clash_detection"
def draw(self, context):
layout = self.layout
@@ -102,9 +102,10 @@ class BIM_PT_clash_manager(Panel):
bl_idname = "BIM_PT_clash_manager"
bl_label = "Clash Manager"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "BlenderBIM"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_clash_detection"
def draw(self, context):
layout = self.layout
@@ -20,64 +20,65 @@ import bpy
from . import ui, prop, operator
classes = (
operator.AddCostColumn,
operator.AddCostItem,
operator.AddCostItemQuantity,
operator.AddCostSchedule,
operator.RemoveCostSchedule,
operator.EditCostSchedule,
operator.AddCostValue,
operator.AddCurrency,
operator.AddSummaryCostItem,
operator.AssignCostItemQuantity,
operator.AssignCostItemType,
operator.AssignCostValue,
operator.CalculateCostItemResourceValue,
operator.ChangeParentCostItem,
operator.ClearCostItemAssignments,
operator.ContractCostItem,
operator.ContractCostItemRate,
operator.ContractCostItems,
operator.CopyCostItem,
operator.CopyCostItemValues,
operator.DisableEditingCostItem,
operator.DisableEditingCostItemQuantity,
operator.DisableEditingCostItemValue,
operator.DisableEditingCostSchedule,
operator.EditCostItem,
operator.EditCostItemQuantity,
operator.EditCostItemValue,
operator.EditCostItemValueFormula,
operator.EnableEditingCostSchedule,
operator.EnableEditingCostItems,
operator.EditCostSchedule,
operator.EnableEditingCostItem,
operator.ExportCostSchedules,
operator.ExpandCostItems,
operator.EnableEditingCostItemQuantities,
operator.EnableEditingCostItemQuantity,
operator.EnableEditingCostItemValues,
operator.EnableEditingCostItems,
operator.EnableEditingCostItemValue,
operator.EnableEditingCostItemValueFormula,
operator.DisableEditingCostItem,
operator.DisableEditingCostSchedule,
operator.DisableEditingCostItemQuantity,
operator.DisableEditingCostItemValue,
operator.AddCostColumn,
operator.RemoveCostColumn,
operator.AddCostItem,
operator.AddSummaryCostItem,
operator.EnableEditingCostItemValues,
operator.EnableEditingCostSchedule,
operator.ExpandCostItem,
operator.ContractCostItem,
operator.ExpandCostItemRate,
operator.ExpandCostItems,
operator.ExportCostSchedules,
operator.HighlightProductCostItem,
operator.ImportCostScheduleCsv,
operator.LoadCostItemElementQuantities,
operator.LoadCostItemQuantities,
operator.LoadCostItemResourceQuantities,
operator.LoadCostItemTaskQuantities,
operator.LoadCostItemTypes,
operator.LoadProductCostItems,
operator.LoadScheduleOfRates,
operator.RemoveCostColumn,
operator.RemoveCostItem,
operator.AssignCostItemType,
operator.UnassignCostItemType,
operator.AssignCostItemQuantity,
operator.UnassignCostItemQuantity,
operator.AddCostItemQuantity,
operator.RemoveCostItemQuantity,
operator.AddCostValue,
operator.RemoveCostItemValue,
operator.CopyCostItemValues,
operator.RemoveCostSchedule,
operator.ReorderCostItem,
operator.SelectCostItemProducts,
operator.SelectCostScheduleProducts,
operator.ImportCostScheduleCsv,
operator.LoadCostItemQuantities,
operator.LoadCostItemTypes,
operator.AssignCostValue,
operator.LoadScheduleOfRates,
operator.ExpandCostItemRate,
operator.ContractCostItemRate,
operator.CalculateCostItemResourceValue,
operator.ClearCostItemAssignments,
operator.HighlightProductCostItem,
operator.LoadProductCostItems,
operator.ReorderCostItem,
operator.SelectUnassignedProducts,
operator.LoadCostItemElementQuantities,
operator.LoadCostItemTaskQuantities,
operator.LoadCostItemResourceQuantities,
operator.ChangeParentCostItem,
operator.CopyCostItem,
operator.AddCurrency,
operator.UnassignCostItemQuantity,
operator.UnassignCostItemType,
prop.CostItem,
prop.CostItemQuantity,
prop.CostItemType,
@@ -117,6 +117,7 @@ class CostSchedulesData:
data["TotalAppliedValue"] = 0.0
data["TotalCost"] = 0.0
has_unit_basis = False
is_sum = False
if root_element.is_a("IfcCostItem"):
values = root_element.CostValues
elif root_element.is_a("IfcConstructionResource"):
@@ -130,6 +131,11 @@ class CostSchedulesData:
data["UnitBasisValueComponent"] = cost_value_data["UnitBasis"]["ValueComponent"]
data["UnitBasisUnitSymbol"] = cost_value_data["UnitBasis"]["UnitSymbol"]
has_unit_basis = True
else:
data["UnitBasisValueComponent"] = 1
data["UnitBasisUnitSymbol"] = "U"
if cost_value.Category == "*":
is_sum = True
if has_unit_basis:
data["TotalCost"] = data["TotalAppliedValue"] / data["UnitBasisValueComponent"]
else:
@@ -137,7 +143,8 @@ class CostSchedulesData:
data["TotalCost"] = data["TotalAppliedValue"] * data["TotalCostQuantity"]
else:
data["TotalCost"] = data["TotalAppliedValue"]
data["TotalAppliedValue"] = None
if is_sum:
data["TotalAppliedValue"] = None
@classmethod
def _load_cost_item_quantities(cls, cost_item, data):
@@ -154,7 +161,7 @@ class CostSchedulesData:
if unit:
data["UnitSymbol"] = ifcopenshell.util.unit.get_unit_symbol(unit)
else:
data["UnitSymbol"] = None
data["UnitSymbol"] = "U"
# same_unit_nested_cost_item = set()
# data["DerivedTotalCostQuantity"] = None
@@ -33,9 +33,26 @@ class AddCostSchedule(bpy.types.Operator, tool.Ifc.Operator):
bl_label = "Add Cost Schedule"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Add a new cost schedule"
name: bpy.props.StringProperty()
object_type: bpy.props.StringProperty()
def _execute(self, context):
core.add_cost_schedule(tool.Ifc, predefined_type=context.scene.BIMCostProperties.cost_schedule_predefined_types)
core.add_cost_schedule(
tool.Ifc,
name=self.name,
predefined_type=context.scene.BIMCostProperties.cost_schedule_predefined_types,
object_type=self.object_type,
)
def draw(self, context):
layout = self.layout
layout.prop(self, "name", text="Name")
layout.prop(context.scene.BIMCostProperties, "cost_schedule_predefined_types", text="Type")
if context.scene.BIMCostProperties.cost_schedule_predefined_types == "USERDEFINED":
layout.prop(self, "object_type", text="Object type")
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
class EditCostSchedule(bpy.types.Operator, tool.Ifc.Operator):
@@ -156,6 +173,17 @@ class ContractCostItem(bpy.types.Operator, tool.Ifc.Operator):
core.contract_cost_item(tool.Cost, cost_item=tool.Ifc.get().by_id(self.cost_item))
class ContractCostItems(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.contract_cost_items"
bl_label = "Contract Cost Item"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Collapse cost item tree"
cost_item: bpy.props.IntProperty()
def _execute(self, context):
core.contract_cost_items(tool.Cost)
class RemoveCostItem(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.remove_cost_item"
bl_label = "Remove Cost Item"
@@ -635,7 +663,9 @@ class ExportCostSchedules(bpy.types.Operator):
def execute(self, context):
cost_schedule = tool.Ifc.get().by_id(self.cost_schedule) if self.cost_schedule else None
r = core.export_cost_schedules(tool.Cost, filepath=self.filepath, format=self.format, cost_schedule=cost_schedule)
r = core.export_cost_schedules(
tool.Cost, filepath=self.filepath, format=self.format, cost_schedule=cost_schedule
)
if isinstance(r, str):
self.report({"ERROR"}, r)
return {"FINISHED"}
+27 -33
View File
@@ -21,7 +21,6 @@ import blenderbim.bim.module.cost.prop as CostProp
from bpy.types import Panel, UIList
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.cost.data import CostSchedulesData
import blenderbim.tool as tool
class BIM_PT_cost_schedules(Panel):
@@ -30,30 +29,32 @@ class BIM_PT_cost_schedules(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_cost"
bl_options = {"HIDE_HEADER"}
@classmethod
def poll(cls, context):
return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() and tool.Ifc.get().schema != "IFC2X3"
file = IfcStore.get_file()
return file and hasattr(file, "schema") and file.schema != "IFC2X3"
def draw(self, context):
if not CostSchedulesData.is_loaded:
CostSchedulesData.load()
self.props = context.scene.BIMCostProperties
row = self.layout.row()
row = self.layout.row(align=True)
if not self.props.active_cost_schedule_id:
if CostSchedulesData.data["total_cost_schedules"]:
row.label(text=f"{CostSchedulesData.data['total_cost_schedules']} Cost Schedules Found", icon="TEXT")
row.operator("bim.export_cost_schedules", text="Export as spreadsheet", icon="EXPORT")
else:
row.label(text="No Cost Schedules found.", icon="COMMUNITY")
row = self.layout.row()
row.alignment = "RIGHT"
row.prop(self.props, "cost_schedule_predefined_types")
row.operator("bim.add_cost_schedule", icon="ADD", text="Add")
row.label(text="No Cost Schedules found.", icon="TEXT")
row.operator("bim.add_cost_schedule", icon="ADD", text="")
for schedule in CostSchedulesData.data["schedules"]:
self.draw_cost_schedule_ui(schedule)
row2 = self.layout.row()
row2.alignment = "RIGHT"
row2.operator("bim.export_cost_schedules", text="Export all", icon="EXPORT")
def draw_cost_schedule_ui(self, cost_schedule):
row = self.layout.row(align=True)
@@ -138,8 +139,8 @@ class BIM_PT_cost_schedules(Panel):
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.operator("bim.add_summary_cost_item", text="Add Summary Cost", icon="ADD")
row.operator("bim.expand_all_tasks", text="Expand All")
row.operator("bim.contract_all_tasks", text="Contract All")
row.operator("bim.expand_cost_items", text="Expand All")
row.operator("bim.contract_cost_items", text="Contract All")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
if self.props.cost_items and self.props.active_cost_item_index < len(self.props.cost_items):
@@ -619,18 +620,22 @@ class BIM_UL_cost_items_trait:
else:
row.label(text="", icon="DOT")
def draw_total_cost_column(self, layout, cost_item):
format_numbers = "{0:,.2f}".format(cost_item["TotalCost"]).replace(",", " ")
currency = CostSchedulesData.data["currency"]
text = "{} {}".format(format_numbers, currency["name"]) if currency else format_numbers
layout.label(text=text)
def draw_quantity_column(self, layout, cost_item):
if CostSchedulesData.data["is_editing_rates"]:
self.draw_uom_column(layout, cost_item)
else:
self.draw_total_quantity_column(layout, cost_item)
def draw_uom_column(self, layout, cost_item):
layout.label(text=cost_item["UnitBasisUnitSymbol"])
def draw_total_quantity_column(self, layout, cost_item):
if cost_item["TotalCostQuantity"]:
label = "{0:.2f}".format(cost_item["TotalCostQuantity"]) + f" {cost_item['UnitSymbol'] or '-'}"
layout.label(text=label)
else:
layout.label(text="-")
def draw_value_column(self, layout, cost_item):
if cost_item["TotalAppliedValue"]:
text = "{0:,.2f}".format(cost_item["TotalAppliedValue"]).replace(",", " ")
@@ -642,8 +647,11 @@ class BIM_UL_cost_items_trait:
else:
layout.label(text="-")
def draw_uom_column(self, layout, cost_item):
layout.label(text=cost_item["UnitBasisUnitSymbol"] or "-" if cost_item["UnitBasisValueComponent"] else "-")
def draw_total_cost_column(self, layout, cost_item):
format_numbers = "{0:,.2f}".format(cost_item["TotalCost"]).replace(",", " ")
currency = CostSchedulesData.data["currency"]
text = "{} {}".format(format_numbers, currency["name"]) if currency else format_numbers
layout.label(text=text)
def draw_order_operator(self, row, ifc_definition_id, cost_item):
if cost_item["NestingIndex"] is not None:
@@ -656,20 +664,6 @@ class BIM_UL_cost_items_trait:
op.cost_item = ifc_definition_id
op.new_index = cost_item["NestingIndex"] - 1
def draw_total_quantity_column(self, layout, cost_item):
if cost_item["TotalCostQuantity"]:
label = "{0:.2f}".format(cost_item["TotalCostQuantity"]) + f" {cost_item['UnitSymbol'] or '-'}"
layout.label(text=label)
else:
layout.label(text="-")
# if cost_item["DerivedTotalCostQuantity"] not in [None, 0]:
# layout.label(text="{0:.2f}".format(cost_item["DerivedTotalCostQuantity"]) + f" {cost_item['DerivedUnitSymbol'] or '-'}")
# else:
# if cost_item["TotalCostQuantity"] == 0:
# layout.label(text="-")
# else:
# layout.label(text="{0:.2f}".format(cost_item["TotalCostQuantity"]) + f" {cost_item['UnitSymbol'] or '-'}")
class BIM_UL_cost_items(BIM_UL_cost_items_trait, UIList):
def __init__(self):
@@ -25,10 +25,10 @@ classes = (
operator.RemoveAllCsvAttributes,
operator.ExportIfcCsv,
operator.ImportIfcCsv,
operator.EyedropIfcCsv,
operator.SelectCsvIfcFile,
operator.ImportCsvAttributes,
operator.ExportCsvAttributes,
prop.CsvAttribute,
prop.CsvProperties,
ui.BIM_PT_ifccsv,
)
@@ -16,14 +16,15 @@
# 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/>.
import bpy
import ifccsv
import ifcopenshell
import os
import logging
import bpy
import json
import webbrowser
import ifccsv
import logging
import tempfile
import webbrowser
import ifcopenshell
import blenderbim.tool as tool
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.handler import purge_module_data
@@ -63,26 +64,25 @@ class RemoveAllCsvAttributes(bpy.types.Operator):
class ImportCsvAttributes(bpy.types.Operator):
bl_idname = "bim.import_csv_attributes"
bl_label = "Import CSV Template"
bl_label = "Load CSV Settings"
bl_description = "Import a json template for CSV export"
bl_options = {"REGISTER", "UNDO"}
filter_glob: bpy.props.StringProperty(default="*.json", options={"HIDDEN"})
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
def execute(self, context):
csv_props = context.scene.CsvProperties
csv_json = json.load(open(self.filepath))
expression = csv_json.get("expression", "")
if expression:
csv_props.ifc_selector = expression
attributes = csv_json.get("attributes", [])
if attributes:
csv_props.csv_attributes.clear()
for attribute in attributes:
csv_props.csv_attributes.add().name = attribute
props = context.scene.CsvProperties
data = json.load(open(self.filepath))
tool.Search.import_filter_query(data["query"], props.filter_groups)
props.csv_attributes.clear()
for attribute in data["attributes"]:
new = props.csv_attributes.add()
new.name = attribute["name"]
new.header = attribute["header"]
new.sort = attribute["sort"]
new.group = attribute["group"]
new.summary = attribute["summary"]
return {"FINISHED"}
def invoke(self, context, event):
@@ -92,7 +92,7 @@ class ImportCsvAttributes(bpy.types.Operator):
class ExportCsvAttributes(bpy.types.Operator):
bl_idname = "bim.export_csv_attributes"
bl_label = "Export CSV Template"
bl_label = "Save CSV Settings"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Save a json template for CSV export"
filename_ext = ".json"
@@ -100,22 +100,18 @@ class ExportCsvAttributes(bpy.types.Operator):
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
def execute(self, context):
csv_props = context.scene.CsvProperties
props = context.scene.CsvProperties
csv_template = {}
expression = csv_props.ifc_selector
if expression:
csv_template["expression"] = expression
csv_attributes = []
for attribute in csv_props.csv_attributes:
attribute_name = attribute.name
csv_attributes.append(attribute_name)
if csv_attributes:
csv_template["attributes"] = csv_attributes
data = {
"query": tool.Search.export_filter_query(props.filter_groups),
"attributes": [
{"name": a.name, "header": a.header, "sort": a.sort, "group": a.group, "summary": a.summary}
for a in props.csv_attributes
],
}
with open(self.filepath, "w") as outfile:
json.dump(csv_template, outfile)
json.dump(data, outfile)
return {"FINISHED"}
@@ -129,9 +125,8 @@ class ExportCsvAttributes(bpy.types.Operator):
class ExportIfcCsv(bpy.types.Operator):
bl_idname = "bim.export_ifccsv"
bl_label = "Export IFC"
#filename_ext = ".csv"
filename_ext = ".csv"
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
def invoke(self, context, event):
props = context.scene.CsvProperties
@@ -149,19 +144,50 @@ class ExportIfcCsv(bpy.types.Operator):
ifc_file = IfcStore.get_file()
else:
ifc_file = ifcopenshell.open(props.csv_ifc_file)
selector = ifcopenshell.util.selector.Selector()
results = selector.parse(ifc_file, props.ifc_selector)
results = ifcopenshell.util.selector.filter_elements(
ifc_file, tool.Search.export_filter_query(props.filter_groups)
)
ifc_csv = ifccsv.IfcCsv()
attributes = [a.name for a in props.csv_attributes]
headers = [a.header for a in props.csv_attributes]
sort = []
groups = []
summaries = []
for attribute in props.csv_attributes:
if attribute.sort != "NONE":
sort.append({"name": attribute.name, "order": attribute.sort})
if attribute.group != "NONE":
groups.append({"name": attribute.name, "type": attribute.group, "varies_value": attribute.varies_value})
if attribute.summary != "NONE":
summaries.append({"name": attribute.name, "type": attribute.summary})
sep = props.csv_custom_delimiter if props.csv_delimiter == "CUSTOM" else props.csv_delimiter
ifc_csv.export(ifc_file, results, attributes, output=self.filepath, format=props.format, delimiter=sep)
ifc_csv.export(
ifc_file,
results,
attributes,
headers=headers,
output=self.filepath,
format=props.format,
should_preserve_existing=props.should_preserve_existing,
delimiter=sep,
include_global_id=props.include_global_id,
null=props.null_value,
bool_true=props.true_value,
bool_false=props.false_value,
sort=sort,
groups=groups,
summaries=summaries,
)
return {"FINISHED"}
class ImportIfcCsv(bpy.types.Operator):
bl_idname = "bim.import_ifccsv"
bl_label = "Import CSV to IFC"
filename_ext = ".csv"
bl_label = "Import to IFC"
filter_glob: bpy.props.StringProperty(default="*.csv;*.ods;*.xlsx", options={"HIDDEN"})
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
def invoke(self, context, event):
@@ -180,28 +206,22 @@ class ImportIfcCsv(bpy.types.Operator):
ifc_file = ifcopenshell.open(props.csv_ifc_file)
ifc_csv = ifccsv.IfcCsv()
sep = props.csv_custom_delimiter if props.csv_delimiter == "CUSTOM" else props.csv_delimiter
ifc_csv.Import(ifc_file, self.filepath, delimiter=sep)
attributes = [a.name for a in props.csv_attributes]
ifc_csv.Import(
ifc_file,
self.filepath,
attributes=attributes,
delimiter=sep,
null=props.null_value,
bool_true=props.true_value,
bool_false=props.false_value,
)
if not props.should_load_from_memory:
ifc_file.write(props.csv_ifc_file)
purge_module_data()
return {"FINISHED"}
class EyedropIfcCsv(bpy.types.Operator):
bl_idname = "bim.eyedrop_ifccsv"
bl_label = "Query Selected Items"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
global_ids = []
self.file = IfcStore.get_file()
for obj in context.selected_objects:
if hasattr(obj, "BIMObjectProperties") and obj.BIMObjectProperties.ifc_definition_id:
global_ids.append("#" + self.file.by_id(obj.BIMObjectProperties.ifc_definition_id).GlobalId)
context.scene.CsvProperties.ifc_selector = "|".join(global_ids)
return {"FINISHED"}
class SelectCsvIfcFile(bpy.types.Operator):
bl_idname = "bim.select_csv_ifc_file"
bl_label = "Select CSV IFC File"
@@ -17,6 +17,7 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
from blenderbim.bim.module.search.prop import BIMFilterGroup
from blenderbim.bim.prop import StrProperty
from bpy.types import PropertyGroup
from bpy.props import (
@@ -31,10 +32,56 @@ from bpy.props import (
)
class CsvAttribute(PropertyGroup):
name: StringProperty(name="Query", default="class")
header: StringProperty(name="Header Value", default="IFC Class")
sort: EnumProperty(items=[("NONE", "None", ""), ("ASC", "Ascending", ""), ("DESC", "Descending", "")])
group: EnumProperty(
items=[
("NONE", "None", "Don't group any rows"),
("GROUP", "Group", "All rows where this value is identical will be merged"),
("CONCAT", "Concatenation", "Concatenate values if values vary within a group"),
("VARIES", "Varies", "Show a custom value if values vary within a group"),
("SUM", "Sum", "Sums the total value of rows in a group"),
("AVERAGE", "Average", "Averages the total value of rows in a group"),
("MIN", "Min", "Gets the minimum value of rows in a group"),
("MAX", "Max", "Gets the maximum value of rows in a group"),
]
)
varies_value: StringProperty(default="Varies", name="Varies Value")
summary: EnumProperty(
items=[
("NONE", "None", "Don't provide a summary row"),
("SUM", "Sum", "Sums the total value of all rows"),
("AVERAGE", "Average", "Averages the total value of all rows"),
("MIN", "Min", "Gets the minimum value of all rows"),
("MAX", "Max", "Gets the maximum value of all rows"),
]
)
class CsvProperties(PropertyGroup):
csv_ifc_file: StringProperty(default="", name="IFC File")
ifc_selector: StringProperty(default="", name="IFC Selector")
csv_attributes: CollectionProperty(name="CSV Attributes", type=StrProperty)
filter_groups: CollectionProperty(type=BIMFilterGroup, name="Filter Groups")
facet: EnumProperty(
items=[
("entity", "Class", "", "FILE_3D", 0),
("attribute", "Attribute", "", "COPY_ID", 1),
("property", "Property", "", "PROPERTIES", 2),
("material", "Material", "", "MATERIAL", 3),
("classification", "Classification", "", "OUTLINER", 4),
("location", "Location", "", "PACKAGE", 5),
("type", "Type", "", "FILE_VOLUME", 6),
("instance", "GlobalId", "", "GRIP", 7),
],
)
csv_attributes: CollectionProperty(name="CSV Attributes", type=CsvAttribute)
should_preserve_existing: BoolProperty(default=False, name="Preserve Existing")
include_global_id: BoolProperty(default=True, name="Include GlobalId")
null_value: StringProperty(default="N/A", name="Null Value")
true_value: StringProperty(default="YES", name="True Value")
false_value: StringProperty(default="NO", name="False Value")
csv_delimiter: EnumProperty(
items=[
(";", ";", ""),
@@ -55,4 +102,8 @@ class CsvProperties(PropertyGroup):
default="csv",
)
csv_custom_delimiter: StringProperty(default="", name="Custom Delimiter")
should_show_settings: BoolProperty(default=False, name="Show Settings")
should_show_sort: BoolProperty(default=False, name="Show Sorting")
should_show_group: BoolProperty(default=False, name="Show Grouping")
should_show_summary: BoolProperty(default=False, name="Show Summary")
should_load_from_memory: BoolProperty(default=False, name="Load from Memory")
+52 -26
View File
@@ -16,8 +16,10 @@
# 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/>.
import blenderbim.bim.helper
from bpy.types import Panel
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.search.data import SearchData
class BIM_PT_ifccsv(Panel):
@@ -36,45 +38,69 @@ class BIM_PT_ifccsv(Panel):
props = scene.CsvProperties
if IfcStore.get_file():
row = layout.row()
row = layout.row(align=True)
row.prop(props, "should_load_from_memory")
row.operator("bim.import_csv_attributes", icon="IMPORT", text="")
row.operator("bim.export_csv_attributes", icon="EXPORT", text="")
else:
row = layout.row(align=True)
row.alignment = "RIGHT"
row.operator("bim.import_csv_attributes", icon="IMPORT", text="")
row.operator("bim.export_csv_attributes", icon="EXPORT", text="")
row.prop(props, "should_show_settings", icon="PREFERENCES", text="")
if not IfcStore.get_file() or not props.should_load_from_memory:
row = layout.row(align=True)
row.prop(props, "csv_ifc_file")
row.operator("bim.select_csv_ifc_file", icon="FILE_FOLDER", text="")
row = layout.row(align=True)
row.prop(props, "ifc_selector")
row.operator("bim.eyedrop_ifccsv", icon="EYEDROPPER", text="")
layout.separator()
if props.should_show_settings:
layout.use_property_split = True
row = layout.row(align=True)
row.prop(props, "format")
if props.format == "csv":
row = layout.row(align=True)
row.prop(props, "csv_delimiter")
if props.csv_delimiter == "CUSTOM":
row = layout.row(align=True)
row.prop(props, "csv_custom_delimiter")
row = layout.row()
row.prop(props, "should_preserve_existing")
row = layout.row()
row.prop(props, "include_global_id")
row = layout.row()
row.prop(props, "null_value")
row = layout.row()
row.prop(props, "true_value")
row = layout.row()
row.prop(props, "false_value")
layout.use_property_split = False
blenderbim.bim.helper.draw_filter(self.layout, props, SearchData, "csv")
row = layout.row(align=True)
row.operator("bim.add_csv_attribute", icon="ADD")
row.operator("bim.remove_all_csv_attributes", icon="CANCEL")
row = layout.row(align=True)
row.operator("bim.import_csv_attributes", icon="IMPORT")
row.operator("bim.export_csv_attributes", icon="EXPORT")
row.prop(props, "should_show_sort", icon="SORTSIZE", text="")
row.prop(props, "should_show_group", icon="OUTLINER_COLLECTION", text="")
row.prop(props, "should_show_summary", icon="SYNTAX_ON", text="")
for index, attribute in enumerate(props.csv_attributes):
row = layout.row(align=True)
row.prop(attribute, "name", text="")
row.prop(attribute, "header", text="")
if props.should_show_sort:
row.prop(attribute, "sort", text="")
if props.should_show_group:
row.prop(attribute, "group", text="")
if attribute.group == "VARIES":
row.prop(attribute, "varies_value", text="")
if props.should_show_summary:
row.prop(attribute, "summary", text="")
row.operator("bim.remove_csv_attribute", icon="X", text="").index = index
row = layout.row(align=True)
row.prop(props, "format")
if props.format == 'csv':
row = layout.row(align=True)
row.prop(props, "csv_delimiter")
if props.csv_delimiter == "CUSTOM":
row = layout.row(align=True)
row.prop(props, "csv_custom_delimiter")
row = layout.row()
split = row.split(factor=0.5)
c = split.column()
c.operator("bim.export_ifccsv", icon="EXPORT", text="Export IFC to " + props.format.upper())
c = split.column()
c.operator("bim.import_ifccsv", icon="IMPORT")
row.operator("bim.export_ifccsv", icon="EXPORT", text="Export IFC to " + props.format.upper())
row.operator("bim.import_ifccsv", icon="IMPORT")
@@ -154,6 +154,8 @@ class ValidateIfcFile(bpy.types.Operator):
logger = logging.getLogger("validate")
logger.setLevel(logging.DEBUG)
ifcopenshell.validate.validate(IfcStore.get_file(), logger, express_rules=True)
self.report({"INFO"}, "Check validation results in the system console.")
return {"FINISHED"}
@@ -166,6 +166,7 @@ class Annotator:
center = camera.matrix_world.inverted() @ bpy.context.scene.cursor.location
center.z = 0
center = camera.matrix_world @ center
return (
center + z_offset,
@@ -64,11 +64,6 @@ class profile_consequential:
cls.lines = []
def ccw(A, B, C):
"""whether a-b-c located in counter-clockwise order in 2d space"""
return (C.y - A.y) * (B.x - A.x) > (B.y - A.y) * (C.x - A.x)
def worldspace_to_winspace(verts, context):
"""Convert world space verts to window space"""
region = context.region
@@ -248,8 +243,13 @@ class BaseDecorator:
if check_mode and obj.data.is_editmode:
return self.get_editmesh_geom(obj)
vertices = [obj.matrix_world @ v.co for v in obj.data.vertices]
indices = [e.vertices for e in obj.data.edges]
bm = bmesh.new()
bm.from_mesh(obj.data)
vertices = [obj.matrix_world @ v.co for v in bm.verts]
# In object mode, it's nicer to not show "internal edges". Most will be dissolved anyway.
indices = [[v.index for v in e.verts] for e in bm.edges if len(e.link_faces) != 2]
bm.free()
return vertices, indices
def get_editmesh_geom(self, obj):
@@ -520,7 +520,8 @@ class BaseDecorator:
return matrix.inverted()[i].to_3d().normalized()
text_dir_world_x_axis = get_basis_vector(obj.matrix_world)
text_dir = (camera.matrix_world.inverted().to_quaternion() @ text_dir_world_x_axis).to_2d().normalized()
camera_matrix = camera.matrix_world.normalized()
text_dir = (camera_matrix.inverted().to_quaternion() @ text_dir_world_x_axis).to_2d().normalized()
pos = location_3d_to_region_2d(region, region3d, text_world_position)
props = obj.BIMTextProperties
@@ -742,7 +743,7 @@ class AngleDecorator(BaseDecorator):
except ZeroDivisionError:
continue
circle_angle = acos(cos_a)
counter_clockwise = ccw(v2, v1, v0)
counter_clockwise = tool.Cad.is_counter_clockwise_order(v2, v1, v0)
angle_circle = get_angle_circle(circle_start, circle_angle, counter_clockwise)
add_verts_sequence([v1 + v for v in angle_circle], start_i_arcs, **out_kwargs_arcs)
@@ -774,7 +775,7 @@ class AngleDecorator(BaseDecorator):
region3d = context.region_data
viewportDrawingScale = self.get_viewport_drawing_scale(context)
ANGLE_LABEL_OFFSET = 25 * viewportDrawingScale
ANGLE_LABEL_OFFSET = 20 * viewportDrawingScale
last_segment_i = len(indices) - 1
for edge_i, edge_vertices in enumerate(indices):
@@ -792,24 +793,24 @@ class AngleDecorator(BaseDecorator):
edge1_ws = v2 - v1
try:
cos_a = edge0_ws.dot(edge1_ws) / (edge0_ws.length * edge1_ws.length)
angle_rad = acos(cos_a)
angle = angle_rad / pi * 180
except ZeroDivisionError:
continue
circle_angle_rad = acos(cos_a)
circle_angle = circle_angle_rad / pi * 180
angle = 0
# calculate angle position
p0 = location_3d_to_region_2d(region, region3d, v0)
p1 = location_3d_to_region_2d(region, region3d, v1)
p2 = location_3d_to_region_2d(region, region3d, v2)
p0, p1, p2 = [location_3d_to_region_2d(region, region3d, p) for p in vertices[i0 : i1 + 2]]
edge0 = p0 - p1
edge1 = p2 - p1
base_edge = edge0 if ccw(p0, p1, p2) else edge1
text_offset = (Matrix.Rotation(-circle_angle_rad / 2, 2) @ base_edge).normalized() * ANGLE_LABEL_OFFSET
radius = min(edge0.length_squared, edge1.length_squared) ** 0.5
# TODO: can be helpful for svg positioning
base_edge = edge0 if tool.Cad.is_counter_clockwise_order(p0, p1, p2) else edge1
text_offset = (Matrix.Rotation(-angle_rad / 2, 2) @ base_edge).normalized() * (radius + ANGLE_LABEL_OFFSET)
label_position = p1 + text_offset
text = f"{int(circle_angle)}d"
text = f"{int(angle)}deg"
label_dir = Vector((1, 0))
self.draw_label(context, text, label_position, label_dir)
self.draw_label(context, text, label_position, label_dir, box_alignment="center")
class DiameterDecorator(DimensionDecorator):
@@ -485,7 +485,7 @@ class CreateDrawing(bpy.types.Operator):
drawing_elements = tool.Drawing.get_drawing_elements(self.camera_element)
self.setup_serialiser(ifc)
self.setup_serialiser(ifc, target_view)
cache = IfcStore.get_cache()
[cache.remove(guid) for guid in invalidated_guids]
tree = ifcopenshell.geom.tree()
@@ -829,7 +829,7 @@ class CreateDrawing(bpy.types.Operator):
return svg_path
def setup_serialiser(self, ifc):
def setup_serialiser(self, ifc, target_view):
self.svg_settings = ifcopenshell.geom.settings(
DISABLE_TRIANGULATION=True, STRICT_TOLERANCE=True, INCLUDE_CURVES=True
)
@@ -853,6 +853,8 @@ class CreateDrawing(bpy.types.Operator):
self.serialiser.setScale(self.scale)
self.serialiser.setSubtractionSettings(ifcopenshell.ifcopenshell_wrapper.ALWAYS)
self.serialiser.setUsePrefiltering(True) # See #3359
if target_view == "REFLECTED_PLAN_VIEW":
self.serialiser.setMirrorY(True)
# tree = ifcopenshell.geom.tree()
# This instructs the tree to explode BReps into faces and return
# the style of the face when running tree.select_ray()
@@ -887,6 +889,21 @@ class CreateDrawing(bpy.types.Operator):
)
return classes
def is_manifold(self, obj):
result = self.is_manifold_cache.get(obj.data.name, None)
if result is not None:
return result
bm = bmesh.new()
bm.from_mesh(obj.data)
for edge in bm.edges:
if not edge.is_manifold:
bm.free()
self.is_manifold_cache[obj.data.name] = False
return False
self.is_manifold_cache[obj.data.name] = True
return True
def merge_linework_and_add_metadata(self, root):
join_criteria = ifcopenshell.util.element.get_pset(self.camera_element, "EPset_Drawing", "JoinCriteria")
if join_criteria:
@@ -897,6 +914,7 @@ class CreateDrawing(bpy.types.Operator):
group = root.findall(".//{http://www.w3.org/2000/svg}g")[0]
joined_paths = {}
self.is_manifold_cache = {}
ifc = tool.Ifc.get()
for el in root.findall(".//{http://www.w3.org/2000/svg}g[@{http://www.ifcopenshell.org/ns}guid]"):
@@ -906,6 +924,10 @@ class CreateDrawing(bpy.types.Operator):
classes.append("cut")
el.set("class", " ".join(classes))
obj = tool.Ifc.get_object(element)
if not self.is_manifold(obj):
continue
# An element group will contain a bunch of paths representing the
# cut of that element. However IfcOpenShell may not correctly
# create closed paths. We post-process all paths with shapely to
@@ -1035,7 +1057,9 @@ class CreateDrawing(bpy.types.Operator):
elements = tool.Drawing.get_group_elements(tool.Drawing.get_drawing_group(self.camera_element))
filtered_drawing_elements = tool.Drawing.get_drawing_elements(self.camera_element)
elements = [e for e in elements if e in filtered_drawing_elements]
filtered_drawing_annotations = {e for e in filtered_drawing_elements if e.is_a("IfcAnnotation")}
elements = {e for e in elements if e in filtered_drawing_elements}
elements = list(elements | filtered_drawing_annotations)
annotations = sorted(
elements, key=lambda a: (tool.Drawing.get_annotation_z_index(a), 1 if a.ObjectType == "TEXT" else 0)
@@ -1512,6 +1536,9 @@ class RemoveDrawing(bpy.types.Operator, Operator):
tool.Ifc.get().by_id(d.ifc_definition_id) for d in context.scene.DocProperties.drawings if d.is_selected
]
else:
if not self.drawing:
self.report({"ERROR"}, "No drawing selected")
return {"CANCELLED"}
drawings = [tool.Ifc.get().by_id(self.drawing)]
removed_drawings = [drawing.id() for drawing in drawings]
@@ -1862,7 +1889,7 @@ class RemoveSchedule(bpy.types.Operator, Operator):
schedule: bpy.props.IntProperty()
def _execute(self, context):
core.remove_document(tool.Ifc, tool.Drawing, "SCHEDULE", schedule=tool.Ifc.get().by_id(self.schedule))
core.remove_document(tool.Ifc, tool.Drawing, "SCHEDULE", document=tool.Ifc.get().by_id(self.schedule))
class OpenSchedule(bpy.types.Operator, Operator):
@@ -538,7 +538,7 @@ class BIMAnnotationProperties(PropertyGroup):
name="Create Representation For Type",
default=False,
description='Whether "Add type" should define a representation for the type \n'
"or allow occurences to have their own",
"or allow occurrences to have their own",
)
is_adding_type: bpy.props.BoolProperty(default=False)
type_name: bpy.props.StringProperty(name="Name", default="TYPEX")
@@ -118,6 +118,25 @@ class Scheduler:
if cell_style:
related_styles.append((style_name, cell_style))
# sometimes there are no column styles (e.g. in ODS from IfcCSV)
# and we just use some constant number for column widths
if not column_widths:
row_columns = []
for tr in table.getElementsByType(TableRow):
row_cols = 0
for td in tr.getElementsByType(TableCell):
column_span = td.getAttribute("numbercolumnsspanned")
column_span = int(column_span) if column_span else 1
col_repeat = td.getAttribute("numbercolumnsrepeated")
col_repeat = int(col_repeat) if col_repeat else 1
row_cols += column_span * col_repeat
row_columns.append(row_cols)
n_columns = max(row_columns)
column_widths = [25] * n_columns # some constant width value 👀
column_styles = [None] * n_columns
# collect rows height
row_heights = []
# TODO: never used yet because unsure about priority for row styles
@@ -351,7 +370,7 @@ class Scheduler:
wrap_text: if True, text will be wrapped to fit in cell
cell_width: width of cell, used for wrapping text
"""
text_lines = [str(p).upper() for p in p_tags]
text_lines = [str(p) for p in p_tags]
box_alignment_params = SvgWriter.get_box_alignment_parameters(box_alignment)
text_params = {
"font-size": font_size,
@@ -414,7 +414,7 @@ class SheetBuilder:
view.remove(image)
def get_href(self, element):
return urllib.parse.unquote(element.attrib.get("{http://www.w3.org/1999/xlink}href"))
return urllib.parse.unquote(element.attrib.get("{http://www.w3.org/1999/xlink}href")).replace('\\','/')
def parse_embedded_svg(self, image, data):
group = ET.Element("g")
@@ -36,7 +36,7 @@ import blenderbim.bim.module.drawing.annotation as annotation
from blenderbim.bim.module.drawing.data import DecoratorData
from blenderbim.bim.ifc import IfcStore
from math import pi, ceil, atan, degrees
from math import pi, ceil, atan, degrees, acos
from mathutils import geometry, Vector
from bpy_extras import view3d_utils
@@ -774,6 +774,15 @@ class SvgWriter:
"text-anchor": text_anchor,
}
def add_fill_bg(self, element):
element = element.copy()
if hasattr(element, "xml"):
attrib = element.xml.attrib
else:
attrib = element.attribs
attrib["filter"] = "url(#fill-background)"
return element
def draw_text_annotation(self, text_obj, position):
x_offset = self.raw_width / 2
y_offset = self.raw_height / 2
@@ -791,20 +800,21 @@ class SvgWriter:
return matrix.inverted()[i].to_3d().normalized()
text_dir_world_x_axis = get_basis_vector(text_obj.matrix_world)
text_dir = (self.camera.matrix_world.inverted().to_quaternion() @ text_dir_world_x_axis).to_2d().normalized()
# RCP cameras may be scaled, so reset scales.
camera_matrix = self.camera.matrix_world.normalized()
text_dir = (camera_matrix.inverted().to_quaternion() @ text_dir_world_x_axis).to_2d().normalized()
angle = math.degrees(-text_dir.angle_signed(Vector((1, 0))))
classes = self.get_attribute_classes(text_obj)
classes_str = " ".join(classes)
fill_bg = "fill-bg" in classes
symbol = tool.Drawing.get_annotation_symbol(element)
template_text_fields = []
if not symbol:
text_transform = f"translate({text_position_svg_str}) rotate({angle})"
else:
if symbol:
# NOTE: for now we assume that scale is uniform
symbol_transform = f"translate({text_position_svg_str}) rotate({angle}) scale({text_obj.scale.x})"
text_transform = symbol_transform
symbol_svg = self.find_xml_symbol_by_id(symbol)
if symbol_svg:
@@ -815,10 +825,13 @@ class SvgWriter:
if template_text_fields:
symbol_xml.attrib["transform"] = symbol_transform
symbol_xml.attrib.pop("id")
# note: zip makes sure that we iterate over the shortest list
# NOTE: zip makes sure that we iterate over the shortest list
for field, text_literal in zip(template_text_fields, text_literals):
field.text = tool.Drawing.replace_text_literal_variables(text_literal.Literal, product)
field.attrib["class"] = classes_str
if fill_bg:
self.svg.add(self.add_fill_bg(symbol_svg))
self.svg.add(symbol_svg)
return None
@@ -834,7 +847,7 @@ class SvgWriter:
angle,
text_literal.BoxAlignment,
classes_str,
fill_bg="fill-bg" in classes,
fill_bg=fill_bg,
line_number_start=line_number,
)
for tag in text_tags:
@@ -936,54 +949,54 @@ class SvgWriter:
def draw_angle_annotations(self, obj):
points = obj.data.splines[0].points
region = bpy.context.region
area = tool.Blender.get_viewport_context()["area"]
region_3d = area.spaces.active.region_3d
# [1, 2, 3, 4, 5] -> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
points_chunked = [points[i : i + 3] for i in range(len(points) - 2)]
for points_chunk in points_chunked:
points_2d = [view3d_utils.location_3d_to_region_2d(region, region_3d, p.co.xyz) for p in points_chunk]
points_chunk = [obj.matrix_world @ p.co.xyz for p in points_chunk]
self.draw_svg_3point_arc(obj, points_chunk)
edge0 = points_2d[0] - points_2d[1]
edge1 = points_2d[2] - points_2d[1]
angle_radius = min(edge0.length, edge1.length)
dir0 = edge0.normalized()
dir1 = edge1.normalized()
dir2 = ((dir0 + dir1) / 2).normalized()
# calculate p3 which is the center of the arc
# to use draw_svg_3point_arc()
p3 = points_2d[1] + dir2 * angle_radius
# make all edges the same radius
p0 = points_2d[1] + dir0 * angle_radius
p2 = points_2d[1] + dir1 * angle_radius
points_chunk = [view3d_utils.region_2d_to_origin_3d(region, region_3d, p) for p in [p0, p3, p2]]
# points = [p.co.xyz for p in bpy.context.active_object.data.splines[0].points[:3]]
bm = bmesh.new()
bm.verts.index_update()
bm.edges.index_update()
new_verts = [bm.verts.new(p) for p in points_chunk]
new_edges = [bm.edges.new((new_verts[e[0]], new_verts[e[1]])) for e in ((0, 1), (1, 2))]
self.draw_svg_3point_arc(obj, bm)
def draw_svg_3point_arc(self, obj, bm):
def draw_svg_3point_arc(self, obj, angle_points):
"""`angle_points` are expected to be already in world space"""
# This implementation uses an SVG arc, which means that it can only draw
# arcs that are orthogonal to the view (e.g. not arcs in 3D).
# Gosh this is bad code :(
points = [v.co for v in bm.verts][:3]
center = tool.Cad.get_center_of_arc(points, obj)
classes = self.get_attribute_classes(obj)
matrix_world = obj.matrix_world
x_offset = self.raw_width / 2
y_offset = self.raw_height / 2
bm.verts.ensure_lookup_table()
arc_end_verts = [v for v in bm.verts if len(v.link_edges) == 1]
arc_end_pts = [matrix_world @ v.co for v in arc_end_verts]
def position_on_svg(p):
p = self.project_point_onto_camera(p)
offset = Vector([self.raw_width / 2, self.raw_height / 2])
return (offset + p.xy * Vector((1, -1))) * self.svg_scale
# Probably need this when rewriting to use an SVG polyline instead of an arc
def get_angle_value():
"""points should be in world space"""
# calculate arc angle, need to make sure we do it in world space
v0, v1, v2 = angle_points
edge0_ws = v0 - v1
edge1_ws = v2 - v1
try:
cos_a = edge0_ws.dot(edge1_ws) / (edge0_ws.length * edge1_ws.length)
angle_rad = acos(cos_a)
angle = angle_rad / pi * 180
except ZeroDivisionError:
angle = 0
return angle
angle = get_angle_value()
angle_points = [position_on_svg(p) for p in angle_points]
# creating arc and making sure radius is consistent across the arc
edge0 = angle_points[0] - angle_points[1]
edge1 = angle_points[2] - angle_points[1]
angle_radius = min(edge0.length, edge1.length)
dir0 = edge0.normalized()
dir1 = edge1.normalized()
arc_mid_dir = ((dir0 + dir1) / 2).normalized()
arc_points = [angle_points[1] + direction * angle_radius for direction in [dir0, arc_mid_dir, dir1]]
arc_end_pts = [arc_points[0], arc_points[2]]
arc_mid_point = arc_points[1]
# The commented code below can be useful when we start using SVG polyline instead of an arc
# arc_path = [arc_end_verts[0]]
# while True:
# last_point = arc_end_verts[0]
@@ -996,79 +1009,44 @@ class SvgWriter:
# if not found_another_point:
# break
distance_between_end_verts = (arc_end_verts[0].co - arc_end_verts[1].co).length
arc_mid_vert = arc_end_verts[0].link_edges[0].other_vert(arc_end_verts[0])
is_reflex = 0 if (arc_mid_vert.co - arc_end_verts[1].co).length < distance_between_end_verts else 1
bm.free()
# Calculate the angle
# This is the true normal in 3D, whereas the camera projection we use is the drawing direction.
# This assumes (because we use SVG arcs) that the radius is always orthogonal to our view.
# When rewriting to use polylines, we should use this normal instead.
# center = tool.Cad.get_center_of_arc([p.to_3d() for p in arc_points], None).to_2d()
# normal = mathutils.geometry.normal([arc_end_pts[0], arc_end_pts[1], center])
normal = Vector(self.camera_projection)
dir1 = (arc_end_pts[0] - center).normalized()
dir2 = (arc_end_pts[1] - center).normalized()
# normal = Vector(self.camera_projection)
# dir1 = (arc_end_pts[0] - center).normalized()
# arc_mid_dir = (arc_end_pts[1] - center).normalized()
# Let's get the matrix that represents the coordinate system of the arc.
# This matrix allows us to get 2D vectors for calculating the signed arc angle.
z = normal
x = (arc_end_pts[0] - center).normalized()
y = z.cross(x)
arc_matrix = mathutils.Matrix([x, y, z]).transposed().to_4x4()
# z = normal
# x = (arc_end_pts[0] - center).normalized()
# y = z.cross(x)
# arc_matrix = mathutils.Matrix([x, y, z]).transposed().to_4x4()
dir1 = ((arc_matrix.inverted() @ arc_end_pts[0]) - (arc_matrix.inverted() @ center)).normalized()
dir2 = ((arc_matrix.inverted() @ arc_end_pts[1]) - (arc_matrix.inverted() @ center)).normalized()
angle = -dir1.xy.angle_signed(dir2.xy)
# if is_reflex:
# angle = angle % (math.pi * 2)
# Center of gravity of all vertices, used to help position the text
cog = Vector((0, 0, 0))
for point in points:
cog += point
cog = matrix_world @ (cog / len(points))
radius = ((matrix_world @ points[0]) - center).length
arc_midpoint = center + ((cog - center).normalized() * radius)
text_position = self.project_point_onto_camera(arc_midpoint)
text_position = Vector(
((x_offset + text_position.x) * self.svg_scale, (y_offset - text_position.y) * self.svg_scale)
)
center_projected = self.project_point_onto_camera(center)
center_position = Vector(
((x_offset + center_projected.x) * self.svg_scale, (y_offset - center_projected.y) * self.svg_scale)
)
text_offset = (text_position - center_position).xy.normalized() * 5
text_position += text_offset
# dir1 = ((arc_matrix.inverted() @ arc_end_pts[0]) - (arc_matrix.inverted() @ center)).normalized()
# dir2 = ((arc_matrix.inverted() @ arc_end_pts[1]) - (arc_matrix.inverted() @ center)).normalized()
# angle = -dir1.xy.angle_signed(dir2.xy)
# calculating text parameters and adding text
text_position = arc_mid_point + arc_mid_dir * 5
text_style = SvgWriter.get_box_alignment_parameters("center")
angle_text = abs(round(math.degrees(angle), 3))
if is_reflex:
angle_text = 360 - angle_text
self.svg.add(self.svg.text(f"{angle_text}deg", insert=tuple(text_position), class_="ANGLE", **text_style))
angle_text = f"{int(angle)}deg"
self.svg.add(self.svg.text(angle_text, insert=text_position, class_="ANGLE", **text_style))
# Draw SVG arc, see for details: http://xahlee.info/js/svg_circle_arc.html
arc_proj_end_pts = [self.project_point_onto_camera(v) for v in arc_end_pts]
p1 = Vector(
((x_offset + arc_proj_end_pts[0].x) * self.svg_scale, (y_offset - arc_proj_end_pts[0].y) * self.svg_scale)
)
p2 = Vector(
((x_offset + arc_proj_end_pts[1].x) * self.svg_scale, (y_offset - arc_proj_end_pts[1].y) * self.svg_scale)
)
r = radius * self.svg_scale
# reflex = 1 if angle > math.pi else 0
reflex = is_reflex
if reflex:
sense = 0 if angle > 0 else 1
else:
sense = 1 if angle > 0 else 0
p1, p2 = arc_end_pts
r = angle_radius
# reflex: 0 => arc < 180 degrees
# 1 => arc > 180 degrees
reflex = int(angle > 180)
# sense: 0 => moving at negative angles
# 1 => moving at positive angles
sense = int(tool.Cad.is_counter_clockwise_order(*arc_points))
d = f"M {p1.x} {p1.y} A {r} {r} 0 {reflex} {sense} {p2.x} {p2.y}"
classes = self.get_attribute_classes(obj)
path = self.svg.add(self.svg.path(d=d, class_=" ".join(classes)))
def draw_radius_annotations(self, obj):
@@ -1344,18 +1322,10 @@ class SvgWriter:
multiline_to_bottom=True,
fill_bg=False,
line_number_start=0,
_draw_fill_bg=False,
):
"""returns list of created text tags"""
text_tags = []
if fill_bg:
method_kwargs = locals() | {"_draw_fill_bg": True, "fill_bg": False}
del method_kwargs["self"]
del method_kwargs["text_tags"]
text_tags += self.create_text_tag(**method_kwargs)
base_text_attrs = SvgWriter.get_box_alignment_parameters(box_alignment)
base_text_attrs = base_text_attrs | ({"filter": "url(#fill-background)"} if _draw_fill_bg else {})
if not multiline:
transform_kwargs = {"transform": "rotate({} {} {})".format(angle, text_position.x, text_position.y)}
@@ -1392,6 +1362,11 @@ class SvgWriter:
# doing it here and not in tspan constructor because constructor adds unnecessary spaces
tspan.update({"dy": f"{line_number if multiline_to_bottom else -line_number}em"})
text_tag.add(tspan)
if fill_bg:
fill_bg_tags = [self.add_fill_bg(text_tag) for text_tag in text_tags]
text_tags = fill_bg_tags + text_tags
return text_tags
def project_point_onto_camera(self, point):
@@ -314,7 +314,7 @@ class BIM_PT_references(Panel):
if not self.props.is_editing_references:
row = self.layout.row(align=True)
row.label(text=f"{DocumentsData.data['total_references']} References Found", icon="LONGDISPLAY")
row.label(text=f"{DocumentsData.data['total_references']} References Found", icon="OBJECT_HIDDEN")
row.operator("bim.load_references", text="", icon="IMPORT")
return
@@ -26,17 +26,19 @@ classes = (
operator.GetRepresentationIfcParameters,
operator.OverrideDelete,
operator.OverrideDuplicateMove,
operator.OverrideDuplicateMoveAggregate,
operator.OverrideDuplicateMoveAggregateMacro,
operator.OverrideDuplicateMoveLinked,
operator.OverrideDuplicateMoveLinkedMacro,
operator.OverrideDuplicateMoveMacro,
operator.OverrideDuplicateMoveAggregate,
operator.OverrideDuplicateMoveAggregateMacro,
operator.RefreshAggregate,
operator.OverrideJoin,
operator.OverrideModeSetEdit,
operator.OverrideModeSetObject,
operator.OverrideOriginSet,
operator.OverrideOutlinerDelete,
operator.OverridePasteBuffer,
operator.PurgeUnusedRepresentations,
operator.RefreshAggregate,
operator.RemoveConnection,
operator.RemoveRepresentation,
operator.SelectConnection,
@@ -50,6 +52,7 @@ classes = (
ui.BIM_PT_connections,
ui.BIM_PT_mesh,
ui.BIM_PT_workarounds,
ui.BIM_MT_object_set_origin,
)
@@ -97,7 +97,7 @@ class ConnectionsData:
@classmethod
def load(cls):
cls.data = {"connections": cls.connections()}
cls.data = {"connections": cls.connections(), "is_connection_realization": cls.is_connection_realization()}
cls.is_loaded = True
@classmethod
@@ -114,7 +114,13 @@ class ConnectionsData:
else:
related_element = rel.RelatedElement
if element.is_a("IfcRelConnectsPathElements"):
realizing_elements = []
realizing_elements_connection_type = ""
if rel.is_a("IfcRelConnectsWithRealizingElements"):
realizing_elements.extend(rel.RealizingElements)
realizing_elements_connection_type = rel.ConnectionType
if rel.is_a("IfcRelConnectsPathElements"):
related_element_connection_type = rel.RelatedConnectionType
else:
related_element_connection_type = ""
@@ -125,6 +131,8 @@ class ConnectionsData:
"is_relating": True,
"Name": related_element.Name or "Unnamed",
"ConnectionType": related_element_connection_type,
"realizing_elements": realizing_elements,
"realizing_elements_connection_type": realizing_elements_connection_type,
}
)
@@ -134,7 +142,13 @@ class ConnectionsData:
else:
relating_element = rel.RelatingElement
if element.is_a("IfcRelConnectsPathElements"):
realizing_elements = []
realizing_elements_connection_type = ""
if rel.is_a("IfcRelConnectsWithRealizingElements"):
realizing_elements.extend(rel.RealizingElements)
realizing_elements_connection_type = rel.ConnectionType
if rel.is_a("IfcRelConnectsPathElements"):
relating_element_connection_type = rel.RelatingConnectionType
else:
relating_element_connection_type = ""
@@ -145,11 +159,30 @@ class ConnectionsData:
"is_relating": False,
"Name": relating_element.Name or "Unnamed",
"ConnectionType": relating_element_connection_type,
"realizing_elements": realizing_elements,
"realizing_elements_connection_type": realizing_elements_connection_type,
}
)
return results
@classmethod
def is_connection_realization(cls):
element = tool.Ifc.get_entity(bpy.context.active_object)
connections = element.IsConnectionRealization
if not connections:
return
results = []
for rel in connections:
data = {
"realizing_elements_connection_type": rel.ConnectionType,
"connected_from": rel.RelatingElement,
"connected_to": rel.RelatedElement,
}
results.append(data)
return results
class DerivedPlacementsData:
data = {}
@@ -57,6 +57,31 @@ class EditObjectPlacement(bpy.types.Operator, Operator):
core.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj)
class OverrideOriginSet(bpy.types.Operator, Operator):
bl_idname = "bim.override_origin_set"
bl_label = "IFC Origin Set"
bl_options = {"REGISTER", "UNDO"}
obj: bpy.props.StringProperty()
origin_type: bpy.props.StringProperty()
def _execute(self, context):
objs = [bpy.data.objects.get(self.obj)] if self.obj else context.selected_objects
for obj in objs:
element = tool.Ifc.get_entity(obj)
if not element:
continue
if tool.Ifc.is_moved(obj):
core.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj)
representation = tool.Geometry.get_active_representation(obj)
if not representation:
continue
representation = ifcopenshell.util.representation.resolve_representation(representation)
if not tool.Geometry.is_meshlike(representation):
continue
bpy.ops.object.origin_set(type=self.origin_type)
bpy.ops.bim.update_representation(obj=obj.name)
class AddRepresentation(bpy.types.Operator, Operator):
bl_idname = "bim.add_representation"
bl_label = "Add Representation"
@@ -185,6 +210,15 @@ class RemoveRepresentation(bpy.types.Operator, Operator):
)
class PurgeUnusedRepresentations(bpy.types.Operator, Operator):
bl_idname = "bim.purge_unused_representations"
bl_label = "Purge Unused Representations"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.purge_unused_representations(tool.Ifc, tool.Geometry)
class UpdateRepresentation(bpy.types.Operator, Operator):
bl_idname = "bim.update_representation"
bl_label = "Update Representation"
@@ -214,6 +248,10 @@ class UpdateRepresentation(bpy.types.Operator, Operator):
product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id)
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"):
tool.Geometry.clear_cache(product)
@@ -231,8 +269,14 @@ class UpdateRepresentation(bpy.types.Operator, Operator):
core.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj)
if material and material.is_a() in ["IfcMaterialProfileSet", "IfcMaterialLayerSet"]:
# These objects are parametrically based on an axis and should not be modified as a mesh
return
if self.ifc_representation_class == "IfcTessellatedFaceSet":
# We are explicitly casting to a tessellation, so remove all parametric materials.
element_type = ifcopenshell.util.element.get_type(product)
ifcopenshell.api.run("material.unassign_material", tool.Ifc.get(), product=element_type)
ifcopenshell.api.run("material.unassign_material", tool.Ifc.get(), product=product)
else:
# These objects are parametrically based on an axis and should not be modified as a mesh
return
old_representation = self.file.by_id(obj.data.BIMMeshProperties.ifc_definition_id)
context_of_items = old_representation.ContextOfItems
@@ -285,7 +329,7 @@ class UpdateRepresentation(bpy.types.Operator, Operator):
"style.assign_representation_styles",
self.file,
shape_representation=new_representation,
styles=tool.Geometry.get_styles(obj),
styles=tool.Geometry.get_styles(obj, only_assigned_to_faces=True),
should_use_presentation_style_assignment=context.scene.BIMGeometryProperties.should_use_presentation_style_assignment,
)
tool.Geometry.record_object_materials(obj)
@@ -637,6 +681,11 @@ class OverrideDuplicateMove(bpy.types.Operator):
element = tool.Ifc.get_entity(obj)
if element and element.is_a("IfcAnnotation") and element.ObjectType == "DRAWING":
continue # For now, don't copy drawings until we stabilise a bit more. It's tricky.
# Prior to duplicating, sync the object placement to make decomposition recreation more stable.
if tool.Ifc.is_moved(obj):
blenderbim.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj)
new_obj = obj.copy()
if obj.data:
new_obj.data = obj.data.copy()
@@ -705,6 +754,10 @@ class OverrideDuplicateMoveLinked(bpy.types.Operator):
relationships = tool.Root.get_decomposition_relationships(context.selected_objects)
old_to_new = {}
for obj in context.selected_objects:
# Prior to duplicating, sync the object placement to make decomposition recreation more stable.
if tool.Ifc.is_moved(obj):
blenderbim.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj)
new_obj = obj.copy()
if obj.data:
new_obj.data = obj.data.copy()
@@ -1408,9 +1461,11 @@ class OverrideModeSetObject(bpy.types.Operator):
self.reload_representation(obj)
else:
self.reload_representation(obj)
tool.Ifc.finish_edit(obj)
for obj in self.unchanged_objs_with_openings:
self.reload_representation(obj)
tool.Ifc.finish_edit(obj)
return {"FINISHED"}
def reload_representation(self, obj):
@@ -18,7 +18,7 @@
import bpy
import blenderbim.tool as tool
from bpy.types import Panel
from bpy.types import Panel, Menu
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.helper import prop_with_search
from blenderbim.bim.module.geometry.data import RepresentationsData, ConnectionsData, DerivedPlacementsData
@@ -29,6 +29,29 @@ def object_menu(self, context):
self.layout.operator("bim.override_object_duplicate_move", icon="PLUGIN")
self.layout.operator("bim.override_object_delete", icon="PLUGIN")
self.layout.operator("bim.override_paste_buffer", icon="PLUGIN")
self.layout.menu("BIM_MT_object_set_origin", icon="PLUGIN")
class BIM_MT_object_set_origin(Menu):
bl_idname = "BIM_MT_object_set_origin"
bl_label = "IFC Set Origin"
def draw(self, context):
self.layout.operator(
"bim.override_origin_set", icon="PLUGIN", text="IFC Geometry to Origin"
).origin_type = "GEOMETRY_ORIGIN"
self.layout.operator(
"bim.override_origin_set", icon="PLUGIN", text="IFC Origin to Geometry"
).origin_type = "ORIGIN_GEOMETRY"
self.layout.operator(
"bim.override_origin_set", icon="PLUGIN", text="IFC Origin to 3D Cursor"
).origin_type = "ORIGIN_CURSOR"
self.layout.operator(
"bim.override_origin_set", icon="PLUGIN", text="IFC Origin to Center of Mass (Surface)"
).origin_type = "ORIGIN_CENTER_OF_MASS"
self.layout.operator(
"bim.override_origin_set", icon="PLUGIN", text="IFC Origin to Center of Mass (Volume)"
).origin_type = "ORIGIN_CENTER_OF_VOLUME"
def outliner_menu(self, context):
@@ -111,7 +134,7 @@ class BIM_PT_connections(Panel):
layout = self.layout
props = context.active_object.BIMObjectProperties
if not ConnectionsData.data["connections"]:
if not ConnectionsData.data["connections"] and not ConnectionsData.data["is_connection_realization"]:
layout.label(text="No connections found")
for connection in ConnectionsData.data["connections"]:
@@ -123,6 +146,44 @@ class BIM_PT_connections(Panel):
op = row.operator("bim.remove_connection", icon="X", text="")
op.connection = connection["id"]
if connection["realizing_elements"]:
row = self.layout.row(align=True)
connection_type = connection["realizing_elements_connection_type"]
connection_type = f" ({connection_type})" if connection_type else ""
row.label(text=f"Realizing elements{connection_type}:")
for element in connection["realizing_elements"]:
row = self.layout.row(align=True)
obj = tool.Ifc.get_object(element)
row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = element.id()
row.label(text=obj.name)
# display connections where element is connection realization
connections = ConnectionsData.data["is_connection_realization"]
if not connections:
return
row = self.layout.row(align=True)
row.label(text="Element is connections realization:")
for connection in connections:
# NOTE: not displayed yet
connection_type = connection["realizing_elements_connection_type"]
connection_type = f" ({connection_type})" if connection_type else ""
row = self.layout.row(align=True)
connected_from = connection["connected_from"]
obj = tool.Ifc.get_object(connected_from)
row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_from.id()
row.label(text=obj.name)
row.label(text="", icon="FORWARD")
connected_to = connection["connected_to"]
obj = tool.Ifc.get_object(connected_to)
row.operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = connected_to.id()
row.label(text=obj.name)
class BIM_PT_mesh(Panel):
bl_label = "Representation Utilities"
@@ -34,6 +34,7 @@ classes = (
operator.GetCursorLocation,
operator.SetCursorLocation,
operator.ConvertAngleToCoordinates,
operator.ImportPlot,
prop.BIMGeoreferenceProperties,
ui.BIM_PT_gis,
ui.BIM_PT_gis_utilities,
@@ -110,7 +110,7 @@ class SetCursorLocation(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.set_cursor_location"
bl_label = "Set Cursor Location"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Move curson location to the specified coordinates"
bl_description = "Move cursor location to the specified coordinates"
@classmethod
def poll(cls, context):
@@ -187,3 +187,20 @@ class ConvertAngleToCoordinates(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
core.convert_angle_to_coord(tool.Georeference, type=self.type)
class ImportPlot(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.import_plot"
bl_label = "Import Plot"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Import plot"
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
filter_glob: bpy.props.StringProperty(default="*.csv", options={"HIDDEN"})
def execute(self, context):
core.import_plot(tool.Georeference, filepath=self.filepath)
return {"FINISHED"}
def invoke(self, context, event):
context.window_manager.fileselect_add(self)
return {"RUNNING_MODAL"}
@@ -50,8 +50,9 @@ class BIM_PT_misc_utilities(bpy.types.Panel):
row.operator("bim.clean_wireframes")
row = layout.row()
row.operator("bim.patch_non_parametric_mep_segment")
row = layout.row(align=True)
row.operator("bim.enable_editing_sketch_extrusion_profile", text="Start Sketching")
row.operator("bim.edit_sketch_extrusion_profile", text="", icon="FILE_REFRESH")
row.operator("bim.disable_editing_sketch_extrusion_profile", text="", icon="CANCEL")
row = layout.row()
row.operator("bim.import_plot", text="Import Plot Coordinates", icon="FILE_FOLDER")
@@ -78,6 +78,7 @@ classes = (
opening.AddPotentialHalfSpaceSolid,
opening.AddPotentialOpening,
opening.EditOpenings,
opening.CloneOpening,
opening.FlipFill,
opening.HideBooleans,
opening.HideOpenings,
@@ -130,11 +130,11 @@ def update_door_modifier_representation(context, obj):
if tool.Ifc.get_schema() != "IFC2X3":
element.OperationType = props.door_type
# occurences attributes
occurences = tool.Ifc.get_all_element_occurences(element)
for occurence in occurences:
occurence.OverallWidth = props.overall_width / si_conversion
occurence.OverallHeight = props.overall_height / si_conversion
# occurrences attributes
occurrences = tool.Ifc.get_all_element_occurrences(element)
for occurrence in occurrences:
occurrence.OverallWidth = props.overall_width / si_conversion
occurrence.OverallHeight = props.overall_height / si_conversion
update_simple_openings(element, props.overall_width / si_conversion, props.overall_height / si_conversion)
+157 -37
View File
@@ -29,6 +29,7 @@ import ifcopenshell.util.system
import ifcopenshell.util.element
import ifcopenshell.util.representation
import mathutils.geometry
import numpy as np
import blenderbim.bim.handler
import blenderbim.core.type
import blenderbim.core.root
@@ -73,29 +74,68 @@ class RegenerateDistributionElement(bpy.types.Operator, tool.Ifc.Operator):
[e for e in ifcopenshell.util.system.get_connected_from(element) if e not in processed_elements]
)
if len(connected) == 1:
extend_branch(list(connected)[0], branch, element)
else:
for connected_element in connected:
branch_element["children"].append(extend_branch(connected_element, [], element))
for connected_element in connected:
branch_element["children"].append(extend_branch(connected_element, [], element))
return branch
queue = extend_branch(current_element, [])[0]["children"]
extended_branch = extend_branch(current_element, [])
queue = extended_branch[0]["children"]
# import pprint
# pprint.pprint(queue)
def get_connected_ports_between(element1, element2):
ports1 = tool.System.get_ports(element1)
ports2 = tool.System.get_ports(element2)
for p in ports1:
connected_port = tool.System.get_connected_port(p)
# in IFC2X3 there is no PredefinedType
if getattr(p, "PredefinedType", None) == "WIRELESS":
continue
if connected_port in ports2:
return p, connected_port
return None, None
si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
def process_branch(branch):
for branch_element in branch:
element = branch_element["element"]
print("processing", element)
predecessor = branch_element["predecessor"]
if False: # If the element does not need to be transformed, return early.
return
# Perform the extend, translate, rotate, etc the element as necessary based on the predecessor.
# For segments, prioritise extensions instead of translations.
# For everything else, only translate. No rotation.
# For everything besides segments, only translate. No rotation.
obj = tool.Ifc.get_object(element)
obj_pred = tool.Ifc.get_object(predecessor)
if tool.Ifc.is_moved(obj):
blenderbim.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj)
if tool.Ifc.is_moved(obj_pred):
blenderbim.core.geometry.edit_object_placement(tool.Ifc, tool.Geometry, tool.Surveyor, obj=obj_pred)
port, port_pred = get_connected_ports_between(element, predecessor)
port_matrix_pred = tool.Model.get_element_matrix(port_pred)
# Only segments can be extended
# extension for them takes priority over translation
if element.is_a("IfcFlowSegment"):
DumbProfileJoiner().join_E(obj, port_matrix_pred.translation * si_conversion)
context.view_layer.update() # update since extrusion might involve changing object's location
port_martix = tool.Model.get_element_matrix(port)
port_location = port_martix.translation
port_location_pred = port_matrix_pred.translation
if not tool.Cad.are_vectors_equal(port_location, port_location_pred):
obj.location += (port_location_pred - port_location) * si_conversion
context.view_layer.update() # otherwise tool.Ifc.is_moved won't get triggered
else:
# If the element does not need to be transformed, return early.
return
for child_branch in branch_element["children"]:
process_branch(child_branch)
@@ -168,6 +208,7 @@ class FitFlowSegments(bpy.types.Operator, tool.Ifc.Operator):
elif total_profiles == 2:
if is_parallel:
fitting_type = "TRANSITION"
bpy.ops.bim.mep_add_transition()
elif total_selected_objs == 3:
if total_profiles > 1:
@@ -229,6 +270,10 @@ class MEPGenerator:
if port_position == "end_port":
tool.Model.edit_element_placement(port, end_port_matrix)
continue
# NOTE: currently this functionality is moved to bim.regenerate_distribution_element
connected_port = tool.System.get_connected_port(port)
if not connected_port:
continue
@@ -303,6 +348,8 @@ class MEPGenerator:
There lies the problem that it won't be
able to identify the fittings that were not yet connected to any segments yet.
"""
# TODO: check angle, start, end and offset for transitions
if not isinstance(segment_or_segments, collections.abc.Iterable):
segments = [segment_or_segments]
ports = [port_or_ports]
@@ -313,7 +360,7 @@ class MEPGenerator:
segments_data = []
for segment, port in zip(segments, ports, strict=True):
segment_type = ifcopenshell.util.element.get_type(segment)
# if segment doesn't have type we cannot check compatibility by available occurences
# if segment doesn't have type we cannot check compatibility by available occurrences
if segment_type is None:
return
segments_data.append((segment_type, port.PredefinedType, port.SystemType))
@@ -369,28 +416,38 @@ class MEPGenerator:
for fitting_type in fitting_types:
if fitting_type.PredefinedType != predefined_type:
continue
fittings = tool.Ifc.get_all_element_occurences(fitting_type)
fittings = tool.Ifc.get_all_element_occurrences(fitting_type)
if not fittings:
continue
fitting = fittings[0]
ports = ifcopenshell.util.system.get_ports(fitting)
fitting_data = []
fitting_connected_to_none_type = False
for port in ports:
connected_port = tool.System.get_connected_port(port)
connected_element = tool.System.get_port_relating_element(connected_port)
element_type = ifcopenshell.util.element.get_type(connected_element)
if element_type is None:
fitting_connected_to_none_type = True
break
fitting_data.append((element_type, port.PredefinedType, port.SystemType))
for fitting in fittings:
ports = ifcopenshell.util.system.get_ports(fitting)
fitting_data = []
skipped_the_occurrence = False
for port in ports:
connected_port = tool.System.get_connected_port(port)
if fitting_connected_to_none_type:
continue
# fitting port is not connected to anything
if not connected_port:
skipped_the_occurrence = True
break
if are_connected_elements_compatible(segments_data, fitting_data):
return pack_return_data(fitting_type, ports, segments_data)
connected_element = tool.System.get_port_relating_element(connected_port)
element_type = ifcopenshell.util.element.get_type(connected_element)
# fitting is connected to none type
if element_type is None:
skipped_the_occurrence = True
break
fitting_data.append((element_type, port.PredefinedType, port.SystemType))
# if we skipped the occurrence we still can other occurrences
# otherwise checking 1 occurrence is enough
if not skipped_the_occurrence:
if are_connected_elements_compatible(segments_data, fitting_data):
return pack_return_data(fitting_type, ports, segments_data)
return
def create_obstruction_type(self, segment):
# code is very similar to "bim.add_type"
@@ -453,7 +510,7 @@ class MEPGenerator:
obstruction_type = self.create_obstruction_type(segment)
profile_joiner = DumbProfileJoiner()
# create obstruction occurence and setup it's length and port
# create obstruction occurrence and setup it's length and port
# NOTE: at this point we loose current blender objects selection
bpy.ops.bim.add_constr_type_instance(relating_type_id=obstruction_type.id())
obstruction_obj = bpy.context.active_object
@@ -570,10 +627,13 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
start_axis = tool.Model.get_flow_segment_axis(start_object)
end_axis = tool.Model.get_flow_segment_axis(end_object)
start_object_rotation = start_object.matrix_world.to_quaternion()
start_object_z_basis = start_object_rotation.to_matrix().col[2] # z basis vector
keep_only_z_axis = lambda p_ws: p_ws.dot(start_object_z_basis) * start_object_z_basis
# TODO: support cases when segments are partially or completely overlapping each other
if not tool.Cad.are_edges_collinear(start_axis, end_axis):
self.report({"ERROR"}, f"Failed to add transition - non collinear segments are not yet supported.")
if not tool.Cad.are_edges_parallel(start_axis, end_axis):
self.report({"ERROR"}, f"Failed to add transition - segments are not parallel.")
return {"CANCELLED"}
start_segment_data = MEPGenerator().get_segment_data(start_element)
@@ -588,28 +648,83 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
end_segment_data["end_point"]: end_segment_data["end_port"],
}
# transition points
start_point, end_point = tool.Cad.closest_points(
(start_segment_data["start_point"], start_segment_data["end_point"]),
(end_segment_data["start_point"], end_segment_data["end_point"]),
)
transition_dir = (end_point - start_point).normalized()
# figure profile offset
base_transition_dir = keep_only_z_axis(end_point - start_point).normalized()
flip_profile_offset = base_transition_dir.dot(start_object_z_basis) < 0
if tool.Cad.are_edges_collinear(start_axis, end_axis):
profile_offset = None
else:
to_start_object_space = start_object_rotation.inverted()
profile_offset = (
(to_start_object_space @ end_object.location) - (to_start_object_space @ start_object.location)
).xy
if tool.Cad.is_x(profile_offset.length_squared, 0):
profile_offset = None
else:
profile_offset = profile_offset / si_conversion
if flip_profile_offset:
profile_offset *= V(1, -1)
# world space profile offset
profile_offset_ws = (
start_object_rotation @ (profile_offset * si_conversion).to_3d() if profile_offset else V(0, 0, 0)
)
# will need entire_length to check that transition length fill fit
first_segment_start, second_segment_end = [
p
for p in (
start_segment_data["start_point"],
start_segment_data["end_point"],
end_segment_data["start_point"],
end_segment_data["end_point"],
)
if p not in (start_point, end_point)
]
entire_length = (first_segment_start - second_segment_end).length
# can't rely on (end_point-start_point) here because
# transition might change the segments length and therefore direction will be changed
segments_dir = (start_point - first_segment_start).normalized()
start_port = points_ports_map[start_point]
end_port = points_ports_map[end_point]
# add transition representation
builder = ShapeBuilder(ifc_file)
rep, transition_data = builder.mep_transition_shape(
start_element, end_element, self.start_length / si_conversion, self.end_length / si_conversion
start_element,
end_element,
self.start_length / si_conversion,
self.end_length / si_conversion,
profile_offset=profile_offset,
)
if not rep:
self.report({"ERROR"}, f"Failed to add transition - this kind of profiles is not yet supported.")
return {"CANCELLED"}
middle_point = (start_point + end_point) / 2
full_transition_length = transition_data["full_transition_length"] * si_conversion
start_segment_extend_point = middle_point - transition_dir * full_transition_length / 2
end_segment_extend_point = middle_point + transition_dir * full_transition_length / 2
if full_transition_length >= entire_length:
self.report(
{"ERROR"},
f"Failed to add transition - transition length is larger the segments and the distance between them.\n"
+ f"Transition length: {full_transition_length:.2f}m, segments length: {entire_length:.2f}m",
)
# TODO: handle the case without creating a representation in the first place?
ifcopenshell.api.run("geometry.remove_representation", ifc_file, representation=rep)
return {"CANCELLED"}
middle_point = keep_only_z_axis((start_point + end_point) / 2 - start_point) + start_point
start_segment_extend_point = middle_point - segments_dir * full_transition_length / 2
end_segment_extend_point = middle_point + segments_dir * full_transition_length / 2 + profile_offset_ws
transition_dir = keep_only_z_axis(end_segment_extend_point - start_segment_extend_point).normalized()
DumbProfileJoiner().join_E(start_object, start_segment_extend_point)
DumbProfileJoiner().join_E(end_object, end_segment_extend_point)
@@ -618,6 +733,10 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
)
transition_type = fitting_data["fitting_type"] if fitting_data else None
if transition_type:
# TODO: handle the case without creating a representation in the first place?
ifcopenshell.api.run("geometry.remove_representation", ifc_file, representation=rep)
start_port_match = fitting_data["start_port_match"] if fitting_data else True
if not transition_type:
@@ -649,8 +768,9 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator):
# adjust transition segment rotation and location
transition_obj.matrix_world = start_object.matrix_world
context.view_layer.update()
transition_obj_dir = tool.Cad.get_edge_direction(tool.Model.get_flow_segment_axis(transition_obj))
direction_match = tool.Cad.are_vectors_equal(transition_obj_dir, transition_dir)
direction_match = tool.Cad.are_vectors_equal(transition_dir, transition_obj_dir)
# if there are no mismatches or everything matches up we don't need to flip the transition
if start_port_match != direction_match:
@@ -70,7 +70,10 @@ class FilledOpeningGenerator:
)
if target is None:
target = bpy.context.scene.cursor.location
should_set_z_level = True
target = bpy.context.scene.cursor.location.copy()
else:
should_set_z_level = False
# Sometimes, the voided_obj may be an aggregate, which won't have any representation.
if voided_obj.data:
@@ -86,12 +89,17 @@ class FilledOpeningGenerator:
axis = tool.Model.get_wall_axis(voided_obj, layers=layers)["base"]
new_matrix = voided_obj.matrix_world.copy()
new_matrix.translation = tool.Cad.point_on_edge(target, axis)
point_on_axis = tool.Cad.point_on_edge(target, axis)
new_matrix.translation.x = point_on_axis.x
new_matrix.translation.y = point_on_axis.y
if filling.is_a("IfcDoor"):
new_matrix.translation.z = voided_obj.matrix_world.translation.z
if should_set_z_level:
if filling.is_a("IfcDoor"):
new_matrix.translation.z = voided_obj.matrix_world.translation.z
else:
new_matrix.translation.z = voided_obj.matrix_world.translation.z + props.rl2
else:
new_matrix.translation.z = voided_obj.matrix_world.translation.z + props.rl2
new_matrix.translation.z = filling_obj.matrix_world.copy().translation.z
filling_obj.matrix_world = new_matrix
bpy.context.view_layer.update()
@@ -735,12 +743,19 @@ class EditOpenings(Operator, tool.Ifc.Operator):
def _execute(self, context):
props = bpy.context.scene.BIMModelProperties
building_objs = set()
model = tool.Ifc.get()
all_openings = model.by_type("IfcOpeningElement")
similar_openings = []
for obj in context.selected_objects:
element = tool.Ifc.get_entity(obj)
if not element:
continue
openings = [r.RelatedOpeningElement for r in element.HasOpenings]
for opening in openings:
for all_opening in all_openings:
if all_opening.ObjectPlacement == opening.ObjectPlacement:
similar_openings.append(all_opening)
opening_obj = tool.Ifc.get_object(opening)
if opening_obj:
if tool.Ifc.is_edited(opening_obj):
@@ -749,6 +764,8 @@ class EditOpenings(Operator, tool.Ifc.Operator):
blenderbim.core.geometry.edit_object_placement(
tool.Ifc, tool.Geometry, tool.Surveyor, obj=opening_obj
)
for similar_opening in similar_openings:
similar_opening.ObjectPlacement = opening.ObjectPlacement
building_objs.add(obj)
building_objs.update(self.get_all_building_objects_of_similar_openings(opening))
tool.Ifc.unlink(element=opening, obj=opening_obj)
@@ -773,6 +790,34 @@ class EditOpenings(Operator, tool.Ifc.Operator):
results.add(obj)
return results
class CloneOpening(Operator, tool.Ifc.Operator):
bl_idname = "bim.clone_opening"
bl_label = "Clone Opening"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Create and assign to the selected element the selected opening and assign to it the same representation and object placement"
def _execute(self, context):
objects = bpy.context.selected_objects
for obj in objects:
entity = tool.Ifc.get_entity(obj)
if entity.is_a() == "IfcWall":
wall = entity
continue
if entity.is_a() == "IfcOpeningElement":
opening = entity
continue
opening_placement = opening.ObjectPlacement
opening_representations = opening.Representation.Representations
new_opening = ifcopenshell.api.run("root.create_entity", tool.Ifc.get(), ifc_class="IfcOpeningElement")
for representation in opening_representations:
ifcopenshell.api.run("geometry.assign_representation", tool.Ifc.get(), product = new_opening, representation = representation)
ifcopenshell.api.run("void.add_opening", tool.Ifc.get(), opening = new_opening, element = wall)
new_opening.ObjectPlacement = opening_placement
return {"FINISHED"}
# TODO: merge with ProfileDecorator?
class DecorationsHandler:
@@ -213,7 +213,7 @@ class AddConstrTypeInstance(bpy.types.Operator):
tool.Ifc, tool.Collector, tool.Spatial, structure_obj=parent_obj, element_obj=obj
)
# set occurences properties for the types defined with modifiers
# set occurrences properties for the types defined with modifiers
if instance_class in ["IfcWindow", "IfcDoor"]:
pset_name = f"BBIM_{instance_class[3:]}"
bbim_pset = ifcopenshell.util.element.get_psets(element).get(pset_name, None)
@@ -59,10 +59,10 @@ def update_railing_modifier_ifc_data(context):
# type attributes
element.PredefinedType = "USERDEFINED"
# occurences attributes
occurences = tool.Ifc.get_all_element_occurences(element)
for occurence in occurences:
occurence.ObjectType = props.railing_type
# occurrences attributes
occurrences = tool.Ifc.get_all_element_occurrences(element)
for occurrence in occurrences:
occurrence.ObjectType = props.railing_type
# update pset
pset_common = tool.Pset.get_element_pset(element, "Pset_RailingCommon")
@@ -40,10 +40,6 @@ from pprint import pprint
# https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoofType.htm
def float_is_zero(f):
return 0.0001 >= f >= -0.0001
def bm_mesh_clean_up(bm):
# remove internal edges and faces
# adding missing faces so we could rely on `e.is_boundary` later
@@ -99,7 +95,7 @@ def is_valid_roof_footprint(bm):
# should be bmesh to support edit mode
bm.verts.ensure_lookup_table()
base_z = bm.verts[0].co.z
all_verts_same_level = all([float_is_zero(v.co.z - base_z) for v in bm.verts[1:]])
all_verts_same_level = all([tool.Cad.is_x(v.co.z - base_z, 0) for v in bm.verts[1:]])
if not all_verts_same_level:
return (
{"ERROR"},
@@ -202,7 +198,7 @@ def generate_hiped_roof_bmesh(
def find_identical_new_vert(co):
for v in bm.verts:
if float_is_zero((co - v.co).length):
if tool.Cad.is_x((co - v.co).length, 0):
return v
def find_other_polygon_verts(edge):
@@ -234,7 +230,7 @@ def generate_hiped_roof_bmesh(
bottom_chords_to_remove = []
def is_footprint_vert(v):
return float_is_zero(v.co.z - footprint_z)
return tool.Cad.is_x(v.co.z - footprint_z, 0)
def is_footprint_edge(edge):
return all(is_footprint_vert(v) for v in edge.verts)
@@ -326,7 +322,7 @@ def generate_hiped_roof_bmesh(
default_offset_dir = Vector([0, 0, 1]) * roof_thickness
footprint_verts = set()
if not float_is_zero(rafter_edge_angle):
if not tool.Cad.is_x(rafter_edge_angle, 0):
footprint_edges = []
for edge in extruded_edges:
if is_footprint_edge(edge):
@@ -398,7 +394,7 @@ def update_roof_modifier_ifc_data(context):
if not angle_layer:
return False
for edge_angle in angle_layer:
if float_is_zero(edge_angle - pi / 2):
if tool.Cad.is_x(edge_angle - pi / 2, 0):
return True
return False
@@ -406,8 +402,8 @@ def update_roof_modifier_ifc_data(context):
if props.roof_type == "HIP/GABLE ROOF":
element.PredefinedType = "GABLE_ROOF" if roof_is_gabled() else "HIP_ROOF"
# occurences attributes
# occurences = tool.Ifc.get_all_element_occurences(element)
# occurrences attributes
# occurrences = tool.Ifc.get_all_element_occurrences(element)
tool.Ifc.edit(obj)
@@ -95,19 +95,19 @@ class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator):
gross_settings.set(gross_settings.DISABLE_OPENING_SUBTRACTIONS, True)
for obj in bpy.context.visible_objects:
element = tool.Ifc.get_entity(obj)
visible_element = tool.Ifc.get_entity(obj)
if (
not element
not visible_element
or obj.type != "MESH"
or not self.is_bounding_class(element)
or not self.is_bounding_class(visible_element)
or not tool.Drawing.is_intersecting_plane(obj, self.cut_point, self.cut_normal)
):
continue
old_mesh = None
if element.HasOpenings:
new_mesh = self.create_mesh(ifcopenshell.geom.create_shape(gross_settings, element))
if visible_element.HasOpenings:
new_mesh = self.create_mesh(ifcopenshell.geom.create_shape(gross_settings, visible_element))
old_mesh = obj.data
obj.data = new_mesh
@@ -34,7 +34,7 @@ from mathutils import Vector
# TODO: move to some utils helpers/tool module
def update_simple_openings(element, opening_width, opening_height):
ifc_file = tool.Ifc.get()
fillings = tool.Ifc.get_all_element_occurences(element)
fillings = tool.Ifc.get_all_element_occurrences(element)
voided_objs = set()
has_replaced_opening_representation = False
@@ -158,11 +158,11 @@ def update_window_modifier_representation(context, obj):
if tool.Ifc.get_schema() != "IFC2X3":
element.PartitioningType = props.window_type
# occurences attributes
occurences = tool.Ifc.get_all_element_occurences(element)
for occurence in occurences:
occurence.OverallWidth = props.overall_width / si_conversion
occurence.OverallHeight = props.overall_height / si_conversion
# occurrences attributes
occurrences = tool.Ifc.get_all_element_occurrences(element)
for occurrence in occurrences:
occurrence.OverallWidth = props.overall_width / si_conversion
occurrence.OverallHeight = props.overall_height / si_conversion
update_simple_openings(element, props.overall_width / si_conversion, props.overall_height / si_conversion)
@@ -51,6 +51,7 @@ class BimTool(WorkSpaceTool):
("bim.hotkey", {"type": "K", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_K")]}),
("bim.hotkey", {"type": "M", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_M")]}),
("bim.hotkey", {"type": "O", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_O")]}),
("bim.hotkey", {"type": "L", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_L")]}),
("bim.hotkey", {"type": "Q", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_Q")]}),
("bim.hotkey", {"type": "R", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_R")]}),
("bim.hotkey", {"type": "T", "value": "PRESS", "shift": True}, {"properties": [("hotkey", "S_T")]}),
@@ -393,6 +394,15 @@ class BimToolUI:
else:
row.operator("bim.show_openings", icon="HIDE_OFF", text="")
if AuthoringData.data["active_class"] in (
"IfcOpeningElement",
):
if len(context.selected_objects) == 2:
row = cls.layout.row(align=True)
row.label(text="", icon="EVENT_SHIFT")
row.label(text="", icon="EVENT_L")
row.operator("bim.clone_opening", text="Clone Opening")
cls.layout.row(align=True).label(text="Align")
add_layout_hotkey_operator(cls.layout, "Align Exterior", "S_X", "")
add_layout_hotkey_operator(cls.layout, "Align Centerline", "S_C", "")
@@ -726,6 +736,13 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator):
self.props.y = self.y
self.props.z = self.z
def hotkey_S_L(self):
if AuthoringData.data["active_class"] in (
"IfcOpeningElement",
):
if len(bpy.context.selected_objects) == 2:
bpy.ops.bim.clone_opening()
def hotkey_A_D(self):
if not bpy.context.selected_objects:
return
@@ -29,6 +29,7 @@ classes = (
operator.EnableEditingArbitraryProfile,
operator.EnableEditingProfile,
operator.LoadProfiles,
operator.PurgeUnusedProfiles,
operator.RemoveProfileDef,
prop.Profile,
prop.BIMProfileProperties,
@@ -36,6 +36,7 @@ class ProfileData:
def load(cls):
cls.data = {
"total_profiles": cls.total_profiles(),
"active_profile_users": cls.active_profile_users(),
"profile_classes": cls.profile_classes(),
"is_arbitrary_profile": cls.is_arbitrary_profile(),
"is_editing_arbitrary_profile": cls.is_editing_arbitrary_profile(),
@@ -46,6 +47,13 @@ class ProfileData:
def total_profiles(cls):
return len([p for p in tool.Ifc.get().by_type("IfcProfileDef") if p.ProfileName])
@classmethod
def active_profile_users(cls):
profiles_props = bpy.context.scene.BIMProfileProperties
profile_prop = profiles_props.profiles[profiles_props.active_profile_index]
profile_ifc = tool.Ifc.get().by_id(profile_prop.ifc_definition_id)
return tool.Ifc.get().get_total_inverses(profile_ifc)
@classmethod
def profile_classes(cls):
classes = ["IfcArbitraryClosedProfileDef"]
@@ -72,4 +80,9 @@ class ProfileData:
@classmethod
def is_editing_arbitrary_profile(cls):
obj = bpy.context.active_object
return obj and obj.data and hasattr(obj.data, "BIMMeshProperties") and obj.data.BIMMeshProperties.subshape_type == "PROFILE"
return (
obj
and obj.data
and hasattr(obj.data, "BIMMeshProperties")
and obj.data.BIMMeshProperties.subshape_type == "PROFILE"
)
@@ -21,6 +21,7 @@ import ifcopenshell.api
import blenderbim.bim.helper
import blenderbim.tool as tool
import blenderbim.bim.module.model.profile as model_profile
import blenderbim.core.profile as core
from blenderbim.bim.module.model.decorator import ProfileDecorator
from blenderbim.bim.module.profile.prop import generate_thumbnail_for_active_profile
from blenderbim.bim.module.profile.data import refresh
@@ -213,3 +214,16 @@ class EditArbitraryProfile(bpy.types.Operator, tool.Ifc.Operator):
props.active_arbitrary_profile_id = 0
model_profile.DumbProfileRegenerator().regenerate_from_profile_def(profile)
class PurgeUnusedProfiles(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.purge_unused_profiles"
bl_label = "Purge Unused Profiles"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
props = context.scene.BIMProfileProperties
core.purge_unused_profiles(tool.Ifc, tool.Profile)
if props.is_editing:
refresh()
bpy.ops.bim.load_profiles()
@@ -49,10 +49,14 @@ class Profile(PropertyGroup):
ifc_definition_id: IntProperty(name="IFC Definition ID")
def update_active_profile_index(self, context):
ProfileData.data["active_profile_users"] = ProfileData.active_profile_users()
class BIMProfileProperties(PropertyGroup):
is_editing: BoolProperty(name="Is Editing")
profiles: CollectionProperty(name="Profiles", type=Profile)
active_profile_index: IntProperty(name="Active Profile Index")
active_profile_index: IntProperty(name="Active Profile Index", update=update_active_profile_index)
active_profile_id: IntProperty(name="Active Profile Id")
active_arbitrary_profile_id: IntProperty(name="Active Arbitrary Profile Id")
profile_attributes: CollectionProperty(name="Profile Attributes", type=Attribute)
@@ -79,17 +79,23 @@ class BIM_PT_profiles(Panel):
self.props,
"active_profile_index",
)
if active_profile and active_profile.ifc_class in (
"IfcArbitraryClosedProfileDef",
"IfcArbitraryProfileDefWithVoids",
):
if self.props.active_arbitrary_profile_id:
row = self.layout.row(align=True)
row.operator("bim.edit_arbitrary_profile", text="Save Arbitrary Profile", icon="CHECKMARK")
row.operator("bim.disable_editing_arbitrary_profile", text="", icon="CANCEL")
else:
row = self.layout.row()
row.operator("bim.enable_editing_arbitrary_profile", text="Edit Arbitrary Profile", icon="GREASEPENCIL")
if active_profile:
if active_profile.ifc_class in (
"IfcArbitraryClosedProfileDef",
"IfcArbitraryProfileDefWithVoids",
):
if self.props.active_arbitrary_profile_id:
row = self.layout.row(align=True)
row.operator("bim.edit_arbitrary_profile", text="Save Arbitrary Profile", icon="CHECKMARK")
row.operator("bim.disable_editing_arbitrary_profile", text="", icon="CANCEL")
else:
row = self.layout.row()
row.operator(
"bim.enable_editing_arbitrary_profile", text="Edit Arbitrary Profile", icon="GREASEPENCIL"
)
users_of_profile = ProfileData.data["active_profile_users"]
self.layout.label(icon="INFO", text=f"Profile has {users_of_profile} inverse relationship(s) in project")
if self.props.active_profile_id:
self.draw_editable_ui(context)
@@ -41,6 +41,7 @@ classes = (
operator.SaveLibraryFile,
operator.SelectLibraryFile,
operator.ToggleFilterCategories,
operator.ToggleLinkSelectability,
operator.ToggleLinkVisibility,
operator.UnassignLibraryDeclaration,
operator.UnlinkIfc,
@@ -55,6 +56,7 @@ classes = (
ui.BIM_PT_project,
ui.BIM_PT_project_library,
ui.BIM_PT_links,
ui.BIM_PT_purge,
ui.BIM_UL_library,
ui.BIM_UL_filter_categories,
ui.BIM_UL_links,
@@ -880,6 +880,27 @@ class LoadLink(bpy.types.Operator):
return {"FINISHED"}
class ToggleLinkSelectability(bpy.types.Operator):
bl_idname = "bim.toggle_link_selectability"
bl_label = "Toggle Link Selectability"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Toggle selectability"
link: bpy.props.StringProperty()
def execute(self, context):
props = context.scene.BIMProjectProperties
link = props.links.get(self.link)
for collection in self.get_linked_collections():
collection.hide_select = not collection.hide_select
link.is_selectable = not collection.hide_select
return {"FINISHED"}
def get_linked_collections(self):
return [
c for c in bpy.data.collections if "IfcProject" in c.name and c.library and c.library.filepath == self.link
]
class ToggleLinkVisibility(bpy.types.Operator):
bl_idname = "bim.toggle_link_visibility"
bl_label = "Toggle Link Visibility"
@@ -93,6 +93,7 @@ class FilterCategory(PropertyGroup):
class Link(PropertyGroup):
name: StringProperty(name="Name")
is_loaded: BoolProperty(name="Is Loaded", default=False)
is_selectable: BoolProperty(name="Is Selectable", default=True)
is_wireframe: BoolProperty(name="Is Wireframe", default=False)
is_hidden: BoolProperty(name="Is Hidden", default=False)
@@ -350,6 +350,13 @@ class BIM_UL_links(UIList):
row = layout.row(align=True)
if item.is_loaded:
row.label(text=item.name)
op = row.operator(
"bim.toggle_link_selectability",
text="",
icon="RESTRICT_SELECT_OFF" if item.is_selectable else "RESTRICT_SELECT_ON",
emboss=False,
)
op.link = item.name
op = row.operator(
"bim.toggle_link_visibility",
text="",
@@ -374,3 +381,18 @@ class BIM_UL_links(UIList):
op.filepath = item.name
op = row.operator("bim.unlink_ifc", text="", icon="X")
op.filepath = item.name
class BIM_PT_purge(Panel):
bl_label = "Purge Data"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_quality_control"
def draw(self, context):
layout = self.layout
layout.operator("bim.purge_unused_profiles")
layout.operator("bim.purge_unused_types")
layout.operator("bim.purge_unused_representations")
@@ -398,6 +398,7 @@ class CalculateQuantity(bpy.types.Operator):
bl_idname = "bim.calculate_quantity"
bl_label = "Calculate Quantity"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Calculates the quantity with a defined formula for this exact entity and quantity"
prop: bpy.props.StringProperty()
def execute(self, context):
@@ -424,6 +425,10 @@ class GuessQuantity(bpy.types.Operator):
bl_idname = "bim.guess_quantity"
bl_label = "Guess Quantity"
bl_options = {"REGISTER", "UNDO"}
bl_description = (
"Calculate the quantity by guessing the formula from the quantity name. "
"Less reliable than Calculate Quantity"
)
prop: bpy.props.StringProperty()
def execute(self, context):
@@ -450,7 +455,13 @@ class CopyPropertyToSelection(bpy.types.Operator, Operator):
else:
is_pset = context.active_object.PsetProperties.active_pset_type == "PSET"
pset_name = context.active_object.PsetProperties.active_pset_name
prop_value = context.active_object.PsetProperties.properties.get(self.name).metadata.get_value()
prop = context.active_object.PsetProperties.properties.get(self.name)
if prop.value_type == "IfcPropertySingleValue":
prop_value = prop.metadata.get_value()
elif prop.value_type == "IfcPropertyEnumeratedValue":
value_name = prop.metadata.get_value_name()
prop_value = [e[value_name] for e in prop.enumerated_value.enumerated_values if e.is_selected]
for obj in tool.Blender.get_selected_objects():
core.copy_property_to_selection(
tool.Ifc,
@@ -71,6 +71,9 @@ def draw_enumerated_property(prop, layout, copy_operator=None):
grid = layout.column_flow(columns=3)
for e in prop.enumerated_value.enumerated_values:
grid.prop(e, "is_selected", text=str(e[value_name]))
if copy_operator:
op = layout.operator(f"{copy_operator}", text="", icon="COPYDOWN")
op.name = prop.metadata.name
def get_active_pset_obj_name(context, obj_type):
@@ -370,6 +373,7 @@ class BIM_PT_task_qtos(Panel):
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_work_schedules"
bl_order = 2
@classmethod
def poll(cls, context):
@@ -510,6 +514,7 @@ class BIM_PT_work_schedule_psets(Panel):
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_work_schedules"
bl_order = 3
@classmethod
def poll(cls, context):
@@ -18,6 +18,7 @@
import os
import bpy
import pathlib
import ifcopenshell
import blenderbim.tool as tool
from blenderbim.bim.ifc import IfcStore
@@ -51,17 +52,23 @@ class PsetTemplatesData:
@classmethod
def pset_template_files(cls):
files = os.listdir(os.path.join(bpy.context.scene.BIMProperties.data_dir, "pset"))
return [(f.replace(".ifc", ""), f.replace(".ifc", ""), "") for f in files]
results = []
pset_dir = os.path.join(bpy.context.scene.BIMProperties.data_dir, "pset")
files = os.listdir(pset_dir)
for f in files:
results.append((os.path.join(pset_dir, f), f.strip(".ifc"), "Global Pset Template"))
pset_dir = tool.Ifc.resolve_uri(bpy.context.scene.BIMProperties.pset_dir)
if os.path.isdir(pset_dir):
for path in pathlib.Path(pset_dir).glob("*.ifc"):
results.append((str(path), os.path.basename(str(path)).strip(".ifc"), "Project Pset Template"))
return sorted(results, key=lambda x: x[1])
@classmethod
def pset_templates(cls):
if not IfcStore.pset_template_file:
IfcStore.pset_template_path = os.path.join(
bpy.context.scene.BIMProperties.data_dir,
"pset",
bpy.context.scene.BIMPsetTemplateProperties.pset_template_files + ".ifc",
)
IfcStore.pset_template_path = bpy.context.scene.BIMPsetTemplateProperties.pset_template_files
IfcStore.pset_template_file = ifcopenshell.open(IfcStore.pset_template_path)
return [(str(t.id()), t.Name, "") for t in IfcStore.pset_template_file.by_type("IfcPropertySetTemplate")]
@@ -20,36 +20,40 @@ import bpy
from . import ui, prop, operator
classes = (
operator.DisableResourceEditingUI,
operator.DisableEditingResource,
operator.EnableEditingResource,
operator.LoadResources,
operator.AddResource,
operator.AddResourceQuantity,
operator.EditResource,
operator.RemoveResource,
operator.RemoveResourceQuantity,
operator.LoadResourceProperties,
operator.ExpandResource,
operator.ContractResource,
operator.AssignResource,
operator.UnassignResource,
operator.EnableEditingResourceTime,
operator.EnableEditingResourceQuantity,
operator.EnableEditingResourceBaseQuantity,
operator.EnableEditingResourceCosts,
operator.EnableEditingResourceCostValueFormula,
operator.EnableEditingResourceCostValue,
operator.EditResourceTime,
operator.EditResourceQuantity,
operator.CalculateResourceWork,
operator.ConstrainResourceWork,
operator.ContractResource,
operator.DisableEditingResource,
operator.DisableEditingResourceCostValue,
operator.DisableEditingResourceQuantity,
operator.DisableEditingResourceTime,
operator.DisableResourceEditingUI,
operator.EditProductivityData,
operator.EditResource,
operator.EditResourceCostValue,
operator.EditResourceCostValueFormula,
operator.DisableEditingResourceTime,
operator.DisableEditingResourceQuantity,
operator.DisableEditingResourceCostValue,
operator.CalculateResourceWork,
operator.EditResourceQuantity,
operator.EditResourceTime,
operator.EnableEditingResource,
operator.EnableEditingResourceBaseQuantity,
operator.EnableEditingResourceCosts,
operator.EnableEditingResourceCostValue,
operator.CalculateResourceUsage,
operator.EnableEditingResourceCostValueFormula,
operator.EnableEditingResourceQuantity,
operator.EnableEditingResourceTime,
operator.ExpandResource,
operator.GoToResource,
operator.ImportResources,
operator.EditProductivityData,
operator.LoadResourceProperties,
operator.LoadResources,
operator.RemoveResource,
operator.RemoveResourceQuantity,
operator.RemoveUsageConstraint,
operator.UnassignResource,
prop.Resource,
prop.BIMResourceProperties,
prop.BIMResourceTreeProperties,
@@ -56,8 +56,10 @@ class ResourceData:
"type": resource.is_a(),
"BaseQuantity": base_quantity,
}
results[resource.id()]["Benchmarks"] = cls.get_resource_benchmarks(resource)
if resource.is_a() in ["IfcLaborResource", "IfcConstructionEquipmentResource"]:
results[resource.id()]["Productivity"] = {}
results[resource.id()]["InheritedProductivity"] = {}
productivity = cls.get_productivity(resource)
if productivity:
results[resource.id()]["Productivity"] = {
@@ -65,12 +67,50 @@ class ResourceData:
"TimeConsumed": ifcopenshell.util.resource.get_unit_consumed(productivity),
"QuantityProducedName": ifcopenshell.util.resource.get_quantity_produced_name(productivity),
}
inherited_productivity = cls.get_parent_productivity(resource)
if inherited_productivity:
results[resource.id()]["InheritedProductivity"] = {
"QuantityProduced": ifcopenshell.util.resource.get_quantity_produced(inherited_productivity),
"TimeConsumed": ifcopenshell.util.resource.get_unit_consumed(inherited_productivity),
"QuantityProducedName": ifcopenshell.util.resource.get_quantity_produced_name(
inherited_productivity
),
}
if resource.Usage:
results[resource.id()]["ScheduleWork"] = (
ifcopenshell.util.date.readable_ifc_duration(resource.Usage.ScheduleWork)
if resource.Usage.ScheduleWork
else None
)
results[resource.id()]["ScheduleUsage"] = (
resource.Usage.ScheduleUsage if resource.Usage.ScheduleUsage else None
)
return results
@classmethod
def get_resource_benchmarks(cls, resource):
constraints = []
for constraint in ifcopenshell.util.constraint.get_constraints(resource) or []:
metrics = []
for metric in ifcopenshell.util.constraint.get_metrics(constraint) or []:
metrics.append(
{
"reference": ifcopenshell.util.constraint.get_metric_reference(metric),
"Benchmark": metric.Benchmark,
"ConstraintGrade": metric.ConstraintGrade,
}
)
constraints.append({"ObjectiveQualifier": constraint.ObjectiveQualifier, "metrics": metrics})
return constraints
@classmethod
def get_productivity(cls, resource):
return ifcopenshell.util.resource.get_productivity(resource, should_inherit=False)
@classmethod
def get_parent_productivity(cls, resource):
return ifcopenshell.util.resource.get_parent_productivity(resource)
@classmethod
def cost_values(cls):
results = []
@@ -198,6 +198,13 @@ class CalculateResourceWork(bpy.types.Operator, tool.Ifc.Operator):
bl_options = {"REGISTER", "UNDO"}
resource: bpy.props.IntProperty()
@classmethod
def poll(cls, context):
active_resource = tool.Resource.get_highlighted_resource()
if active_resource:
if tool.Resource.get_productivity(active_resource, should_inherit=True):
return True
def _execute(self, context):
core.calculate_resource_work(tool.Ifc, tool.Resource, resource=tool.Ifc.get().by_id(self.resource))
@@ -334,7 +341,7 @@ class EditResourceQuantity(bpy.types.Operator, tool.Ifc.Operator):
class ImportResources(bpy.types.Operator, tool.Ifc.Operator, ImportHelper):
bl_idname = "import_resources.bim"
bl_label = "Import P6"
bl_label = "Import Resources"
bl_options = {"REGISTER", "UNDO"}
filename_ext = ".csv"
filter_glob: bpy.props.StringProperty(default="*.csv", options={"HIDDEN"})
@@ -356,3 +363,61 @@ class EditProductivityData(bpy.types.Operator, tool.Ifc.Operator):
def _execute(self, context):
core.edit_productivity_pset(tool.Ifc, tool.Resource)
class ConstrainResourceWork(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.add_usage_constraint"
bl_label = "Constrain Resource Work"
bl_options = {"REGISTER", "UNDO"}
resource: bpy.props.IntProperty()
attribute: bpy.props.StringProperty()
def _execute(self, context):
core.add_usage_constraint(
tool.Ifc, tool.Resource, resource=tool.Ifc.get().by_id(self.resource), reference_path=self.attribute
)
class RemoveUsageConstraint(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.remove_usage_constraint"
bl_label = "Remove Usage Constraint"
bl_options = {"REGISTER", "UNDO"}
resource: bpy.props.IntProperty()
attribute: bpy.props.StringProperty()
def _execute(self, context):
core.remove_usage_constraint(
tool.Ifc, tool.Resource, resource=tool.Ifc.get().by_id(self.resource), reference_path=self.attribute
)
class GoToResource(bpy.types.Operator):
bl_idname = "bim.go_to_resource"
bl_label = "Go To Resource"
bl_description = "Selects the resource in the Resource Panel"
bl_options = {"REGISTER", "UNDO"}
resource: bpy.props.IntProperty()
def execute(self, context):
core.go_to_resource(tool.Resource, resource=tool.Ifc.get().by_id(self.resource))
return {"FINISHED"}
class CalculateResourceUsage(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.calculate_resource_usage"
bl_label = "Calculate Resource Usage"
bl_options = {"REGISTER", "UNDO"}
resource: bpy.props.IntProperty()
@classmethod
def poll(cls, context):
active_resource = tool.Resource.get_highlighted_resource()
if active_resource:
if active_resource.Usage and active_resource.Usage.ScheduleWork:
task = tool.Resource.get_task_assignments(active_resource)
if task and tool.Sequence.has_duration(task):
return True
return False
def _execute(self, context):
core.calculate_resource_usage(tool.Ifc, tool.Resource, resource=tool.Ifc.get().by_id(self.resource))
@@ -1,5 +1,5 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2020, 2021 Dion Moult <dion@thinkmoult.com>
# Copyright (C) 2021, 2022, 2023 Dion Moult, Yassine Oualid <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
@@ -22,6 +22,8 @@ import ifcopenshell.util.resource
from blenderbim.bim.ifc import IfcStore
import blenderbim.tool as tool
import blenderbim.bim.module.pset.data
import blenderbim.bim.module.resource.data
import blenderbim.bim.module.sequence.data
from blenderbim.bim.prop import StrProperty, Attribute
from bpy.types import PropertyGroup
from bpy.props import (
@@ -56,6 +58,8 @@ def updateResourceName(self, context):
if props.active_resource_id == self.ifc_definition_id:
attribute = props.resource_attributes.get("Name")
attribute.string_value = self.name
blenderbim.bim.module.resource.data.refresh()
tool.Sequence.refresh_task_resources()
def get_quantity_types(self, context):
@@ -72,7 +76,7 @@ def get_quantity_types(self, context):
def update_active_resource_index(self, context):
blenderbim.bim.module.pset.data.refresh()
if self.should_show_productivity:
if self.should_show_resource_tools:
tool.Resource.load_productivity_data()
@@ -84,14 +88,13 @@ def updateResourceUsage(self, context):
if self.schedule_usage == "":
return
resource = tool.Ifc.get().by_id(self.ifc_definition_id)
if not resource.Usage:
tool.Ifc.run(
"resource.add_resource_time",
resource=resource,
)
resource.Usage.ScheduleUsage = self.schedule_usage
blenderbim.bim.module.pset.data.refresh()
tool.Resource.run_edit_resource_time(resource, attributes={"ScheduleUsage": self.schedule_usage})
tool.Resource.load_resource_properties()
tool.Sequence.load_task_properties()
blenderbim.bim.module.resource.data.refresh()
blenderbim.bim.module.sequence.data.refresh()
tool.Sequence.refresh_task_resources()
blenderbim.bim.module.pset.data.refresh()
class ISODuration(PropertyGroup):
@@ -144,7 +147,7 @@ class BIMResourceProperties(PropertyGroup):
quantity_types: EnumProperty(items=get_quantity_types, name="Quantity Types")
is_editing_quantity: BoolProperty(name="Is Editing Quantity")
quantity_attributes: CollectionProperty(name="Quantity Attributes", type=Attribute)
should_show_productivity: BoolProperty(name="Edit Productivity", update=update_active_resource_index)
should_show_resource_tools: BoolProperty(name="Edit Productivity", update=update_active_resource_index)
class BIMResourceProductivity(PropertyGroup):
@@ -20,20 +20,21 @@ import blenderbim.bim.helper
from bpy.types import Panel, UIList
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.resource.data import ResourceData
import blenderbim.tool as tool
class BIM_PT_resources(Panel):
bl_label = "Resources"
bl_idname = "BIM_PT_resources"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_resources"
bl_options = {"HIDE_HEADER"}
@classmethod
def poll(cls, context):
return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() and tool.Ifc.get().schema != "IFC2X3"
file = IfcStore.get_file()
return file and hasattr(file, "schema") and file.schema != "IFC2X3"
def draw(self, context):
self.props = context.scene.BIMResourceProperties
@@ -64,11 +65,8 @@ class BIM_PT_resources(Panel):
self.props,
"active_resource_index",
)
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.prop(self.props, "should_show_productivity", icon="RECOVER_LAST")
if self.props.should_show_productivity:
self.draw_productivity_ui(context)
self.draw_productivity_ui(context)
if self.props.active_resource_id and self.props.editing_resource_type == "ATTRIBUTES":
self.draw_editable_resource_attributes_ui()
elif self.props.active_resource_id and self.props.editing_resource_type == "QUANTITY":
@@ -79,43 +77,116 @@ class BIM_PT_resources(Panel):
self.draw_editable_resource_time_attributes_ui()
def draw_productivity_ui(self, context):
total_resources = len(self.tprops.resources)
if not total_resources or self.props.active_resource_index >= total_resources:
return
ifc_definition_id = self.tprops.resources[self.props.active_resource_index].ifc_definition_id
resource = ResourceData.data["resources"][ifc_definition_id]
if not resource["type"] in ["IfcConstructionEquipmentResource", "IfcLaborResource"]:
row = self.layout.row(align=True)
row.label(text="Resource type cannot have productivity data", icon="ERROR")
return
self.productivity_props = context.scene.BIMResourceProductivity
if resource["Productivity"]:
produtivitiy_rate_message = "Current Rate: {}/{}".format(
resource["Productivity"]["QuantityProduced"], resource["Productivity"]["TimeConsumed"]
)
row = self.layout.row()
row.alignment = "LEFT"
row.label(text=produtivitiy_rate_message, icon="ARMATURE_DATA")
else:
row = self.layout.row(align=True)
row.alignment = "LEFT"
produtivitiy_rate_message = "No productivity data found"
row.label(text=produtivitiy_rate_message, icon="ARMATURE_DATA")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.prop(self.productivity_props, "quantity_produced", text="Quantity Produced")
row.prop(self.productivity_props, "quantity_produced_name", text="Quantity Name")
row = self.layout.row()
row.alignment = "RIGHT"
self.draw_duration_property(self.productivity_props.quantity_consumed, row)
row = self.layout.row()
row.alignment = "RIGHT"
row.operator("bim.edit_productivity_data", text="Apply", icon="CHECKMARK")
row.prop(self.props, "should_show_resource_tools", text="Resource Tools",icon="RECOVER_LAST")
if self.props.should_show_resource_tools:
total_resources = len(self.tprops.resources)
if not total_resources or self.props.active_resource_index >= total_resources:
return
ifc_definition_id = self.tprops.resources[self.props.active_resource_index].ifc_definition_id
resource = ResourceData.data["resources"][ifc_definition_id]
if not resource["type"] in ["IfcConstructionEquipmentResource", "IfcLaborResource"]:
row = self.layout.row(align=True)
row.label(text="Resource type cannot have productivity data", icon="ERROR")
else:
is_usage_locked = False
is_work_locked = False
for constraint in resource["Benchmarks"] or []:
for metric in constraint["metrics"] or []:
if (
metric["ConstraintGrade"] == "HARD"
and metric["reference"]
and metric["reference"] == "Usage.ScheduleUsage"
):
is_usage_locked = True
elif (
metric["ConstraintGrade"] == "HARD"
and metric["reference"]
and metric["reference"] == "Usage.ScheduleWork"
):
is_work_locked = True
grid = self.layout.grid_flow(columns=3, even_columns=False, even_rows=False, align=False)
col1 = grid.column(align=True)
col2 = grid.column(align=False)
col3 = grid.column(align=True)
col1.ui_units_x = 1
col2.ui_units_x = 1
col3.ui_units_x = 2
row1_col1 = col1.row()
row1_col1.label(text="Schedule Work")
row1col2 = col2.row()
row1col2.label(text=resource.get("ScheduleWork", "-"), icon="TIME")
row1col3 = col3.row()
row1col3.operator("bim.calculate_resource_work", text="", icon="TEMP").resource = ifc_definition_id
op = row1col3.operator(
"bim.add_usage_constraint" if not is_work_locked else "bim.remove_usage_constraint",
text="",
icon="LOCKED" if is_work_locked else "UNLOCKED",
)
op.resource = ifc_definition_id
op.attribute = "Usage.ScheduleWork"
row2_col1 = col1.row()
row2_col1.label(text="Schedule Usage")
row2col2 = col2.row()
row2col2.prop(self.tprops.resources[self.props.active_resource_index], "schedule_usage", text="")
row2col3 = col3.row()
row2col3.operator("bim.calculate_resource_usage", text="", icon="TEMP").resource = ifc_definition_id
op = row2col3.operator(
"bim.add_usage_constraint" if not is_usage_locked else "bim.remove_usage_constraint",
text="",
icon="LOCKED" if is_usage_locked else "UNLOCKED",
)
op.resource = ifc_definition_id
op.attribute = "Usage.ScheduleUsage"
productivity = resource["Productivity"]
parent_productivity = resource["InheritedProductivity"]
row = self.layout.row()
if productivity:
produtivitiy_rate_message = "Current Productivity Rate: {} {} / {}".format(
productivity["QuantityProduced"],
productivity["QuantityProducedName"],
productivity["TimeConsumed"],
)
row.alignment = "LEFT"
row.label(text=produtivitiy_rate_message, icon="ARMATURE_DATA")
elif parent_productivity:
produtivitiy_rate_message = "Inherited Productivity Rate: {} {} / {}*".format(
parent_productivity["QuantityProduced"],
parent_productivity["QuantityProducedName"],
parent_productivity["TimeConsumed"],
)
row.alignment = "LEFT"
row.label(text="Productivity: {}".format(produtivitiy_rate_message), icon="ARMATURE_DATA")
else:
row = self.layout.row(align=True)
row.alignment = "LEFT"
produtivitiy_rate_message = "No productivity data found"
row.label(text="Productivity: {}".format(produtivitiy_rate_message), icon="ARMATURE_DATA")
productivity_props = context.scene.BIMResourceProductivity
grid = self.layout.grid_flow(columns=2, even_columns=False, even_rows=False, align=False)
col1 = grid.column(align=False)
col2 = grid.column(align=False)
col1.ui_units_x = 1
col2.ui_units_x = 3
row1_col1 = col1.row()
row1_col1.label(text="Quantity")
row1_col2 = col2.row()
row1_col2.prop(productivity_props, "quantity_produced", text="")
row1_col2.prop(productivity_props, "quantity_produced_name", text="")
row2_col1 = col1.row()
row2_col1.label(text="Time")
row2_col2 = col2.row()
self.draw_duration_property(productivity_props.quantity_consumed, row2_col2)
row3_col2 = col2.row()
row3_col2.alignment = "RIGHT"
row3_col2.operator("bim.edit_productivity_data", text="", icon="CHECKMARK")
def draw_resource_operators(self):
row = self.layout.row(align=True)
@@ -153,9 +224,6 @@ class BIM_PT_resources(Panel):
if not self.props.active_resource_id:
if resource["type"] in ["IfcLaborResource", "IfcConstructionEquipmentResource"]:
if resource["Productivity"]:
op = row.operator("bim.calculate_resource_work", text="", icon="TEMP")
op.resource = ifc_definition_id
row.operator("bim.enable_editing_resource_time", text="", icon="TIME").resource = ifc_definition_id
op = row.operator("bim.enable_editing_resource_base_quantity", text="", icon="PROPERTIES")
op.resource = ifc_definition_id
@@ -250,7 +318,6 @@ class BIM_PT_resources(Panel):
def draw_duration_property(self, duration_props, layout):
for duration_prop in duration_props:
if duration_prop.name == "BaseQuantityConsumed":
layout.label(text=duration_prop.name)
layout.prop(duration_prop, "years", text="Y")
layout.prop(duration_prop, "months", text="M")
layout.prop(duration_prop, "days", text="D")
@@ -26,6 +26,7 @@ classes = (
operator.AddFilterGroup,
operator.AddToIfcGroup,
operator.ColourByProperty,
operator.EditFilterQuery,
operator.FilterModelElements,
operator.IfcSelector,
operator.LoadColourscheme,
@@ -39,6 +40,7 @@ classes = (
operator.SaveSearch,
operator.SaveSelectorQuery,
operator.Search,
operator.SelectFilterElements,
operator.SelectGlobalId,
operator.SelectIfcClass,
operator.SelectSimilar,
@@ -40,12 +40,14 @@ class SearchData:
@classmethod
def saved_searches(cls):
if not tool.Ifc.get():
return []
groups = tool.Ifc.get().by_type("IfcGroup")
results = []
for group in groups:
try:
data = json.loads(group.Description)
if isinstance(data, dict) and data.get("type", None) == "BBIM_Search":
if isinstance(data, dict) and data.get("type", None) == "BBIM_Search" and data.get("query", None):
results.append(group)
except:
pass
@@ -61,9 +61,14 @@ colour_list = [
class AddFilterGroup(Operator):
bl_idname = "bim.add_filter_group"
bl_label = "Add Filter Group"
module: StringProperty()
def execute(self, context):
context.scene.BIMSearchProperties.filter_groups.add()
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
props.filter_groups.add()
return {"FINISHED"}
@@ -71,9 +76,13 @@ class RemoveFilterGroup(Operator):
bl_idname = "bim.remove_filter_group"
bl_label = "Remove Filter Group"
index: IntProperty()
module: StringProperty()
def execute(self, context):
props = context.scene.BIMSearchProperties
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
props.filter_groups.remove(self.index)
return {"FINISHED"}
@@ -83,9 +92,13 @@ class RemoveFilter(Operator):
bl_label = "Remove Filter Group"
group_index: IntProperty()
index: IntProperty()
module: StringProperty()
def execute(self, context):
props = context.scene.BIMSearchProperties
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
props.filter_groups[self.group_index].filters.remove(self.index)
return {"FINISHED"}
@@ -95,13 +108,87 @@ class AddFilter(Operator):
bl_label = "Add Filter"
index: IntProperty()
type: StringProperty()
module: StringProperty()
def execute(self, context):
new = context.scene.BIMSearchProperties.filter_groups[self.index].filters.add()
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
new = props.filter_groups[self.index].filters.add()
new.type = self.type
return {"FINISHED"}
class SelectFilterElements(bpy.types.Operator):
bl_idname = "bim.select_filter_elements"
bl_label = "Select Filter Elements"
bl_options = {"REGISTER", "UNDO"}
group_index: IntProperty()
index: IntProperty()
module: StringProperty()
def execute(self, context):
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
global_ids = []
for obj in context.selected_objects:
element = tool.Ifc.get_entity(obj)
if element:
global_id = getattr(element, "GlobalId", None)
if global_id:
global_ids.append(global_id)
if len(global_ids) > 50:
# Too much to store in a string property
name = "globalid-filter-" + ifcopenshell.guid.new()
text_data = bpy.data.texts.new(name)
text_data.from_string(",".join(global_ids))
props.filter_groups[self.group_index].filters[self.index].value = f"bpy.data.texts['{name}']"
else:
props.filter_groups[self.group_index].filters[self.index].value = ",".join(global_ids)
return {"FINISHED"}
class EditFilterQuery(Operator, tool.Ifc.Operator):
bl_idname = "bim.edit_filter_query"
bl_label = "Edit Filter Query"
bl_description = "Edit the underlying filter query for advanced users"
bl_options = {"REGISTER", "UNDO"}
query: StringProperty(name="Query")
module: StringProperty()
def _execute(self, context):
if self.query == self.old_query:
return
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
try:
tool.Search.import_filter_query(self.query, props.filter_groups)
except:
return
def draw(self, context):
row = self.layout.row()
row.prop(self, "query", text="")
def invoke(self, context, event):
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
self.query = tool.Search.export_filter_query(props.filter_groups)
self.old_query = self.query
return context.window_manager.invoke_props_dialog(self)
class Search(Operator):
bl_idname = "bim.search"
bl_label = "Search"
@@ -127,21 +214,36 @@ class SaveSearch(Operator, tool.Ifc.Operator):
bl_description = "Save search filter to an IFC group"
bl_options = {"REGISTER", "UNDO"}
name: StringProperty(name="Name")
module: StringProperty()
def _execute(self, context):
if not self.name:
return
query = tool.Search.export_filter_query(context.scene.BIMSearchProperties.filter_groups)
results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query)
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
try:
query = tool.Search.export_filter_query(props.filter_groups)
results = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query)
except:
return
description = json.dumps({"type": "BBIM_Search", "query": query})
group = [g for g in tool.Ifc.get().by_type("IfcGroup") if g.Name == self.name]
if group:
group = group[0]
group.Description = description
else:
group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.name, Description=description)
ifcopenshell.api.run("group.assign_group", tool.Ifc.get(), products=results, group=group)
if results:
ifcopenshell.api.run("group.assign_group", tool.Ifc.get(), products=list(results), group=group)
def draw(self, context):
row = self.layout.row()
row.prop(self, "name")
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
@@ -152,11 +254,15 @@ class LoadSearch(Operator, tool.Ifc.Operator):
bl_label = "Load Search"
bl_description = "Load search filter from an IFC group"
bl_options = {"REGISTER", "UNDO"}
module: StringProperty()
def _execute(self, context):
props = context.scene.BIMSearchProperties
group = tool.Ifc.get().by_id(int(props.saved_searches))
query = tool.Search.import_filter_query(group, context.scene.BIMSearchProperties.filter_groups)
if self.module == "search":
props = context.scene.BIMSearchProperties
elif self.module == "csv":
props = context.scene.CsvProperties
group = tool.Ifc.get().by_id(int(context.scene.BIMSearchProperties.saved_searches))
query = tool.Search.import_filter_query(tool.Search.get_group_query(group), props.filter_groups)
def draw(self, context):
props = context.scene.BIMSearchProperties
@@ -242,14 +348,15 @@ class SaveColourscheme(Operator, tool.Ifc.Operator):
query = props.colourscheme_query
group = [g for g in tool.Ifc.get().by_type("IfcGroup") if g.Name == self.name]
coulour_scheme = {cs.name: cs.colour[0:3] for cs in props.colourscheme}
if group:
group = group[0]
description = json.loads(group.Description)
description["colourscheme"] = {cs.name: cs.colour[0:3] for cs in props.colourscheme}
description["colourscheme"] = coulour_scheme
description["colourscheme_query"] = query
group.Description = json.dumps(description)
else:
description = json.dumps({"type": "BBIM_Search", "colourscheme": query})
description = json.dumps({"type": "BBIM_Search", "colourscheme": coulour_scheme,"colourscheme_query": query})
group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.name, Description=description)
def invoke(self, context, event):
@@ -264,7 +371,7 @@ class LoadColourscheme(Operator, tool.Ifc.Operator):
def _execute(self, context):
props = context.scene.BIMSearchProperties
group = tool.Ifc.get().by_id(int(props.saved_searches))
group = tool.Ifc.get().by_id(int(props.saved_colourschemes))
description = json.loads(group.Description)
props.colourscheme_query = description.get("colourscheme_query")
props.colourscheme.clear()
@@ -128,7 +128,8 @@ class BIMSearchProperties(PropertyGroup):
("classification", "Classification", "", "OUTLINER", 4),
("location", "Location", "", "PACKAGE", 5),
("type", "Type", "", "FILE_VOLUME", 6),
("instance", "GlobalId", "", "GRIP", 7),
("query", "Query", "", "POINTCLOUD_DATA", 7),
("instance", "GlobalId", "", "GRIP", 8),
],
)
saved_searches: EnumProperty(items=get_saved_searches, name="Saved Searches")
@@ -17,6 +17,7 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
import blenderbim.bim.helper
from bpy.types import Panel
from blenderbim.bim.module.search.data import SearchData, ColourByPropertyData, SelectSimilarData
@@ -35,59 +36,7 @@ class BIM_PT_search(Panel):
props = context.scene.BIMSearchProperties
row = self.layout.row(align=True)
row.label(text=f"{len(SearchData.data['saved_searches'])} Saved Searches")
if SearchData.data["saved_searches"]:
row.operator("bim.load_search", text="", icon="IMPORT")
row.operator("bim.save_search", text="", icon="EXPORT")
row = self.layout.row(align=True)
row.operator("bim.add_filter_group", text="Add Search Group", icon="ADD")
for i, filter_group in enumerate(props.filter_groups):
box = self.layout.box()
row = box.row(align=True)
row.prop(props, "facet", text="")
op = row.operator("bim.add_filter", text="Add Filter", icon="ADD")
op.type = props.facet
op.index = i
for j, ifc_filter in enumerate(filter_group.filters):
if ifc_filter.type == "entity":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="FILE_3D")
elif ifc_filter.type == "attribute":
row = box.row(align=True)
row.prop(ifc_filter, "name", text="", icon="COPY_ID")
row.prop(ifc_filter, "value", text="")
elif ifc_filter.type == "type":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="FILE_VOLUME")
elif ifc_filter.type == "material":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="MATERIAL")
elif ifc_filter.type == "property":
row = box.row(align=True)
row.prop(ifc_filter, "pset", text="", icon="PROPERTIES")
row.prop(ifc_filter, "name", text="")
row.prop(ifc_filter, "value", text="")
elif ifc_filter.type == "classification":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="OUTLINER")
elif ifc_filter.type == "location":
row = box.row(align=True)
row.prop(ifc_filter, "name", text="", icon="PACKAGE")
elif ifc_filter.type == "instance":
row = box.row(align=True)
row.prop(ifc_filter, "value", text="", icon="GRIP")
op = row.operator("bim.remove_filter", text="", icon="X")
op.group_index = i
op.index = j
row = box.row()
row.operator("bim.remove_filter_group", icon="X").index = i
blenderbim.bim.helper.draw_filter(self.layout, props, SearchData, "search")
if len(props.filter_groups):
row = self.layout.row(align=True)
@@ -20,12 +20,11 @@ import bpy
from . import ui, prop, operator
classes = (
operator.ExpandAllTasks,
operator.ContractAllTasks,
operator.AddAnimationCamera,
operator.AddSummaryTask,
operator.AddTask,
operator.AddTaskColumn,
operator.AddTaskBars,
operator.AddTaskColumn,
operator.AddTimePeriod,
operator.AddWorkCalendar,
operator.AddWorkPlan,
@@ -42,9 +41,12 @@ classes = (
operator.BlenderBIM_DatePickerSetDate,
operator.BlenderBIM_RedrawDatePicker,
operator.CalculateTaskDuration,
operator.ClearPreviousAnimation,
operator.ContractAllTasks,
operator.ContractTask,
operator.CopyTaskAttribute,
operator.CopyTask,
operator.CopyTaskAttribute,
operator.CreateBaseline,
operator.DisableEditingSequence,
operator.DisableEditingTask,
operator.DisableEditingTaskTime,
@@ -67,27 +69,29 @@ classes = (
operator.EnableEditingTaskCalendar,
operator.EnableEditingTaskSequence,
operator.EnableEditingTaskTime,
operator.EnableEditingWorkScheduleTasks,
operator.EnableEditingWorkCalendar,
operator.EnableEditingWorkCalendarTimes,
operator.EnableEditingWorkPlan,
operator.EnableEditingWorkPlanSchedules,
operator.EnableEditingWorkSchedule,
operator.EnableEditingWorkScheduleTasks,
operator.EnableEditingWorkTime,
operator.ExpandAllTasks,
operator.ExpandTask,
operator.ExportMSP,
operator.ExportP6,
operator.GenerateGanttChart,
operator.GuessDateRange,
operator.ImportMSP,
operator.GoToTask,
operator.ImportCSV,
operator.ImportMSP,
operator.ImportP6,
operator.ImportP6XER,
operator.ImportPP,
operator.LoadTaskInputs,
operator.LoadTaskOutputs,
operator.LoadAnimationColorScheme,
operator.LoadDefaultAnimationColors,
operator.LoadProductTasks,
operator.LoadTaskProperties,
operator.LoadTaskResources,
operator.RecalculateSchedule,
operator.RemoveTask,
operator.RemoveTaskCalendar,
@@ -98,10 +102,11 @@ classes = (
operator.RemoveWorkSchedule,
operator.RemoveWorkTime,
operator.ReorderTask,
operator.SelectTaskRelatedProducts,
operator.SaveAnimationColorScheme,
operator.SelectTaskRelatedInputs,
operator.SelectWorkScheduleProducts,
operator.SelectTaskRelatedProducts,
operator.SelectUnassignedWorkScheduleProducts,
operator.SelectWorkScheduleProducts,
operator.SetTaskSortColumn,
operator.SetupDefaultTaskColumns,
operator.UnassignLagTime,
@@ -113,17 +118,18 @@ classes = (
operator.UnassignWorkSchedule,
operator.VisualiseWorkScheduleDate,
operator.VisualiseWorkScheduleDateRange,
operator.LoadTaskAnimationColors,
operator.DisableEditingTaskAnimationColors,
operator.LoadProductTasks,
operator.HighlightTask,
operator.CreateBaseline,
operator.EnableStatusFilters,
operator.DisableStatusFilters,
operator.ActivateStatusFilters,
operator.SelectStatusFilter,
prop.WorkPlan,
prop.BIMWorkPlanProperties,
prop.Task,
prop.TaskResource,
prop.TaskProduct,
prop.ISODuration,
prop.IFCStatus,
prop.BIMStatusProperties,
prop.BIMWorkScheduleProperties,
prop.BIMTaskTreeProperties,
prop.BIMTaskTypeColor,
@@ -133,17 +139,19 @@ classes = (
prop.BIMWorkCalendarProperties,
prop.DatePickerProperties,
prop.BIMDateTextProperties,
ui.BIM_PT_status,
ui.BIM_PT_work_plans,
ui.BIM_PT_work_schedules,
ui.BIM_PT_work_calendars,
ui.BIM_PT_animation_tools,
ui.BIM_PT_task_icom,
ui.BIM_PT_animation_Color_Scheme,
ui.BIM_UL_task_columns,
ui.BIM_UL_task_inputs,
ui.BIM_UL_task_resources,
ui.BIM_UL_task_outputs,
ui.BIM_UL_tasks,
ui.BIM_PT_4D_Tools,
ui.BIM_PT_Task_Bar_Creator,
ui.BIM_UL_animation_colors,
ui.BIM_UL_product_input_tasks,
ui.BIM_UL_product_output_tasks,
@@ -164,6 +172,7 @@ def menu_func_import(self, context):
def register():
bpy.types.Scene.BIMStatusProperties = bpy.props.PointerProperty(type=prop.BIMStatusProperties)
bpy.types.Scene.BIMWorkPlanProperties = bpy.props.PointerProperty(type=prop.BIMWorkPlanProperties)
bpy.types.Scene.BIMWorkScheduleProperties = bpy.props.PointerProperty(type=prop.BIMWorkScheduleProperties)
bpy.types.Scene.BIMTaskTreeProperties = bpy.props.PointerProperty(type=prop.BIMTaskTreeProperties)
@@ -176,6 +185,7 @@ def register():
def unregister():
del bpy.types.Scene.BIMStatusProperties
del bpy.types.Scene.BIMWorkPlanProperties
del bpy.types.Scene.BIMWorkScheduleProperties
del bpy.types.Scene.BIMTaskTreeProperties
@@ -19,8 +19,8 @@
import bpy
import blenderbim.tool as tool
import ifcopenshell
from ifcopenshell.util.doc import get_predefined_type_doc
import ifcopenshell.util.date as dateutil
import json
def refresh():
@@ -28,6 +28,7 @@ def refresh():
WorkPlansData.is_loaded = False
TaskICOMData.is_loaded = False
WorkScheduleData.is_loaded = False
AnimationColorSchemeData.is_loaded = False
class SequenceData:
@@ -37,7 +38,6 @@ class SequenceData:
@classmethod
def load(cls):
cls.data = {
"predefined_types": cls.get_work_schedule_types(),
"has_work_plans": cls.has_work_plans(),
"has_work_schedules": cls.has_work_schedules(),
"has_work_calendars": cls.has_work_calendars(),
@@ -230,22 +230,6 @@ class SequenceData:
data["NestingIndex"] = rel.RelatedObjects.index(task)
cls.data["tasks"][task.id()] = data
@classmethod
def get_work_schedule_types(cls):
results = []
declaration = tool.Ifc().schema().declaration_by_name("IfcWorkSchedule")
version = tool.Ifc.get_schema()
for attribute in declaration.attributes():
if attribute.name() == "PredefinedType":
results.extend(
[
(e, e, get_predefined_type_doc(version, "IfcWorkSchedule", e))
for e in attribute.type_of_attribute().declared_type().enumeration_items()
]
)
break
return results
class WorkScheduleData:
data = {}
@@ -344,3 +328,31 @@ class TaskICOMData:
resource_id = resource_tprops.resources[resource_props.active_resource_index].ifc_definition_id
return not tool.Ifc.get().by_id(resource_id).is_a("IfcCrewResource")
return False
class AnimationColorSchemeData:
data = {}
is_loaded = False
@classmethod
def load(cls):
cls.is_loaded = True
cls.data = {}
cls.data["saved_color_schemes"] = cls.saved_color_schemes()
@classmethod
def saved_color_schemes(cls):
groups = tool.Ifc.get().by_type("IfcGroup")
results = []
for group in groups:
try:
data = json.loads(group.Description)
if (
isinstance(data, dict)
and data.get("type", None) == "BBIM_AnimationColorScheme"
and data.get("colourscheme", None)
):
results.append(group)
except:
pass
return [(str(g.id()), g.Name or "Unnamed", "") for g in sorted(results, key=lambda x: x.Name or "Unnamed")]
@@ -35,6 +35,7 @@ def parse_datetime(value):
def parse_duration(value):
return ifcopenshell.util.date.parse_duration(value)
def canonicalise_time(time):
if not time:
return "-"
@@ -27,11 +27,98 @@ import webbrowser
import blenderbim.core.sequence as core
import blenderbim.tool as tool
import blenderbim.bim.module.sequence.helper as helper
import ifcopenshell.util.sequence
import ifcopenshell.util.selector
from datetime import datetime
from dateutil import parser, relativedelta
from blenderbim.bim.ifc import IfcStore
from bpy_extras.io_utils import ImportHelper
import ifcopenshell.util.sequence
class EnableStatusFilters(bpy.types.Operator):
bl_idname = "bim.enable_status_filters"
bl_label = "Enable Status Filters"
def execute(self, context):
props = context.scene.BIMStatusProperties
props.is_enabled = True
props.statuses.clear()
statuses = set()
for element in tool.Ifc.get().by_type("IfcPropertyEnumeratedValue"):
if element.Name == "Status":
pset = element.PartOfPset[0]
if pset.Name.startswith("Pset_") and pset.Name.endswith("Common"):
statuses.update(element.EnumerationValues)
elif pset.Name == "EPset_Status": # Our secret sauce
statuses.update(element.EnumerationValues)
elif element.Name == "UserDefinedStatus":
statuses.add(element.NominalValue)
statuses = ["No Status"] + sorted([s.wrappedValue for s in statuses])
for status in statuses:
new = props.statuses.add()
new.name = status
return {"FINISHED"}
class DisableStatusFilters(bpy.types.Operator):
bl_idname = "bim.disable_status_filters"
bl_label = "Disable Status Filters"
def execute(self, context):
props = context.scene.BIMStatusProperties
props.is_enabled = False
return {"FINISHED"}
class ActivateStatusFilters(bpy.types.Operator):
bl_idname = "bim.activate_status_filters"
bl_label = "Activate Status Filters"
def execute(self, context):
props = context.scene.BIMStatusProperties
query = []
visible_statuses = {s.name for s in props.statuses if s.is_visible}
for name in visible_statuses:
if name == "No Status":
q = f"IfcProduct, /Pset_.*Common/.Status=NULL, EPset_Status.Status=NULL"
else:
q = f"IfcProduct, /Pset_.*Common/.Status={name} + IfcProduct, EPset_Status.Status={name}"
query.append(q)
query = " + ".join(query)
if not query:
return {"FINISHED"}
visible_elements = ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query)
for obj in bpy.context.view_layer.objects:
element = tool.Ifc.get_entity(obj)
if not element or not element.is_a("IfcProduct"):
continue
obj.hide_set(element not in visible_elements)
return {"FINISHED"}
class SelectStatusFilter(bpy.types.Operator):
bl_idname = "bim.select_status_filter"
bl_label = "Select Status Filter"
name: bpy.props.StringProperty()
def execute(self, context):
props = context.scene.BIMStatusProperties
query = f"IfcProduct, /Pset_.*Common/.Status={self.name} + IfcProduct, EPset_Status.Status={self.name}"
if self.name == "No Status":
query = f"IfcProduct, /Pset_.*Common/.Status=NULL, EPset_Status.Status=NULL"
for element in ifcopenshell.util.selector.filter_elements(tool.Ifc.get(), query):
obj = tool.Ifc.get_object(element)
if obj:
obj.select_set(True)
return {"FINISHED"}
class AddWorkPlan(bpy.types.Operator, tool.Ifc.Operator):
@@ -129,9 +216,21 @@ class AddWorkSchedule(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.add_work_schedule"
bl_label = "Add Work Schedule"
bl_options = {"REGISTER", "UNDO"}
name: bpy.props.StringProperty()
def _execute(self, context):
core.add_work_schedule(tool.Ifc)
core.add_work_schedule(tool.Ifc, tool.Sequence, name=self.name)
def draw(self, context):
layout = self.layout
layout.prop(self, "name", text="Name")
self.props = context.scene.BIMWorkScheduleProperties
layout.prop(self.props, "work_schedule_predefined_types", text="Type")
if self.props.work_schedule_predefined_types == "USERDEFINED":
layout.prop(self.props, "object_type", text="Object type")
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
class EditWorkSchedule(bpy.types.Operator, tool.Ifc.Operator):
@@ -874,7 +973,7 @@ class EnableEditingTaskSequence(bpy.types.Operator):
task: bpy.props.IntProperty()
def execute(self, context):
core.enable_editing_task_sequence(tool.Sequence, task=tool.Ifc.get().by_id(self.task))
core.enable_editing_task_sequence(tool.Sequence)
return {"FINISHED"}
@@ -1190,36 +1289,6 @@ class SetTaskSortColumn(bpy.types.Operator):
return {"FINISHED"}
class LoadTaskResources(bpy.types.Operator):
bl_idname = "bim.load_task_resources"
bl_label = "Load Task Resources"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
core.load_task_resources(tool.Sequence)
return {"FINISHED"}
class LoadTaskInputs(bpy.types.Operator):
bl_idname = "bim.load_task_inputs"
bl_label = "Load Task Inputs"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
core.load_task_inputs(tool.Sequence)
return {"FINISHED"}
class LoadTaskOutputs(bpy.types.Operator):
bl_idname = "bim.load_task_outputs"
bl_label = "Load Task Outputs"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
core.load_task_outputs(tool.Sequence)
return {"FINISHED"}
class CalculateTaskDuration(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.calculate_task_duration"
bl_label = "Calculate Task Duration"
@@ -1263,25 +1332,51 @@ class AddTaskBars(bpy.types.Operator):
return {"FINISHED"}
class LoadTaskAnimationColors(bpy.types.Operator):
bl_idname = "bim.enable_editing_task_animation_colors"
class LoadDefaultAnimationColors(bpy.types.Operator):
bl_idname = "bim.load_default_animation_color_scheme"
bl_label = "Load Animation Colors"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
core.enable_editing_task_animation_colors(tool.Sequence)
core.load_default_animation_color_scheme(tool.Sequence)
return {"FINISHED"}
class DisableEditingTaskAnimationColors(bpy.types.Operator):
bl_idname = "bim.disable_editing_task_animation_colors"
bl_label = "Disable Editing Task Animation Colors"
class SaveAnimationColorScheme(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.save_animation_color_scheme"
bl_label = "Save Animation Color Scheme"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Saves the current animation color scheme"
name: bpy.props.StringProperty()
def execute(self, context):
core.disable_editing_task_animation_colors(tool.Sequence)
def _execute(self, context):
if not self.name:
return
core.save_animation_color_scheme(tool.Sequence, name=self.name)
return {"FINISHED"}
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
class LoadAnimationColorScheme(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.load_animation_color_scheme"
bl_label = "Load Animation Color Scheme"
bl_options = {"REGISTER", "UNDO"}
bl_description = "Loads the animation color scheme"
def _execute(self, context):
group = tool.Ifc.get().by_id(int(context.scene.BIMAnimationProperties.saved_color_schemes))
core.load_animation_color_scheme(tool.Sequence, scheme=group)
def draw(self, context):
props = context.scene.BIMAnimationProperties
row = self.layout.row()
row.prop(props, "saved_color_schemes", text="")
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
class CopyTask(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.duplicate_task"
@@ -1315,14 +1410,14 @@ class LoadProductTasks(bpy.types.Operator):
return {"FINISHED"}
class HighlightTask(bpy.types.Operator):
bl_idname = "bim.highlight_task"
class GoToTask(bpy.types.Operator):
bl_idname = "bim.go_to_task"
bl_label = "Highlight Task"
bl_options = {"REGISTER", "UNDO"}
task: bpy.props.IntProperty()
def execute(self, context):
r = core.highlight_task(tool.Sequence, task=tool.Ifc.get().by_id(self.task))
r = core.go_to_task(tool.Sequence, task=tool.Ifc.get().by_id(self.task))
if isinstance(r, str):
self.report({"WARNING"}, r)
return {"FINISHED"}
@@ -1389,3 +1484,22 @@ class CreateBaseline(bpy.types.Operator, tool.Ifc.Operator):
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
class ClearPreviousAnimation(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.clear_previous_animation"
bl_label = "Clear Previous Animation"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.clear_previous_animation(tool.Sequence)
class AddAnimationCamera(bpy.types.Operator):
bl_idname = "bim.add_animation_camera"
bl_label = "Add Camera to Scene"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
core.add_animation_camera(tool.Sequence)
return {"FINISHED"}
@@ -20,10 +20,12 @@ import bpy
import isodate
import ifcopenshell.api
import ifcopenshell.util.attribute
from ifcopenshell.util.doc import get_predefined_type_doc
import blenderbim.tool as tool
import blenderbim.core.sequence as core
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.sequence.data import SequenceData
from blenderbim.bim.module.sequence.data import SequenceData, AnimationColorSchemeData, refresh as refresh_sequence_data
import blenderbim.bim.module.resource.data
import blenderbim.bim.module.pset.data
from blenderbim.bim.prop import StrProperty, Attribute
from dateutil import parser
@@ -87,22 +89,30 @@ def getWorkCalendars(self, context):
def update_active_task_index(self, context):
bpy.ops.bim.load_task_inputs()
bpy.ops.bim.load_task_resources()
bpy.ops.bim.load_task_outputs()
task = tool.Sequence.get_highlighted_task()
self.highlighted_task_id = task.id() if task else 0
tool.Sequence.update_task_ICOM(task)
blenderbim.bim.module.pset.data.refresh()
if self.editing_task_type == "SEQUENCE":
tool.Sequence.load_task_properties()
def update_active_task_outputs(self, context):
bpy.ops.bim.load_task_outputs()
task = tool.Sequence.get_highlighted_task()
outputs = tool.Sequence.get_task_outputs(task)
tool.Sequence.load_task_outputs(outputs)
def update_active_task_resources(self, context):
bpy.ops.bim.load_task_resources()
task = tool.Sequence.get_highlighted_task()
resources = tool.Sequence.get_task_resources(task)
tool.Sequence.load_task_resources(resources)
def update_active_task_inputs(self, context):
bpy.ops.bim.load_task_inputs()
task = tool.Sequence.get_highlighted_task()
inputs = tool.Sequence.get_task_inputs(task)
tool.Sequence.load_task_inputs(inputs)
def updateTaskName(self, context):
@@ -208,25 +218,31 @@ def updateTaskDuration(self, context):
self.duration = "-"
return
self.file = tool.Ifc.get()
task = self.file.by_id(self.ifc_definition_id)
task = tool.Ifc.get().by_id(self.ifc_definition_id)
if task.TaskTime:
task_time = task.TaskTime
else:
task_time = ifcopenshell.api.run("sequence.add_task_time", self.file, task=task)
ifcopenshell.api.run(
"sequence.edit_task_time",
self.file,
**{"task_time": task_time, "attributes": {"ScheduleDuration": duration}},
)
task_time = tool.Ifc.run("sequence.add_task_time", task=task)
tool.Ifc.run("sequence.edit_task_time", task_time=task_time, attributes={"ScheduleDuration": duration})
SequenceData.load()
bpy.ops.bim.load_task_properties()
def get_schedule_predefined_types(self, context):
if not SequenceData.is_loaded:
SequenceData.load()
return SequenceData.data["predefined_types"]
results = []
declaration = tool.Ifc().schema().declaration_by_name("IfcWorkSchedule")
version = tool.Ifc.get_schema()
for attribute in declaration.attributes():
if attribute.name() == "PredefinedType":
results.extend(
[
(e, e, get_predefined_type_doc(version, "IfcWorkSchedule", e))
for e in attribute.type_of_attribute().declared_type().enumeration_items()
if e != "BASELINE"
]
)
break
return results
def update_visualisation_start(self, context):
@@ -286,12 +302,49 @@ def update_sort_reversed(self, context):
work_schedule=tool.Ifc.get().by_id(context.scene.BIMWorkScheduleProperties.active_work_schedule_id),
)
def update_filter_by_active_schedule(self, context):
if context.active_object:
core.load_product_related_tasks(
tool.Sequence, product=tool.Ifc.get().by_id(context.active_object.BIMObjectProperties.ifc_definition_id)
)
def switch_options(self, context):
if self.should_show_visualisation_ui:
self.should_show_snapshot_ui = False
def switch_options2(self, context):
if self.should_show_snapshot_ui:
self.should_show_visualisation_ui = False
def get_saved_color_schemes(self, context):
if not AnimationColorSchemeData.is_loaded:
AnimationColorSchemeData.load()
return AnimationColorSchemeData.data["saved_color_schemes"]
def updateAssignedResourceName(self, context):
pass
def updateAssignedResourceUsage(self, context):
if not self.schedule_usage:
return
resource = tool.Ifc.get().by_id(self.ifc_definition_id)
if resource.Usage and resource.Usage.ScheduleUsage == self.schedule_usage:
return
tool.Resource.run_edit_resource_time(resource, attributes={
"ScheduleUsage": self.schedule_usage
})
tool.Sequence.load_task_properties()
tool.Resource.load_resource_properties()
tool.Sequence.refresh_task_resources()
blenderbim.bim.module.resource.data.refresh()
blenderbim.bim.module.sequence.data.refresh()
blenderbim.bim.module.pset.data.refresh()
class Task(PropertyGroup):
name: StringProperty(name="Name", update=updateTaskName)
identification: StringProperty(name="Identification", update=updateTaskIdentification)
@@ -319,9 +372,9 @@ class WorkPlan(PropertyGroup):
class TaskResource(PropertyGroup):
name: StringProperty(name="Name")
name: StringProperty(name="Name", update=updateAssignedResourceName)
ifc_definition_id: IntProperty(name="IFC Definition ID")
schedule_usage: FloatProperty(name="Schedule Usage")
schedule_usage: FloatProperty(name="Schedule Usage", update=updateAssignedResourceUsage)
class TaskProduct(PropertyGroup):
@@ -348,10 +401,21 @@ class ISODuration(PropertyGroup):
seconds: IntProperty(name="Seconds", default=0)
class IFCStatus(PropertyGroup):
name: StringProperty(name="Name")
is_visible: BoolProperty(name="Is Visible", default=True)
class BIMStatusProperties(PropertyGroup):
is_enabled: BoolProperty(name="Is Enabled")
statuses: CollectionProperty(name="Statuses", type=IFCStatus)
class BIMWorkScheduleProperties(PropertyGroup):
work_schedule_predefined_types: EnumProperty(
items=get_schedule_predefined_types, name="Predefined Type", default=None
)
object_type: StringProperty(name="Object Type")
durations_attributes: CollectionProperty(name="Durations Attributes", type=ISODuration)
work_calendars: EnumProperty(items=getWorkCalendars, name="Work Calendars")
work_schedule_attributes: CollectionProperty(name="Work Schedule Attributes", type=Attribute)
@@ -361,10 +425,11 @@ class BIMWorkScheduleProperties(PropertyGroup):
active_work_schedule_id: IntProperty(name="Active Work Schedules Id")
active_task_index: IntProperty(name="Active Task Index", update=update_active_task_index)
active_task_id: IntProperty(name="Active Task Id")
highlighted_task_id: IntProperty(name="Highlited Task Id")
task_attributes: CollectionProperty(name="Task Attributes", type=Attribute)
should_show_visualisation_ui: BoolProperty(name="Should Show Visualisation UI", default=False)
should_show_visualisation_ui: BoolProperty(name="Should Show Visualisation UI", default=True, update=switch_options)
should_show_task_bar_selection: BoolProperty(name="Add to task bar", default=False)
should_show_snapshot_ui: BoolProperty(name="Should Show Snapshot UI", default=False)
should_show_snapshot_ui: BoolProperty(name="Should Show Snapshot UI", default=False, update=switch_options2)
should_show_column_ui: BoolProperty(name="Should Show Column UI", default=False)
columns: CollectionProperty(name="Columns", type=Attribute)
active_column_index: IntProperty(name="Active Column Index")
@@ -397,9 +462,9 @@ class BIMWorkScheduleProperties(PropertyGroup):
visualisation_start: StringProperty(name="Visualisation Start", update=update_visualisation_start)
visualisation_finish: StringProperty(name="Visualisation Finish", update=update_visualisation_finish)
speed_multiplier: FloatProperty(name="Speed Multiplier", default=10000)
speed_animation_duration: StringProperty(name="Speed Animation Duration", default="PT1S")
speed_animation_duration: StringProperty(name="Speed Animation Duration", default="1 s")
speed_animation_frames: IntProperty(name="Speed Animation Frames", default=24)
speed_real_duration: StringProperty(name="Speed Real Duration", default="P1W")
speed_real_duration: StringProperty(name="Speed Real Duration", default="1 w")
speed_types: EnumProperty(
items=[
("FRAME_SPEED", "Frame-based", "e.g. 25 frames = 1 real week"),
@@ -425,7 +490,9 @@ class BIMWorkScheduleProperties(PropertyGroup):
enable_reorder: BoolProperty(name="Enable Reorder", default=False)
show_task_operators: BoolProperty(name="Show Task Options", default=True)
should_show_schedule_baseline_ui: BoolProperty(name="Baselines", default=False)
filter_by_active_schedule: BoolProperty(name="Filter By Active Schedule", default=False, update = update_filter_by_active_schedule)
filter_by_active_schedule: BoolProperty(
name="Filter By Active Schedule", default=False, update=update_filter_by_active_schedule
)
class BIMTaskTreeProperties(PropertyGroup):
@@ -495,16 +562,16 @@ class BIMTaskTypeColor(PropertyGroup):
default=(1, 0, 0),
min=0.0,
max=1.0,
# update=update_task_animation_color,
)
class BIMAnimationProperties(PropertyGroup):
is_editing: BoolProperty(name="Is Loaded", default=False)
saved_color_schemes: EnumProperty(items=get_saved_color_schemes, name="Saved Colour Schemes")
active_color_component_outputs_index: IntProperty(name="Active Color Component Index")
active_color_component_inputs_index: IntProperty(name="Active Color Component Index")
task_colors_components_inputs: CollectionProperty(name="Groups", type=BIMTaskTypeColor)
task_colors_components_outputs: CollectionProperty(name="Groups", type=BIMTaskTypeColor)
task_input_colors: CollectionProperty(name="Groups", type=BIMTaskTypeColor)
task_output_colors: CollectionProperty(name="Groups", type=BIMTaskTypeColor)
color_full: FloatVectorProperty(
name="Full Bar",
subtype="COLOR",
@@ -21,8 +21,45 @@ import blenderbim.bim.helper
from bpy.types import Panel, UIList
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.helper import draw_attributes
from blenderbim.bim.module.sequence.data import WorkPlansData, WorkScheduleData, SequenceData, TaskICOMData
import blenderbim.tool as tool
from blenderbim.bim.module.sequence.data import (
WorkPlansData,
WorkScheduleData,
SequenceData,
TaskICOMData,
AnimationColorSchemeData,
)
class BIM_PT_status(Panel):
bl_label = "Status"
bl_idname = "BIM_PT_status"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_status"
bl_options = {"HIDE_HEADER"}
@classmethod
def poll(cls, context):
return IfcStore.get_file()
def draw(self, context):
self.props = context.scene.BIMStatusProperties
if not self.props.is_enabled:
row = self.layout.row()
row.operator("bim.enable_status_filters", icon="GREASEPENCIL")
return
row = self.layout.row(align=True)
row.operator("bim.activate_status_filters", icon="TIME")
row.operator("bim.disable_status_filters", icon="CANCEL", text="")
for status in self.props.statuses:
row = self.layout.row()
row.label(text=status.name)
row.prop(status, "is_visible", text="", emboss=False, icon="HIDE_OFF" if status.is_visible else "HIDE_ON")
row.operator("bim.select_status_filter", icon="RESTRICT_SELECT_OFF", text="").name = status.name
class BIM_PT_work_plans(Panel):
@@ -32,10 +69,12 @@ class BIM_PT_work_plans(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_sequence"
@classmethod
def poll(cls, context):
return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() and tool.Ifc.get().schema != "IFC2X3"
file = IfcStore.get_file()
return file and file.schema != "IFC2X3"
def draw(self, context):
if not WorkPlansData.is_loaded:
@@ -54,11 +93,10 @@ class BIM_PT_work_plans(Panel):
def draw_work_plan_ui(self, work_plan):
row = self.layout.row(align=True)
row.label(text=work_plan["name"], icon="TEXT")
if self.props.active_work_plan_id == work_plan["id"]:
if self.props.editing_type == "ATTRIBUTES":
row.operator("bim.edit_work_plan", text="", icon="CHECKMARK")
row.operator("bim.disable_editing_work_plan", text="", icon="CANCEL")
row.operator("bim.disable_editing_work_plan", text="Cancel", icon="CANCEL")
elif self.props.active_work_plan_id:
row.operator("bim.remove_work_plan", text="", icon="X").work_plan = work_plan["id"]
else:
@@ -101,10 +139,12 @@ class BIM_PT_work_schedules(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_sequence"
@classmethod
def poll(cls, context):
return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() and tool.Ifc.get().schema != "IFC2X3"
file = IfcStore.get_file()
return file and hasattr(file, "schema") and file.schema != "IFC2X3"
def draw(self, context):
if not SequenceData.is_loaded:
@@ -113,10 +153,9 @@ class BIM_PT_work_schedules(Panel):
WorkScheduleData.load()
self.props = context.scene.BIMWorkScheduleProperties
self.tprops = context.scene.BIMTaskTreeProperties
self.animation_props = context.scene.BIMAnimationProperties
if not self.props.active_work_schedule_id:
row = self.layout.row()
row = self.layout.row(align=True)
if SequenceData.data["has_work_schedules"]:
row.label(
text="{} Work Schedules Found".format(SequenceData.data["number_of_work_schedules_loaded"]),
@@ -124,25 +163,25 @@ class BIM_PT_work_schedules(Panel):
)
else:
row.label(text="No Work Schedules found.", icon="TEXT")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.prop(self.props, "work_schedule_predefined_types")
row.operator("bim.add_work_schedule", text="Add", icon="ADD")
row.operator("bim.add_work_schedule", text="", icon="ADD")
for work_schedule_id, work_schedule in SequenceData.data["work_schedules"].items():
self.draw_work_schedule_ui(work_schedule_id, work_schedule)
def draw_work_schedule_ui(self, work_schedule_id, work_schedule):
if not work_schedule["PredefinedType"] == "BASELINE":
if work_schedule["PredefinedType"] == "BASELINE":
self.draw_readonly_work_schedule_ui(work_schedule_id)
else:
row = self.layout.row(align=True)
row.label(text=work_schedule["Name"] or "Unnamed", icon="LINENUMBERS_ON")
if self.props.active_work_schedule_id == work_schedule_id:
row.label(
text="Currently editing: {}[{}]".format(work_schedule["Name"], work_schedule["PredefinedType"]),
icon="LINENUMBERS_ON",
)
if self.props.editing_type == "WORK_SCHEDULE":
row.operator("bim.edit_work_schedule", text="", icon="CHECKMARK")
row.operator("bim.edit_work_schedule", text="Apply", icon="CHECKMARK")
elif self.props.editing_type == "TASKS":
grid = self.layout.grid_flow(columns=2, even_columns=True)
col = grid.column()
row1 = col.row(align=True)
row1.alignment = "LEFT"
@@ -177,33 +216,30 @@ class BIM_PT_work_schedules(Panel):
row1.alignment = "RIGHT"
row1.prop(self.props, "should_show_column_ui", text="Schedule Columns", icon="SHORTDISPLAY")
row2 = col.row(align=True)
row2.prop(
self.props, "should_show_visualisation_ui", text="Animation Options", icon="CAMERA_STEREO"
)
row2.prop(self.props, "should_show_snapshot_ui", text="Snapshot Options", icon="CAMERA_STEREO")
row.operator("bim.disable_editing_work_schedule", text="Disable editing", icon="CANCEL")
else:
row.operator("bim.disable_editing_work_schedule", text="Cancel", icon="CANCEL")
if not self.props.active_work_schedule_id:
grid = self.layout.grid_flow(columns=2, even_columns=True)
col1 = grid.column()
col1.label(
text="{}[{}]".format(work_schedule["Name"], work_schedule["PredefinedType"]) or "Unnamed",
icon="LINENUMBERS_ON",
)
col2 = grid.column()
row = col2.row(align=True)
row.operator(
"bim.enable_editing_work_schedule_tasks", text="", icon="ACTION"
"bim.enable_editing_work_schedule_tasks", text="Tasks", icon="ACTION"
).work_schedule = work_schedule_id
row.operator(
"bim.enable_editing_work_schedule", text="", icon="GREASEPENCIL"
"bim.enable_editing_work_schedule", text="Attributes", icon="GREASEPENCIL"
).work_schedule = work_schedule_id
row.operator("bim.remove_work_schedule", text="", icon="X").work_schedule = work_schedule_id
row.operator("bim.remove_work_schedule", text="Delete", icon="X").work_schedule = work_schedule_id
if self.props.active_work_schedule_id == work_schedule_id:
if self.props.editing_type == "WORK_SCHEDULE":
self.draw_editable_work_schedule_ui()
elif self.props.editing_type == "TASKS":
self.draw_baseline_ui(work_schedule_id)
self.draw_column_ui()
if self.props.should_show_visualisation_ui:
self.draw_visualisation_ui()
if self.props.should_show_snapshot_ui:
self.draw_snapshot_ui()
self.draw_editable_task_ui(work_schedule_id)
else:
self.draw_readonly_work_schedule_ui(work_schedule_id)
def draw_task_operators(self):
row = self.layout.row(align=True)
@@ -218,7 +254,9 @@ class BIM_PT_work_schedules(Panel):
row.operator("bim.edit_task_time", text="", icon="CHECKMARK")
elif self.props.editing_task_type == "ATTRIBUTES":
row.operator("bim.edit_task", text="", icon="CHECKMARK")
row.operator("bim.disable_editing_task", text="", icon="CANCEL")
row.operator("bim.disable_editing_task", text="Cancel", icon="CANCEL")
elif self.props.editing_task_type == "SEQUENCE":
row.operator("bim.disable_editing_task", text="Cancel", icon="CANCEL")
else:
row.prop(self.props, "show_task_operators", text="Edit", icon="GREASEPENCIL")
if self.props.show_task_operators:
@@ -226,7 +264,7 @@ class BIM_PT_work_schedules(Panel):
row2.alignment = "RIGHT"
row2.prop(self.props, "enable_reorder", text="", icon="SORTALPHA")
row2.operator("bim.enable_editing_task_sequence", text="", icon="TRACKING").task = ifc_definition_id
row2.operator("bim.enable_editing_task_sequence", text="", icon="TRACKING")
row2.operator("bim.enable_editing_task_time", text="", icon="TIME").task = ifc_definition_id
row2.operator(
"bim.enable_editing_task_calendar", text="", icon="VIEW_ORTHO"
@@ -242,7 +280,7 @@ class BIM_PT_work_schedules(Panel):
if not self.props.should_show_column_ui:
return
row = self.layout.row()
row.operator("bim.setup_default_task_columns", text="Add Default Columns", icon="ANCHOR_BOTTOM")
row.operator("bim.setup_default_task_columns", text="Setup Default Columns", icon="ANCHOR_BOTTOM")
row.alignment = "RIGHT"
row = self.layout.row(align=True)
row.prop(self.props, "column_types", text="")
@@ -268,103 +306,6 @@ class BIM_PT_work_schedules(Panel):
self.layout.template_list("BIM_UL_task_columns", "", self.props, "columns", self.props, "active_column_index")
def draw_visualisation_ui(self):
row = self.layout.row(align=True)
row.label(text="Start Date/ Date Range:")
row = self.layout.row(align=True)
op = row.operator("bim.datepicker", text=self.props.visualisation_start or "Start Date", icon="REW")
op.target_prop = "BIMWorkScheduleProperties.visualisation_start"
op = row.operator("bim.datepicker", text=self.props.visualisation_finish or "Finish Date", icon="FF")
op.target_prop = "BIMWorkScheduleProperties.visualisation_finish"
op = row.operator("bim.guess_date_range", text="Guess", icon="FILE_REFRESH")
op.work_schedule = self.props.active_work_schedule_id
row = self.layout.row(align=True)
row.label(text="Speed Settings")
row = self.layout.row(align=True)
row.prop(self.props, "speed_types", text="")
if self.props.speed_types == "FRAME_SPEED":
row.prop(self.props, "speed_animation_frames", text="")
row.prop(self.props, "speed_real_duration", text="")
elif self.props.speed_types == "DURATION_SPEED":
row.prop(self.props, "speed_animation_duration", text="")
row.prop(self.props, "speed_real_duration", text="")
elif self.props.speed_types == "MULTIPLIER_SPEED":
row.prop(self.props, "speed_multiplier", text="")
row = self.layout.row(align=True)
row.label(text="Display Settings")
row = self.layout.row(align=True)
if not self.animation_props.is_editing:
op = row.operator(
"bim.enable_editing_task_animation_colors", text="Customize Object Colors", icon="SEQUENCE_COLOR_04"
)
else:
op = row.operator(
"bim.disable_editing_task_animation_colors", text="Hide Object Colors", icon="SEQUENCE_COLOR_01"
)
row.prop(self.animation_props, "should_show_task_bar_options", text="Task Bar", icon="NLA_PUSHDOWN")
if self.animation_props.should_show_task_bar_options:
row = self.layout.row()
row.label(text="Task Bar Options", icon="NLA_PUSHDOWN")
row.alignment = "LEFT"
row = self.layout.row(align=True)
row.prop(self.props, "should_show_task_bar_selection", text="Enable Selection", icon="NLA_PUSHDOWN")
row.operator("bim.add_task_bars", text="Generate bars", icon="NLA_PUSHDOWN")
grid = self.layout.grid_flow(columns=2, even_columns=True)
# Column1
col = grid.column()
row = col.row(align=True)
row.prop(self.animation_props, "color_progress")
row = col.row(align=True)
row.prop(self.animation_props, "color_full")
if self.animation_props.is_editing:
self.draw_visualisation_settings_ui()
row = self.layout.row(align=True)
op = row.operator("bim.visualise_work_schedule_date_range", text="Create Animation", icon="OUTLINER_OB_CAMERA")
op.work_schedule = self.props.active_work_schedule_id
def draw_snapshot_ui(self):
row = self.layout.row(align=True)
row.label(text="Create Construction Snapshot:")
row = self.layout.row(align=True)
op = row.operator("bim.datepicker", text=self.props.visualisation_start or "Date", icon="REW")
op.target_prop = "BIMWorkScheduleProperties.visualisation_start"
op = row.operator("bim.visualise_work_schedule_date", text="Create SnapShot", icon="RESTRICT_RENDER_OFF")
op.work_schedule = self.props.active_work_schedule_id
def draw_visualisation_settings_ui(self):
grid = self.layout.grid_flow(columns=2, even_columns=True)
col = grid.column()
row1 = col.row(align=True)
row1.label(text="INPUT COLORS", icon="COLLECTION_COLOR_01")
row1 = col.row()
row1.template_list(
"BIM_UL_animation_colors",
"",
self.animation_props,
"task_colors_components_inputs",
self.animation_props,
"active_color_component_inputs_index",
)
col = grid.column()
row1 = col.row(align=True)
row1.label(text="OUTPUT COLORS", icon="COLLECTION_COLOR_04")
row1 = col.row()
row1.template_list(
"BIM_UL_animation_colors",
"",
self.animation_props,
"task_colors_components_outputs",
self.animation_props,
"active_color_component_outputs_index",
)
def draw_editable_work_schedule_ui(self):
draw_attributes(self.props.work_schedule_attributes, self.layout)
@@ -390,13 +331,13 @@ class BIM_PT_work_schedules(Panel):
self.draw_editable_task_attributes_ui()
elif self.props.active_task_id and self.props.editing_task_type == "CALENDAR":
self.draw_editable_task_calendar_ui()
elif self.props.active_task_id and self.props.editing_task_type == "SEQUENCE":
elif self.props.highlighted_task_id and self.props.editing_task_type == "SEQUENCE":
self.draw_editable_task_sequence_ui()
elif self.props.active_task_time_id and self.props.editing_task_type == "TASKTIME":
self.draw_editable_task_time_attributes_ui()
def draw_editable_task_sequence_ui(self):
task = SequenceData.data["tasks"][self.props.active_task_id]
task = SequenceData.data["tasks"][self.props.highlighted_task_id]
row = self.layout.row()
row.label(text="{} Predecessors".format(len(task["IsSuccessorFrom"])), icon="BACK")
for sequence_id in task["IsSuccessorFrom"]:
@@ -410,6 +351,7 @@ class BIM_PT_work_schedules(Panel):
def draw_editable_sequence_ui(self, sequence, process_type):
task = SequenceData.data["tasks"][sequence[process_type]]
row = self.layout.row(align=True)
row.operator("bim.go_to_task", text="", icon="RESTRICT_SELECT_OFF").task = task["id"]
row.label(text=task["Identification"] or "XXX")
row.label(text=task["Name"] or "Unnamed")
row.label(text=sequence["SequenceType"] or "N/A")
@@ -421,12 +363,12 @@ class BIM_PT_work_schedules(Panel):
if self.props.active_sequence_id == sequence["id"]:
if self.props.editing_sequence_type == "ATTRIBUTES":
row.operator("bim.edit_sequence_attributes", text="", icon="CHECKMARK")
row.operator("bim.disable_editing_sequence", text="", icon="CANCEL")
row.operator("bim.disable_editing_sequence", text="Cancel", icon="CANCEL")
self.draw_editable_sequence_attributes_ui()
elif self.props.editing_sequence_type == "LAG_TIME":
op = row.operator("bim.edit_sequence_lag_time", text="", icon="CHECKMARK")
op.lag_time = sequence["TimeLag"]
row.operator("bim.disable_editing_sequence", text="", icon="CANCEL")
row.operator("bim.disable_editing_sequence", text="Cancel", icon="CANCEL")
self.draw_editable_sequence_lag_time_ui()
else:
if sequence["TimeLag"]:
@@ -491,7 +433,7 @@ class BIM_PT_work_schedules(Panel):
"id"
]
baseline_row.operator(
"bim.enable_editing_work_schedule_tasks", text="", icon="ACTION"
"bim.enable_editing_work_schedule_tasks", text="Display Schedule", icon="ACTION"
).work_schedule = baseline["id"]
baseline_row.operator("bim.remove_work_schedule", text="", icon="X").work_schedule = baseline["id"]
@@ -521,6 +463,172 @@ class BIM_PT_work_schedules(Panel):
)
class BIM_PT_animation_tools(Panel):
bl_label = "Animation Tools"
bl_idname = "BIM_PT_animation_tools"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_work_schedules"
bl_order = 4
@classmethod
def poll(cls, context):
props = context.scene.BIMWorkScheduleProperties
if props.active_work_schedule_id:
return True
return False
def draw(self, context):
self.props = context.scene.BIMWorkScheduleProperties
self.animation_props = context.scene.BIMAnimationProperties
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.prop(self.props, "should_show_visualisation_ui", text="Animation Settings", icon="SETTINGS")
row.prop(self.props, "should_show_snapshot_ui", text="Snapshot Settings", icon="SETTINGS")
if self.props.should_show_visualisation_ui:
self.draw_visualisation_ui()
if self.props.should_show_snapshot_ui:
self.draw_snapshot_ui()
self.draw_processing_options()
def draw_processing_options(self):
row = self.layout.row(align=True)
row.alignment = "LEFT"
row.label(text="Processing Tools")
row = self.layout.row()
row.alignment = "RIGHT"
row.operator("bim.add_animation_camera", text="Add Camera", icon="CAMERA_DATA")
row.operator("bim.clear_previous_animation", text="Reset Animation", icon="TRACKING_CLEAR_FORWARDS")
def draw_visualisation_ui(self):
if not AnimationColorSchemeData.is_loaded:
AnimationColorSchemeData.load()
row = self.layout.row(align=True)
row.label(text="Start Date/ Date Range:", icon="CAMERA_DATA")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
op = row.operator("bim.datepicker", text=self.props.visualisation_start or "Start Date", icon="REW")
op.target_prop = "BIMWorkScheduleProperties.visualisation_start"
op = row.operator("bim.datepicker", text=self.props.visualisation_finish or "Finish Date", icon="FF")
op.target_prop = "BIMWorkScheduleProperties.visualisation_finish"
op = row.operator("bim.guess_date_range", text="Guess", icon="FILE_REFRESH")
op.work_schedule = self.props.active_work_schedule_id
row = self.layout.row(align=True)
row.label(text="Speed Settings")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.prop(self.props, "speed_types", text="")
if self.props.speed_types == "FRAME_SPEED":
row.prop(self.props, "speed_animation_frames", text="")
row.prop(self.props, "speed_real_duration", text="")
elif self.props.speed_types == "DURATION_SPEED":
row.prop(self.props, "speed_animation_duration", text="")
row.label(text="->")
row.prop(self.props, "speed_real_duration", text="")
elif self.props.speed_types == "MULTIPLIER_SPEED":
row.prop(self.props, "speed_multiplier", text="")
row = self.layout.row(align=True)
row.label(text="Display Settings")
row = self.layout.row()
row.alignment = "RIGHT"
row.prop(self.animation_props, "should_show_task_bar_options", text="Task Bars", icon="NLA_PUSHDOWN")
if self.animation_props.should_show_task_bar_options:
row = self.layout.row()
row.label(text="Task Bar Options", icon="NLA_PUSHDOWN")
row.alignment = "LEFT"
row = self.layout.row(align=True)
row.prop(self.props, "should_show_task_bar_selection", text="Enable Selection", icon="NLA_PUSHDOWN")
row.operator("bim.add_task_bars", text="Generate bars", icon="NLA_PUSHDOWN")
grid = self.layout.grid_flow(columns=2, even_columns=True)
# Column1
col = grid.column()
row = col.row(align=True)
row.prop(self.animation_props, "color_progress")
row = col.row(align=True)
row.prop(self.animation_props, "color_full")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
if self.animation_props.saved_color_schemes:
row.prop(self.animation_props, "saved_color_schemes", text="Color Scheme", icon="SEQUENCE_COLOR_04")
else:
row.label(text="No Color Scheme Saved", icon="INFO")
op = row.operator("bim.visualise_work_schedule_date_range", text="Create Animation", icon="OUTLINER_OB_CAMERA")
op.work_schedule = self.props.active_work_schedule_id
def draw_snapshot_ui(self):
row = self.layout.row(align=True)
row.label(text="Date of Snapshot:", icon="CAMERA_STEREO")
row = self.layout.row(align=True)
row.alignment = "RIGHT"
op = row.operator("bim.datepicker", text=self.props.visualisation_start or "Date", icon="PROP_PROJECTED")
op.target_prop = "BIMWorkScheduleProperties.visualisation_start"
row = self.layout.row(align=True)
row.alignment = "RIGHT"
op = row.operator("bim.visualise_work_schedule_date", text="Create SnapShot", icon="CAMERA_STEREO")
op.work_schedule = self.props.active_work_schedule_id
class BIM_PT_animation_Color_Scheme(Panel):
bl_label = "Animation Color Scheme"
bl_idname = "BIM_PT_animation_Color_Scheme"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_sequence"
@classmethod
def poll(cls, context):
file = IfcStore.get_file()
return file and hasattr(file, "schema") and file.schema != "IFC2X3"
def draw(self, context):
if not AnimationColorSchemeData.is_loaded:
AnimationColorSchemeData.load()
self.animation_props = context.scene.BIMAnimationProperties
row = self.layout.row(align=True)
row.alignment = "RIGHT"
row.operator("bim.load_default_animation_color_scheme", text="Load default", icon="SEQUENCE_COLOR_04")
if AnimationColorSchemeData.data["saved_color_schemes"]:
row.operator("bim.load_animation_color_scheme", text="Load Scheme", icon="IMPORT")
row.operator("bim.save_animation_color_scheme", text="Save Scheme", icon="EXPORT")
grid = self.layout.grid_flow(columns=2, even_columns=True)
col = grid.column()
row1 = col.row(align=True)
row1.label(text="INPUT COLORS", icon="COLLECTION_COLOR_01")
row1 = col.row()
row1.template_list(
"BIM_UL_animation_colors",
"",
self.animation_props,
"task_input_colors",
self.animation_props,
"active_color_component_inputs_index",
)
col = grid.column()
row1 = col.row(align=True)
row1.label(text="OUTPUT COLORS", icon="COLLECTION_COLOR_04")
row1 = col.row()
row1.template_list(
"BIM_UL_animation_colors",
"",
self.animation_props,
"task_output_colors",
self.animation_props,
"active_color_component_outputs_index",
)
class BIM_PT_task_icom(Panel):
bl_label = "Task ICOM"
bl_idname = "BIM_PT_task_icom"
@@ -529,6 +637,7 @@ class BIM_PT_task_icom(Panel):
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_work_schedules"
bl_order = 1
@classmethod
def poll(cls, context):
@@ -657,9 +766,9 @@ class BIM_UL_task_resources(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
row = layout.row(align=True)
row.operator("bim.go_to_resource", text="", icon="STYLUS_PRESSURE").resource = item.ifc_definition_id
row.prop(item, "name", emboss=False, text="")
row.label(text=str(item.schedule_usage))
row.prop(item, "schedule_usage", emboss=False, text="")
class BIM_UL_animation_colors(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
@@ -682,7 +791,7 @@ class BIM_UL_product_input_tasks(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
row = layout.row(align=True)
op = row.operator("bim.highlight_task", text="", icon="STYLUS_PRESSURE")
op = row.operator("bim.go_to_task", text="", icon="STYLUS_PRESSURE")
op.task = item.ifc_definition_id
row.split(factor=0.8)
row.label(text=item.name)
@@ -692,7 +801,7 @@ class BIM_UL_product_output_tasks(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
row = layout.row(align=True)
op = row.operator("bim.highlight_task", text="", icon="STYLUS_PRESSURE")
op = row.operator("bim.go_to_task", text="", icon="STYLUS_PRESSURE")
op.task = item.ifc_definition_id
row.split(factor=0.8)
row.label(text=item.name)
@@ -732,19 +841,18 @@ class BIM_UL_tasks(UIList):
)
if self.props.enable_reorder:
self.draw_order_operator(row, item.ifc_definition_id)
if self.props.active_task_id:
if self.props.editing_task_type == "SEQUENCE" and self.props.active_task_id != item.ifc_definition_id:
if item.is_predecessor:
op = row.operator("bim.unassign_predecessor", text="", icon="BACK", emboss=False)
else:
op = row.operator("bim.assign_predecessor", text="", icon="TRACKING_BACKWARDS", emboss=False)
op.task = item.ifc_definition_id
if self.props.editing_task_type == "SEQUENCE" and self.props.highlighted_task_id != item.ifc_definition_id:
if item.is_predecessor:
op = row.operator("bim.unassign_predecessor", text="", icon="BACK", emboss=False)
else:
op = row.operator("bim.assign_predecessor", text="", icon="TRACKING_BACKWARDS", emboss=False)
op.task = item.ifc_definition_id
if item.is_successor:
op = row.operator("bim.unassign_successor", text="", icon="FORWARD", emboss=False)
else:
op = row.operator("bim.assign_successor", text="", icon="TRACKING_FORWARDS", emboss=False)
op.task = item.ifc_definition_id
if item.is_successor:
op = row.operator("bim.unassign_successor", text="", icon="FORWARD", emboss=False)
else:
op = row.operator("bim.assign_successor", text="", icon="TRACKING_FORWARDS", emboss=False)
op.task = item.ifc_definition_id
def draw_order_operator(self, row, ifc_definition_id):
task = SequenceData.data["tasks"][ifc_definition_id]
@@ -813,10 +921,12 @@ class BIM_PT_work_calendars(Panel):
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
bl_parent_id = "BIM_PT_tab_sequence"
@classmethod
def poll(cls, context):
return tool.Blender.is_tab(context, "SCHEDULING") and tool.Ifc.get() and tool.Ifc.get().schema != "IFC2X3"
file = IfcStore.get_file()
return file and hasattr(file, "schema") and file.schema != "IFC2X3"
def draw(self, context):
if not SequenceData.is_loaded:
@@ -841,7 +951,7 @@ class BIM_PT_work_calendars(Panel):
if self.props.active_work_calendar_id == work_calendar_id:
if self.props.editing_type == "ATTRIBUTES":
row.operator("bim.edit_work_calendar", text="", icon="CHECKMARK")
row.operator("bim.disable_editing_work_calendar", text="", icon="CANCEL")
row.operator("bim.disable_editing_work_calendar", text="Cancel", icon="CANCEL")
elif self.props.active_work_calendar_id:
row.operator("bim.remove_work_calendar", text="", icon="X").work_calendar = work_calendar_id
else:
@@ -879,7 +989,7 @@ class BIM_PT_work_calendars(Panel):
row.label(text="{} - {}".format(work_time["Start"] or "*", work_time["Finish"] or "*"))
if self.props.active_work_time_id == work_time["id"]:
row.operator("bim.edit_work_time", text="", icon="CHECKMARK")
row.operator("bim.disable_editing_work_time", text="", icon="CANCEL")
row.operator("bim.disable_editing_work_time", text="Cancel", icon="CANCEL")
elif self.props.active_work_time_id:
op = row.operator("bim.remove_work_time", text="", icon="X")
op.work_time = work_time["id"]
@@ -1000,29 +1110,3 @@ class BIM_PT_4D_Tools(Panel):
self.props,
"active_product_output_task_index",
)
class BIM_PT_Task_Bar_Creator(Panel):
bl_label = "Task Bar Creator"
bl_idname = "BIM_PT_Task_Bar_Creator"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_options = {"DEFAULT_CLOSED"}
bl_parent_id = "BIM_PT_4D_Tools"
def draw(self, context):
self.animation_props = context.scene.BIMAnimationProperties
row = self.layout.row()
row.operator("bim.add_task_bars", text="Add Bar Visual", icon="NLA_PUSHDOWN")
grid = self.layout.grid_flow(columns=2, even_columns=True)
# Column1
col = grid.column()
row1 = col.row(align=True)
row1.label(text="Bar Colors", icon="NLA_PUSHDOWN")
row2 = col.row(align=True)
row2.prop(self.animation_props, "color_progress")
row3 = col.row(align=True)
row3.prop(self.animation_props, "color_full")
@@ -34,6 +34,7 @@ classes = (
operator.RemovePort,
operator.RemoveSystem,
operator.SelectSystemProducts,
operator.MEPConnectElements,
operator.SetFlowDirection,
operator.ShowPorts,
operator.UnassignSystem,
@@ -23,6 +23,7 @@ import blenderbim.core.system as core
import blenderbim.bim.handler
from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.module.system.data import PortData
from mathutils import Matrix
class Operator:
@@ -215,6 +216,42 @@ class DisconnectPort(bpy.types.Operator, Operator):
core.disconnect_port(tool.Ifc, port=element)
class MEPConnectElements(bpy.types.Operator, Operator):
bl_idname = "bim.mep_connect_elements"
bl_label = "Connect MEP Elements"
bl_description = "Connects two selected elements if they have ports with matching location"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
return len(context.selected_objects) == 2
def _execute(self, context):
obj1 = context.active_object
obj2 = next(o for o in context.selected_objects if o != obj1)
el1 = tool.Ifc.get_entity(obj1)
el2 = tool.Ifc.get_entity(obj2)
obj1_ports = [p for p in tool.System.get_ports(el1) if not tool.System.get_connected_port(p)]
obj2_ports = [p for p in tool.System.get_ports(el2) if not tool.System.get_connected_port(p)]
if not obj1_ports or not obj2_ports:
self.report({"ERROR"}, "Couldn't find free ports to connect.")
return
for port1 in obj1_ports:
port1_location = tool.Model.get_element_matrix(port1).translation
for port2 in obj2_ports:
port2_location = tool.Model.get_element_matrix(port2).translation
if tool.Cad.are_vectors_equal(port1_location, port2_location):
core.connect_port(tool.Ifc, port1, port2)
return {"FINISHED"}
self.report({"ERROR"}, "Couldn't find any matching ports to connect.")
return {"CANCELLED"}
class SetFlowDirection(bpy.types.Operator, Operator):
bl_idname = "bim.set_flow_direction"
bl_label = "Set Flow Direction"
@@ -123,6 +123,7 @@ class BIM_PT_object_systems(Panel):
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
for system in ObjectSystemData.data["systems"]:
@@ -166,6 +167,7 @@ class BIM_PT_ports(Panel):
row = self.layout.row(align=True)
total_ports = PortData.data["total_ports"]
row.label(text=f"{total_ports} Ports Found", icon="PLUGIN")
row.operator("bim.mep_connect_elements", text="", icon="PLUGIN")
row.operator("bim.show_ports", icon="HIDE_OFF", text="")
row.operator("bim.hide_ports", icon="HIDE_ON", text="")
row.operator("bim.add_port", icon="ADD", text="")
@@ -283,6 +285,7 @@ class BIM_UL_systems(UIList):
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
if item:
@@ -315,6 +318,7 @@ class BIM_UL_object_systems(UIList):
"IfcDistributionSystem": "NETWORK_DRIVE",
"IfcDistributionCircuit": "DRIVER",
"IfcBuildingSystem": "MOD_BUILD",
"IfcBuiltSystem": "MOD_BUILD",
"IfcZone": "CUBE",
}
if item:
+6 -6
View File
@@ -830,13 +830,13 @@ class BIM_OT_enum_property_search(bpy.types.Operator):
mapping = getter_suggestions.get(self.prop_name)
if mapping is None:
return
for key, values in mapping().items():
for key, suggestions in mapping().items():
if key in self.identifiers:
if not isinstance(values, (tuple, list)):
values = [values]
for value in values:
predefined_type = value["predefined_type"].upper()
name = value.get("name")
if not isinstance(suggestions, (tuple, list)):
suggestions = [suggestions]
for suggestion in suggestions:
predefined_type = suggestion.get("predefined_type", "NOTDEFINED").upper()
name = suggestion.get("name")
self.add_item(
identifier=key,
name=f"{key} > {name if name else predefined_type }",
+2 -1
View File
@@ -305,7 +305,7 @@ def get_tab(self, context):
("DRAWINGS", "Drawings and Documents", "", "DOCUMENTS", 3),
("SERVICES", "Services and Systems", "", "NETWORK_DRIVE", 4),
("STRUCTURE", "Structural Analysis", "", "EDITMODE_HLT", 5),
("SCHEDULING", "Construction Scheduling", "", "NLA", 6),
("SCHEDULING", "Costing and Scheduling", "", "NLA", 6),
("FM", "Facility Management", "", "PACKAGE", 7),
("QUALITY", "Quality and Coordination", "", "COMMUNITY", 8),
("BLENDER", "Blender Properties", "", "BLENDER", 9),
@@ -435,6 +435,7 @@ class BIMMeshProperties(PropertyGroup):
ifc_definition_id: IntProperty(name="IFC Definition ID")
ifc_boolean_id: IntProperty(name="IFC Boolean ID")
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_swept_solid: BoolProperty(name="Is Swept Solid")
is_parametric: BoolProperty(name="Is Parametric", default=False)
@@ -0,0 +1,498 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:27',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'BB/SfB (3/4 cijfers)',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('Regie der Gebouwen','1990','2017-08-31','BB/SfB (3/4 cijfers)','Kies hieronder een BB/SfB code. Deze code wordt als ifc-classificatie aan het geselecteerde element toegevoegd.\X2\000A\X0\The BB/SfB (3/4 digits) standard defines a classification and information coding system for the AEC industry in Belgium.',$,('.'));
#3=IFCRELASSOCIATESCLASSIFICATION('182PB2CvD69RejlY5sr47M',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'0-','TERREINEN, PROJECTEN',#2,$,$);
#5=IFCCLASSIFICATIONREFERENCE($,'1-','BODEM, ONDERBOUW',#2,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'11-','BODEM',#5,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'11.1','BODEMRELI\X2\00CB\X0\F, BODEMHELLING',#6,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'11.3','GRONDSAMENSTELLING',#6,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'11.4','GRONDWATER, WATER IN GROND',#6,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'11.5','BESTAANDE ONDERGRONDSE VOORZIENINGEN',#6,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'11.8','HOGER NIET GENOEMDE ELEMENTEN VAN 11-',#6,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'11.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 11-',#6,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'13-','LAGEN OP VOLLE GROND, VLOEREN OP VOLLE GROND',#5,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'13.1','VLOEREN OP VOLLE GROND',#13,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'13.4','BEPLANTE EN ONBEPLANTE ZACHTE LAGEN OP VOLLE GROND',#13,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'13.6','LAGEN ONDER WATER',#13,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'13.8','HOGER NIET GENOEMDE ELEMENTEN VAN 13-',#13,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'13.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 13-',#13,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'16-','FUNDERINGEN, KEERMUREN',#5,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'16.2','KEERMUREN\X2\201A\X0\ KELDERMUREN IN CONTACT MET GROND',#19,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'16.3','WATERKERENDE ELEMENTEN',#19,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'16.4','FUNDERINGEN, FUNDERINGEN OP ZOLEN, FUNDERINGEN OP PUTTEN',#19,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'16.8','HOGER NIET GENOEMDE ELEMENTEN VAN 16-',#19,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'16.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 16-',#19,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'17-','PAALFUNDERINGEN, DAMPLANKEN',#5,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'17.1','DAMPLANKEN',#25,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'17.2','PAALFUNDERINGEN GEREALISEERD MET GRONDUITGRAVINGEN EN IN SITU GESTORT',#25,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'17.3','PAALFUNDERLNGEN GEREALISEERD MET GRONDVERDRINGNNG EN GEPREFABRICEERD',#25,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'17.4','PAALFUNDERINGEN GEREALISEERD MET GRONDVERDRINGING EN IN SITU GEVORMD',#25,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'17.8','HOGER NIET GENOEMDE ELEMENTEN VAN 17-',#25,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'17.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 17-',#25,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'18','HOGER NIET GENOEMDE ELEMENTEN VAN 1-',#5,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'19','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 1-',#5,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'2-','PRIMAIRE ELEMENTEN VAN BOVENBOUW',#2,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'2.-','STRUCTUREN INGEDEELD VOLGENS CONSTRUCTIEF PRINCIPE',#34,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'2.1','STRUCTUREN MET DRAGENDE WANDEN',#35,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'2.2','SKELETSTRUCTUUR',#35,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'2.3','CELSTRUCTUREN',#35,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'2.4','VLIESSTRUCTUREN, GEODETISCHE STRUCTUREN',#35,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'2.5','SCHAALSTRUCTUREN',#35,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'2.6','STRUCTUREN OP TREK BELAST',#35,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'2.8','HOGER NIET GENOEMDE STRUCTUREN IN 2.-',#35,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'2.9','HOOFDDELEN VAN EEN STRUCTUUR',#35,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'21-','BUITENWANDEN',#34,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'21.1','DRAGENDE BUITENWANDEN',#44,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'21.3','NIET-DRAGENDE BUITENWAND',#44,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'21.4','GORDIJNGEVELS',#44,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'21.6','BUITENWANDEN OPGEBOUWD UIT DRAAGSTRUCTUUR EN BEKLEDING OF INVULLING',#44,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'21.8','HOGER NIET GENOEMDE ELEMENTEN VAN 21-',#44,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'21.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 21-',#44,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'22-','BINNENWANDEN',#34,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'22.1','DRAGENDE BINNENWANDEN',#51,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'22.3','NIET-DRAGENDE BINNENWANDEN',#51,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'22.6','BINNENWANDEN OPGEBOUWD UIT DRAAGSTRUCTUUR MET BEKLEDING OF INVULLING',#51,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'22.8','HOGER NIET GENOEMDE ELEMENTEN VAN 22-',#51,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'22.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 22-',#51,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'23-','VLOEREN, GALERIJEN, BALKONS, LOOPBRUGGEN',#34,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'23.2','MONOLITISCHE VLOEREN EN PLAATVLOEREN',#57,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'23.4','SAMENGESTELDE VLOEREN',#57,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'23.7','GALERIJEN, BALKONS, LOOPBRUGGEN',#57,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'23.8','HOGER NIET GENOEMDE ELEMENTEN VAN 23-',#57,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'23.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 23-',#57,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'24-','ELEMENTEN VOOR VERTICALE CIRCULATIE, TRAPPEN',#34,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'24.1','RECHTE TRAP ZONDER RICHTINGSVERANDERING (MET OF ZONDER TUSSENBORDES)',#63,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'24.3','RECHTE TRAP MET RICHTINGSVERANDERING (VIA BORDES O\X2\00CD\X0\ VERDREVEN TREDEN)',#63,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'24.4','WENTELTRAPPEN, SPIRAALTRAPPEN',#63,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'24.5','TRAPPEN VOLGENS ANDER INDELINGSCRITERTUM',#63,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'24.6','VASTE LADDERS, KLIMIJZERS, GL\X2\0132\X0\PALEN',#63,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'24.7','HELLINGEN',#63,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'24.8','HOGER NIET GENOEMDE ELEMENTEN VAN 24-',#63,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'24.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 24-',#63,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'27-','DAKEN',#34,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'27.1/27.5','DAKEN VOLGENS VORM',#72,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'27.1','PLATTE DAKEN, DAKTERRASSEN',#73,$,$);
#75=IFCCLASSIFICATIONREFERENCE($,'27.2','HELLENDE DAKEN',#73,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'27.2-','HELLENDE DAKEN',#73,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'27.21','MET EEN DAKSCHILD',#76,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'27.22','MET TWEE DAKSCHILDEN',#76,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'27.23','MET VIER DAKSCHILDEN',#76,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'27.28','HELLENDE DAKEN NIET GENOEMD IN 27.2-',#76,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'27.4','DAKEN MET GEPLOOIDE PLAATSTRUCTUUR',#73,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'27.5','DAKEN MET EEN VORM NIET GENOEMD IN 27.1/27.4',#73,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'27.6/27.7','DAKEN VOLGENS STRUCTUREEL PRINCIPE',#72,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'27.6','DAKSTRUCTUREN ZONDER UITKRAGING',#83,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'27.7','DAKSTRUCTUREN MET UITKRAGING',#83,$,$);
#86=IFCCLASSIFICATIONREFERENCE($,'27.8','HOGER NIET GENOEMDE ELEMENTEN VAN 27-',#72,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'27.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 27-',#72,$,$);
#88=IFCCLASSIFICATIONREFERENCE($,'28-','DRAAGSTRUCTUREN VAN GEBOUWEN, HOGER NIET GENOEMDE ELEMENTEN VAN 2-',#34,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'28.2/28.7','DRAAGSTRUCTUREN VAN GEBOUWEN',#88,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'28.2','KOLOM-BALKSTRUCTUUR, PORTIEKSTRUCTUUR',#89,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'28.3','KOLOM-VLOERSTRUCTUUR',#89,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'28.5','KOLOM-KABELSTRUCTUUR',#89,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'28.6','RUIMTELIJKE DRAAGSTRUCTUUR',#89,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'28.7','DRAAGSTRUCTUREN HOGER NIET GENOEMD IN 28.2/28.6',#89,$,$);
#95=IFCCLASSIFICATIONREFERENCE($,'28.8','HOGER NIET GENOEMDE ELEMENTEN VAN 28-',#88,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'28.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 28-',#88,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'29','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 2-',#34,$,$);
#98=IFCCLASSIFICATIONREFERENCE($,'3-','SECUNDAIRE ELEMENTEN, AFSLUITENDE ELEMENTEN, VAN DE BOVENBOUW',#2,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'31-','SECUNDAIRE ELEMENTEN VOOR BUITENWANDEN',#98,$,$);
#100=IFCCLASSIFICATIONREFERENCE($,'31.3','DEUREN, RAMEN, RAAM-DEUREN, RAAM-EN-DEUR-COMBINATIES EN OVEREENKOMSTIGE OPENINGEN',#99,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'31.3-','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN',#99,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'31.31','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (VAST)',#101,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'31.32','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#101,$,$);
#104=IFCCLASSIFICATIONREFERENCE($,'31.33','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (PIVOTEREND, WENTELEND)',#101,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'31.34','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#101,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'31.35','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#101,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'31.36','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (OMHOOG KANTELEND)',#101,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'31.38','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (OPENINGSWIJZE NIET GENOEMD IN 31.31/31.36)',#101,$,$);
#109=IFCCLASSIFICATIONREFERENCE($,'31.39','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#101,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'31.4','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN',#99,$,$);
#111=IFCCLASSIFICATIONREFERENCE($,'31.4-','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN',#99,$,$);
#112=IFCCLASSIFICATIONREFERENCE($,'31.41','31.41 RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (VAST)',#111,$,$);
#113=IFCCLASSIFICATIONREFERENCE($,'31.42','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#111,$,$);
#114=IFCCLASSIFICATIONREFERENCE($,'31.43','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (PIVOTEREND, WENTELEND)',#111,$,$);
#115=IFCCLASSIFICATIONREFERENCE($,'31.44','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#111,$,$);
#116=IFCCLASSIFICATIONREFERENCE($,'31.45','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#111,$,$);
#117=IFCCLASSIFICATIONREFERENCE($,'31.46','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (OMHOOG KANTELEND)',#111,$,$);
#118=IFCCLASSIFICATIONREFERENCE($,'31.48','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (OPENINGSWIJZE NIET GENOEMD IN 31.41/31.46)',#111,$,$);
#119=IFCCLASSIFICATIONREFERENCE($,'31.49','RAMEN, OPENINGEN VOOR RAMEN, RAAMOPENINGEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#111,$,$);
#120=IFCCLASSIFICATIONREFERENCE($,'31.5','31.5 DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN',#99,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'31.5-','31.5 DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN',#99,$,$);
#122=IFCCLASSIFICATIONREFERENCE($,'31.51','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (VAST)',#121,$,$);
#123=IFCCLASSIFICATIONREFERENCE($,'31.52','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#121,$,$);
#124=IFCCLASSIFICATIONREFERENCE($,'31.53','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (PIVOTEREND, WENTELEND)',#121,$,$);
#125=IFCCLASSIFICATIONREFERENCE($,'31.54','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#121,$,$);
#126=IFCCLASSIFICATIONREFERENCE($,'31.55','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#121,$,$);
#127=IFCCLASSIFICATIONREFERENCE($,'31.56','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (OMHOOG KANTELEND)',#121,$,$);
#128=IFCCLASSIFICATIONREFERENCE($,'31.58','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (OPENINGSWIJZE NIET GENOEMD IN 31.51/31.56)',#121,$,$);
#129=IFCCLASSIFICATIONREFERENCE($,'31.59','DEUREN, OPENINGEN VOOR DEUREN, DOORGANGEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#121,$,$);
#130=IFCCLASSIFICATIONREFERENCE($,'31.7','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN',#99,$,$);
#131=IFCCLASSIFICATIONREFERENCE($,'31.7-','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN',#99,$,$);
#132=IFCCLASSIFICATIONREFERENCE($,'31.71','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (VAST)',#131,$,$);
#133=IFCCLASSIFICATIONREFERENCE($,'31.72','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#131,$,$);
#134=IFCCLASSIFICATIONREFERENCE($,'31.73','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (PIVOTEREND, WENTELEND)',#131,$,$);
#135=IFCCLASSIFICATIONREFERENCE($,'31.74','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#131,$,$);
#136=IFCCLASSIFICATIONREFERENCE($,'31.75','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#131,$,$);
#137=IFCCLASSIFICATIONREFERENCE($,'31.76','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (OMHOOG KANTELEND)',#131,$,$);
#138=IFCCLASSIFICATIONREFERENCE($,'31.78','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (OPENINGSWIJZE NIET GENOEMD IN 31.71/31.76)',#131,$,$);
#139=IFCCLASSIFICATIONREFERENCE($,'31.79','LUIKEN, OPENINGEN MET OF ZONDER LUIKEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#131,$,$);
#140=IFCCLASSIFICATIONREFERENCE($,'31.8','HOGER NIET GENOEMDE ELEMENTEN VAN 31-',#99,$,$);
#141=IFCCLASSIFICATIONREFERENCE($,'31.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 31-',#99,$,$);
#142=IFCCLASSIFICATIONREFERENCE($,'32-','SECUNDAIRE ELEMENTEN VOOR BINNENWANDEN',#98,$,$);
#143=IFCCLASSIFICATIONREFERENCE($,'32.3','DEUREN, RAMEN, RAAM-DEUREN, RAAM-EN-DEUR-COMBINATIES EN OVEREENKOMSTIG OPENINGEN VOOR BINNENWANDEN',#142,$,$);
#144=IFCCLASSIFICATIONREFERENCE($,'32.3-','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN',#142,$,$);
#145=IFCCLASSIFICATIONREFERENCE($,'32.31','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (VAST)',#144,$,$);
#146=IFCCLASSIFICATIONREFERENCE($,'32.32','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#144,$,$);
#147=IFCCLASSIFICATIONREFERENCE($,'32.33','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (PIVOTEREND, WENTELEND)',#144,$,$);
#148=IFCCLASSIFICATIONREFERENCE($,'32.34','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#144,$,$);
#149=IFCCLASSIFICATIONREFERENCE($,'32.35','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#144,$,$);
#150=IFCCLASSIFICATIONREFERENCE($,'32.36','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (OMHOOG KANTELEND)',#144,$,$);
#151=IFCCLASSIFICATIONREFERENCE($,'32.38','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (OPENINGSWIJZE NIET GENOEMD IN 32.31/31.36)',#144,$,$);
#152=IFCCLASSIFICATIONREFERENCE($,'32.39','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN BINNENWANDEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#144,$,$);
#153=IFCCLASSIFICATIONREFERENCE($,'32.4','32.4 RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN',#142,$,$);
#154=IFCCLASSIFICATIONREFERENCE($,'32.4-','32.4 RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN',#142,$,$);
#155=IFCCLASSIFICATIONREFERENCE($,'32.41','32.41 RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (VAST)',#154,$,$);
#156=IFCCLASSIFICATIONREFERENCE($,'32.42','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#154,$,$);
#157=IFCCLASSIFICATIONREFERENCE($,'32.43','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (PIVOTEREND, WENTELEND)',#154,$,$);
#158=IFCCLASSIFICATIONREFERENCE($,'32.44','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#154,$,$);
#159=IFCCLASSIFICATIONREFERENCE($,'32.45','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#154,$,$);
#160=IFCCLASSIFICATIONREFERENCE($,'32.46','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (OMHOOG KANTELEND)',#154,$,$);
#161=IFCCLASSIFICATIONREFERENCE($,'32.48','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (OPENINGSWIJZE NIET GENOEMD IN 32.41/32.46)',#154,$,$);
#162=IFCCLASSIFICATIONREFERENCE($,'32.49','RAMEN VOOR BINNENWANDEN, OPENINGEN VOOR RAMEN IN BINNENWANDEN, RAAMOPENINGEN IN BINNENWANDEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#154,$,$);
#163=IFCCLASSIFICATIONREFERENCE($,'32.5','32.5 DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN',#142,$,$);
#164=IFCCLASSIFICATIONREFERENCE($,'32.5-','32.5 DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN',#142,$,$);
#165=IFCCLASSIFICATIONREFERENCE($,'32.51','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (VAST)',#164,$,$);
#166=IFCCLASSIFICATIONREFERENCE($,'32.52','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#164,$,$);
#167=IFCCLASSIFICATIONREFERENCE($,'32.53','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (PIVOTEREND, WENTELEND)',#164,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'32.54','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#164,$,$);
#169=IFCCLASSIFICATIONREFERENCE($,'32.55','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#164,$,$);
#170=IFCCLASSIFICATIONREFERENCE($,'32.56','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (OMHOOG KANTELEND)',#164,$,$);
#171=IFCCLASSIFICATIONREFERENCE($,'32.58','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (OPENINGSWIJZE NIET GENOEMD IN 32.51/32.56)',#164,$,$);
#172=IFCCLASSIFICATIONREFERENCE($,'32.59','DEUREN VOOR BINNENWANDEN, DEUROPENINGEN VOOR BINNENWANDEN, DOORGANGEN IN BINNENWANDEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#164,$,$);
#173=IFCCLASSIFICATIONREFERENCE($,'32.7','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN',#142,$,$);
#174=IFCCLASSIFICATIONREFERENCE($,'32.7-','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN',#142,$,$);
#175=IFCCLASSIFICATIONREFERENCE($,'32.71','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (VAST)',#174,$,$);
#176=IFCCLASSIFICATIONREFERENCE($,'32.72','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#174,$,$);
#177=IFCCLASSIFICATIONREFERENCE($,'32.73','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (PIVOTEREND, WENTELEND)',#174,$,$);
#178=IFCCLASSIFICATIONREFERENCE($,'32.74','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#174,$,$);
#179=IFCCLASSIFICATIONREFERENCE($,'32.75','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#174,$,$);
#180=IFCCLASSIFICATIONREFERENCE($,'32.76','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (OMHOOG KANTELEND)',#174,$,$);
#181=IFCCLASSIFICATIONREFERENCE($,'32.78','LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (OPENINGSWIJZE NIET GENOEMD IN 32.71/32.76)',#174,$,$);
#182=IFCCLASSIFICATIONREFERENCE($,'32.79','32.79 LUIKEN VOOR BINNENWANDEN, OPENINGEN IN BINNENWANDEN MET OF ZONDER LUIKEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#174,$,$);
#183=IFCCLASSIFICATIONREFERENCE($,'32.8','HOGER NIET GENOEMD IN ELEMENTEN VAN 32-',#142,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'32.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 32-',#142,$,$);
#185=IFCCLASSIFICATIONREFERENCE($,'33-','SECUNDAIRE ELEMENTEN VOOR VLOEREN',#98,$,$);
#186=IFCCLASSIFICATIONREFERENCE($,'33.1','VERHOOGDE VLOEREN',#185,$,$);
#187=IFCCLASSIFICATIONREFERENCE($,'33.2','SECUNDAIRE VLOERLAGEN',#185,$,$);
#188=IFCCLASSIFICATIONREFERENCE($,'33.5','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN',#185,$,$);
#189=IFCCLASSIFICATIONREFERENCE($,'33.5-','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN',#185,$,$);
#190=IFCCLASSIFICATIONREFERENCE($,'33.51','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (VAST)',#189,$,$);
#191=IFCCLASSIFICATIONREFERENCE($,'33.52','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#189,$,$);
#192=IFCCLASSIFICATIONREFERENCE($,'33.53','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (PIVOTEREND, WENTELEND)',#189,$,$);
#193=IFCCLASSIFICATIONREFERENCE($,'33.54','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#189,$,$);
#194=IFCCLASSIFICATIONREFERENCE($,'33.55','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#189,$,$);
#195=IFCCLASSIFICATIONREFERENCE($,'33.56','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (OMHOOG KANTELEND)',#189,$,$);
#196=IFCCLASSIFICATIONREFERENCE($,'33.58','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (OPENINGSWIJZE NIET GENOEMD IN 33.51/33.56)',#189,$,$);
#197=IFCCLASSIFICATIONREFERENCE($,'33.59','OPENINGEN IN VLOEREN MET OF ZONDER AFSLUITENDE ELEMENTEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#189,$,$);
#198=IFCCLASSIFICATIONREFERENCE($,'33.8','HOGER NIET GENOEMDE ELEMENTEN VAN 33-',#185,$,$);
#199=IFCCLASSIFICATIONREFERENCE($,'33.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 33-',#185,$,$);
#200=IFCCLASSIFICATIONREFERENCE($,'34','SECUNDAIRE ELEMENTEN VOOR VERTICALE CIRCULATIE, VOOR TRAPPEN',#98,$,$);
#201=IFCCLASSIFICATIONREFERENCE($,'35-','OPGEHANGEN PLAFONDS',#98,$,$);
#202=IFCCLASSIFICATIONREFERENCE($,'35.1','OPGEHANGEN PLAFONDS UIT \X2\00C900C9\X0\N STUK OF MET PLATEN OF TEGELS, DIT WIL ZEGGEN NIET-LIJNVORMIGE ELEMENTEN',#201,$,$);
#203=IFCCLASSIFICATIONREFERENCE($,'35.2','OPGEHANGEN PLAFONDS UIT LIJNVORMIGE ELEMENTEN',#201,$,$);
#204=IFCCLASSIFICATIONREFERENCE($,'35.3','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN',#201,$,$);
#205=IFCCLASSIFICATIONREFERENCE($,'35.3-','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN',#201,$,$);
#206=IFCCLASSIFICATIONREFERENCE($,'35.31','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (VAST)',#205,$,$);
#207=IFCCLASSIFICATIONREFERENCE($,'35.32','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#205,$,$);
#208=IFCCLASSIFICATIONREFERENCE($,'35.33','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (PIVOTEREND, WENTELEND)',#205,$,$);
#209=IFCCLASSIFICATIONREFERENCE($,'35.34','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#205,$,$);
#210=IFCCLASSIFICATIONREFERENCE($,'35.35','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#205,$,$);
#211=IFCCLASSIFICATIONREFERENCE($,'35.36','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (OMHOOG KANTELEND)',#205,$,$);
#212=IFCCLASSIFICATIONREFERENCE($,'35.38','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (OPENINGSWIJZE NIET GENOEMD IN 35.31/35.36)',#205,$,$);
#213=IFCCLASSIFICATIONREFERENCE($,'35.39','OPENINGEN IN OPGEHANGEN PLATONDS MET OF ZONDER INVULELEMENTEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#205,$,$);
#214=IFCCLASSIFICATIONREFERENCE($,'35.8','HOGER NIET GENOEMDE ELEMENTEN VAN 35-',#201,$,$);
#215=IFCCLASSIFICATIONREFERENCE($,'35.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 35-',#201,$,$);
#216=IFCCLASSIFICATIONREFERENCE($,'37-','SECUNDAIRE ELEMENTEN VOOR DAKEN',#98,$,$);
#217=IFCCLASSIFICATIONREFERENCE($,'37.3','DEUREN, RAMEN, RAAM-DEUREN, RAAM-EN-DEUR-COMBINATIES, DOORGANGEN EN OVEREENKOMSTIGE OPENINGEN',#216,$,$);
#218=IFCCLASSIFICATIONREFERENCE($,'37.3-','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN',#216,$,$);
#219=IFCCLASSIFICATIONREFERENCE($,'37.31','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (VAST)',#218,$,$);
#220=IFCCLASSIFICATIONREFERENCE($,'37.32','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (DRAAIEND\X2\201A\X0\ KLAPPEND, VALLEND)',#218,$,$);
#221=IFCCLASSIFICATIONREFERENCE($,'37.33','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (PIVOTEREND, WENTELEND)',#218,$,$);
#222=IFCCLASSIFICATIONREFERENCE($,'37.34','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (HORIZONTAAL SCHUIVEND EN/OF VOUWEND)',#218,$,$);
#223=IFCCLASSIFICATIONREFERENCE($,'37.35','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (VERTICAAL SCHUIVEND EN/OF VOUWEND, VERTICAAL ROLLEND)',#218,$,$);
#224=IFCCLASSIFICATIONREFERENCE($,'37.36','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (OMHOOG KANTELEND)',#218,$,$);
#225=IFCCLASSIFICATIONREFERENCE($,'37.38','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (OPENINGSWIJZE NIET GENOEMD IN 37.31/37.36)',#218,$,$);
#226=IFCCLASSIFICATIONREFERENCE($,'37.39','RAAM-DEUREN, OPENINGEN VOOR RAAM-DEUREN IN DAKEN (ONDERDELEN EN HULPSTUKKEN VOOR SCHRIJNWERK VOOR OPENINGEN IN BOVENBOUW)',#218,$,$);
#227=IFCCLASSIFICATIONREFERENCE($,'37.4-','RAMEN VOOR DAKEN, RAAMOPENINGEN IN DAKEN',#216,$,$);
#228=IFCCLASSIFICATIONREFERENCE($,'37.41','DAKLICHTEN BIJ PLATTE DAKEN (INBEGREPEN LICHTDOORLATENDE KOEPELS)',#227,$,$);
#229=IFCCLASSIFICATIONREFERENCE($,'37.42','DAKLANTAARNEN, NOORDERLICHTEN TOT AAN DAKNOK',#227,$,$);
#230=IFCCLASSIFICATIONREFERENCE($,'37.44','DAKRAMEN UITSPRINGEND OF INSPRINGEND TEN OPZICHTE VAN EEN HELLEND DAKVLAK',#227,$,$);
#231=IFCCLASSIFICATIONREFERENCE($,'37.45','DAKRAMEN IN DAKVLAK VAN HELLEND DAK',#227,$,$);
#232=IFCCLASSIFICATIONREFERENCE($,'37.47','LICHTDOORLATENDE BEGAANBARE DAKDELEN',#227,$,$);
#233=IFCCLASSIFICATIONREFERENCE($,'37.48','HOGER NIET GENOEMDE ELEMENTEN VAN 37.4-',#227,$,$);
#234=IFCCLASSIFICATIONREFERENCE($,'37.5','DEUREN TOEGANGEN TOT DAKEN, MET OF ZONDER AFSLIUTENDE ELEMENTEN',#216,$,$);
#235=IFCCLASSIFICATIONREFERENCE($,'37.6','DAKRANDEN',#216,$,$);
#236=IFCCLASSIFICATIONREFERENCE($,'37.8','HOGER NIET GENOEMDE ELEMENTEN VAN 37-',#216,$,$);
#237=IFCCLASSIFICATIONREFERENCE($,'37.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 37-',#216,$,$);
#238=IFCCLASSIFICATIONREFERENCE($,'38','HOGER NIET GENOEMDE ELEMENTEN VAN 3-',#98,$,$);
#239=IFCCLASSIFICATIONREFERENCE($,'39','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 3-',#98,$,$);
#240=IFCCLASSIFICATIONREFERENCE($,'4-','AFWERKING',#2,$,$);
#241=IFCCLASSIFICATIONREFERENCE($,'41','BUITENAFWERKING VOOR WANDEN',#240,$,$);
#242=IFCCLASSIFICATIONREFERENCE($,'42','BINNENAFWERKING VOOR WANDEN',#240,$,$);
#243=IFCCLASSIFICATIONREFERENCE($,'43','AFWERKING VOOR VLOEREN',#240,$,$);
#244=IFCCLASSIFICATIONREFERENCE($,'44','AFWERKING VOOR ELEMENTEN VOOR VERTICALE CIRCULATIE',#240,$,$);
#245=IFCCLASSIFICATIONREFERENCE($,'45','AFWERKING VOOR PLAFONDS',#240,$,$);
#246=IFCCLASSIFICATIONREFERENCE($,'47','BUITENAFWERKING VOOR DAKEN',#240,$,$);
#247=IFCCLASSIFICATIONREFERENCE($,'48','HOGER NIET GENOEMDE ELEMENTEN VAN 4-',#240,$,$);
#248=IFCCLASSIFICATIONREFERENCE($,'49','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 4-',#240,$,$);
#249=IFCCLASSIFICATIONREFERENCE($,'5-','TECHNISCHE UITRUSTING HOOFDZAKELIJK FLU\X2\00CF\X0\DA',#2,$,$);
#250=IFCCLASSIFICATIONREFERENCE($,'5-.-X','UITRUSTING INGEDEELD VOLGENS ENERGIEDRAGER',#249,'WAAR NODIG KUNNEN DE CODES VAN (5-.-X) WORDEN AANGEVULD MET EEN VIERDE CIJFER DAT DE ENERGIEDRAGER BESCHRIJFT. DEZE CLASSIFICATIE IS ALLEEN BEDOELD ALS BRON VOOR EIGEN AAN TE MAKEN CLASSIFICATIES DIE NAAR EEN ENERGIEDRAGER VERWIJZEN.',$);
#251=IFCCLASSIFICATIONREFERENCE($,'5.1','ENERGIEBRON VOOR INSTALLATIES',#250,$,$);
#252=IFCCLASSIFICATIONREFERENCE($,'5-.-1','VASTE BRANDSTOF',#251,$,$);
#253=IFCCLASSIFICATIONREFERENCE($,'5-.-2','VLOEIBARE BRANDSTOF',#251,$,$);
#254=IFCCLASSIFICATIONREFERENCE($,'5-.-3','GASVORMIGE BRANDSTOF',#251,$,$);
#255=IFCCLASSIFICATIONREFERENCE($,'5-.-4','ELEKTRICITEIT',#251,$,$);
#256=IFCCLASSIFICATIONREFERENCE($,'5-.-5','ZONNESTRALING',#251,$,$);
#257=IFCCLASSIFICATIONREFERENCE($,'5-.-6','HOGER NIET GENOEMDE WARMTEBRONNEN',#251,$,$);
#258=IFCCLASSIFICATIONREFERENCE($,'5.2','GE\X2\00CF\X0\NTEGREERDE INSTALLATIES',#250,$,$);
#259=IFCCLASSIFICATIONREFERENCE($,'5.7','UITRUSTING LOKAAL, CENTRAAL, OP NIVEAU VAN DE WIJK, VOOR GROTER GEHEEL',#250,$,$);
#260=IFCCLASSIFICATIONREFERENCE($,'52-','AFVALAFVOER, (UITRUSTING VOOR-)',#249,$,$);
#261=IFCCLASSIFICATIONREFERENCE($,'52.1-','AFVOER VOOR VAST AFVAL',#260,$,$);
#262=IFCCLASSIFICATIONREFERENCE($,'52.13','AFVOER VOOR VAST AFVAL (DROOG VERVOER)',#261,$,$);
#263=IFCCLASSIFICATIONREFERENCE($,'52.14','AFVOER VOOR VAST AFVAL (MANUEEL VERVOER)',#261,$,$);
#264=IFCCLASSIFICATIONREFERENCE($,'52.18','AFVOER VOOR VASTE ATVAL HOGER NIET GENOEMD IN 52.1-\X2\201A\X0\ INBEGREPEN AFVALVERNIETIGING',#261,$,$);
#265=IFCCLASSIFICATIONREFERENCE($,'52.2','AFVOER VOOR GASVORMIGE AFVAL VIA KANAAL',#260,$,$);
#266=IFCCLASSIFICATIONREFERENCE($,'52.3/52.5','VLOEISTOFAFVOER VOLGENS HUN AARD',#260,$,$);
#267=IFCCLASSIFICATIONREFERENCE($,'52.3','AFVALWATERAFVOER',#266,$,$);
#268=IFCCLASSIFICATIONREFERENCE($,'52.4','AFVOER VOOR SPECIALE AFVAL VLOEISTOFFEN',#266,$,$);
#269=IFCCLASSIFICATIONREFERENCE($,'52.5','AFVOER VOOR HEMELWATER',#266,$,$);
#270=IFCCLASSIFICATIONREFERENCE($,'52.6/52.7','VLOEISTOFFENAFVOER VOLGENS POSITIE',#260,$,$);
#271=IFCCLASSIFICATIONREFERENCE($,'52.6','AFVOER BOVEN HET MAAIVELD EN GELEGEN OFWEL IN HET GEBOUW OFWEL TEGEN DE BUITENKANT ERVAN',#270,$,$);
#272=IFCCLASSIFICATIONREFERENCE($,'52.7','AFVOER IN DE GROND EN GELEGEN OFWEL ONDER HET GEBOUW OFWEL TEGEN DE BUITENKANT ERVAN',#270,$,$);
#273=IFCCLASSIFICATIONREFERENCE($,'52.8','HOGER NIET GENOEMDE ELEMENTEN VAN 52-',#260,$,$);
#274=IFCCLASSIFICATIONREFERENCE($,'52.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 52-',#260,$,$);
#275=IFCCLASSIFICATIONREFERENCE($,'53-','VLOEISTOFFENTOEVOER (UITRUSTING VOOR -)',#249,$,$);
#276=IFCCLASSIFICATIONREFERENCE($,'53.1/53.6','WATERTOEVOER',#275,$,$);
#277=IFCCLASSIFICATIONREFERENCE($,'53.1','TOEVOER VAN KOUD WATER',#276,$,$);
#278=IFCCLASSIFICATIONREFERENCE($,'53.3/53.5','TOEVOER VAN WARM WATER',#276,$,$);
#279=IFCCLASSIFICATIONREFERENCE($,'53.3','TOEVOER VAN WARM WATER UIT EEN CENTRALE VERWARMINGSINSTALLATIE',#278,$,$);
#280=IFCCLASSIFICATIONREFERENCE($,'53.5','TOEVOER VAN WARM WATER UIT VERWARMINGSINSTALLATIE BIJ VERBRUIKSPUNT',#278,$,$);
#281=IFCCLASSIFICATIONREFERENCE($,'53.6','TOEVOER VAN BEHANDELD WATER',#276,$,$);
#282=IFCCLASSIFICATIONREFERENCE($,'53.7/53.8 VLOEISTOFFENTOEVOER EXCLUSIEF WATER',$,#276,$,$);
#283=IFCCLASSIFICATIONREFERENCE($,'53.7','TOEVOER VAN VLOEIBARE BRANDSTOFFEN',#282,$,$);
#284=IFCCLASSIFICATIONREFERENCE($,'53.8','VLOEISTOFFENTOEVOER HOGER NIET GENOEMD IN 53-',#282,$,$);
#285=IFCCLASSIFICATIONREFERENCE($,'53.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 53-',#275,$,$);
#286=IFCCLASSIFICATIONREFERENCE($,'55-','KOELING (UITRUSTING VOOR -)',#249,$,$);
#287=IFCCLASSIFICATIONREFERENCE($,'55.1','CENTRALE KOELINSTALLATIE',#286,$,$);
#288=IFCCLASSIFICATIONREFERENCE($,'55.5','LOKALE KOELINSTALLATIE',#286,$,$);
#289=IFCCLASSIFICATIONREFERENCE($,'55.8','HOGER NIET GENOEMDE ELEMENTEN VAN 55-',#286,$,$);
#290=IFCCLASSIFICATIONREFERENCE($,'55.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 55-',#286,$,$);
#291=IFCCLASSIFICATIONREFERENCE($,'54-','GASTOEVOER (UITRUSTING VOOR -)',#286,$,$);
#292=IFCCLASSIFICATIONREFERENCE($,'54.1/54.4','GASTOEVOER',#291,$,$);
#293=IFCCLASSIFICATIONREFERENCE($,'54.1','TOEVOER VAN BRANDBAAR GAS',#292,$,$);
#294=IFCCLASSIFICATIONREFERENCE($,'54.2','TOEVOER VAN STOOM',#292,$,$);
#295=IFCCLASSIFICATIONREFERENCE($,'54.3','TOEVOER VAN LUCHT',#292,$,$);
#296=IFCCLASSIFICATIONREFERENCE($,'54.4','TOEVOER VAN GASSEN, HOGER NIET GENOEMD IN 54.1/54.3',#292,$,$);
#297=IFCCLASSIFICATIONREFERENCE($,'54.5','"TOEVOER" VAN VACU\X2\00DC\X0\M',#291,$,$);
#298=IFCCLASSIFICATIONREFERENCE($,'54.8','HOGER NIET GENOEMDE ELEMENTEN VAN 54-',#291,$,$);
#299=IFCCLASSIFICATIONREFERENCE($,'54.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 54-',#291,$,$);
#300=IFCCLASSIFICATIONREFERENCE($,'56-','VERWARMING (UITRUSTING VOOR -)',#249,$,$);
#301=IFCCLASSIFICATIONREFERENCE($,'56.1-','VERWARMING VOLGENS ENERGIEVORM',#300,'DEZE CODE WORDT GEBRUIKT INDIEN DE INDELING VAN 56.2/56.8 NIET RELEVANT WORDT GEACHT. DEZE CODE WORDT INGEDEELD MET EEN VIERDE CIJLER 56.1?',$);
#302=IFCCLASSIFICATIONREFERENCE($,'56.11','VERWARMING, VASTE BRANDSTOF',#301,$,$);
#303=IFCCLASSIFICATIONREFERENCE($,'56.12','VERWARMING, VLOEIBARE BRANDSTOF',#301,$,$);
#304=IFCCLASSIFICATIONREFERENCE($,'56.13','VERWARMING, GASVORMIGE BRANDSTOF',#301,$,$);
#305=IFCCLASSIFICATIONREFERENCE($,'56.14','VERWARMING, ELEKTRICITEIT',#301,$,$);
#306=IFCCLASSIFICATIONREFERENCE($,'56.15','VERWARMING, ZONNESTRALING',#301,$,$);
#307=IFCCLASSIFICATIONREFERENCE($,'56.16','VERWARMING, HOGER NIET GENOEMDE WARMTEBRONNEN',#301,$,$);
#308=IFCCLASSIFICATIONREFERENCE($,'56.2','WIJKVERWARMING',#300,$,$);
#309=IFCCLASSIFICATIONREFERENCE($,'56.3','CENTRALE VERWARMING',#300,'DEZE CODE WORDT GEBRUIKT INDIEN DE INDELING VOLGENS 56.4 TOT 56.7 NIET RELEVANT WORDT GEACHT.',$);
#310=IFCCLASSIFICATIONREFERENCE($,'56.4/56.7','CENTRALE VERWARMING',#300,$,$);
#311=IFCCLASSIFICATIONREFERENCE($,'56.4','CENTRALE VERWARMING, WARMTEDISTRIBUTIE MET WARM WATER OF STOOM',#310,$,$);
#312=IFCCLASSIFICATIONREFERENCE($,'56.5','CENTRALE VERWARMING, WARMTEDLSTRIBUTIE MET WARME LUCHT',#310,$,$);
#313=IFCCLASSIFICATIONREFERENCE($,'56.6','WARMTEDISTRIBUTIE VIA ELEKTRISCHE LEIDINGEN',#310,$,$);
#314=IFCCLASSIFICATIONREFERENCE($,'56.7','CENTRALE VERWARMING HOGER NIET GENOEMD IN 56.4/56.6',#310,$,$);
#315=IFCCLASSIFICATIONREFERENCE($,'56.8','LOKALE WARMTEPRODUKTIE, HOGER NIET GENOEMDE ELEMENTEN VAN 56-',#300,$,$);
#316=IFCCLASSIFICATIONREFERENCE($,'56.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 56-',#300,$,$);
#317=IFCCLASSIFICATIONREFERENCE($,'57-','LUCHTBEHANDELING EN VENTILATIE (INSTALLATIES VOOR \X2\2014\X0\)',#249,$,$);
#318=IFCCLASSIFICATIONREFERENCE($,'57.1/57.4 INSTALLATIES VOOR LUCHTVERWARMING (EN KOELING) INCLUSIEF BEHANDELING',$,#317,$,$);
#319=IFCCLASSIFICATIONREFERENCE($,'57.1','CENTRALE INSTALLATIE VOOR LUCHTVERWARMING EN KOELING INCLUSIEF BEHANDELING',#318,$,$);
#320=IFCCLASSIFICATIONREFERENCE($,'57.2','CENTRALE INSTALLATIE VOOR LUCHTVERWARMING ZONDER KOELING INCLUSIEF BEHANDELING',#318,$,$);
#321=IFCCLASSIFICATIONREFERENCE($,'57.3','LOKALE INSTALLATIE VOOR LUCHTVERWARMING EN KOELING INCLUSIEF BEHANDELING',#318,$,$);
#322=IFCCLASSIFICATIONREFERENCE($,'57.4','LOKALE INSTALLATIE VOOR LUCHTVERWARMLNG ZONDER KOELING INCLUSIEF BEHANDELING',#318,$,$);
#323=IFCCLASSIFICATIONREFERENCE($,'57.5','INSTALLATIE VOOR LUCHTBEHANDELING ZONDER KOELEN OF VERWARMEN EN INSTALLATIES DIE KOELEN ENVERWARMEN COMBINEREN ZONDER LUCHTBEHANDELING',#317,$,$);
#324=IFCCLASSIFICATIONREFERENCE($,'57.6/57.7','INSTALLATIES VOOR VENTILATIE (NIET BEHANDELDE LUCHT)',#317,$,$);
#325=IFCCLASSIFICATIONREFERENCE($,'57.6','GEDWONGEN CENTRALE VENTILATIE ZONDER BEHANDELING',#324,$,$);
#326=IFCCLASSIFICATIONREFERENCE($,'57.7','GEDWONGEN LOKALE VENTILATIE',#324,$,$);
#327=IFCCLASSIFICATIONREFERENCE($,'57.8','HOGER NIET GENOEMDE ELEMENTEN VAN 57-',#317,$,$);
#328=IFCCLASSIFICATIONREFERENCE($,'57.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 57-',#317,$,$);
#329=IFCCLASSIFICATIONREFERENCE($,'58','HOGER NIET GENOEMDE ELEMENTEN VAN 5-',#249,$,$);
#330=IFCCLASSIFICATIONREFERENCE($,'59','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 5-',#249,$,$);
#331=IFCCLASSIFICATIONREFERENCE($,'6-','TECHNISCHE UITRUSTING HOOFDZAKELIJK ELEKTRISCH',#2,$,$);
#332=IFCCLASSIFICATIONREFERENCE($,'61-','PRIMAIRE ELEKTRICITEITSNET',#331,$,$);
#333=IFCCLASSIFICATIONREFERENCE($,'61.1/61.3','ELEKTRICITEITSVERDELING VOLGENS VERLOOP IN HET GEBOUW',#332,$,$);
#334=IFCCLASSIFICATIONREFERENCE($,'61.1','RADIAALVERDELING',#333,$,$);
#335=IFCCLASSIFICATIONREFERENCE($,'61.2','RINGVERDELING',#333,$,$);
#336=IFCCLASSIFICATIONREFERENCE($,'61.3','STIJGLEIDINGEN',#333,$,$);
#337=IFCCLASSIFICATIONREFERENCE($,'61.6/61.7','ELEKTRICITEITSVERDELING VOLGENS PRODUCENT',#332,$,$);
#338=IFCCLASSIFICATIONREFERENCE($,'61.6','OPENBARE STROOMVOORZIENINGEN',#337,$,$);
#339=IFCCLASSIFICATIONREFERENCE($,'61.7','PRIV\X2\00C9\X0\-ELEKTRICITEITSPRODUKTIE',#337,$,$);
#340=IFCCLASSIFICATIONREFERENCE($,'61.8','HOGER NIET GENOEMDE ELEMENTEN VAN 61-',#332,$,$);
#341=IFCCLASSIFICATIONREFERENCE($,'61.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 61-',#332,$,$);
#342=IFCCLASSIFICATIONREFERENCE($,'62','SECUNDAIRE ELEKTRICITEITSNET',#331,$,$);
#343=IFCCLASSIFICATIONREFERENCE($,'63-','VERLICHTING (INSTALLATIE VOOR -)',#331,$,$);
#344=IFCCLASSIFICATIONREFERENCE($,'63.1','ALGEMENE VERLICHTING VAN RUIMTE',#343,$,$);
#345=IFCCLASSIFICATIONREFERENCE($,'63.2','PLAATSELIJKE VERLICHTING (DEEL VAN EEN RUIMTE)',#343,$,$);
#346=IFCCLASSIFICATIONREFERENCE($,'63.6','VERLICHTING DOOR MIDDEL VAN PROJECTOREN',#343,$,$);
#347=IFCCLASSIFICATIONREFERENCE($,'63.8','HOGER NIET GENOEMDE ELEMENTEN VAN 63',#343,$,$);
#348=IFCCLASSIFICATIONREFERENCE($,'63.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 63',#343,$,$);
#349=IFCCLASSIFICATIONREFERENCE($,'64-','COMMUNICATIE (INSTALLATIE VOOR -)',#331,$,$);
#350=IFCCLASSIFICATIONREFERENCE($,'64.1-','VISUELE EN AUDIO-VISUELE COMMUNICATIE (INSTALLATIES VOOR -)',#349,$,$);
#351=IFCCLASSIFICATIONREFERENCE($,'64.11','VISUELE EN AUDIO-VISUELE COMMUNICATIE (INSTALLATIES VOOR TELEVISIE)',#350,$,$);
#352=IFCCLASSIFICATIONREFERENCE($,'64.12','VISUELE EN AUDIO-VISUELE COMMUNICATIE (INSTALLATIES VOOR FILMPROJECTIE)',#350,$,$);
#353=IFCCLASSIFICATIONREFERENCE($,'64.13','VISUELE EN AUDIO-VISUELE COMMUNICATIE (INSTALLATIES VOOR LICHTSIGNALEN)',#350,$,$);
#354=IFCCLASSIFICATIONREFERENCE($,'64.18','HOGER NIET GENOEMDE ELEMENTEN VAN 64.1-',#350,$,$);
#355=IFCCLASSIFICATIONREFERENCE($,'64.3-','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR -)',#349,$,$);
#356=IFCCLASSIFICATIONREFERENCE($,'64.31','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR RADIO)',#355,$,$);
#357=IFCCLASSIFICATIONREFERENCE($,'64.32','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR TELEFOON EN INTERFOON INCLUSIEF OPENBARE TELEFOONCELLEN IN EEN GEBOUW)',#355,$,$);
#358=IFCCLASSIFICATIONREFERENCE($,'64.33','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR GELUIDSVERDELING)',#355,$,$);
#359=IFCCLASSIFICATIONREFERENCE($,'64.34','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR CENTRALE AFLUISTERINSTALLATIES)',#355,$,$);
#360=IFCCLASSIFICATIONREFERENCE($,'64.35','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR AUDITIEVE CODES)',#355,$,$);
#361=IFCCLASSIFICATIONREFERENCE($,'64.38','AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR HOGER NIET GENOEMDE ELEMENTEN VAN 64.3-)',#355,$,$);
#362=IFCCLASSIFICATIONREFERENCE($,'64.4-','ANDERE DAN VISUELE OF AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR -)',#349,$,$);
#363=IFCCLASSIFICATIONREFERENCE($,'64.41','ANDERE DAN VISUELE OF AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR TELEGRAAF)',#362,$,$);
#364=IFCCLASSIFICATIONREFERENCE($,'64.42','ANDERE DAN VISUELE OF AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR TELEX, TELEPRINT)',#362,$,$);
#365=IFCCLASSIFICATIONREFERENCE($,'64.43','ANDERE DAN VISUELE OF AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR TELECOPIE)',#362,$,$);
#366=IFCCLASSIFICATIONREFERENCE($,'64.44','ANDERE DAN VISUELE OF AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR DATATRANSMISSIE)',#362,$,$);
#367=IFCCLASSIFICATIONREFERENCE($,'64.48','ANDERE DAN VISUELE OF AUDITIEVE COMMUNICATIE (INSTALLATIES VOOR HOGER NIET GENOEMDE ELEMENTEN VAN 64.4-)',#362,$,$);
#368=IFCCLASSIFICATIONREFERENCE($,'64.5','SYNCHRONE KLOKKEN',#349,$,$);
#369=IFCCLASSIFICATIONREFERENCE($,'64.8','HOGER NIET GENOEMDE ELEMENTEN VAN 64-',#349,$,$);
#370=IFCCLASSIFICATIONREFERENCE($,'64.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 64-',#349,$,$);
#371=IFCCLASSIFICATIONREFERENCE($,'66-','TRANSPORTINSTALLATIES',#331,$,$);
#372=IFCCLASSIFICATIONREFERENCE($,'66.1/66.2','INSTALLATIES VOOR VERTICAAL TRANSPORT',#371,$,$);
#373=IFCCLASSIFICATIONREFERENCE($,'66.1','LIFTEN',#372,$,$);
#374=IFCCLASSIFICATIONREFERENCE($,'66.2','INSTALLATIES VOOR VERTLCAAL TRANSPORT ENKEL VOOR GOEDEREN',#372,$,$);
#375=IFCCLASSIFICATIONREFERENCE($,'66.3/66.7','INSTALLATIES VOOR HORIZONTAAL TRANSPORT OF HORIZONTAAL EN VERTICAAL TRANSPORT',#371,$,$);
#376=IFCCLASSIFICATIONREFERENCE($,'66.3','MOBIELE HANGSTEIGERS',#375,$,$);
#377=IFCCLASSIFICATIONREFERENCE($,'66.4','ROLTRAPPEN',#375,$,$);
#378=IFCCLASSIFICATIONREFERENCE($,'66.5','TRANSPORTBANDEN, TRANSPORTPLATEAUS',#375,$,$);
#379=IFCCLASSIFICATIONREFERENCE($,'66.7','TRANSPORTKRANEN',#375,$,$);
#380=IFCCLASSIFICATIONREFERENCE($,'66.8','HOGER NIET GENOEMDE ELEMENTEN VAN 66-',#371,$,$);
#381=IFCCLASSIFICATIONREFERENCE($,'66.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 66-',#371,$,$);
#382=IFCCLASSIFICATIONREFERENCE($,'68-','BEVEILIGINGSINSTALLATIES, CONTROLEINSTALLATIES, HOGER NIET GENOEMDE ELEMENTEN VAN 6-',#331,$,$);
#383=IFCCLASSIFICATIONREFERENCE($,'68.1/68.6','INSTALLATIES VOOR BEVEILIGING EN BESCHERMING',#382,$,$);
#384=IFCCLASSIFICATIONREFERENCE($,'68.1','GE\X2\00CF\X0\NTEGREERDE INBRAAK- EN BRANDBEVEILIGING',#383,$,$);
#385=IFCCLASSIFICATIONREFERENCE($,'68.2','INBRAAKBEVEILIGING',#383,$,$);
#386=IFCCLASSIFICATIONREFERENCE($,'68.5','BRANDBEVEILIGINGSINSTAILATIES',#383,$,$);
#387=IFCCLASSIFICATIONREFERENCE($,'68.52','BRANDMELDINGSINSTALLATIE',#386,$,$);
#388=IFCCLASSIFICATIONREFERENCE($,'68.53/68.56','BRANDBEVEILIGINGS- EN BRANDBESTR\X2\0132\X0\DINGSINSTALLATIE',#386,$,$);
#389=IFCCLASSIFICATIONREFERENCE($,'68.53','BEVEILIGINGSINSTALLATIE BIJ BRAND EXCLUSIEF BRANDBESTRIJDING',#388,$,$);
#390=IFCCLASSIFICATIONREFERENCE($,'68.54','AUTOMATISCHE BRANDBESTR\X2\0132\X0\DINGSINSTALLATIE',#388,$,$);
#391=IFCCLASSIFICATIONREFERENCE($,'68.55','NIET-DRAAGBARE NIET-AUTOMATISCHE BRANDBESTRIJDINGSINSTALLATIE',#388,$,$);
#392=IFCCLASSIFICATIONREFERENCE($,'68.56','DRAAGBARE BRANDBESTRIJDINGSTOESTELLEN',#388,$,$);
#393=IFCCLASSIFICATIONREFERENCE($,'68.58','HOGER NIET GENOEMDE ELEMENTEN VAN 68.5-',#386,$,$);
#394=IFCCLASSIFICATIONREFERENCE($,'68.6','BEVEILLGINGSINSTALLATIES NIET GENOEMD IN 68.1/68.5',#383,$,$);
#395=IFCCLASSIFICATIONREFERENCE($,'68.7','CONTROLE-UITRUSTING (INBEGREPEN STURING EN CONTROLE VAN PROCESSEN)',#382,$,$);
#396=IFCCLASSIFICATIONREFERENCE($,'68.8','HOGER NIET GENOEMDE ELEMENTEN VAN 68-',#382,$,$);
#397=IFCCLASSIFICATIONREFERENCE($,'68.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 68',#382,$,$);
#398=IFCCLASSIFICATIONREFERENCE($,'69','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 6-',#331,$,$);
#399=IFCCLASSIFICATIONREFERENCE($,'7-','VASTE INRICHTING',#2,$,$);
#400=IFCCLASSIFICATIONREFERENCE($,'71-','VASTE INRICHTING VOOR CIRCULATIE',#399,$,$);
#401=IFCCLASSIFICATIONREFERENCE($,'71.1','VASTE AANDUIDINGEN, WEGWIJZERS',#400,$,$);
#402=IFCCLASSIFICATIONREFERENCE($,'71.2','VASTE ELEMENTEN DIE CIRCULATIE AFBAKENEN',#400,$,$);
#403=IFCCLASSIFICATIONREFERENCE($,'71.3','VASTE INRICHTING IN VERBAND MET DE TOEGANG TOT GEBOUWEN',#400,$,$);
#404=IFCCLASSIFICATIONREFERENCE($,'71.8','HOGER NIET GENOEMDE ELEMENTEN VAN 71-',#400,$,$);
#405=IFCCLASSIFICATIONREFERENCE($,'71.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 71-',#400,$,$);
#406=IFCCLASSIFICATIONREFERENCE($,'72-','VASTE INRICHTING VOOR RUSTEN EN WERKEN',#399,$,$);
#407=IFCCLASSIFICATIONREFERENCE($,'72.1','VASTE INRICHTING VOOR SLAPEN',#406,$,$);
#408=IFCCLASSIFICATIONREFERENCE($,'72.2','VASTE INRICHTING VOOR RUSTEN',#406,$,$);
#409=IFCCLASSIFICATIONREFERENCE($,'72.3','VASTE INRICHTING VOOR WERKEN',#406,$,$);
#410=IFCCLASSIFICATIONREFERENCE($,'72.6','VASTE BANKEN, STOELEN, ZETELS EN TAFELS VOOR RUSTEN EN WERKEN',#406,$,$);
#411=IFCCLASSIFICATIONREFERENCE($,'72.8','HOGER NIET GENOEMDE ELEMENTEN VAN 7-',#406,$,$);
#412=IFCCLASSIFICATIONREFERENCE($,'72.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 72-',#406,$,$);
#413=IFCCLASSIFICATIONREFERENCE($,'73-','VASTE INRICHTING VOOR HET BEREIDEN EN GEBRUIKEN VAN MAALTIJDEN',#399,$,$);
#414=IFCCLASSIFICATIONREFERENCE($,'73.1','VASTE WERKBLADEN EN INRICHTING VOOR HET BEREIDEN VAN MAALTIJDEN',#413,$,$);
#415=IFCCLASSIFICATIONREFERENCE($,'73.2','VASTE INRICHTING VOOR WASSEN EN SPOELEN',#413,$,$);
#416=IFCCLASSIFICATIONREFERENCE($,'73.4','VASTE TOESTELLEN VOOR VOEDSELBEREIDING EN KOKEN',#413,$,$);
#417=IFCCLASSIFICATIONREFERENCE($,'73.5','VASTE KEUKENTOESTELLEN VOOR BERGING EN BEWARING',#413,$,$);
#418=IFCCLASSIFICATIONREFERENCE($,'73.7','VASTE INRICHTING VOOR VERBRUIKERS VAN MAALTIJDEN',#413,$,$);
#419=IFCCLASSIFICATIONREFERENCE($,'73.8','HOGER NIET GENOEMDE ELEMENTEN VAN 73-',#413,$,$);
#420=IFCCLASSIFICATIONREFERENCE($,'73.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 73-',#413,$,$);
#421=IFCCLASSIFICATIONREFERENCE($,'74-','SANITAIRE UITRUSTING',#399,$,$);
#422=IFCCLASSIFICATIONREFERENCE($,'74.1','GEHEEL VAN SANITAIRE TOESTELLEN',#421,$,$);
#423=IFCCLASSIFICATIONREFERENCE($,'74.2','TOESTELLEN VOOR LICHAAMSHYGI\X2\00CB\X0\NE',#421,$,$);
#424=IFCCLASSIFICATIONREFERENCE($,'74.2-','TOESTELLEN VOOR LICHAAMSHYGI\X2\00CB\X0\NE',#421,$,$);
#425=IFCCLASSIFICATIONREFERENCE($,'74.22','BADEN',#424,$,$);
#426=IFCCLASSIFICATIONREFERENCE($,'74.23','LAVABO\X2\2019\X0\S, HANDWASBEKKENS',#424,$,$);
#427=IFCCLASSIFICATIONREFERENCE($,'74.24','BIDETS, VOETWASBEKKENS',#424,$,$);
#428=IFCCLASSIFICATIONREFERENCE($,'74.26','DOUCHETOESTELLEN',#424,$,$);
#429=IFCCLASSIFICATIONREFERENCE($,'74.27','SAUNATOESTELLEN',#424,$,$);
#430=IFCCLASSIFICATIONREFERENCE($,'74.28','HOGER NIET GENOEMDE ELEMENTEN VAN 74.2-',#424,$,$);
#431=IFCCLASSIFICATIONREFERENCE($,'74.3','VASTE SANITAIRE TOESTELLEN VOOR HET DROGEN',#421,$,$);
#432=IFCCLASSIFICATIONREFERENCE($,'74.4','TOESTELLEN VOOR AFVOER VAN UITWERPSELEN',#421,$,$);
#433=IFCCLASSIFICATIONREFERENCE($,'74.4-','TOESTELLEN VOOR AFVOER VAN UITWERPSELEN',#421,$,$);
#434=IFCCLASSIFICATIONREFERENCE($,'74.44','WC''s',#433,$,$);
#435=IFCCLASSIFICATIONREFERENCE($,'74.45','URINOIRS',#433,$,$);
#436=IFCCLASSIFICATIONREFERENCE($,'74.48','HOGER NIEL GENOEMDE ELEMENTEN VAN 74.4-',#433,$,$);
#437=IFCCLASSIFICATIONREFERENCE($,'74.7','TOESTELLEN VOOR VERDELING VAN ZEEP, VAN HANDDOEKEN, VAN PAPIER VOOR LICHAAMSHYGI\X2\00CB\X0\NE',#421,$,$);
#438=IFCCLASSIFICATIONREFERENCE($,'74.8','HOGER NIET GENOEMDE ELEMENLEN VAN 74-',#421,$,$);
#439=IFCCLASSIFICATIONREFERENCE($,'74.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 74-',#421,$,$);
#440=IFCCLASSIFICATIONREFERENCE($,'75-','VASTE INRICHTING VOOR ONDERHOUD EN SCHOONMAAK',#399,$,$);
#441=IFCCLASSIFICATIONREFERENCE($,'75.1','VASTE WASINRICHTING, VASTE WASTOBBEN',#440,$,$);
#442=IFCCLASSIFICATIONREFERENCE($,'75.3','DROOGTOESTELLEN',#440,$,$);
#443=IFCCLASSIFICATIONREFERENCE($,'75.4','VASTE STRIJKINRICHTING',#440,$,$);
#444=IFCCLASSIFICATIONREFERENCE($,'75.8','HOGER NIET GENOEMDE ELEMENTEN VAN 75-',#440,$,$);
#445=IFCCLASSIFICATIONREFERENCE($,'75.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 75-',#440,$,$);
#446=IFCCLASSIFICATIONREFERENCE($,'76-','VASTE INRICHTING VOOR BERGING EN AFSCHERMING',#399,$,$);
#447=IFCCLASSIFICATIONREFERENCE($,'76.1/76.6 VASTE INRICHTING VOOR BERGING',$,#446,$,$);
#448=IFCCLASSIFICATIONREFERENCE($,'76.1','VASTE KASTEN SAMENGESTELD UIT MEERDERE ELEMENTEN DIE BESTAAN UIT LADES, REKKEN, AFSLUITBARE KASTDELEN, \X2\2026\X0\',#447,$,$);
#449=IFCCLASSIFICATIONREFERENCE($,'76.2','VASTE AFSLUITBARE KASTEN',#447,$,$);
#450=IFCCLASSIFICATIONREFERENCE($,'76.3','VASTE LADENKASTEN',#447,$,$);
#451=IFCCLASSIFICATIONREFERENCE($,'76.4','VASTE REKKEN',#447,$,$);
#452=IFCCLASSIFICATIONREFERENCE($,'76.5','VASTE HANGSYSTEMEN VOOR BERGING',#447,$,$);
#453=IFCCLASSIFICATIONREFERENCE($,'76.6','KASTEN MET SPECIALE EIGENSCHAPPEN, VASTE INRICHTING VOOR BERGING HOGER NIET GENOEMD IN 76.1/76.5',#447,$,$);
#454=IFCCLASSIFICATIONREFERENCE($,'76.7','SCHERMEN',#446,$,$);
#455=IFCCLASSIFICATIONREFERENCE($,'76.8','HOGER NIET GENOEMDE ELEMENTEN VAN 76-',#446,$,$);
#456=IFCCLASSIFICATIONREFERENCE($,'76.9','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 76-',#446,$,$);
#457=IFCCLASSIFICATIONREFERENCE($,'77','VASTE INRICHTING VOOR SPECIALE ACTIVITEITEN',#399,$,$);
#458=IFCCLASSIFICATIONREFERENCE($,'78-','HOGER NIET GENOEMDE ELEMENTEN VAN 7-',#399,$,$);
#459=IFCCLASSIFICATIONREFERENCE($,'78.3','STOFFERINGEN, INCLUSIEF BEHANGWERKEN',#458,$,$);
#460=IFCCLASSIFICATIONREFERENCE($,'78.6','KUNSTWERKEN',#458,$,$);
#461=IFCCLASSIFICATIONREFERENCE($,'79','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 7-',#399,$,$);
#462=IFCCLASSIFICATIONREFERENCE($,'8-','LOSSE INRICHTING',#2,$,$);
#463=IFCCLASSIFICATIONREFERENCE($,'81','LOSSE INRICHTING VOOR CIRCULATIE',#462,$,$);
#464=IFCCLASSIFICATIONREFERENCE($,'82','LOSSE INRICHTING VOOR RUSTEN EN WERKEN',#462,$,$);
#465=IFCCLASSIFICATIONREFERENCE($,'83','LOSSE INRICHTING VOOR BEREIDEN EN VERBRUIKEN VAN MAALT\X2\0132\X0\DEN',#462,$,$);
#466=IFCCLASSIFICATIONREFERENCE($,'84','LOSSE INRICHTING VOOR SANITAIRE TOEPASSINGEN, VOOR HYGIENE',#462,$,$);
#467=IFCCLASSIFICATIONREFERENCE($,'85','LOSSE INRICHTING VOOR ONDERHOUD EN SCHOONMAAK',#462,$,$);
#468=IFCCLASSIFICATIONREFERENCE($,'86','LOSSE INRICHTING VOOR BERGING EN AFSCHERIMING',#462,$,$);
#469=IFCCLASSIFICATIONREFERENCE($,'87','LOSSE INRICHTING VOOR SPECIALE ACTIVITEITEN',#462,$,$);
#470=IFCCLASSIFICATIONREFERENCE($,'88','HOGER NIET GENOEMDE ELEMENTEN VAN 8-',#462,$,$);
#471=IFCCLASSIFICATIONREFERENCE($,'89','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN 8-',#462,$,$);
#472=IFCCLASSIFICATIONREFERENCE($,'9-','ELEMENTEN BUITEN HET GEBOUW, HOGER NIET GENOEMDE ELEMENTEN',#2,$,$);
#473=IFCCLASSIFICATIONREFERENCE($,'90','ELEMENTEN BUITEN HET GEBOUW',#472,$,$);
#474=IFCCLASSIFICATIONREFERENCE($,'90.1','BODEM VOORBEREID BUITEN HET GEBOUW, INDIEN NIET VERMELD ONDER 1-',#473,$,$);
#475=IFCCLASSIFICATIONREFERENCE($,'90.2','MINDER BELANGRIJKE CONSTRUCTIES BUITEN HET GEBOUW, INDIEN NIET VERMELD BIJ 1-/8-',#473,$,$);
#476=IFCCLASSIFICATIONREFERENCE($,'90.3','AFSLUITINGEN BUITEN HET GEBOUW INDIEN NIET VERMED ONDER 1-/3-',#473,$,$);
#477=IFCCLASSIFICATIONREFERENCE($,'90.4-','AFWERKING VAN BODEMOPPERVLAK BUITEN HET GEBOUW INDIEN NIET VERMELD ONDER 1-',#473,$,$);
#478=IFCCLASSIFICATIONREFERENCE($,'90.41','HARDE BODEMAFWERKING BUITEN HET GEBOUW',#477,$,$);
#479=IFCCLASSIFICATIONREFERENCE($,'90.42','ZACHTE BODEMAFWERKING BUITEN HET GEBOUW',#477,$,$);
#480=IFCCLASSIFICATIONREFERENCE($,'90.43','OPPERVLAKKEN ONDER WATER BUITEN HET GEBOUW',#477,$,$);
#481=IFCCLASSIFICATIONREFERENCE($,'90.48','HOGER NIET GENOEMDE ELEMENTEN VAN 90.4-',#477,$,$);
#482=IFCCLASSIFICATIONREFERENCE($,'90.5-','UITRUSTING HOOFDZAKELIJK FLUIDA BUITEN HET GEBOUW INDIEN NIET VERMED ONDER 5-',#473,$,$);
#483=IFCCLASSIFICATIONREFERENCE($,'90.51','DRAINAGE, AFVALWATERAFVOER BUITEN HET GEBOUW',#482,$,$);
#484=IFCCLASSIFICATIONREFERENCE($,'90.52','UITRUSTING HOOFDZAKELIJK FLUIDA BUITEN HET GEBOUW EXCLUSIEF DRAINAGE EN AFVALWATERAFVOER',#482,$,$);
#485=IFCCLASSIFICATIONREFERENCE($,'90.6','UITRUSTING HOOFDZAKELIJK ELEKTRISCH BUITEN HET GEBOUW INDIEN NIET VERMELD ONDER 6-',#473,$,$);
#486=IFCCLASSIFICATIONREFERENCE($,'90.7','VASTE EN LOSSE INRICHTING BUITEN HET GEBOUW, INDIEN NIET VERMELD ONDER 7-/8-',#473,$,$);
#487=IFCCLASSIFICATIONREFERENCE($,'90.8','HOGER NIET GENOEMDE ELEMENTEN VAN 90',#473,$,$);
#488=IFCCLASSIFICATIONREFERENCE($,'98','ELEMENTEN VAN TABEL1 HOGER NIET GENOEMD IN 0-/97',#472,$,$);
#489=IFCCLASSIFICATIONREFERENCE($,'99','HULPSTUKKEN EN ONDERDELEN VOOR ELEMENTEN VAN TABEL 1',#472,$,$);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,357 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:27',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'BIMTypeCode',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('BIMStockholm','V.1.0','2018-10-12','BIMTypeCode','BIMTypeCode is a simple and logical coding structure of building elements based on the adviser''s design requirements, experience and best practice from complex to manageable BIM projects.','http://bimstockholm.se/EN',$);
#3=IFCRELASSOCIATESCLASSIFICATION('110oGrgYT2UBdqzWMbly1U',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'0','Generiska objekt',#2,$,$);
#5=IFCCLASSIFICATIONREFERENCE($,'01','Generiska objekt A',#4,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'02','Generiska objekt K',#4,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'03','Generiska objekt V',#4,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'04','Generiska objekt W',#4,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'05','Generiska objekt E',#4,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'06','Generiska objekt L',#4,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'07','Generiska objekt P',#4,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'1','Grundl\X2\00E4\X0\ggning',#2,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'10','Terr\X2\00E4\X0\ng',#12,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'101','Bearbetad undergrund',#13,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'102','Bygggrop inkl. f\X2\00F6\X0\rstyvande',#13,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'103','Spontning',#13,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'104','Byggplats',#13,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'11','P\X2\00E5\X0\lar',#12,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'111','Prefabricerade p\X2\00E5\X0\lar',#18,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'112','Platsgjutna p\X2\00E5\X0\lar',#18,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'119','P\X2\00E5\X0\lar \X2\00F6\X0\vrigt',#18,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'12','Fundament',#12,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'121','Grundsulor, kantbalk',#22,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'122','Grundplintar',#22,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'123','Grundplattor',#22,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'124','Murad fundament',#22,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'125','Maskinfundament',#22,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'126','P\X2\00E5\X0\lfundament',#22,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'127','Fundament i terr\X2\00E4\X0\ng',#22,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'13','Platta, byggnad',#12,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'131','Grundplatta',#30,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'18','Byggbasis byggnad, \X2\00F6\X0\vriga',#12,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'181','Kanaler under platta',#32,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'182','Gropar och tr\X2\00E4\X0\sk',#32,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'2','Prim\X2\00E4\X0\ra byggdelar',#2,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'20','Terr\X2\00E4\X0\ng',#35,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'201','Frist\X2\00E5\X0\ende murar',#36,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'202','St\X2\00F6\X0\dmurar',#36,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'203','Kulvertar',#36,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'204','G\X2\00E5\X0\ngbroar, viadukter mm.',#36,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'205','Trappor och ramper i terr\X2\00E4\X0\ng',#36,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'21','Ytterv\X2\00E4\X0\gg',#35,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'211','Prefabricerade element',#42,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'212','Platsgjutna v\X2\00E4\X0\ggar',#42,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'213','Uppmurade v\X2\00E4\X0\ggar',#42,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'214','Uppreglade v\X2\00E4\X0\ggar',#42,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'215','Uppreglade v\X2\00E4\X0\ggsk\X2\00F6\X0\rtar',#42,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'216','Fasadsystem',#42,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'217','V\X2\00E4\X0\ggisolering',#42,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'218','Ljusschakt',#42,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'22','Innerv\X2\00E4\X0\gg',#35,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'221','Prefabricerade element',#51,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'222','Platsgjutna v\X2\00E4\X0\ggar',#51,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'223','Uppmurade v\X2\00E4\X0\ggar',#51,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'224','Uppreglade v\X2\00E4\X0\ggar',#51,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'225','Uppreglade v\X2\00E4\X0\ggsk\X2\00F6\X0\rtar',#51,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'226','Glasv\X2\00E4\X0\ggsystem',#51,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'23','Bj\X2\00E4\X0\lklag',#35,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'231','Prefabricerade bj\X2\00E4\X0\lklag',#58,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'232','Platsgjutna bj\X2\00E4\X0\lklag',#58,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'233','Uppreglade bj\X2\00E4\X0\lklag',#58,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'234','P\X2\00E5\X0\gjutningar',#58,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'239','\X2\00D6\X0\vriga bj\X2\00E4\X0\lklag',#58,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'24','Trappor och ramper',#35,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'241','Prefabricerade trappor',#64,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'242','Platsgjutna trappor',#64,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'243','Sammansatta trappor',#64,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'244','Prefabricerade ramper',#64,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'245','Platsgjutna ramper',#64,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'246','Sammansatta ramper',#64,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'247','Fasta stegar, lejdare och trappsteg',#64,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'25','B\X2\00E4\X0\rande balkar och pelare',#35,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'251','Prefabricerade balkar',#72,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'252','Platsgjutna balkar',#72,$,$);
#75=IFCCLASSIFICATIONREFERENCE($,'253','St\X2\00E5\X0\lbalkar',#72,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'254','\X2\00D6\X0\vriga balkar',#72,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'255','Prefabricerade pelare',#72,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'256','Platsgjutna pelare',#72,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'257','St\X2\00E5\X0\lpelare',#72,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'259','\X2\00D6\X0\vriga pelare',#72,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'26','Balkonger och loftg\X2\00E5\X0\ng, prim\X2\00E4\X0\ra byggdelar',#35,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'261','Prefabricerade balkongplattor och loftg\X2\00E5\X0\ngar',#81,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'262','Platsgjutna balkonplattor och loftg\X2\00E5\X0\ngar',#81,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'263','Sammansatta balkongplattor och loftg\X2\00E5\X0\ngar',#81,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'27','Tak, prim\X2\00E4\X0\ra byggdelar',#35,$,$);
#86=IFCCLASSIFICATIONREFERENCE($,'271','Yttertak',#85,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'272','Takkassetter',#85,$,$);
#88=IFCCLASSIFICATIONREFERENCE($,'273','Varma tak',#85,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'274','Glastakssystem',#85,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'275','Mobila tak',#85,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'276','Sk\X2\00E4\X0\rmtak',#85,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'279','\X2\00D6\X0\vriga takkonstruktioner',#85,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'28','Prim\X2\00E4\X0\ra byggdelar, \X2\00F6\X0\vrigt',#35,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'3','Kompletterande byggdelar',#2,$,$);
#95=IFCCLASSIFICATIONREFERENCE($,'30','Terr\X2\00E4\X0\ng',#94,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'301','Staket, avsk\X2\00E4\X0\rmningar',#95,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'302','Trappor och ramper',#95,$,$);
#98=IFCCLASSIFICATIONREFERENCE($,'303','\X2\00D6\X0\verg\X2\00E5\X0\ng',#95,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'31','Ytterv\X2\00E4\X0\gg',#94,$,$);
#100=IFCCLASSIFICATIONREFERENCE($,'311','D\X2\00F6\X0\rrar',#99,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'312','F\X2\00F6\X0\nster',#99,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'313','D\X2\00F6\X0\rrar, fasadsystem',#99,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'314','F\X2\00F6\X0\nster\X2\00F6\X0\ppningar, fasadsystem',#99,$,$);
#104=IFCCLASSIFICATIONREFERENCE($,'315','Paneler, solavsk\X2\00E4\X0\rmningar, karmprofiler, fasadsystem',#99,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'316','Portar och karuselld\X2\00F6\X0\rrar',#99,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'317','Ytterv\X2\00E4\X0\ggar, sk\X2\00E4\X0\rmv\X2\00E4\X0\ggar',#99,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'319','\X2\00D6\X0\vriga ytterv\X2\00E4\X0\ggskompletteringar',#99,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'32','Innerv\X2\00E4\X0\gg',#94,$,$);
#109=IFCCLASSIFICATIONREFERENCE($,'321','D\X2\00F6\X0\rrar',#108,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'322','F\X2\00F6\X0\nster, luckor',#108,$,$);
#111=IFCCLASSIFICATIONREFERENCE($,'323','D\X2\00F6\X0\rrar, glasv\X2\00E4\X0\ggssystem',#108,$,$);
#112=IFCCLASSIFICATIONREFERENCE($,'324','F\X2\00F6\X0\nster\X2\00F6\X0\ppningar, glasv\X2\00E4\X0\ggssystem',#108,$,$);
#113=IFCCLASSIFICATIONREFERENCE($,'325','F\X2\00F6\X0\nster, solavsk\X2\00E4\X0\rmningar, karmprofiler, glasv\X2\00E4\X0\ggssystem',#108,$,$);
#114=IFCCLASSIFICATIONREFERENCE($,'326','Inv\X2\00E4\X0\ndiga portar och karuselld\X2\00F6\X0\rrar',#108,$,$);
#115=IFCCLASSIFICATIONREFERENCE($,'327','R\X2\00F6\X0\rliga innerv\X2\00E4\X0\ggar',#108,$,$);
#116=IFCCLASSIFICATIONREFERENCE($,'328','Innerv\X2\00E4\X0\ggar, sk\X2\00E4\X0\rmv\X2\00E4\X0\ggar',#108,$,$);
#117=IFCCLASSIFICATIONREFERENCE($,'329','\X2\00D6\X0\vriga innerv\X2\00E4\X0\ggskompletteringar',#108,$,$);
#118=IFCCLASSIFICATIONREFERENCE($,'33','Bj\X2\00E4\X0\lklag',#94,$,$);
#119=IFCCLASSIFICATIONREFERENCE($,'331','Uppbyggda golv',#118,$,$);
#120=IFCCLASSIFICATIONREFERENCE($,'332','Flytande golv',#118,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'333','Luckor, gallerdurk, torkmattor',#118,$,$);
#122=IFCCLASSIFICATIONREFERENCE($,'334','Platsgjutna golv',#118,$,$);
#123=IFCCLASSIFICATIONREFERENCE($,'335','Uppbyggda bel\X2\00E4\X0\ggning',#118,$,$);
#124=IFCCLASSIFICATIONREFERENCE($,'336','Ljudabsorbenter',#118,$,$);
#125=IFCCLASSIFICATIONREFERENCE($,'339','\X2\00D6\X0\vriga bj\X2\00E4\X0\lklagskompletteringar',#118,$,$);
#126=IFCCLASSIFICATIONREFERENCE($,'34','Trappor och ramper',#94,$,$);
#127=IFCCLASSIFICATIONREFERENCE($,'341','Utv\X2\00E4\X0\nidga r\X2\00E4\X0\cke, handledare',#126,$,$);
#128=IFCCLASSIFICATIONREFERENCE($,'342','Inv\X2\00E4\X0\ndiga r\X2\00E4\X0\cke, handledare',#126,$,$);
#129=IFCCLASSIFICATIONREFERENCE($,'343','Gallerdurk, skrapmattor',#126,$,$);
#130=IFCCLASSIFICATIONREFERENCE($,'349','\X2\00D6\X0\vriga trappkompletteringar',#126,$,$);
#131=IFCCLASSIFICATIONREFERENCE($,'35','Undertak',#94,$,$);
#132=IFCCLASSIFICATIONREFERENCE($,'351','Inv\X2\00E4\X0\ndiga nedpendlade undertak',#131,$,$);
#133=IFCCLASSIFICATIONREFERENCE($,'352','Utv\X2\00E4\X0\ndiga nedpendlade undertak',#131,$,$);
#134=IFCCLASSIFICATIONREFERENCE($,'353','Inv\X2\00E4\X0\ndiga diktmonterade undertak',#131,$,$);
#135=IFCCLASSIFICATIONREFERENCE($,'354','Utv\X2\00E4\X0\ndiga diktmonterade undertak',#131,$,$);
#136=IFCCLASSIFICATIONREFERENCE($,'355','Inv\X2\00E4\X0\ndiga undertakssk\X2\00F6\X0\rt',#131,$,$);
#137=IFCCLASSIFICATIONREFERENCE($,'356','Utv\X2\00E4\X0\ndiga undertakssk\X2\00F6\X0\rt',#131,$,$);
#138=IFCCLASSIFICATIONREFERENCE($,'357','Ljudabsorbenter',#131,$,$);
#139=IFCCLASSIFICATIONREFERENCE($,'36','Balkonger',#94,$,$);
#140=IFCCLASSIFICATIONREFERENCE($,'361','Balkongr\X2\00E4\X0\cke',#139,$,$);
#141=IFCCLASSIFICATIONREFERENCE($,'37','Tak',#94,$,$);
#142=IFCCLASSIFICATIONREFERENCE($,'371','Takkupor',#141,$,$);
#143=IFCCLASSIFICATIONREFERENCE($,'372','Takf\X2\00F6\X0\nster, r\X2\00F6\X0\k- och uppstigningsluckor',#141,$,$);
#144=IFCCLASSIFICATIONREFERENCE($,'373','Solavsk\X2\00E4\X0\rmning till takf\X2\00F6\X0\nster',#141,$,$);
#145=IFCCLASSIFICATIONREFERENCE($,'374','Taks\X2\00E4\X0\kerhet',#141,$,$);
#146=IFCCLASSIFICATIONREFERENCE($,'375','Brandt\X2\00E4\X0\tningar',#141,$,$);
#147=IFCCLASSIFICATIONREFERENCE($,'376','T\X2\00E4\X0\ckpl\X2\00E5\X0\tar',#141,$,$);
#148=IFCCLASSIFICATIONREFERENCE($,'377','Bel\X2\00E4\X0\ggningar p\X2\00E5\X0\ f\X2\00E4\X0\rdigt tak',#141,$,$);
#149=IFCCLASSIFICATIONREFERENCE($,'38','Kompletterande byggdelar, \X2\00F6\X0\vrigt',#94,$,$);
#150=IFCCLASSIFICATIONREFERENCE($,'4','Ytbehandling',#2,$,$);
#151=IFCCLASSIFICATIONREFERENCE($,'41','Utv\X2\00E4\X0\ndiga v\X2\00E4\X0\ggar',#150,$,$);
#152=IFCCLASSIFICATIONREFERENCE($,'411','M\X2\00E5\X0\lad',#151,$,$);
#153=IFCCLASSIFICATIONREFERENCE($,'412','Murad',#151,$,$);
#154=IFCCLASSIFICATIONREFERENCE($,'413','Monterad',#151,$,$);
#155=IFCCLASSIFICATIONREFERENCE($,'42','Inv\X2\00E4\X0\ndiga v\X2\00E4\X0\ggar',#150,$,$);
#156=IFCCLASSIFICATIONREFERENCE($,'421','M\X2\00E5\X0\lad',#155,$,$);
#157=IFCCLASSIFICATIONREFERENCE($,'422','Murad',#155,$,$);
#158=IFCCLASSIFICATIONREFERENCE($,'423','Monterad',#155,$,$);
#159=IFCCLASSIFICATIONREFERENCE($,'43','Bj\X2\00E4\X0\lklag och golv',#150,$,$);
#160=IFCCLASSIFICATIONREFERENCE($,'431','M\X2\00E5\X0\lad',#159,$,$);
#161=IFCCLASSIFICATIONREFERENCE($,'432','Murad',#159,$,$);
#162=IFCCLASSIFICATIONREFERENCE($,'433','Monterad',#159,$,$);
#163=IFCCLASSIFICATIONREFERENCE($,'44','Trappor och ramper',#150,$,$);
#164=IFCCLASSIFICATIONREFERENCE($,'441','M\X2\00E5\X0\lad',#163,$,$);
#165=IFCCLASSIFICATIONREFERENCE($,'442','Murad',#163,$,$);
#166=IFCCLASSIFICATIONREFERENCE($,'443','Monterad',#163,$,$);
#167=IFCCLASSIFICATIONREFERENCE($,'45','Undertak',#150,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'451','M\X2\00E5\X0\lad',#167,$,$);
#169=IFCCLASSIFICATIONREFERENCE($,'452','Murad',#167,$,$);
#170=IFCCLASSIFICATIONREFERENCE($,'453','Monterad',#167,$,$);
#171=IFCCLASSIFICATIONREFERENCE($,'46','Balkonger',#150,$,$);
#172=IFCCLASSIFICATIONREFERENCE($,'461','M\X2\00E5\X0\lad',#171,$,$);
#173=IFCCLASSIFICATIONREFERENCE($,'462','Murad',#171,$,$);
#174=IFCCLASSIFICATIONREFERENCE($,'463','Monterad',#171,$,$);
#175=IFCCLASSIFICATIONREFERENCE($,'47','Tak',#150,$,$);
#176=IFCCLASSIFICATIONREFERENCE($,'471','M\X2\00E5\X0\lad',#175,$,$);
#177=IFCCLASSIFICATIONREFERENCE($,'472','Takt\X2\00E4\X0\ckning',#175,$,$);
#178=IFCCLASSIFICATIONREFERENCE($,'48','\X2\00D6\X0\vriga byggnadsdelar, bekl\X2\00E4\X0\dnader',#150,$,$);
#179=IFCCLASSIFICATIONREFERENCE($,'5','VA-, VVS-,\X2\00A0\X0\kyl och proccessmediesystem',#2,$,$);
#180=IFCCLASSIFICATIONREFERENCE($,'50','R\X2\00F6\X0\rsystem i anl\X2\00E4\X0\ggning',#179,$,$);
#181=IFCCLASSIFICATIONREFERENCE($,'501','Ledningar av metall i mark',#180,$,$);
#182=IFCCLASSIFICATIONREFERENCE($,'502','Flexibla ledningar av plast i mark',#180,$,$);
#183=IFCCLASSIFICATIONREFERENCE($,'503','Styva ledningar av plats i mark',#180,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'504','Brunnar i mark',#180,$,$);
#185=IFCCLASSIFICATIONREFERENCE($,'505','Brunnsbeteckningar',#180,$,$);
#186=IFCCLASSIFICATIONREFERENCE($,'506','Avskiljningsbrunnar',#180,$,$);
#187=IFCCLASSIFICATIONREFERENCE($,'507','Anslutningar till VVS',#180,$,$);
#188=IFCCLASSIFICATIONREFERENCE($,'508','Tillbeh\X2\00F6\X0\r',#180,$,$);
#189=IFCCLASSIFICATIONREFERENCE($,'51','Logistik',#179,$,$);
#190=IFCCLASSIFICATIONREFERENCE($,'511','Avfallstransport- och logistiksystem',#189,$,$);
#191=IFCCLASSIFICATIONREFERENCE($,'52','Avloppsvatten och Tappvatten',#179,$,$);
#192=IFCCLASSIFICATIONREFERENCE($,'521','Avlopp och liknande tillbeh\X2\00F6\X0\ver',#191,$,$);
#193=IFCCLASSIFICATIONREFERENCE($,'522','Klosetter och liknande',#191,$,$);
#194=IFCCLASSIFICATIONREFERENCE($,'523','Tv\X2\00E4\X0\ttst\X2\00E4\X0\ll, tv\X2\00E4\X0\ttr\X2\00E4\X0\nnor, diskb\X2\00E4\X0\nkar, tv\X2\00E4\X0\ttb\X2\00E4\X0\nkar, utslagsbackar',#191,$,$);
#195=IFCCLASSIFICATIONREFERENCE($,'524','Kondensvattenanslutning till utrustning',#191,$,$);
#196=IFCCLASSIFICATIONREFERENCE($,'525','Tappvatten- och avloppsanslutningar',#191,$,$);
#197=IFCCLASSIFICATIONREFERENCE($,'526','Tappvatten och avloppsanslutning till teknisk utrustning',#191,$,$);
#198=IFCCLASSIFICATIONREFERENCE($,'527','Tappvatten- och avloppsanslutning till laboratorieutrustningar',#191,$,$);
#199=IFCCLASSIFICATIONREFERENCE($,'528','Badkar och motsvarande',#191,$,$);
#200=IFCCLASSIFICATIONREFERENCE($,'53','Tappvatten- och processvattensystem',#179,$,$);
#201=IFCCLASSIFICATIONREFERENCE($,'531','Mekanisk utrustning',#200,$,$);
#202=IFCCLASSIFICATIONREFERENCE($,'532','Vattenanslutningar',#200,$,$);
#203=IFCCLASSIFICATIONREFERENCE($,'533','Vattenbehandlingssystem',#200,$,$);
#204=IFCCLASSIFICATIONREFERENCE($,'534','Brandsk\X2\00E5\X0\p',#200,$,$);
#205=IFCCLASSIFICATIONREFERENCE($,'54','Lufttyper (gas, lufttryck, vakuum, \X2\00E5\X0\nga)',#179,$,$);
#206=IFCCLASSIFICATIONREFERENCE($,'541','Mekanisk utrustning',#205,$,$);
#207=IFCCLASSIFICATIONREFERENCE($,'542','Luftuttag',#205,$,$);
#208=IFCCLASSIFICATIONREFERENCE($,'543','Luftproduktionssystem',#205,$,$);
#209=IFCCLASSIFICATIONREFERENCE($,'545','Tillbeh\X2\00F6\X0\r',#205,$,$);
#210=IFCCLASSIFICATIONREFERENCE($,'55','Kyla',#179,$,$);
#211=IFCCLASSIFICATIONREFERENCE($,'551','Mekanisk utrustning',#210,$,$);
#212=IFCCLASSIFICATIONREFERENCE($,'552','Kylaggregat',#210,$,$);
#213=IFCCLASSIFICATIONREFERENCE($,'553','Kylproducerande installationer',#210,$,$);
#214=IFCCLASSIFICATIONREFERENCE($,'56','V\X2\00E4\X0\rme',#179,$,$);
#215=IFCCLASSIFICATIONREFERENCE($,'561','Mekanisk utrustning',#214,$,$);
#216=IFCCLASSIFICATIONREFERENCE($,'562','V\X2\00E4\X0\rmeaggregat',#214,$,$);
#217=IFCCLASSIFICATIONREFERENCE($,'563','V\X2\00E4\X0\rmeproducerande installationer',#214,$,$);
#218=IFCCLASSIFICATIONREFERENCE($,'57','Ventilation',#179,$,$);
#219=IFCCLASSIFICATIONREFERENCE($,'571','Kanaler',#218,$,$);
#220=IFCCLASSIFICATIONREFERENCE($,'572','Apparater i luftbehandlingssystem',#218,$,$);
#221=IFCCLASSIFICATIONREFERENCE($,'573','Kanaltillbeh\X2\00F6\X0\r',#218,$,$);
#222=IFCCLASSIFICATIONREFERENCE($,'574','Fl\X2\00E4\X0\ktar',#218,$,$);
#223=IFCCLASSIFICATIONREFERENCE($,'575','Luftdon',#218,$,$);
#224=IFCCLASSIFICATIONREFERENCE($,'576','Anslutningar till utrustningar',#218,$,$);
#225=IFCCLASSIFICATIONREFERENCE($,'577','Takhuvar/kanalgenomf\X2\00F6\X0\ringar',#218,$,$);
#226=IFCCLASSIFICATIONREFERENCE($,'578','Kanalisolering',#218,$,$);
#227=IFCCLASSIFICATIONREFERENCE($,'58','Sprinkler',#179,$,$);
#228=IFCCLASSIFICATIONREFERENCE($,'581','Mekanisk utrustning',#227,$,$);
#229=IFCCLASSIFICATIONREFERENCE($,'582','Sprinklerhuvuden',#227,$,$);
#230=IFCCLASSIFICATIONREFERENCE($,'583','Brandsk\X2\00E5\X0\p',#227,$,$);
#231=IFCCLASSIFICATIONREFERENCE($,'59','Tv\X2\00E4\X0\rg\X2\00E5\X0\ende delar, VVS',#179,$,$);
#232=IFCCLASSIFICATIONREFERENCE($,'591','R\X2\00F6\X0\r av metall',#231,$,$);
#233=IFCCLASSIFICATIONREFERENCE($,'592','Flexibla plastr\X2\00F6\X0\r',#231,$,$);
#234=IFCCLASSIFICATIONREFERENCE($,'593','H\X2\00E5\X0\rda plastr\X2\00F6\X0\r',#231,$,$);
#235=IFCCLASSIFICATIONREFERENCE($,'594','Statiska ventiler',#231,$,$);
#236=IFCCLASSIFICATIONREFERENCE($,'595','Dynamiska ventiler',#231,$,$);
#237=IFCCLASSIFICATIONREFERENCE($,'596','Motordrivna ventiler',#231,$,$);
#238=IFCCLASSIFICATIONREFERENCE($,'597','M\X2\00E4\X0\tare och givare',#231,$,$);
#239=IFCCLASSIFICATIONREFERENCE($,'598','R\X2\00F6\X0\risolering',#231,$,$);
#240=IFCCLASSIFICATIONREFERENCE($,'599','Beslag, konsoler, stativ, h\X2\00E5\X0\l och utsparingar',#231,$,$);
#241=IFCCLASSIFICATIONREFERENCE($,'6','El- och mekaniska an\X2\00E4\X0\ggningar',#2,$,$);
#242=IFCCLASSIFICATIONREFERENCE($,'60','Terr\X2\00E4\X0\ng',#241,$,$);
#243=IFCCLASSIFICATIONREFERENCE($,'601','Ledningar',#242,$,$);
#244=IFCCLASSIFICATIONREFERENCE($,'602','Belysning',#242,$,$);
#245=IFCCLASSIFICATIONREFERENCE($,'603','Installationer i mark',#242,$,$);
#246=IFCCLASSIFICATIONREFERENCE($,'604','Installationer p\X2\00E5\X0\ mark',#242,$,$);
#247=IFCCLASSIFICATIONREFERENCE($,'605','Trafikstyrningar',#242,$,$);
#248=IFCCLASSIFICATIONREFERENCE($,'61','Kanalisation',#241,$,$);
#249=IFCCLASSIFICATIONREFERENCE($,'611','R\X2\00E4\X0\nnor/stegar',#248,$,$);
#250=IFCCLASSIFICATIONREFERENCE($,'612','Kanaler',#248,$,$);
#251=IFCCLASSIFICATIONREFERENCE($,'613','Kabelr\X2\00F6\X0\r',#248,$,$);
#252=IFCCLASSIFICATIONREFERENCE($,'614','Fiberr\X2\00E4\X0\nnor',#248,$,$);
#253=IFCCLASSIFICATIONREFERENCE($,'615','Brand och ljudt\X2\00E4\X0\tningar',#248,$,$);
#254=IFCCLASSIFICATIONREFERENCE($,'616','H\X2\00E5\X0\l och urtagningar',#248,$,$);
#255=IFCCLASSIFICATIONREFERENCE($,'619','\X2\00D6\X0\vrigt',#248,$,$);
#256=IFCCLASSIFICATIONREFERENCE($,'62','H\X2\00F6\X0\gsp\X2\00E4\X0\nning',#241,$,$);
#257=IFCCLASSIFICATIONREFERENCE($,'621','F\X2\00F6\X0\rs\X2\00F6\X0\rjning',#256,$,$);
#258=IFCCLASSIFICATIONREFERENCE($,'622','F\X2\00F6\X0\rdelning',#256,$,$);
#259=IFCCLASSIFICATIONREFERENCE($,'623','Installationer f\X2\00F6\X0\r apparater och maskiner',#256,$,$);
#260=IFCCLASSIFICATIONREFERENCE($,'63','L\X2\00E5\X0\gsp\X2\00E4\X0\nning',#241,$,$);
#261=IFCCLASSIFICATIONREFERENCE($,'631','Extern f\X2\00F6\X0\rs\X2\00F6\X0\rjning',#260,$,$);
#262=IFCCLASSIFICATIONREFERENCE($,'632','F\X2\00F6\X0\rdelning',#260,$,$);
#263=IFCCLASSIFICATIONREFERENCE($,'633','Installationer f\X2\00F6\X0\r apparater och maskiner',#260,$,$);
#264=IFCCLASSIFICATIONREFERENCE($,'634','Termisk anl\X2\00E4\X0\ggning',#260,$,$);
#265=IFCCLASSIFICATIONREFERENCE($,'635','Belysningsinstallationer',#260,$,$);
#266=IFCCLASSIFICATIONREFERENCE($,'636','Belysningsarmaturer',#260,$,$);
#267=IFCCLASSIFICATIONREFERENCE($,'637','Kraftinstallationer',#260,$,$);
#268=IFCCLASSIFICATIONREFERENCE($,'638','F\X2\00F6\X0\rnyelsebar energi - intern f\X2\00F6\X0\rs\X2\00F6\X0\rjning',#260,$,$);
#269=IFCCLASSIFICATIONREFERENCE($,'64','Kommunikation och information',#241,$,$);
#270=IFCCLASSIFICATIONREFERENCE($,'641','Kommunikation',#269,$,$);
#271=IFCCLASSIFICATIONREFERENCE($,'642','Information',#269,$,$);
#272=IFCCLASSIFICATIONREFERENCE($,'643','Audio, video och antenner',#269,$,$);
#273=IFCCLASSIFICATIONREFERENCE($,'644','IT-infrastruktur',#269,$,$);
#274=IFCCLASSIFICATIONREFERENCE($,'65','\X2\00D6\X0\vervakningssystem',#241,$,$);
#275=IFCCLASSIFICATIONREFERENCE($,'651','Inbrottss\X2\00E4\X0\kerhet',#274,$,$);
#276=IFCCLASSIFICATIONREFERENCE($,'652','S\X2\00E4\X0\kerhetssystem',#274,$,$);
#277=IFCCLASSIFICATIONREFERENCE($,'653','Persons\X2\00E4\X0\kerhet',#274,$,$);
#278=IFCCLASSIFICATIONREFERENCE($,'66','Styr',#241,$,$);
#279=IFCCLASSIFICATIONREFERENCE($,'661','Styrsystem',#278,$,$);
#280=IFCCLASSIFICATIONREFERENCE($,'662','\X2\00D6\X0\verordnat styrsystem',#278,$,$);
#281=IFCCLASSIFICATIONREFERENCE($,'67','Sp\X2\00E4\X0\nningsutj\X2\00E4\X0\mning',#241,$,$);
#282=IFCCLASSIFICATIONREFERENCE($,'671','\X2\00D6\X0\versp\X2\00E4\X0\nningsskydd',#281,$,$);
#283=IFCCLASSIFICATIONREFERENCE($,'672','Sp\X2\00E4\X0\nningsutj\X2\00E4\X0\mning',#281,$,$);
#284=IFCCLASSIFICATIONREFERENCE($,'68','Person- och materialtransport',#241,$,$);
#285=IFCCLASSIFICATIONREFERENCE($,'681','Persontransport',#284,$,$);
#286=IFCCLASSIFICATIONREFERENCE($,'682','Gods- och materialtransport',#284,$,$);
#287=IFCCLASSIFICATIONREFERENCE($,'7','Inredning och teknisk utrustning',#2,$,$);
#288=IFCCLASSIFICATIONREFERENCE($,'70','Utrustning, terr\X2\00E4\X0\ng',#287,$,$);
#289=IFCCLASSIFICATIONREFERENCE($,'701','Teknisk utrustning',#288,$,$);
#290=IFCCLASSIFICATIONREFERENCE($,'702','Tavlor, skyltar, sk\X2\00E4\X0\rmar',#288,$,$);
#291=IFCCLASSIFICATIONREFERENCE($,'703','F\X2\00F6\X0\rr\X2\00E5\X0\d, papperskorgar, cykelst\X2\00E4\X0\ll, brevl\X2\00E5\X0\dor',#288,$,$);
#292=IFCCLASSIFICATIONREFERENCE($,'704','Bord',#288,$,$);
#293=IFCCLASSIFICATIONREFERENCE($,'705','Sittm\X2\00F6\X0\bler',#288,$,$);
#294=IFCCLASSIFICATIONREFERENCE($,'706','R\X2\00E4\X0\cken och staket',#288,$,$);
#295=IFCCLASSIFICATIONREFERENCE($,'707','Sport och lekutrustningar',#288,$,$);
#296=IFCCLASSIFICATIONREFERENCE($,'709','\X2\00D6\X0\vrig utrustning i terr\X2\00E4\X0\ng',#288,$,$);
#297=IFCCLASSIFICATIONREFERENCE($,'71','Inredning, fastmonterat',#287,$,$);
#298=IFCCLASSIFICATIONREFERENCE($,'711','Sk\X2\00E5\X0\p',#297,$,$);
#299=IFCCLASSIFICATIONREFERENCE($,'712','Hyllor',#297,$,$);
#300=IFCCLASSIFICATIONREFERENCE($,'713','Sittm\X2\00F6\X0\bler, liggm\X2\00F6\X0\bler',#297,$,$);
#301=IFCCLASSIFICATIONREFERENCE($,'714','Gardiner, persienner',#297,$,$);
#302=IFCCLASSIFICATIONREFERENCE($,'715','Bord, b\X2\00E4\X0\nk',#297,$,$);
#303=IFCCLASSIFICATIONREFERENCE($,'716','Skyltar, tavlor',#297,$,$);
#304=IFCCLASSIFICATIONREFERENCE($,'717','Utsmyckning',#297,$,$);
#305=IFCCLASSIFICATIONREFERENCE($,'719','\X2\00D6\X0\vriga fastmonterade m\X2\00F6\X0\bler',#297,$,$);
#306=IFCCLASSIFICATIONREFERENCE($,'72','Inredning, l\X2\00F6\X0\s',#287,$,$);
#307=IFCCLASSIFICATIONREFERENCE($,'721','Sk\X2\00E5\X0\p',#306,$,$);
#308=IFCCLASSIFICATIONREFERENCE($,'722','Hyllor',#306,$,$);
#309=IFCCLASSIFICATIONREFERENCE($,'723','Sittm\X2\00F6\X0\bler, liggm\X2\00F6\X0\bler',#306,$,$);
#310=IFCCLASSIFICATIONREFERENCE($,'724','Sk\X2\00E4\X0\rmv\X2\00E4\X0\ggar',#306,$,$);
#311=IFCCLASSIFICATIONREFERENCE($,'725','Bord',#306,$,$);
#312=IFCCLASSIFICATIONREFERENCE($,'726','Stativ, hyllplan',#306,$,$);
#313=IFCCLASSIFICATIONREFERENCE($,'727','Mattor',#306,$,$);
#314=IFCCLASSIFICATIONREFERENCE($,'729','\X2\00D6\X0\vrig l\X2\00F6\X0\s m\X2\00F6\X0\blering',#306,$,$);
#315=IFCCLASSIFICATIONREFERENCE($,'73','Utrustning, teknisk-, IT- och AV-utrustning',#287,$,$);
#316=IFCCLASSIFICATIONREFERENCE($,'731','AV-utrustning',#315,$,$);
#317=IFCCLASSIFICATIONREFERENCE($,'732','IT-utrustning',#315,$,$);
#318=IFCCLASSIFICATIONREFERENCE($,'733','Belysning',#315,$,$);
#319=IFCCLASSIFICATIONREFERENCE($,'734','Automater',#315,$,$);
#320=IFCCLASSIFICATIONREFERENCE($,'735','Brandsl\X2\00E4\X0\ckningsutrustning',#315,$,$);
#321=IFCCLASSIFICATIONREFERENCE($,'736','Vitvaror',#315,$,$);
#322=IFCCLASSIFICATIONREFERENCE($,'8','V\X2\00E4\X0\xter och markbel\X2\00E4\X0\ggning',#2,$,$);
#323=IFCCLASSIFICATIONREFERENCE($,'80','Markbel\X2\00E4\X0\ggningar och markmaterial',#322,$,$);
#324=IFCCLASSIFICATIONREFERENCE($,'801','Asfaltbel\X2\00E4\X0\ggningar',#323,$,$);
#325=IFCCLASSIFICATIONREFERENCE($,'802','Platsgjuten betong',#323,$,$);
#326=IFCCLASSIFICATIONREFERENCE($,'803','Gummibel\X2\00E4\X0\ggningar',#323,$,$);
#327=IFCCLASSIFICATIONREFERENCE($,'804','Platt- och stenbel\X2\00E4\X0\ggningar',#323,$,$);
#328=IFCCLASSIFICATIONREFERENCE($,'805','Makadam och grus',#323,$,$);
#329=IFCCLASSIFICATIONREFERENCE($,'806','Kantst\X2\00F6\X0\d',#323,$,$);
#330=IFCCLASSIFICATIONREFERENCE($,'807','Linjemarkeringar och markm\X2\00E5\X0\lningar',#323,$,$);
#331=IFCCLASSIFICATIONREFERENCE($,'808','V\X2\00E4\X0\xtb\X2\00E4\X0\ddar och planteringsk\X2\00E4\X0\rl',#323,$,$);
#332=IFCCLASSIFICATIONREFERENCE($,'809','\X2\00D6\X0\vriga markbel\X2\00E4\X0\ggningar och markmaterial',#323,$,$);
#333=IFCCLASSIFICATIONREFERENCE($,'81','Plantering',#322,$,$);
#334=IFCCLASSIFICATIONREFERENCE($,'811','Tr\X2\00E4\X0\d',#333,$,$);
#335=IFCCLASSIFICATIONREFERENCE($,'812','Buskar och h\X2\00E4\X0\ckar',#333,$,$);
#336=IFCCLASSIFICATIONREFERENCE($,'813','V\X2\00E4\X0\xtjord',#333,$,$);
#337=IFCCLASSIFICATIONREFERENCE($,'814','Markt\X2\00E4\X0\ckare och perenner',#333,$,$);
#338=IFCCLASSIFICATIONREFERENCE($,'815','Gr\X2\00E4\X0\sytor',#333,$,$);
#339=IFCCLASSIFICATIONREFERENCE($,'816','Extensiva gr\X2\00F6\X0\na tak och v\X2\00E4\X0\ggar',#333,$,$);
#340=IFCCLASSIFICATIONREFERENCE($,'817','Intensiva gr\X2\00F6\X0\na tak',#333,$,$);
#341=IFCCLASSIFICATIONREFERENCE($,'819','\X2\00D6\X0\vrig plantering',#333,$,$);
#342=IFCCLASSIFICATIONREFERENCE($,'9','Projektutrustning',#2,$,$);
#343=IFCCLASSIFICATIONREFERENCE($,'91','Projektutrustning A',#342,$,$);
#344=IFCCLASSIFICATIONREFERENCE($,'92','Projektutrustning K',#342,$,$);
#345=IFCCLASSIFICATIONREFERENCE($,'93','Projektutrustning V',#342,$,$);
#346=IFCCLASSIFICATIONREFERENCE($,'94','Projektutrustning W',#342,$,$);
#347=IFCCLASSIFICATIONREFERENCE($,'95','Projektutrustning E',#342,$,$);
#348=IFCCLASSIFICATIONREFERENCE($,'96','Projektutrustning L',#342,$,$);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,684 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2023-08-11T12:28:44',(),(),'IfcOpenShell v0.7.0-fc50bdd3a','IfcOpenShell v0.7.0-fc50bdd3a','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCCLASSIFICATION('Brick','August-11','2023-08-11','Brick','','https://brickschema.org/schema/Brick',());
#2=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Equipment','Equipment','Equipment',#1,'devices that serve all or part of the building and may include electric power, lighting, transportation, or service water heating, including, but not limited to, furnaces, boilers, air conditioners, heat pumps, chillers, water heaters, lamps, luminaires, ballasts, elevators, escalators, or other devices or installations.',$);
#3=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Elevator','Elevator','Elevator',#2,'A device that provides vertical transportation between floors, levels or decks of a building, vessel or other structure',$);
#4=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Gas_Distribution','Gas Distribution','Gas Distribution',#2,'Utilize a gas distribution source to represent how gas is distributed across multiple destinations',$);
#5=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Relay','Relay','Relay',#2,'an electrically operated switch',$);
#6=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Steam_Distribution','Steam Distribution','Steam Distribution',#2,'Utilize a steam distribution source to represent how steam is distributed across multiple destinations',$);
#7=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Distribution','Water Distribution','Water Distribution',#2,'Utilize a water distribution source to represent how water is distributed across multiple destinations (pipes)',$);
#8=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Weather_Station','Weather Station','Weather Station',#2,'A dedicated weather measurement station',$);
#9=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Camera','Camera','Camera',#2,'',$);
#10=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Surveillance_Camera','Surveillance Camera','Surveillance Camera',#9,'',$);
#11=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Furniture','Furniture','Furniture',#2,'Movable objects intended to support various human activities such as seating, eating and sleeping',$);
#12=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Stage_Riser','Stage Riser','Stage Riser',#11,'A low platform in a space or on a stage',$);
#13=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Solar_Thermal_Collector','Solar Thermal Collector','Solar Thermal Collector',#2,'A type of solar panels that converts solar radiation into thermal energy.',$);
#14=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PVT_Panel','PVT Panel','PVT Panel',#13,'A type of solar panels that convert solar radiation into usable thermal and electrical energy',$);
#15=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Motor','Motor','Motor',#2,'A machine in which power is applied to do work by the conversion of various forms of energy into mechanical force and motion.',$);
#16=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Variable_Frequency_Drive','Variable Frequency Drive','Variable Frequency Drive',#15,'Electronic device that varies its output frequency to vary the rotating speed of a motor, given a fixed input frequency. Used with fans or pumps to vary the flow in the system as a function of a maintained pressure.',$);
#17=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#VFD','VFD','VFD',#15,'Electronic device that varies its output frequency to vary the rotating speed of a motor, given a fixed input frequency. Used with fans or pumps to vary the flow in the system as a function of a maintained pressure.',$);
#18=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fan_VFD','Fan VFD','Fan VFD',#17,'Variable-frequency drive for fans',$);
#19=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Wheel_VFD','Heat Wheel VFD','Heat Wheel VFD',#17,'A VFD that drives a heat wheel',$);
#20=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Pump_VFD','Pump VFD','Pump VFD',#17,'Variable-frequency drive for pumps',$);
#21=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Shading_Equipment','Shading Equipment','Shading Equipment',#2,'',$);
#22=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Automatic_Tint_Window','Automatic Tint Window','Automatic Tint Window',#21,'A window with tint control.',$);
#23=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Blind','Blind','Blind',#21,'A window covering.',$);
#24=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Heater','Water Heater','Water Heater',#2,'An apparatus for heating and usually storing hot water',$);
#25=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Collection_Basin_Water_Heater','Collection Basin Water Heater','Collection Basin Water Heater',#24,'Basin heaters prevent cold water basin freeze-up, e.g. in cooling towers, closed circuit fluid coolers, or evaporative condensers',$);
#26=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Boiler','Boiler','Boiler',#24,'A closed, pressure vessel that uses fuel or electricity for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications.',$);
#27=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electric_Boiler','Electric Boiler','Electric Boiler',#26,'A closed, pressure vessel that uses electricity for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications.',$);
#28=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Natural_Gas_Boiler','Natural Gas Boiler','Natural Gas Boiler',#26,'A closed, pressure vessel that uses natural gas for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications.',$);
#29=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condensing_Natural_Gas_Boiler','Condensing Natural Gas Boiler','Condensing Natural Gas Boiler',#28,'A closed, pressure vessel that uses natural gas and heat exchanger that capture and reuse any latent heat for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications.',$);
#30=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Noncondensing_Natural_Gas_Boiler','Noncondensing Natural Gas Boiler','Noncondensing Natural Gas Boiler',#28,'A closed, pressure vessel that uses natural gas with no system to capture latent heat for heating water or other fluids to supply steam or hot water for heating, humidification, or other applications.',$);
#31=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lighting_Equipment','Lighting Equipment','Lighting Equipment',#2,'',$);
#32=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Interface','Interface','Interface',#31,'A device that provides an occupant control over a lighting system',$);
#33=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Touchpanel','Touchpanel','Touchpanel',#32,'A switch used to operate all or part of a lighting installation that uses a touch-based mechanism (typically resistive or capacitive) rather than a mechanical actuator',$);
#34=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Switch','Switch','Switch',#32,'A switch used to operate all or part of a lighting installation',$);
#35=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Dimmer','Dimmer','Dimmer',#34,'A switch providing continuous control over all or part of a lighting installation; typically potentiometer-based',$);
#36=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lighting','Lighting','Lighting',#31,'',$);
#37=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Luminaire','Luminaire','Luminaire',#36,'A complete lighting unit consisting of a lamp or lamps and ballast(s) (when applicable) together with the parts designed to distribute the light, to position and protect the lamps, and to connect the lamps to the power supply.',$);
#38=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Luminaire_Driver','Luminaire Driver','Luminaire Driver',#36,'A power source for a luminaire',$);
#39=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Safety_Equipment','Safety Equipment','Safety Equipment',#2,'',$);
#40=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#First_Aid_Kit','First Aid Kit','First Aid Kit',#39,'',$);
#41=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#AED','AED','AED',#39,'',$);
#42=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Automated_External_Defibrillator','Automated External Defibrillator','Automated External Defibrillator',#39,'',$);
#43=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Emergency_Wash_Station','Emergency Wash Station','Emergency Wash Station',#39,'',$);
#44=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Drench_Hose','Drench Hose','Drench Hose',#43,'',$);
#45=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Eye_Wash_Station','Eye Wash Station','Eye Wash Station',#43,'',$);
#46=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Safety_Shower','Safety Shower','Safety Shower',#43,'',$);
#47=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Security_Equipment','Security Equipment','Security Equipment',#2,'',$);
#48=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Intrusion_Detection_Equipment','Intrusion Detection Equipment','Intrusion Detection Equipment',#47,'',$);
#49=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Access_Control_Equipment','Access Control Equipment','Access Control Equipment',#47,'',$);
#50=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Access_Reader','Access Reader','Access Reader',#49,'',$);
#51=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Intercom_Equipment','Intercom Equipment','Intercom Equipment',#47,'',$);
#52=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Emergency_Phone','Emergency Phone','Emergency Phone',#51,'',$);
#53=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Video_Intercom','Video Intercom','Video Intercom',#51,'',$);
#54=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Video_Surveillance_Equipment','Video Surveillance Equipment','Video Surveillance Equipment',#47,'',$);
#55=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#NVR','NVR','NVR',#54,'',$);
#56=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Network_Video_Recorder','Network Video Recorder','Network Video Recorder',#54,'',$);
#57=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PV_Panel','PV Panel','PV Panel',#2,'An integrated assembly of interconnected photovoltaic cells designed to deliver a selected level of working voltage and current at its output terminals packaged for protection against environment degradation and suited for incorporation in photovoltaic power systems.',$);
#58=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Safety_Equipment','Fire Safety Equipment','Fire Safety Equipment',#2,'',$);
#59=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Alarm','Fire Alarm','Fire Alarm',#58,'',$);
#60=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Alarm_Control_Panel','Fire Alarm Control Panel','Fire Alarm Control Panel',#58,'Fire alarm panel is the controlling component of a fire alarm system.',$);
#61=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Control_Panel','Fire Control Panel','Fire Control Panel',#58,'A panel-mounted device that provides status and control of a fire safety system',$);
#62=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Detector','Heat Detector','Heat Detector',#58,'',$);
#63=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Smoke_Detector','Smoke Detector','Smoke Detector',#58,'',$);
#64=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Manual_Fire_Alarm_Activation_Equipment','Manual Fire Alarm Activation Equipment','Manual Fire Alarm Activation Equipment',#58,'A device for manually activating fire alarm',$);
#65=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Alarm_Manual_Call_Point','Fire Alarm Manual Call Point','Fire Alarm Manual Call Point',#64,'Manual alarm call points are designed for the purpose of raising an alarm manually once verification of a fire or emergency condition exists. by operating the push button or break glass the alarm signal can be raised.',$);
#66=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Alarm_Pull_Station','Fire Alarm Pull Station','Fire Alarm Pull Station',#64,'An active fire protection device (usually wall-mounted) that when activated initiates an alarm on a fire alarm system. In its simplest form the user activates the alarm by pulling the handle down.',$);
#67=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Valve','Valve','Valve',#2,'A device that regulates, directs or controls the flow of a fluid by opening, closing or partially obstructing various passageways',$);
#68=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Gas_Valve','Gas Valve','Gas Valve',#67,'',$);
#69=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Natural_Gas_Seismic_Shutoff_Valve','Natural Gas Seismic Shutoff Valve','Natural Gas Seismic Shutoff Valve',#67,'Valves that automatically shut off your natural gas service when an earthquake of a sufficient magnitude occurs at the location.',$);
#70=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#HVAC_Valve','HVAC Valve','HVAC Valve',#67,'',$);
#71=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Valve','Chilled Water Valve','Chilled Water Valve',#70,'A valve that modulates the flow of chilled water',$);
#72=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_Valve','Condenser Water Valve','Condenser Water Valve',#70,'A valve that modulates the flow of condenser water',$);
#73=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Makeup_Water_Valve','Makeup Water Valve','Makeup Water Valve',#70,'A valve regulating the flow of makeup water into a water holding tank, e.g. a cooling tower, hot water tank',$);
#74=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Valve','Water Valve','Water Valve',#67,'A valve that modulates the flow of water',$);
#75=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Thermostatic_Mixing_Valve','Thermostatic Mixing Valve','Thermostatic Mixing Valve',#74,'A valve that blends hot water with cold water to ensure constant, safe shower and bath outlet temperatures, preventing scalding.',$);
#76=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Valve','Hot Water Valve','Hot Water Valve',#74,'A valve regulating the flow of hot water',$);
#77=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Domestic_Hot_Water_Valve','Domestic Hot Water Valve','Domestic Hot Water Valve',#76,'A valve regulating the flow of domestic hot water',$);
#78=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Preheat_Hot_Water_Valve','Preheat Hot Water Valve','Preheat Hot Water Valve',#76,'',$);
#79=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electrical_Equipment','Electrical Equipment','Electrical Equipment',#2,'',$);
#80=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Breaker_Panel','Breaker Panel','Breaker Panel',#79,'Breaker Panel distributes power into various end-uses.',$);
#81=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Bus_Riser','Bus Riser','Bus Riser',#79,'Bus Risers are commonly fed from a switchgear and rise up through a series of floors to the main power distribution source for each floor.',$);
#82=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Disconnect_Switch','Disconnect Switch','Disconnect Switch',#79,'Building power is most commonly provided by utility company through a master disconnect switch (sometimes called a service disconnect) in the main electrical room of a building. The Utility Company provided master disconnect switch often owns or restricts access to this switch. There can also be other cases where a disconnect is placed into an electrical system to allow service cut-off to a portion of the building.',$);
#83=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Inverter','Inverter','Inverter',#79,'A device that changes direct current into alternating current',$);
#84=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Motor_Control_Center','Motor Control Center','Motor Control Center',#79,'The Motor Control Center is a specialized type of switchgear which provides electrical power to major mechanical systems in the building such as HVAC components.',$);
#85=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PlugStrip','PlugStrip','PlugStrip',#79,'A device containing a block of electrical sockets allowing multiple electrical devices to be powered from a single electrical socket.',$);
#86=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Switchgear','Switchgear','Switchgear',#79,'A main disconnect or service disconnect feeds power to a switchgear, which then distributes power to the rest of the building through smaller amperage-rated disconnects.',$);
#87=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Transformer','Transformer','Transformer',#79,'A Transformer is usually fed by a high-voltage source and then steps down the voltage to a lower-voltage feed for low-voltage application (such as lights). Transformers also can step up voltage, but this generally does not apply to in building distribution.',$);
#88=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Storage','Energy Storage','Energy Storage',#79,'Devices or equipment that store energy in its various forms',$);
#89=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Battery','Battery','Battery',#88,'A container that stores chemical energy that can be converted into electricity and used as a source of power',$);
#90=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Meter','Meter','Meter',#2,'A device that measure usage or consumption of some media --- typically a form energy or power.',$);
#91=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Thermal_Power_Meter','Thermal Power Meter','Thermal Power Meter',#90,'A standalone thermal power meter',$);
#92=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electrical_Meter','Electrical Meter','Electrical Meter',#90,'A meter that measures the usage or consumption of electricity',$);
#93=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Electrical_Meter','Building Electrical Meter','Building Electrical Meter',#92,'A meter that measures the usage or consumption of electricity of a whole building',$);
#94=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Gas_Meter','Gas Meter','Gas Meter',#90,'A meter that measures the usage or consumption of gas',$);
#95=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Gas_Meter','Building Gas Meter','Building Gas Meter',#94,'A meter that measures the usage or consumption of gas of a whole building',$);
#96=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Meter','Water Meter','Water Meter',#90,'A meter that measures the usage or consumption of water',$);
#97=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Water_Meter','Building Water Meter','Building Water Meter',#96,'A meter that measures the usage or consumption of water of a whole building',$);
#98=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Meter','Chilled Water Meter','Chilled Water Meter',#96,'A meter that measures the usage or consumption of chilled water',$);
#99=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Chilled_Water_Meter','Building Chilled Water Meter','Building Chilled Water Meter',#98,'A meter that measures the usage or consumption of chilled water of a whole building',$);
#100=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Meter','Hot Water Meter','Hot Water Meter',#96,'A meter that measures the usage or consumption of hot water',$);
#101=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Hot_Water_Meter','Building Hot Water Meter','Building Hot Water Meter',#100,'A meter that measures the usage or consumption of hot water of a whole building',$);
#102=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Meter','Building Meter','Building Meter',#90,'A meter that measures usage or consumption of some media for a whole building',$);
#103=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#HVAC_Equipment','HVAC Equipment','HVAC Equipment',#2,'See Heating_Ventilation_Air_Conditioning_System',$);
#104=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Compressor','Compressor','Compressor',#103,'(1) device for mechanically increasing the pressure of a gas. (2) often described as being either open, hermetic, or semihermetic to describe how the compressor and motor drive is situated in relation to the gas or vapor being compressed. Types include centrifugal, axial flow, reciprocating, rotary screw, rotary vane, scroll, or diaphragm. 1. device for mechanically increasing the pressure of a gas. 2. specific machine, with or without accessories, for compressing refrigerant vapor.',$);
#105=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser','Condenser','Condenser',#103,'A heat exchanger in which the primary heat transfer vapor changes its state to a liquid phase.',$);
#106=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cooling_Tower','Cooling Tower','Cooling Tower',#103,'A cooling tower is a heat rejection device that rejects waste heat to the atmosphere through the cooling of a water stream to a lower temperature. Cooling towers may either use the evaporation of water to remove process heat and cool the working fluid to near the wet-bulb air temperature or, in the case of closed circuit dry cooling towers, rely solely on air to cool the working fluid to near the dry-bulb air temperature.',$);
#107=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cooling_Valve','Cooling Valve','Cooling Valve',#103,'A valve that controls air temperature by modulating the amount of cold water flowing through a cooling coil',$);
#108=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Dry_Cooler','Dry Cooler','Dry Cooler',#103,'A dry cooler is a fluid cooler that uses air, a relatively dry, non-liquid fluid to accomplish process cooling. (https://submer.com/submer-academy/library/dry-cooler/)',$);
#109=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Economizer','Economizer','Economizer',#103,'Device that, on proper variable sensing, initiates control signals or actions to conserve energy. A control system that reduces the mechanical heating and cooling requirement.',$);
#110=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fume_Hood','Fume Hood','Fume Hood',#103,'A fume-collection device mounted over a work space, table, or shelf and serving to conduct unwanted gases away from the area enclosed.',$);
#111=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Humidifier','Humidifier','Humidifier',#103,'A device that adds moisture to air or other gases',$);
#112=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Space_Heater','Space Heater','Space Heater',#103,'A heater used to warm the air in an enclosed area, such as a room or office',$);
#113=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Steam_Valve','Steam Valve','Steam Valve',#103,'',$);
#114=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Thermostat','Thermostat','Thermostat',#103,'An automatic control device used to maintain temperature at a fixed or adjustable setpoint.',$);
#115=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Handler_Unit','Air Handler Unit','Air Handler Unit',#103,'Assembly consisting of sections containing a fan or fans and other necessary equipment to perform one or more of the following functions: circulating, filtration, heating, cooling, heat recovery, humidifying, dehumidifying, and mixing of air. Is usually connected to an air-distribution system.',$);
#116=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Handling_Unit','Air Handling Unit','Air Handling Unit',#103,'',$);
#117=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CRAH','CRAH','CRAH',#103,'a computer room air handler (CRAH) uses fans, cooling coils and a water-chiller system to remove heat.',$);
#118=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cold_Deck','Cold Deck','Cold Deck',#103,'Part of a dual duct air handling unit that supplies cooling to a building',$);
#119=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Computer_Room_Air_Conditioning','Computer Room Air Conditioning','Computer Room Air Conditioning',#103,'A device that monitors and maintains the temperature, air distribution and humidity in a network room or data center.',$);
#120=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Computer_Room_Air_Handler','Computer Room Air Handler','Computer Room Air Handler',#103,'a computer room air handler (CRAH) uses fans, cooling coils and a water-chiller system to remove heat.',$);
#121=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#HX','HX','HX',#103,'See Heat_Exchanger',$);
#122=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Deck','Hot Deck','Hot Deck',#103,'Part of a dual duct air handling unit that supplies heating to a building',$);
#123=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Isolation_Valve','Isolation Valve','Isolation Valve',#103,'A valve that stops the flow of a fluid, usually for maintenance or safety purposes',$);
#124=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_Isolation_Valve','Condenser Water Isolation Valve','Condenser Water Isolation Valve',#123,'An isolation valve installed in the condenser water loop',$);
#125=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Pump','Pump','Pump',#103,'Machine for imparting energy to a fluid, causing it to do work, drawing a fluid into itself through an entrance port, and forcing the fluid out through an exhaust port.',$);
#126=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Pump','Water Pump','Water Pump',#125,'A pump that performs work on water',$);
#127=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Pump','Chilled Water Pump','Chilled Water Pump',#126,'A pump that performs work on chilled water; typically part of a chilled water system',$);
#128=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_Pump','Condenser Water Pump','Condenser Water Pump',#126,'A pump that is part of a condenser system; the pump circulates condenser water from the chiller back to the cooling tower',$);
#129=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Pump','Hot Water Pump','Hot Water Pump',#126,'A pump that performs work on hot water; typically part of a hot water system',$);
#130=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Bypass_Valve','Bypass Valve','Bypass Valve',#103,'A type of valve installed in a bypass pipeline',$);
#131=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_Bypass_Valve','Condenser Water Bypass Valve','Condenser Water Bypass Valve',#130,'A valve installed in a bypass line of a condenser water loop',$);
#132=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Differential_Pressure_Bypass_Valve','Differential Pressure Bypass Valve','Differential Pressure Bypass Valve',#130,'A 2-way, self contained proportional valve with an integral differential pressure adjustment setting.',$);
#133=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CRAC','CRAC','CRAC',#103,'',$);
#134=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Standby_CRAC','Standby CRAC','Standby CRAC',#133,'A CRAC that is activated as part of a lead/lag operation or when an alarm occurs in a primary unit',$);
#135=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Plenum','Air Plenum','Air Plenum',#103,'A component of the HVAC the receives air from the air handling unit or room to distribute or exhaust to or from the building',$);
#136=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Plenum','Return Air Plenum','Return Air Plenum',#135,'A component of the HVAC the receives air from the room to recirculate or exhaust to or from the building',$);
#137=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Plenum','Discharge Air Plenum','Discharge Air Plenum',#135,'',$);
#138=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Plenum','Supply Air Plenum','Supply Air Plenum',#135,'A component of the HVAC the receives air from the air handling unit to distribute to the building',$);
#139=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Underfloor_Air_Plenum','Underfloor Air Plenum','Underfloor Air Plenum',#138,'An open space between a structural concrete slab and the underside of a raised access floor system that connects to an air handling unit to receive conditioned and/or ventilating air before delivery to the room(s)',$);
#140=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chiller','Chiller','Chiller',#103,'Refrigerating machine used to transfer heat between fluids. Chillers are either direct expansion with a compressor or absorption type.',$);
#141=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Absorption_Chiller','Absorption Chiller','Absorption Chiller',#140,'A chiller that utilizes a thermal or/and chemical process to produce the refrigeration effect necessary to provide chilled water. There is no mechanical compression of the refrigerant taking place within the machine, as occurs within more traditional vapor compression type chillers.',$);
#142=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Centrifugal_Chiller','Centrifugal Chiller','Centrifugal Chiller',#140,'A chiller that uses the vapor compression cycle to chill water. It throws off the heat collected from the chilled water plus the heat from the compressor to a water loop',$);
#143=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heating_Valve','Heating Valve','Heating Valve',#103,'A valve that controls air temperature by modulating the amount of hot water flowing through a heating coil',$);
#144=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Reheat_Valve','Reheat Valve','Reheat Valve',#143,'A valve that controls air temperature by modulating the amount of hot water flowing through a reheat coil',$);
#145=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Heating_Valve','Return Heating Valve','Return Heating Valve',#143,'A valve installed on the return side of a heat exchanger',$);
#146=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Exchanger','Heat Exchanger','Heat Exchanger',#103,'A heat exchanger is a piece of equipment built for efficient heat transfer from one medium to another. The media may be separated by a solid wall to prevent mixing or they may be in direct contact (BEDES)',$);
#147=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Heat_Exchanger','Condenser Heat Exchanger','Condenser Heat Exchanger',#146,'A heat exchanger in which the primary heat transfer vapor changes its state to a liquid phase.',$);
#148=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Evaporative_Heat_Exchanger','Evaporative Heat Exchanger','Evaporative Heat Exchanger',#146,'',$);
#149=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Wheel','Heat Wheel','Heat Wheel',#146,'A rotary heat exchanger positioned within the supply and exhaust air streams of an air handling system in order to recover heat energy',$);
#150=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Coil','Coil','Coil',#146,'Cooling or heating element made of pipe or tube that may or may not be finned and formed into helical or serpentine shape (ASHRAE Dictionary)',$);
#151=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cooling_Coil','Cooling Coil','Cooling Coil',#150,'A cooling element made of pipe or tube that removes heat from equipment, machines or airflows. Typically filled with either refrigerant or cold water.',$);
#152=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Coil','Chilled Water Coil','Chilled Water Coil',#151,'A cooling element made of pipe or tube that removes heat from equipment, machines or airflows that is filled with chilled water.',$);
#153=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Direct_Expansion_Cooling_Coil','Direct Expansion Cooling Coil','Direct Expansion Cooling Coil',#151,'',$);
#154=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heating_Coil','Heating Coil','Heating Coil',#150,'A heating element typically made of pipe, tube or wire that emits heat. Typically filled with hot water, or, in the case of wire, uses electricity.',$);
#155=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Direct_Expansion_Heating_Coil','Direct Expansion Heating Coil','Direct Expansion Heating Coil',#154,'',$);
#156=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Coil','Hot Water Coil','Hot Water Coil',#154,'A heating element typically made of pipe, tube or wire that emits heat that is filled with hot water.',$);
#157=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Filter','Filter','Filter',#103,'Device to remove gases from a mixture of gases or to remove solid material from a fluid',$);
#158=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Final_Filter','Final Filter','Final Filter',#157,'The last, high-efficiency filter installed in a sequence to remove the finest particulates from the substance being filtered',$);
#159=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Intake_Air_Filter','Intake Air Filter','Intake Air Filter',#157,'Filters air intake',$);
#160=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mixed_Air_Filter','Mixed Air Filter','Mixed Air Filter',#157,'A filter that is applied to the mixture of recirculated and outside air',$);
#161=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Pre_Filter','Pre Filter','Pre Filter',#157,'A filter installed in front of a more efficient filter to extend the life of the more expensive higher efficiency filter',$);
#162=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Filter','Return Air Filter','Return Air Filter',#157,'Filters return air',$);
#163=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Damper','Damper','Damper',#103,'Element inserted into an air-distribution system or element of an air-distribution system permitting modification of the air resistance of the system and consequently changing the airflow rate or shutting off the airflow.',$);
#164=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Economizer_Damper','Economizer Damper','Economizer Damper',#163,'A damper that is part of an economizer that is used to module the flow of air',$);
#165=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Damper','Exhaust Damper','Exhaust Damper',#163,'A damper that modulates the flow of exhaust air',$);
#166=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mixed_Damper','Mixed Damper','Mixed Damper',#163,'A damper that modulates the flow of the mixed outside and return air streams',$);
#167=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Damper','Outside Damper','Outside Damper',#163,'A damper that modulates the flow of outside air',$);
#168=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Relief_Damper','Relief Damper','Relief Damper',#163,'A damper that is a component of a Relief Air System, ensuring building doesn''t become over-pressurised',$);
#169=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Damper','Return Damper','Return Damper',#163,'A damper that modulates the flow of return air',$);
#170=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#AHU','AHU','AHU',#103,'Assembly consisting of sections containing a fan or fans and other necessary equipment to perform one or more of the following functions: circulating, filtration, heating, cooling, heat recovery, humidifying, dehumidifying, and mixing of air. Is usually connected to an air-distribution system.',$);
#171=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PAU','PAU','PAU',#170,'A type of AHU, use to pre-treat the outdoor air before feed to AHU',$);
#172=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#DOAS','DOAS','DOAS',#170,'See Dedicated_Outdoor_Air_System_Unit',$);
#173=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Dedicated_Outdoor_Air_System_Unit','Dedicated Outdoor Air System Unit','Dedicated Outdoor Air System Unit',#170,'A device that conditions and delivers 100% outdoor air to its assigned spaces. It decouples air-conditioning of the outdoor air, usually used to provide minimum outdoor air ventilation, from conditioning of the internal loads.',$);
#174=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Dual_Duct_Air_Handling_Unit','Dual Duct Air Handling Unit','Dual Duct Air Handling Unit',#170,'An air handling unit that contains hot and cold decks to supply heating and cooling to a building',$);
#175=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#MAU','MAU','MAU',#170,'See Makeup_Air_Unit',$);
#176=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Makeup_Air_Unit','Makeup Air Unit','Makeup Air Unit',#170,'A device designed to condition ventilation air introduced into a space or to replace air exhausted from a process or general area exhaust. The device may be used to prevent negative pressure within buildings or to reduce airborne contaminants in a space.',$);
#177=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#RTU','RTU','RTU',#170,'see Rooftop_Unit',$);
#178=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Rooftop_Unit','Rooftop Unit','Rooftop Unit',#170,'Packaged air conditioner mounted on a roof, the conditioned air being discharged directly into the rooms below or through a duct system.',$);
#179=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#DDAHU','DDAHU','DDAHU',#170,'See Dual_Duct_Air_Handling_Unit',$);
#180=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fan','Fan','Fan',#103,'Any device with two or more blades or vanes attached to a rotating shaft used to produce an airflow for the purpose of comfort, ventilation, exhaust, heating, cooling, or any other gaseous transport.',$);
#181=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Booster_Fan','Booster Fan','Booster Fan',#180,'Fan activated to increase airflow beyond what is provided by the default configuration',$);
#182=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ceiling_Fan','Ceiling Fan','Ceiling Fan',#180,'A fan installed on the ceiling of a room for the purpose of air circulation',$);
#183=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cooling_Tower_Fan','Cooling Tower Fan','Cooling Tower Fan',#180,'A fan that pulls air through a cooling tower and across the louvers where the water falls to aid in heat exchange by the process of evaporation',$);
#184=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Fan','Exhaust Fan','Exhaust Fan',#180,'Fan moving exhaust air -- air that must be removed from a space due to contaminants',$);
#185=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Fan','Outside Fan','Outside Fan',#180,'Fan moving outside air; air that is supplied into the building from the outdoors',$);
#186=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Relief_Fan','Relief Fan','Relief Fan',#180,'A fan that is a component of a Relief Air System, ensuring building doesn''t become over-pressurised',$);
#187=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Fan','Return Fan','Return Fan',#180,'Fan moving return air -- air that is circulated from the building back into the HVAC system',$);
#188=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Standby_Fan','Standby Fan','Standby Fan',#180,'Fan that is activated as part of a lead/lag operation or when a primary fan raises an alarm',$);
#189=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Fan','Supply Fan','Supply Fan',#180,'Fan moving supply air -- air that is supplied from the HVAC system into the building',$);
#190=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Transfer_Fan','Transfer Fan','Transfer Fan',#180,'A fan that transfers air from a space to another space.',$);
#191=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Fan','Discharge Fan','Discharge Fan',#180,'Fan moving air discharged from HVAC vents',$);
#192=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Terminal_Unit','Terminal Unit','Terminal Unit',#103,'A device that regulates the volumetric flow rate and/or the temperature of the controlled medium.',$);
#193=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Constant_Air_Volume_Box','Constant Air Volume Box','Constant Air Volume Box',#192,'A terminal unit for which supply air flow rate is constant and the supply air temperature is varied to meet thermal load',$);
#194=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fan_Coil_Unit','Fan Coil Unit','Fan Coil Unit',#192,'Terminal device consisting of a heating and/or cooling heat exchanger or ''coil'' and fan that is used to control the temperature in the space where it is installed',$);
#195=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Induction_Unit','Induction Unit','Induction Unit',#192,'A device with an primary air connection and integrated coil and condensate pan that performs sensible and latent cooling of a space. Essentially an Active Chilled Beam with a built in condensate pan.',$);
#196=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CAV','CAV','CAV',#192,'',$);
#197=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#FCU','FCU','FCU',#192,'See Fan_Coil_Unit',$);
#198=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#VAV','VAV','VAV',#192,'See Variable_Air_Volume_Box',$);
#199=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Beam','Chilled Beam','Chilled Beam',#192,'A device with an integrated coil that performs sensible heating of a space via circulation of room air. Chilled Beams are not designed to perform latent cooling; see Induction Units. Despite their name, Chilled Beams may perform heating or cooling of a space depending on their configuration.',$);
#200=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Active_Chilled_Beam','Active Chilled Beam','Active Chilled Beam',#199,'A Chilled Beam with an integral primary air connection that induces air flow through the device.',$);
#201=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Passive_Chilled_Beam','Passive Chilled Beam','Passive Chilled Beam',#199,'A chilled beam that does not have an integral air supply and instead relies on natural convection to draw air through the device.',$);
#202=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Variable_Air_Volume_Box','Variable Air Volume Box','Variable Air Volume Box',#192,'A device that regulates the volume and temperature of air delivered to a zone by opening or closing a damper',$);
#203=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Variable_Air_Volume_Box_With_Reheat','Variable Air Volume Box With Reheat','Variable Air Volume Box With Reheat',#202,'A VAV box with a reheat coil mounted on the discharge end of the unit that can heat the air delivered to a zone',$);
#204=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#RVAV','RVAV','RVAV',#202,'See Variable_Air_Volume_Box_With_Reheat',$);
#205=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Diffuser','Air Diffuser','Air Diffuser',#192,'A device that is a component of the air distribution system that controls the delivery of conditioned and/or ventilating air into a room',$);
#206=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Displacement_Flow_Air_Diffuser','Displacement Flow Air Diffuser','Displacement Flow Air Diffuser',#205,'An air diffuser that is designed for low discharge air speeds to minimize turbulence and induction of room air. This diffuser is used with displacement ventilation systems.',$);
#207=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Jet_Nozzle_Air_Diffuser','Jet Nozzle Air Diffuser','Jet Nozzle Air Diffuser',#205,'An air diffuser that is designed to produce high velocity discharge air stream to throw the air over a large distance or target the air stream to a localize area',$);
#208=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Laminar_Flow_Air_Diffuser','Laminar Flow Air Diffuser','Laminar Flow Air Diffuser',#205,'An air diffuser that is designed for low discharge air speeds to provide uniform and unidirectional air pattern which minimizes room air entrainment',$);
#209=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radiator','Radiator','Radiator',#192,'Heat exchangers designed to transfer thermal energy from one medium to another',$);
#210=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electric_Radiator','Electric Radiator','Electric Radiator',#209,'Electric heating device',$);
#211=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electric_Baseboard_Radiator','Electric Baseboard Radiator','Electric Baseboard Radiator',#210,'Electric heating device located at or near the floor',$);
#212=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Radiator','Hot Water Radiator','Hot Water Radiator',#209,'Radiator that uses hot water',$);
#213=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Baseboard_Radiator','Hot Water Baseboard Radiator','Hot Water Baseboard Radiator',#212,'Hydronic heating device located at or near the floor',$);
#214=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Steam_Radiator','Steam Radiator','Steam Radiator',#209,'Radiator that uses steam',$);
#215=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Steam_Baseboard_Radiator','Steam Baseboard Radiator','Steam Baseboard Radiator',#214,'Steam heating device located at or near the floor',$);
#216=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Baseboard_Radiator','Baseboard Radiator','Baseboard Radiator',#209,'Steam, hydronic, or electric heating device located at or near the floor.',$);
#217=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radiant_Panel','Radiant Panel','Radiant Panel',#192,'A temperature-controlled surface that provides fifty percent (50%) or more of the design heat transfer by thermal radiation.',$);
#218=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Embedded_Surface_System_Panel','Embedded Surface System Panel','Embedded Surface System Panel',#217,'Radiant panel heating and cooling system where the energy heat source or sink is embedded in a radiant layer which is thermally insulated from the building structure.',$);
#219=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radiant_Ceiling_Panel','Radiant Ceiling Panel','Radiant Ceiling Panel',#217,'Radiant panel heating and cooling system that are usually made from metal and suspended under the ceiling or insulated from the building structure.',$);
#220=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Thermally_Activated_Building_System_Panel','Thermally Activated Building System Panel','Thermally Activated Building System Panel',#217,'Radiant panel heating and cooling system where the energy heat source or sink is embedded in the building structure such as in slabs and walls.',$);
#221=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#ESS_Panel','ESS Panel','ESS Panel',#217,'See Embedded_Surface_System_Panel',$);
#222=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#RC_Panel','RC Panel','RC Panel',#217,'See Radiant_Ceiling_Panel',$);
#223=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#TABS_Panel','TABS Panel','TABS Panel',#217,'See Thermally_Activated_Building_System_Panel',$);
#224=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Location','Location','Location',#1,'',$);
#225=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside','Outside','Outside',#224,'',$);
#226=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Region','Region','Region',#224,'A unit of geographic space, usually contigious or somehow related to a geopolitical feature',$);
#227=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Storey','Storey','Storey',#224,'',$);
#228=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Wing','Wing','Wing',#224,'A wing is part of a building \X2\2013\X0\ or any feature of a building \X2\2013\X0\ that is subordinate to the main, central structure.',$);
#229=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Site','Site','Site',#224,'A geographic region containing 0 or more buildings. Typically used as the encapsulating location for a collection of Brick entities through the hasPart/isPartOf relationships',$);
#230=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outdoor_Area','Outdoor Area','Outdoor Area',#224,'A class of spaces that exist outside of a building',$);
#231=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Bench_Space','Bench Space','Bench Space',#230,'For areas of play in a stadium, the area for partcipants and referees by the side of the field',$);
#232=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Field_Of_Play','Field Of Play','Field Of Play',#230,'The area of a stadium where athletic events occur, e.g. the soccer pitch',$);
#233=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Information_Area','Information Area','Information Area',#230,'An information booth or kiosk where visitors would look for information',$);
#234=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Floor','Floor','Floor',#224,'A level, typically representing a horizontal aggregation of spaces that are vertically bound. (referring to IFC)',$);
#235=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Basement','Basement','Basement',#234,'The floor of a building which is partly or entirely below ground level.',$);
#236=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Parking_Level','Parking Level','Parking Level',#234,'A floor of a parking structure',$);
#237=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Rooftop','Rooftop','Rooftop',#234,'',$);
#238=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building','Building','Building',#224,'An independent unit of the built environment with a characteristic spatial structure, intended to serve at least one function or user activity [ISO 12006-2:2013]',$);
#239=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Parking_Structure','Parking Structure','Parking Structure',#238,'A building or part of a building devoted to vehicle parking',$);
#240=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Zone','Zone','Zone',#224,'(1) a separately controlled heated or cooled space. (2) one occupied space or several occupied spaces with similar occupancy category, occupant density, zone air distribution effectiveness, and zone primary airflow per unit area. (3) space or group of spaces within a building for which the heating, cooling, or lighting requirements are sufficiently similar that desired conditions can be maintained throughout by a single controlling device.',$);
#241=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Zone','Energy Zone','Energy Zone',#240,'A space or group of spaces that are managed or monitored as one unit for energy purposes',$);
#242=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Zone','Fire Zone','Fire Zone',#240,'combustion chamber in a furnace or boiler.',$);
#243=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#HVAC_Zone','HVAC Zone','HVAC Zone',#240,'a space or group of spaces, within a building with heating, cooling, and ventilating requirements, that are sufficiently similar so that desired conditions (e.g., temperature) can be maintained throughout using a single sensor (e.g., thermostat or temperature sensor).',$);
#244=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lighting_Zone','Lighting Zone','Lighting Zone',#240,'',$);
#245=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Space','Space','Space',#224,'A part of the physical world or a virtual world whose 3D spatial extent is bounded actually or theoretically, and provides for certain functions within the zone it is contained in.',$);
#246=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entrance','Entrance','Entrance',#245,'The location and space of a building where people enter and exit the building',$);
#247=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Gatehouse','Gatehouse','Gatehouse',#245,'The standalone building used to manage the entrance to a campus or building grounds',$);
#248=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Media_Hot_Desk','Media Hot Desk','Media Hot Desk',#245,'A non-enclosed space used by members of the media temporarily to cover an event while they are present at a venue',$);
#249=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Parking_Space','Parking Space','Parking Space',#245,'An area large enough to park an individual vehicle',$);
#250=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ticketing_Booth','Ticketing Booth','Ticketing Booth',#245,'A room or space used to sell or distribute tickets to events at a venue',$);
#251=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Tunnel','Tunnel','Tunnel',#245,'An enclosed space that connects buildings. Often underground',$);
#252=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Tank','Water Tank','Water Tank',#245,'A space used to hold water',$);
#253=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Vertical_Space','Vertical Space','Vertical Space',#245,'A class of spaces used to connect multiple floors or levels..',$);
#254=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Riser','Riser','Riser',#253,'A vertical shaft indented for installing building infrastructure e.g., electrical wire, network communication wire, plumbing, etc',$);
#255=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Staircase','Staircase','Staircase',#253,'A vertical space containing stairs',$);
#256=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Elevator_Shaft','Elevator Shaft','Elevator Shaft',#253,'The vertical space in which an elevator ascends and descends',$);
#257=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Elevator_Space','Elevator Space','Elevator Space',#253,'The vertical space in whcih an elevator ascends and descends',$);
#258=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Common_Space','Common Space','Common Space',#245,'A class of spaces that are used by multiple people at the same time',$);
#259=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Atrium','Atrium','Atrium',#258,'a large open-air or skylight covered space surrounded by a building.',$);
#260=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Auditorium','Auditorium','Auditorium',#258,'A space for performances or larger gatherings',$);
#261=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cafeteria','Cafeteria','Cafeteria',#258,'A space to serve food and beverages',$);
#262=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hallway','Hallway','Hallway',#258,'A common space, used to connect other parts of a building',$);
#263=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lounge','Lounge','Lounge',#258,'A room for lesiure activities or relaxing',$);
#264=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Majlis','Majlis','Majlis',#263,'In Arab countries, an Majlis is a private lounge where visitors are recieved and entertained',$);
#265=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lobby','Lobby','Lobby',#258,'A space just after the entrance to a building or other space of a building, where visitors can wait',$);
#266=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Employee_Entrance_Lobby','Employee Entrance Lobby','Employee Entrance Lobby',#265,'An open space near an entrance that is typicaly only used for employees',$);
#267=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Visitor_Lobby','Visitor Lobby','Visitor Lobby',#265,'A lobby for visitors to the building. Sometimes used to distinguish from an employee entrance looby',$);
#268=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Room','Room','Room',#245,'Base class for all more specific room types.',$);
#269=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ablutions_Room','Ablutions Room','Ablutions Room',#268,'A room for performing cleansing rituals before prayer',$);
#270=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Conference_Room','Conference Room','Conference Room',#268,'A space dedicated in which to hold a meetings',$);
#271=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Control_Room','Control Room','Control Room',#268,'A space from which operations are managed',$);
#272=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Copy_Room','Copy Room','Copy Room',#268,'A room set aside for common office equipment, including printers and copiers',$);
#273=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exercise_Room','Exercise Room','Exercise Room',#268,'An indoor room used for exercise and physical activities',$);
#274=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hospitality_Box','Hospitality Box','Hospitality Box',#268,'A room at a stadium, usually overlooking the field of play, that is physical separate from the other seating at the venue',$);
#275=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Janitor_Room','Janitor Room','Janitor Room',#268,'A room set aside for the storage of cleaning equipment and supplies',$);
#276=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Library','Library','Library',#268,'A place for the storage and/or consumption of physical media, e.g. books, periodicals, and DVDs/CDs',$);
#277=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Loading_Dock','Loading Dock','Loading Dock',#268,'A part of a facility where delivery trucks can load and unload. Usually partially enclosed with specific traffic lanes leading to the dock',$);
#278=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mail_Room','Mail Room','Mail Room',#268,'A room where mail is recieved and sorted for distribution to the rest of the building',$);
#279=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Massage_Room','Massage Room','Massage Room',#268,'Usually adjunct to an athletic facility, a private/semi-private space where massages are performed',$);
#280=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Office_Kitchen','Office Kitchen','Office Kitchen',#268,'A common space, usually near or in a breakroom, where minor food preperation occurs',$);
#281=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Prayer_Room','Prayer Room','Prayer Room',#268,'A room set aside for prayer',$);
#282=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Reception','Reception','Reception',#268,'A space, usually in a lobby, where visitors to a building or space can go to after arriving at a building and inform building staff that they have arrived',$);
#283=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Retail_Room','Retail Room','Retail Room',#268,'A space set aside for retail in a larger establishment, e.g. a gift shop in a hospital',$);
#284=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Server_Room','Server Room','Server Room',#268,'',$);
#285=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Shower','Shower','Shower',#268,'A space containing showers, usually adjacent to an athletic or execise area',$);
#286=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Sports_Service_Room','Sports Service Room','Sports Service Room',#268,'A class of spaces used in the support of sports',$);
#287=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Wardrobe','Wardrobe','Wardrobe',#268,'Storage for clothing, costumes, or uniforms',$);
#288=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Workshop','Workshop','Workshop',#268,'A space used to house equipment that can be used to repair or fabricate things',$);
#289=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Break_Room','Break Room','Break Room',#268,'A space for people to relax while not working',$);
#290=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Breakroom','Breakroom','Breakroom',#268,'A space for people to relax while not working',$);
#291=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Food_Service_Room','Food Service Room','Food Service Room',#268,'A space used in the production, storage, serving, or cleanup of food and beverages',$);
#292=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Concession','Concession','Concession',#291,'A space to sell food and beverages. Usually embedded in a larger space and does not include a space where people consume their purchases',$);
#293=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Medical_Room','Medical Room','Medical Room',#268,'A class of rooms used for medical purposes',$);
#294=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#First_Aid_Room','First Aid Room','First Aid Room',#293,'A room for a person with minor injuries can be treated or temporarily treated until transferred to a more advanced medical facility',$);
#295=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Rest_Room','Rest Room','Rest Room',#268,'A room that provides toilets and washbowls. Alternate spelling of Restroom',$);
#296=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Restroom','Restroom','Restroom',#268,'A room that provides toilets and washbowls.',$);
#297=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Security_Service_Room','Security Service Room','Security Service Room',#268,'A class of spaces used by the security staff of a facility',$);
#298=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Detention_Room','Detention Room','Detention Room',#297,'A space for the temporary involuntary confinement of people',$);
#299=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Storage_Room','Storage Room','Storage Room',#268,'A class of spaces used for storage',$);
#300=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hazardous_Materials_Storage','Hazardous Materials Storage','Hazardous Materials Storage',#299,'A storage space set aside (usually with restricted access) for the storage of materials that can be hazardous to living beings or the environment',$);
#301=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Waste_Storage','Waste Storage','Waste Storage',#299,'A room used for storing waste such as trash or recycling',$);
#302=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Media_Room','Media Room','Media Room',#268,'A class of spaces related to the creation of media',$);
#303=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Broadcast_Room','Broadcast Room','Broadcast Room',#302,'A space to organize and manage a broadcast. Separate from studio',$);
#304=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Media_Production_Room','Media Production Room','Media Production Room',#302,'A enclosed space used by media professionals for the production of media',$);
#305=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Studio','Studio','Studio',#302,'A room used for the production or media, usually with either a specialized set or a specialized sound booth for recording',$);
#306=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Office','Office','Office',#268,'A class of rooms dedicated for work or study',$);
#307=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cubicle','Cubicle','Cubicle',#306,'A smaller space set aside for an individual, but not with a door and without full-height walls',$);
#308=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Open_Office','Open Office','Open Office',#306,'An open space used for work or study by mulitple people. Usuaully subdivided into cubicles or desks',$);
#309=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Enclosed_Office','Enclosed Office','Enclosed Office',#306,'A space for individuals to work with walls and a door',$);
#310=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Private_Office','Private Office','Private Office',#309,'An office devoted to a single individual, with walls and door',$);
#311=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Shared_Office','Shared Office','Shared Office',#309,'An office used by multiple people',$);
#312=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Team_Room','Team Room','Team Room',#309,'An office used by multiple team members for specific work tasks. Distinct from Conference Room',$);
#313=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Service_Room','Service Room','Service Room',#268,'A class of spaces related to the operations of building subsystems, e.g. HVAC, electrical, IT, plumbing, etc',$);
#314=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Plumbing_Room','Plumbing Room','Plumbing Room',#313,'A service room devoted to the operation and routing of water in a building. Usually distinct from the HVAC subsystems.',$);
#315=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mechanical_Room','Mechanical Room','Mechanical Room',#313,'A class of service rooms where mechanical equipment (HVAC) operates',$);
#316=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Pump_Room','Pump Room','Pump Room',#315,'A mechanical room that houses pumps',$);
#317=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electrical_Room','Electrical Room','Electrical Room',#313,'A class of service rooms that house electrical equipment for a building',$);
#318=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Battery_Room','Battery Room','Battery Room',#317,'A room used to hold batteries for backup power',$);
#319=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Generator_Room','Generator Room','Generator Room',#317,'A room for electrical equipment, specifically electrical generators.',$);
#320=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Transformer_Room','Transformer Room','Transformer Room',#317,'An electrical room where electricity enters and is transformed to different voltages and currents by the equipment contained in the room',$);
#321=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Laboratory','Laboratory','Laboratory',#268,'facility acceptable to the local, national, or international recognized authority having jurisdiction and which provides uniform testing and examination procedures and standards for meeting design, manufacturing, and factory testing requirements.',$);
#322=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cold_Box','Cold Box','Cold Box',#321,'in a gas separation unit, the insulated section that contains the low-temperature heat exchangers and distillation columns.',$);
#323=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Environment_Box','Environment Box','Environment Box',#321,'(also known as climatic chamber), enclosed space designed to create a particular environment.',$);
#324=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Freezer','Freezer','Freezer',#321,'cold chamber usually kept at a temperature of 22\X2\00B0\X0\F to 31\X2\00B0\X0\F (\X2\2013\X0\5\X2\00B0\X0\C to \X2\2013\X0\1\X2\00B0\X0\C), with high-volume air circulation.',$);
#325=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Box','Hot Box','Hot Box',#321,'hot air chamber forming part of an air handler.',$);
#326=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Telecom_Room','Telecom Room','Telecom Room',#268,'A class of spaces used to support telecommuncations and IT equipment',$);
#327=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Equipment_Room','Equipment Room','Equipment Room',#326,'A telecommunications room where equipment that serves the building is stored',$);
#328=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Switch_Room','Switch Room','Switch Room',#326,'A telecommuncations room housing network switches',$);
#329=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#TETRA_Room','TETRA Room','TETRA Room',#326,'A room used for local two-way radio networks, e.g. the portable radios carried by facilities staff',$);
#330=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Distribution_Frame','Distribution Frame','Distribution Frame',#326,'A class of spaces where the cables carrying signals meet and connect, e.g. a wiring closet or a broadcast downlink room',$);
#331=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#IDF','IDF','IDF',#330,'An room for an intermediate distribution frame, where cables carrying signals from the main distrubtion frame terminate and then feed out to endpoints',$);
#332=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#MDF','MDF','MDF',#330,'A room for the Main Distribution Frame, the central place of a building where cables carrying signals meet and connect to the outside world',$);
#333=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Collection','Collection','Collection',#1,'',$);
#334=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Portfolio','Portfolio','Portfolio',#333,'A collection of sites',$);
#335=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Photovoltaic_Array','Photovoltaic Array','Photovoltaic Array',#333,'A collection of photovoltaic panels',$);
#336=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PV_Array','PV Array','PV Array',#333,'',$);
#337=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Loop','Loop','Loop',#333,'A collection of connected equipment; part of a System',$);
#338=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Loop','Air Loop','Air Loop',#337,'The set of connected equipment serving one path of air',$);
#339=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Loop','Water Loop','Water Loop',#337,'A collection of equipment that transport and regulate water among each other',$);
#340=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Loop','Chilled Water Loop','Chilled Water Loop',#339,'A collection of equipment that transport and regulate chilled water among each other',$);
#341=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Domestic_Water_Loop','Domestic Water Loop','Domestic Water Loop',#339,'',$);
#342=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Loop','Hot Water Loop','Hot Water Loop',#339,'A collection of equipment that transport and regulate hot water among each other',$);
#343=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#System','System','System',#333,'A System is a combination of equipment and auxiliary devices (e.g., controls, accessories, interconnecting means, and termi\X2\00AD\X0\nal elements) by which energy is transformed so it performs a specific function such as HVAC, service water heating, or lighting. (ASHRAE Dictionary).',$);
#344=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Domestic_Hot_Water_System','Domestic Hot Water System','Domestic Hot Water System',#343,'The equipment, devices and conduits that handle the production and distribution of domestic hot water in a building',$);
#345=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Gas_System','Gas System','Gas System',#343,'',$);
#346=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lighting_System','Lighting System','Lighting System',#343,'The equipment, devices and interfaces that serve or are a part of the lighting subsystem in a building',$);
#347=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electrical_System','Electrical System','Electrical System',#343,'Devices that serve or are part of the electrical subsystem in the building',$);
#348=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_System','Energy System','Energy System',#347,'A collection of devices that generates, stores or transports electricity',$);
#349=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Generation_System','Energy Generation System','Energy Generation System',#348,'A collection of devices that generates electricity',$);
#350=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PV_Generation_System','PV Generation System','PV Generation System',#349,'A collection of photovoltaic devices that generates energy',$);
#351=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Storage_System','Energy Storage System','Energy Storage System',#348,'A collection of devices that stores electricity',$);
#352=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Battery_Energy_Storage_System','Battery Energy Storage System','Battery Energy Storage System',#351,'A collection of batteries that provides energy storage, along with their supporting equipment',$);
#353=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#HVAC_System','HVAC System','HVAC System',#343,'See Heating_Ventilation_Air_Conditioning_System',$);
#354=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Shading_System','Shading System','Shading System',#343,'Devices that can control daylighting through various means',$);
#355=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Blind_Group','Blind Group','Blind Group',#354,'A group of Blinds commonly attached to a single controller.',$);
#356=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heating_Ventilation_Air_Conditioning_System','Heating Ventilation Air Conditioning System','Heating Ventilation Air Conditioning System',#343,'The equipment, distribution systems and terminals that provide, either collectively or individually, the processes of heating, ventilating or air conditioning to a building or portion of a building',$);
#357=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Steam_System','Steam System','Steam System',#356,'The equipment, devices and conduits that handle the production and distribution of steam in a building',$);
#358=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_System','Air System','Air System',#356,'The equipment, distribution systems and terminals that introduce or exhaust, either collectively or individually, the air into and from the building',$);
#359=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ventilation_Air_System','Ventilation Air System','Ventilation Air System',#358,'The equipment, devices, and conduits that handle the introduction and distribution of ventilation air in the building',$);
#360=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_System','Water System','Water System',#356,'The equipment, devices and conduits that handle the production and distribution of water in a building',$);
#361=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_System','Chilled Water System','Chilled Water System',#360,'The equipment, devices and conduits that handle the production and distribution of chilled water in a building',$);
#362=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_System','Condenser Water System','Condenser Water System',#360,'A heat rejection system consisting of (typically) cooling towers, condenser water pumps, chillers and the piping connecting the components',$);
#363=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_System','Hot Water System','Hot Water System',#360,'The equipment, devices and conduits that handle the production and distribution of hot water in a building',$);
#364=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Recovery_Hot_Water_System','Heat Recovery Hot Water System','Heat Recovery Hot Water System',#363,'',$);
#365=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Preheat_Hot_Water_System','Preheat Hot Water System','Preheat Hot Water System',#363,'',$);
#366=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radiation_Hot_Water_System','Radiation Hot Water System','Radiation Hot Water System',#363,'',$);
#367=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Reheat_Hot_Water_System','Reheat Hot Water System','Reheat Hot Water System',#363,'',$);
#368=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Safety_System','Safety System','Safety System',#343,'',$);
#369=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Emergency_Air_Flow_System','Emergency Air Flow System','Emergency Air Flow System',#368,'',$);
#370=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Emergency_Power_Off_System','Emergency Power Off System','Emergency Power Off System',#368,'A system that can power down a single piece of equipment or a single system from a single point',$);
#371=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Safety_System','Fire Safety System','Fire Safety System',#368,'A system containing devices and equipment that monitor, detect and suppress fire hazards',$);
#372=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Alarm','Alarm','Alarm',#1,'Alarm points are signals (either audible or visual) that alert an operator to an off-normal condition which requires some form of corrective action',$);
#373=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Change_Filter_Alarm','Change Filter Alarm','Change Filter Alarm',#372,'An alarm that indicates that a filter must be changed',$);
#374=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Communication_Loss_Alarm','Communication Loss Alarm','Communication Loss Alarm',#372,'An alarm that indicates a loss of communication e.g. with a device or controller',$);
#375=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Liquid_Detection_Alarm','Liquid Detection Alarm','Liquid Detection Alarm',#372,'',$);
#376=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Battery_Alarm','Low Battery Alarm','Low Battery Alarm',#372,'An alarm that indicates the battery is low.',$);
#377=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Luminance_Alarm','Luminance Alarm','Luminance Alarm',#372,'',$);
#378=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Maintenance_Required_Alarm','Maintenance Required Alarm','Maintenance Required Alarm',#372,'An alarm that indicates that repair/maintenance is required on an associated device or equipment',$);
#379=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Overload_Alarm','Overload Alarm','Overload Alarm',#372,'An alarm that can indicate when a full-load current is exceeded.',$);
#380=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Valve_Position_Alarm','Valve Position Alarm','Valve Position Alarm',#372,'An alarm that indicates that the valve position is not in a normal state.',$);
#381=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO2_Alarm','CO2 Alarm','CO2 Alarm',#372,'An alarm that indicates the off-normal conditions associated with the presence of carbon dioxide.',$);
#382=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_CO2_Alarm','High CO2 Alarm','High CO2 Alarm',#381,'A device that indicates high concentration of carbon dioxide.',$);
#383=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cycle_Alarm','Cycle Alarm','Cycle Alarm',#372,'An alarm that indicates off-normal conditions associated with HVAC cycles',$);
#384=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Short_Cycle_Alarm','Short Cycle Alarm','Short Cycle Alarm',#383,'An alarm that indicates a short cycle occurred. A short cycle occurs when a cooling cycle is prevented from completing its full cycle',$);
#385=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Emergency_Alarm','Emergency Alarm','Emergency Alarm',#372,'Alarms that indicate off-normal conditions associated with emergency systems',$);
#386=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Emergency_Generator_Alarm','Emergency Generator Alarm','Emergency Generator Alarm',#385,'An alarm that indicates off-normal conditions associated with an emergency generator',$);
#387=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leak_Alarm','Leak Alarm','Leak Alarm',#372,'An alarm that indicates leaks occured in systems containing fluids',$);
#388=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condensate_Leak_Alarm','Condensate Leak Alarm','Condensate Leak Alarm',#387,'An alarm that indicates a leak of condensate from a cooling system',$);
#389=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Power_Alarm','Power Alarm','Power Alarm',#372,'An alarm that indicates the off-normal conditions associated with electrical power.',$);
#390=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Power_Loss_Alarm','Power Loss Alarm','Power Loss Alarm',#389,'An alarm that indicates a power failure.',$);
#391=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Smoke_Alarm','Smoke Alarm','Smoke Alarm',#372,'An alarm that indicates the off-normal conditions associated with smoke.',$);
#392=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Smoke_Detection_Alarm','Smoke Detection Alarm','Smoke Detection Alarm',#391,'',$);
#393=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Smoke_Detection_Alarm','Supply Air Smoke Detection Alarm','Supply Air Smoke Detection Alarm',#392,'',$);
#394=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Smoke_Detection_Alarm','Discharge Air Smoke Detection Alarm','Discharge Air Smoke Detection Alarm',#392,'',$);
#395=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Voltage_Alarm','Voltage Alarm','Voltage Alarm',#372,'An alarm that indicates the voltage is not in a normal state.',$);
#396=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Voltage_Alarm','Low Voltage Alarm','Low Voltage Alarm',#395,'An alarm that indicates the voltage is lower than its normal state.',$);
#397=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Failure_Alarm','Failure Alarm','Failure Alarm',#372,'Alarms that indicate the failure of devices, equipment, systems and control loops',$);
#398=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Sensor_Failure_Alarm','Sensor Failure Alarm','Sensor Failure Alarm',#397,'',$);
#399=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Unit_Failure_Alarm','Unit Failure Alarm','Unit Failure Alarm',#397,'An alarm that indicates the failure of an equipment or device',$);
#400=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Humidity_Alarm','Humidity Alarm','Humidity Alarm',#372,'An alarm that indicates the off-normal conditions associated with the concentration of water vapor in the air.',$);
#401=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Humidity_Alarm','High Humidity Alarm','High Humidity Alarm',#400,'An alarm that indicates high concentration of water vapor in the air.',$);
#402=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Humidity_Alarm','Low Humidity Alarm','Low Humidity Alarm',#400,'An alarm that indicates low concentration of water vapor in the air.',$);
#403=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Pressure_Alarm','Pressure Alarm','Pressure Alarm',#372,'An alarm that indicates the off-normal conditions associated with pressure.',$);
#404=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Head_Pressure_Alarm','High Head Pressure Alarm','High Head Pressure Alarm',#403,'An alarm that indicates a high pressure generated on the output side of a gas compressor in a refrigeration or air conditioning system.',$);
#405=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Suction_Pressure_Alarm','Low Suction Pressure Alarm','Low Suction Pressure Alarm',#403,'An alarm that indicates a low suction pressure in the compressor in a refrigeration or air conditioning system.',$);
#406=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Alarm','Air Alarm','Air Alarm',#372,'',$);
#407=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Flow_Alarm','Air Flow Alarm','Air Flow Alarm',#406,'An alarm related to air flow.',$);
#408=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Flow_Loss_Alarm','Air Flow Loss Alarm','Air Flow Loss Alarm',#407,'An alarm that indicates loss in air flow.',$);
#409=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Air_Flow_Alarm','High Air Flow Alarm','High Air Flow Alarm',#407,'An alarm that indicates that the air flow is higher than normal.',$);
#410=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Air_Flow_Alarm','Low Air Flow Alarm','Low Air Flow Alarm',#407,'An alarm that indicates that the air flow is lower than normal.',$);
#411=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Supply_Air_Flow_Alarm','Low Supply Air Flow Alarm','Low Supply Air Flow Alarm',#410,'',$);
#412=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Discharge_Air_Flow_Alarm','Low Discharge Air Flow Alarm','Low Discharge Air Flow Alarm',#410,'An alarm that indicates that the discharge air flow is lower than normal.',$);
#413=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Temperature_Alarm','Air Temperature Alarm','Air Temperature Alarm',#406,'An alarm that indicates the off-normal conditions associated with the temperature of air.',$);
#414=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Temperature_Alarm','Return Air Temperature Alarm','Return Air Temperature Alarm',#413,'An alarm that indicates the off-normal conditions associated with the temperature of return air.',$);
#415=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Return_Air_Temperature_Alarm','High Return Air Temperature Alarm','High Return Air Temperature Alarm',#414,'An alarm that indicates that return air temperature is too high',$);
#416=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Return_Air_Temperature_Alarm','Low Return Air Temperature Alarm','Low Return Air Temperature Alarm',#414,'An alarm that indicates that return air temperature is too low',$);
#417=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Temperature_Alarm','Supply Air Temperature Alarm','Supply Air Temperature Alarm',#413,'An alarm that indicates the off-normal conditions associated with the temperature of supply air.',$);
#418=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Supply_Air_Temperature_Alarm','High Supply Air Temperature Alarm','High Supply Air Temperature Alarm',#417,'',$);
#419=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Supply_Air_Temperature_Alarm','Low Supply Air Temperature Alarm','Low Supply Air Temperature Alarm',#417,'',$);
#420=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Temperature_Alarm','Discharge Air Temperature Alarm','Discharge Air Temperature Alarm',#413,'An alarm that indicates the off-normal conditions associated with the temperature of discharge air.',$);
#421=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Discharge_Air_Temperature_Alarm','High Discharge Air Temperature Alarm','High Discharge Air Temperature Alarm',#420,'An alarm that indicates that discharge air temperature is too high',$);
#422=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Discharge_Air_Temperature_Alarm','Low Discharge Air Temperature Alarm','Low Discharge Air Temperature Alarm',#420,'',$);
#423=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Temperature_Alarm','Temperature Alarm','Temperature Alarm',#372,'An alarm that indicates the off-normal conditions associated with temperature.',$);
#424=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Temperature_Alarm','Water Temperature Alarm','Water Temperature Alarm',#423,'An alarm that indicates the off-normal conditions associated with temperature of water.',$);
#425=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Water_Temperature_Alarm','Entering Water Temperature Alarm','Entering Water Temperature Alarm',#424,'An alarm that indicates the off-normal conditions associated with temperature of the entering water.',$);
#426=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Water_Temperature_Alarm','Leaving Water Temperature Alarm','Leaving Water Temperature Alarm',#424,'An alarm that indicates the off-normal conditions associated with temperature of the leaving water.',$);
#427=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#High_Temperature_Alarm','High Temperature Alarm','High Temperature Alarm',#423,'An alarm that indicates high temperature.',$);
#428=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Temperature_Alarm','Low Temperature Alarm','Low Temperature Alarm',#423,'An alarm that indicates low temperature.',$);
#429=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Alarm','Water Alarm','Water Alarm',#372,'Alarm that indicates an undesirable event with a pipe, container, or equipment carrying water e.g. water leak',$);
#430=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Deionized_Water_Alarm','Deionized Water Alarm','Deionized Water Alarm',#429,'An alarm that indicates deionized water leaks.',$);
#431=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#No_Water_Alarm','No Water Alarm','No Water Alarm',#429,'Alarm indicating that there is no water in the equipment or system',$);
#432=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Loss_Alarm','Water Loss Alarm','Water Loss Alarm',#429,'An alarm that indicates a loss of water e.g. during transport',$);
#433=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Level_Alarm','Water Level Alarm','Water Level Alarm',#429,'An alarm that indicates a high or low water level e.g. in a basin',$);
#434=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Collection_Basin_Water_Level_Alarm','Collection Basin Water Level Alarm','Collection Basin Water Level Alarm',#433,'An alarm that indicates a high or low level of water in the collection basin, e.g. within a Cooling_Tower',$);
#435=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Max_Water_Level_Alarm','Max Water Level Alarm','Max Water Level Alarm',#433,'Alarm indicating that the maximum water level was reached',$);
#436=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Min_Water_Level_Alarm','Min Water Level Alarm','Min Water Level Alarm',#433,'Alarm indicating that the minimum water level was reached',$);
#437=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Sensor','Sensor','Sensor',#1,'A Sensor is an input point that represents the value of a device or instrument designed to detect and measure a variable (ASHRAE Dictionary).',$);
#438=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Capacity_Sensor','Capacity Sensor','Capacity Sensor',#437,'',$);
#439=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Contact_Sensor','Contact Sensor','Contact Sensor',#437,'Senses or detects contact, such as for determining if a door is closed.',$);
#440=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fire_Sensor','Fire Sensor','Fire Sensor',#437,'Measures the presence of fire',$);
#441=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Frost_Sensor','Frost Sensor','Frost Sensor',#437,'Senses the presence of frost or conditions that may cause frost',$);
#442=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Gas_Sensor','Gas Sensor','Gas Sensor',#437,'Measures gas concentration (other than CO2)',$);
#443=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hail_Sensor','Hail Sensor','Hail Sensor',#437,'Measures hail in terms of its size and damage potential',$);
#444=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Luminance_Sensor','Luminance Sensor','Luminance Sensor',#437,'Measures the luminous intensity per unit area of light travelling in a given direction',$);
#445=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Occupancy_Count_Sensor','Occupancy Count Sensor','Occupancy Count Sensor',#437,'Sensors measuring the number of people in an area',$);
#446=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Occupancy_Sensor','Occupancy Sensor','Occupancy Sensor',#437,'Detects occupancy of some space or area',$);
#447=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Piezoelectric_Sensor','Piezoelectric Sensor','Piezoelectric Sensor',#437,'Senses changes pressure, acceleration, temperature, force or strain via the piezoelectric effect',$);
#448=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Power_Factor_Sensor','Power Factor Sensor','Power Factor Sensor',#437,'Sensors measuring power Factor, under periodic conditions, is the ratio of the absolute value of the active power (P) to the apparent power (S).',$);
#449=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Rain_Level_Sensor','Rain Level Sensor','Rain Level Sensor',#437,'Measures the amount of precipitation fallen',$);
#450=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Refrigerant_Level_Sensor','Refrigerant Level Sensor','Refrigerant Level Sensor',#437,'',$);
#451=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Solar_Radiance_Sensor','Solar Radiance Sensor','Solar Radiance Sensor',#437,'The amount of light that passes through or is emitted from the sun and falls within a given solid angle in a specified direction',$);
#452=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Conductivity_Sensor','Conductivity Sensor','Conductivity Sensor',#437,'Measures electrical conductance',$);
#453=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Deionised_Water_Conductivity_Sensor','Deionised Water Conductivity Sensor','Deionised Water Conductivity Sensor',#452,'Measures the electrical conductance of deionised water',$);
#454=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Direction_Sensor','Direction Sensor','Direction Sensor',#437,'Measures the direction in degrees in which a phenomenon is occuring',$);
#455=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Wind_Direction_Sensor','Wind Direction Sensor','Wind Direction Sensor',#454,'Measures the direction of wind in degrees relative to North',$);
#456=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Enthalpy_Sensor','Enthalpy Sensor','Enthalpy Sensor',#437,'Measures the total heat content of some substance',$);
#457=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Enthalpy_Sensor','Air Enthalpy Sensor','Air Enthalpy Sensor',#456,'Measures the total heat content of air',$);
#458=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Enthalpy_Sensor','Outside Air Enthalpy Sensor','Outside Air Enthalpy Sensor',#457,'Measures the total heat content of outside air',$);
#459=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Enthalpy_Sensor','Return Air Enthalpy Sensor','Return Air Enthalpy Sensor',#457,'Measures the total heat content of return air',$);
#460=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Frequency_Sensor','Frequency Sensor','Frequency Sensor',#437,'Measures the frequency of a phenomenon or aspect of a phenomenon, e.g. the frequency of a fan turning',$);
#461=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Output_Frequency_Sensor','Output Frequency Sensor','Output Frequency Sensor',#460,'',$);
#462=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Generation_Sensor','Generation Sensor','Generation Sensor',#437,'A sensor measuring how much something has been generated.',$);
#463=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Generation_Sensor','Energy Generation Sensor','Energy Generation Sensor',#462,'A sensor measuring the amount of generated energy.',$);
#464=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Sensor','Heat Sensor','Heat Sensor',#437,'Measures heat',$);
#465=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Trace_Heat_Sensor','Trace Heat Sensor','Trace Heat Sensor',#464,'Measures the surface temperature of pipelines carrying temperature-sensitive products; typically used to avoid frosting/freezing',$);
#466=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Humidity_Sensor','Humidity Sensor','Humidity Sensor',#437,'Measures the concentration of water vapor in air',$);
#467=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Relative_Humidity_Sensor','Relative Humidity Sensor','Relative Humidity Sensor',#466,'Measures the present state of absolute humidity relative to a maximum humidity given the same temperature',$);
#468=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Humidity_Sensor','Exhaust Air Humidity Sensor','Exhaust Air Humidity Sensor',#467,'Measures the relative humidity of exhaust air',$);
#469=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mixed_Air_Humidity_Sensor','Mixed Air Humidity Sensor','Mixed Air Humidity Sensor',#467,'Measures the humidity of mixed air',$);
#470=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Humidity_Sensor','Outside Air Humidity Sensor','Outside Air Humidity Sensor',#467,'Measures the relative humidity of outside air',$);
#471=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Humidity_Sensor','Return Air Humidity Sensor','Return Air Humidity Sensor',#467,'Measures the relative humidity of return air',$);
#472=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Humidity_Sensor','Supply Air Humidity Sensor','Supply Air Humidity Sensor',#467,'Measures the relative humidity of supply air',$);
#473=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Zone_Air_Humidity_Sensor','Zone Air Humidity Sensor','Zone Air Humidity Sensor',#467,'Measures the relative humidity of zone air',$);
#474=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Humidity_Sensor','Discharge Air Humidity Sensor','Discharge Air Humidity Sensor',#467,'Measures the relative humidity of discharge air',$);
#475=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Illuminance_Sensor','Illuminance Sensor','Illuminance Sensor',#437,'Measures the total luminous flux incident on a surface, per unit area',$);
#476=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Illuminance_Sensor','Outside Illuminance Sensor','Outside Illuminance Sensor',#475,'Measures the total luminous flux incident on an outside, per unit area',$);
#477=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Motion_Sensor','Motion Sensor','Motion Sensor',#437,'Detects the presence of motion in some area',$);
#478=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PIR_Sensor','PIR Sensor','PIR Sensor',#477,'Detects the presense of motion in some area using the differential change in infrared intensity between two or more receptors',$);
#479=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Torque_Sensor','Torque Sensor','Torque Sensor',#437,'Measures torque, the tendency of a force to rotate an object about some axis',$);
#480=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Motor_Torque_Sensor','Motor Torque Sensor','Motor Torque Sensor',#479,'Measures the torque, or rotating power, of a motor',$);
#481=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Adjust_Sensor','Adjust Sensor','Adjust Sensor',#437,'Measures user-provided adjustment of some value',$);
#482=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Temperature_Adjust_Sensor','Temperature Adjust Sensor','Temperature Adjust Sensor',#481,'Measures user-provided adjustment of temperature',$);
#483=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Warm_Cool_Adjust_Sensor','Warm Cool Adjust Sensor','Warm Cool Adjust Sensor',#481,'User provided adjustment of zone temperature, typically in the range of +/- 5 degrees',$);
#484=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Grains_Sensor','Air Grains Sensor','Air Grains Sensor',#437,'Measures the mass of water vapor in air',$);
#485=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Grains_Sensor','Outside Air Grains Sensor','Outside Air Grains Sensor',#484,'Measures the mass of water vapor in outside air',$);
#486=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Grains_Sensor','Return Air Grains Sensor','Return Air Grains Sensor',#484,'Measures the mass of water vapor in return air',$);
#487=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Angle_Sensor','Angle Sensor','Angle Sensor',#437,'Measues the planar angle of some phenomenon',$);
#488=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Solar_Azimuth_Angle_Sensor','Solar Azimuth Angle Sensor','Solar Azimuth Angle Sensor',#487,'Measures the azimuth angle of the sun',$);
#489=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Solar_Zenith_Angle_Sensor','Solar Zenith Angle Sensor','Solar Zenith Angle Sensor',#487,'Measures the zenith angle of the sun',$);
#490=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Sensor','Energy Sensor','Energy Sensor',#437,'Measures energy consumption',$);
#491=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Energy_Usage_Sensor','Energy Usage Sensor','Energy Usage Sensor',#490,'Measures the total amount of energy used over some period of time',$);
#492=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electric_Energy_Sensor','Electric Energy Sensor','Electric Energy Sensor',#490,'',$);
#493=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Reactive_Energy_Sensor','Reactive Energy Sensor','Reactive Energy Sensor',#492,'Measures the integral of reactive power',$);
#494=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Imbalance_Sensor','Imbalance Sensor','Imbalance Sensor',#437,'A sensor which measures difference (imbalance) between phases of an electrical system',$);
#495=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Current_Imbalance_Sensor','Current Imbalance Sensor','Current Imbalance Sensor',#494,'A sensor which measures the current difference (imbalance) between phases of an electrical system',$);
#496=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Voltage_Imbalance_Sensor','Voltage Imbalance Sensor','Voltage Imbalance Sensor',#494,'A sensor which measures the voltage difference (imbalance) between phases of an electrical system',$);
#497=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Power_Sensor','Power Sensor','Power Sensor',#437,'Measures the amount of instantaneous power consumed',$);
#498=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Thermal_Power_Sensor','Thermal Power Sensor','Thermal Power Sensor',#497,'',$);
#499=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heating_Thermal_Power_Sensor','Heating Thermal Power Sensor','Heating Thermal Power Sensor',#498,'',$);
#500=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Electric_Power_Sensor','Electric Power Sensor','Electric Power Sensor',#497,'Measures the amount of instantaneous electric power consumed',$);
#501=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Active_Power_Sensor','Active Power Sensor','Active Power Sensor',#500,'Measures the portion of power that, averaged over a complete cycle of the AC waveform, results in net transfer of energy in one direction',$);
#502=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Reactive_Power_Sensor','Reactive Power Sensor','Reactive Power Sensor',#500,'Measures the portion of power that, averaged over a complete cycle of the AC waveform, is due to stored energy which returns to the source in each cycle',$);
#503=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Level_Sensor','Water Level Sensor','Water Level Sensor',#437,'Measures the height/level of water in some container',$);
#504=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Collection_Basin_Water_Level_Sensor','Collection Basin Water Level Sensor','Collection Basin Water Level Sensor',#503,'Measures the level of the water in the collection basin, e.g. within a Cooling_Tower',$);
#505=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Deionised_Water_Level_Sensor','Deionised Water Level Sensor','Deionised Water Level Sensor',#503,'Measures the height/level of deionised water in some container',$);
#506=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Current_Sensor','Current Sensor','Current Sensor',#437,'Senses the amperes of electrical current passing through the sensor',$);
#507=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Load_Current_Sensor','Load Current Sensor','Load Current Sensor',#506,'Measures the current consumed by a load',$);
#508=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Motor_Current_Sensor','Motor Current Sensor','Motor Current Sensor',#506,'Measures the current consumed by a motor',$);
#509=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Current_Output_Sensor','Current Output Sensor','Current Output Sensor',#506,'Senses the amperes of electrical current produced as output by a device',$);
#510=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Photovoltaic_Current_Output_Sensor','Photovoltaic Current Output Sensor','Photovoltaic Current Output Sensor',#509,'Senses the amperes of electrical current produced as output by a photovoltaic device',$);
#511=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PV_Current_Output_Sensor','PV Current Output Sensor','PV Current Output Sensor',#509,'See Photovoltaic_Current_Output_Sensor',$);
#512=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Demand_Sensor','Demand Sensor','Demand Sensor',#437,'Measures the amount of power consumed by the use of some process; typically found by multiplying the tonnage of a unit (e.g. RTU) by the efficiency rating in kW/ton',$);
#513=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Peak_Demand_Sensor','Peak Demand Sensor','Peak Demand Sensor',#512,'The peak power consumed by a process over some period of time',$);
#514=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Cooling_Demand_Sensor','Cooling Demand Sensor','Cooling Demand Sensor',#512,'Measures the amount of power consumed by a cooling process; typically found by multiplying the tonnage of a unit (e.g. RTU) by the efficiency rating in kW/ton',$);
#515=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Average_Cooling_Demand_Sensor','Average Cooling Demand Sensor','Average Cooling Demand Sensor',#514,'Measures the average power consumed by a cooling process as the amount of power consumed over some interval',$);
#516=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heating_Demand_Sensor','Heating Demand Sensor','Heating Demand Sensor',#512,'Measures the amount of power consumed by a heating process; typically found by multiplying the tonnage of a unit (e.g. RTU) by the efficiency rating in kW/ton',$);
#517=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Average_Heating_Demand_Sensor','Average Heating Demand Sensor','Average Heating Demand Sensor',#516,'Measures the average power consumed by a heating process as the amount of power consumed over some interval',$);
#518=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Duration_Sensor','Duration Sensor','Duration Sensor',#437,'Measures the duration of a phenomenon or event',$);
#519=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#On_Timer_Sensor','On Timer Sensor','On Timer Sensor',#518,'Measures the duration for which a device was in an active or "on" state',$);
#520=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Rain_Duration_Sensor','Rain Duration Sensor','Rain Duration Sensor',#518,'Measures the duration of precipitation within some time frame',$);
#521=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Run_Time_Sensor','Run Time Sensor','Run Time Sensor',#518,'Measures the duration for which a device was in an active or "on" state',$);
#522=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Flow_Sensor','Flow Sensor','Flow Sensor',#437,'Measures the rate of flow of some substance',$);
#523=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Natural_Gas_Flow_Sensor','Natural Gas Flow Sensor','Natural Gas Flow Sensor',#522,'Measures the rate of flow of natural gas',$);
#524=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Flow_Sensor','Air Flow Sensor','Air Flow Sensor',#522,'Measures the rate of flow of air',$);
#525=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Bypass_Air_Flow_Sensor','Bypass Air Flow Sensor','Bypass Air Flow Sensor',#524,'Measures the rate of flow of bypass air',$);
#526=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Fume_Hood_Air_Flow_Sensor','Fume Hood Air Flow Sensor','Fume Hood Air Flow Sensor',#524,'Measures the rate of flow of air in a fume hood',$);
#527=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mixed_Air_Flow_Sensor','Mixed Air Flow Sensor','Mixed Air Flow Sensor',#524,'Measures the rate of flow of mixed air',$);
#528=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Flow_Sensor','Outside Air Flow Sensor','Outside Air Flow Sensor',#524,'Measures the rate of flow of outside air into the system',$);
#529=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Flow_Sensor','Return Air Flow Sensor','Return Air Flow Sensor',#524,'Measures the rate of flow of return air',$);
#530=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Flow_Sensor','Exhaust Air Flow Sensor','Exhaust Air Flow Sensor',#524,'Measures the rate of flow of exhaust air',$);
#531=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Stack_Flow_Sensor','Exhaust Air Stack Flow Sensor','Exhaust Air Stack Flow Sensor',#530,'Measures the rate of flow of air in the exhaust air stack',$);
#532=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Flow_Sensor','Supply Air Flow Sensor','Supply Air Flow Sensor',#524,'Measures the rate of flow of supply air',$);
#533=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Average_Supply_Air_Flow_Sensor','Average Supply Air Flow Sensor','Average Supply Air Flow Sensor',#532,'The computed average flow of supply air over some interval',$);
#534=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Flow_Sensor','Discharge Air Flow Sensor','Discharge Air Flow Sensor',#524,'Measures the rate of flow of discharge air',$);
#535=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Average_Discharge_Air_Flow_Sensor','Average Discharge Air Flow Sensor','Average Discharge Air Flow Sensor',#534,'The computed average flow of discharge air over some interval',$);
#536=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Flow_Sensor','Water Flow Sensor','Water Flow Sensor',#522,'Measures the rate of flow of water',$);
#537=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Bypass_Water_Flow_Sensor','Bypass Water Flow Sensor','Bypass Water Flow Sensor',#536,'Measures the rate of flow of bypass water',$);
#538=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Water_Flow_Sensor','Entering Water Flow Sensor','Entering Water Flow Sensor',#536,'Measures the rate of flow of water entering a piece of equipment or system',$);
#539=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Chilled_Water_Flow_Sensor','Entering Chilled Water Flow Sensor','Entering Chilled Water Flow Sensor',#538,'Measures the rate of flow of chilled entering water',$);
#540=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Condenser_Water_Flow_Sensor','Entering Condenser Water Flow Sensor','Entering Condenser Water Flow Sensor',#538,'Measures the flow of the entering condenser water',$);
#541=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Hot_Water_Flow_Sensor','Entering Hot Water Flow Sensor','Entering Hot Water Flow Sensor',#538,'Measures the rate of flow of hot entering water',$);
#542=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Water_Flow_Sensor','Leaving Water Flow Sensor','Leaving Water Flow Sensor',#536,'Measures the rate of flow of water that is leaving a piece of equipment or system',$);
#543=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Flow_Sensor','Leaving Chilled Water Flow Sensor','Leaving Chilled Water Flow Sensor',#542,'Measures the rate of flow of chilled leaving water',$);
#544=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Condenser_Water_Flow_Sensor','Leaving Condenser Water Flow Sensor','Leaving Condenser Water Flow Sensor',#542,'Measures the flow of the leaving condenser water',$);
#545=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Hot_Water_Flow_Sensor','Leaving Hot Water Flow Sensor','Leaving Hot Water Flow Sensor',#542,'Measures the rate of flow of hot leaving water',$);
#546=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_Flow_Sensor','Condenser Water Flow Sensor','Condenser Water Flow Sensor',#536,'Measures the flow of the condenser water',$);
#547=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Flow_Sensor','Chilled Water Flow Sensor','Chilled Water Flow Sensor',#536,'Measures the rate of flow in a chilled water circuit',$);
#548=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Flow_Sensor','Hot Water Flow Sensor','Hot Water Flow Sensor',#536,'Measures the rate of flow in a hot water circuit',$);
#549=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Position_Sensor','Position Sensor','Position Sensor',#437,'Measures the current position of a component in terms of a fraction of its full range of motion',$);
#550=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Damper_Position_Sensor','Damper Position Sensor','Damper Position Sensor',#549,'Measures the current position of a damper in terms of the percent of fully open',$);
#551=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Sash_Position_Sensor','Sash Position Sensor','Sash Position Sensor',#549,'Measures the current position of a sash in terms of the percent of fully open',$);
#552=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Valve_Position_Sensor','Valve Position Sensor','Valve Position Sensor',#549,'Measures the current position of a valve in terms of the percent of fully open',$);
#553=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Pressure_Sensor','Pressure Sensor','Pressure Sensor',#437,'Measure the amount of force acting on a unit area',$);
#554=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Velocity_Pressure_Sensor','Velocity Pressure Sensor','Velocity Pressure Sensor',#553,'Measures the difference between total pressure and static pressure',$);
#555=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Velocity_Pressure_Sensor','Exhaust Air Velocity Pressure Sensor','Exhaust Air Velocity Pressure Sensor',#554,'',$);
#556=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Velocity_Pressure_Sensor','Supply Air Velocity Pressure Sensor','Supply Air Velocity Pressure Sensor',#554,'',$);
#557=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Velocity_Pressure_Sensor','Discharge Air Velocity Pressure Sensor','Discharge Air Velocity Pressure Sensor',#554,'',$);
#558=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Differential_Pressure_Sensor','Differential Pressure Sensor','Differential Pressure Sensor',#553,'Measures the difference between two applied pressures',$);
#559=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Differential_Pressure_Sensor','Chilled Water Differential Pressure Sensor','Chilled Water Differential Pressure Sensor',#558,'Measures the difference in water pressure on either side of a chilled water valve',$);
#560=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Filter_Differential_Pressure_Sensor','Filter Differential Pressure Sensor','Filter Differential Pressure Sensor',#558,'Measures the difference in pressure on either side of a filter',$);
#561=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Differential_Pressure_Sensor','Hot Water Differential Pressure Sensor','Hot Water Differential Pressure Sensor',#558,'Measures the difference in water pressure on either side of a hot water valve',$);
#562=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Medium_Temperature_Hot_Water_Differential_Pressure_Sensor','Medium Temperature Hot Water Differential Pressure Sensor','Medium Temperature Hot Water Differential Pressure Sensor',#561,'Measures the difference in water pressure between sections of a medium temperature hot water system',$);
#563=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Differential_Pressure_Sensor','Air Differential Pressure Sensor','Air Differential Pressure Sensor',#558,'Measures the difference in pressure between two regions of air',$);
#564=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Differential_Pressure_Sensor','Exhaust Air Differential Pressure Sensor','Exhaust Air Differential Pressure Sensor',#563,'Measures the difference in pressure between an upstream and downstream of an air duct or other air conduit used to exhaust air from the building',$);
#565=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Differential_Pressure_Sensor','Return Air Differential Pressure Sensor','Return Air Differential Pressure Sensor',#563,'Measures the difference in pressure between the return and supply side',$);
#566=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Differential_Pressure_Sensor','Supply Air Differential Pressure Sensor','Supply Air Differential Pressure Sensor',#563,'Measures the difference in pressure between an upstream and downstream of an air duct or other air conduit used to supply air into the building',$);
#567=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Differential_Pressure_Sensor','Discharge Air Differential Pressure Sensor','Discharge Air Differential Pressure Sensor',#563,'',$);
#568=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Static_Pressure_Sensor','Static Pressure Sensor','Static Pressure Sensor',#553,'Measures resistance to airflow in a heating and cooling system''s components and duct work',$);
#569=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Building_Air_Static_Pressure_Sensor','Building Air Static Pressure Sensor','Building Air Static Pressure Sensor',#568,'The static pressure of air within a building',$);
#570=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Static_Pressure_Sensor','Supply Air Static Pressure Sensor','Supply Air Static Pressure Sensor',#568,'The static pressure of air within supply regions of an HVAC system',$);
#571=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Underfloor_Air_Plenum_Static_Pressure_Sensor','Underfloor Air Plenum Static Pressure Sensor','Underfloor Air Plenum Static Pressure Sensor',#568,'Measures the outward push of air against the plenum surfaces and used to measure the resistance when air moves through the plenum',$);
#572=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Static_Pressure_Sensor','Discharge Air Static Pressure Sensor','Discharge Air Static Pressure Sensor',#568,'The static pressure of air within discharge regions of an HVAC system',$);
#573=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Static_Pressure_Sensor','Exhaust Air Static Pressure Sensor','Exhaust Air Static Pressure Sensor',#568,'The static pressure of air within exhaust regions of an HVAC system',$);
#574=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Average_Exhaust_Air_Static_Pressure_Sensor','Average Exhaust Air Static Pressure Sensor','Average Exhaust Air Static Pressure Sensor',#573,'The computed average static pressure of air in exhaust regions of an HVAC system over some period of time',$);
#575=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Lowest_Exhaust_Air_Static_Pressure_Sensor','Lowest Exhaust Air Static Pressure Sensor','Lowest Exhaust Air Static Pressure Sensor',#573,'The lowest observed static pressure of air in exhaust regions of an HVAC system over some period of time',$);
#576=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Speed_Sensor','Speed Sensor','Speed Sensor',#437,'Measures the magnitude of velocity of some form of movement',$);
#577=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Differential_Speed_Sensor','Differential Speed Sensor','Differential Speed Sensor',#576,'',$);
#578=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Motor_Speed_Sensor','Motor Speed Sensor','Motor Speed Sensor',#576,'',$);
#579=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Wind_Speed_Sensor','Wind Speed Sensor','Wind Speed Sensor',#576,'Measured speed of wind, caused by air moving from high to low pressure',$);
#580=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Voltage_Sensor','Voltage Sensor','Voltage Sensor',#437,'Measures the voltage of an electrical device or object',$);
#581=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Battery_Voltage_Sensor','Battery Voltage Sensor','Battery Voltage Sensor',#580,'Measures the capacity of a battery',$);
#582=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#DC_Bus_Voltage_Sensor','DC Bus Voltage Sensor','DC Bus Voltage Sensor',#580,'Measures the voltage across a DC bus',$);
#583=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Output_Voltage_Sensor','Output Voltage Sensor','Output Voltage Sensor',#580,'Measures the voltage output by some process or device',$);
#584=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Usage_Sensor','Usage Sensor','Usage Sensor',#437,'Measures the amount of some substance that is consumed or used, over some period of time',$);
#585=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Natural_Gas_Usage_Sensor','Natural Gas Usage Sensor','Natural Gas Usage Sensor',#584,'Measures the amount of natural gas that is consumed or used, over some period of time',$);
#586=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Steam_Usage_Sensor','Steam Usage Sensor','Steam Usage Sensor',#584,'Measures the amount of steam that is consumed or used, over some period of time',$);
#587=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Usage_Sensor','Water Usage Sensor','Water Usage Sensor',#584,'Measures the amount of water that is consumed, over some period of time',$);
#588=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Usage_Sensor','Hot Water Usage Sensor','Hot Water Usage Sensor',#587,'Measures the amount of hot water that is consumed, over some period of time',$);
#589=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Dewpoint_Sensor','Dewpoint Sensor','Dewpoint Sensor',#437,'Senses the dewpoint temperature . Dew point is the temperature to which air must be cooled to become saturated with water vapor',$);
#590=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Dewpoint_Sensor','Exhaust Air Dewpoint Sensor','Exhaust Air Dewpoint Sensor',#589,'Measures dewpoint of exhaust air',$);
#591=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Dewpoint_Sensor','Outside Air Dewpoint Sensor','Outside Air Dewpoint Sensor',#589,'Senses the dewpoint temperature of outside air',$);
#592=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Dewpoint_Sensor','Return Air Dewpoint Sensor','Return Air Dewpoint Sensor',#589,'Senses the dewpoint temperature of return air',$);
#593=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Dewpoint_Sensor','Supply Air Dewpoint Sensor','Supply Air Dewpoint Sensor',#589,'',$);
#594=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Zone_Air_Dewpoint_Sensor','Zone Air Dewpoint Sensor','Zone Air Dewpoint Sensor',#589,'Measures dewpoint of zone air',$);
#595=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Dewpoint_Sensor','Discharge Air Dewpoint Sensor','Discharge Air Dewpoint Sensor',#589,'Measures dewpoint of discharge air',$);
#596=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Temperature_Sensor','Temperature Sensor','Temperature Sensor',#437,'Measures temperature: the physical property of matter that quantitatively expresses the common notions of hot and cold',$);
#597=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Sink_Temperature_Sensor','Heat Sink Temperature Sensor','Heat Sink Temperature Sensor',#596,'Measure temperature of the heat sink on a device such as a VFD.',$);
#598=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Natural_Gas_Temperature_Sensor','Natural Gas Temperature Sensor','Natural Gas Temperature Sensor',#596,'Measures the temperature of natural gas',$);
#599=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Soil_Temperature_Sensor','Soil Temperature Sensor','Soil Temperature Sensor',#596,'Measures the temperature of soil',$);
#600=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Wet_Bulb_Temperature_Sensor','Air Wet Bulb Temperature Sensor','Air Wet Bulb Temperature Sensor',#596,'',$);
#601=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Wet_Bulb_Temperature_Sensor','Outside Air Wet Bulb Temperature Sensor','Outside Air Wet Bulb Temperature Sensor',#600,'A sensor measuring the wet-bulb temperature of outside air',$);
#602=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radiant_Panel_Temperature_Sensor','Radiant Panel Temperature Sensor','Radiant Panel Temperature Sensor',#596,'Measures the temperature of the radiant panel of the radiant heating and cooling HVAC system.',$);
#603=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Inside_Face_Surface_Temperature_Sensor','Inside Face Surface Temperature Sensor','Inside Face Surface Temperature Sensor',#602,'Measures the inside surface (relative to the space) of the radiant panel of the radiant heating and cooling HVAC system.',$);
#604=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Face_Surface_Temperature_Sensor','Outside Face Surface Temperature Sensor','Outside Face Surface Temperature Sensor',#602,'Measures the outside surface (relative to the space) of the radiant panel of a radiant heating and cooling HVAC system.',$);
#605=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Embedded_Temperature_Sensor','Embedded Temperature Sensor','Embedded Temperature Sensor',#602,'Measures the internal temperature of the radiant layer of the radiant heating and cooling HVAC system.',$);
#606=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Core_Temperature_Sensor','Core Temperature Sensor','Core Temperature Sensor',#605,'Measures the internal temperature of the radiant layer at the heat source or sink level of the radiant heating and cooling HVAC system.',$);
#607=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Temperature_Sensor','Air Temperature Sensor','Air Temperature Sensor',#596,'Measures the temperature of air',$);
#608=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Exhaust_Air_Temperature_Sensor','Exhaust Air Temperature Sensor','Exhaust Air Temperature Sensor',#607,'Measures the temperature of exhaust air',$);
#609=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Mixed_Air_Temperature_Sensor','Mixed Air Temperature Sensor','Mixed Air Temperature Sensor',#607,'Measures the temperature of mixed air',$);
#610=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_Temperature_Sensor','Return Air Temperature Sensor','Return Air Temperature Sensor',#607,'Measures the temperature of return air',$);
#611=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Underfloor_Air_Temperature_Sensor','Underfloor Air Temperature Sensor','Underfloor Air Temperature Sensor',#607,'Measures the temperature of underfloor air',$);
#612=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Supply_Air_Temperature_Sensor','Supply Air Temperature Sensor','Supply Air Temperature Sensor',#607,'Measures the temperature of supply air',$);
#613=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Preheat_Supply_Air_Temperature_Sensor','Preheat Supply Air Temperature Sensor','Preheat Supply Air Temperature Sensor',#612,'Measures the temperature of supply air before it is heated',$);
#614=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Discharge_Air_Temperature_Sensor','Discharge Air Temperature Sensor','Discharge Air Temperature Sensor',#607,'Measures the temperature of discharge air',$);
#615=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Preheat_Discharge_Air_Temperature_Sensor','Preheat Discharge Air Temperature Sensor','Preheat Discharge Air Temperature Sensor',#614,'Measures the temperature of discharge air before heating is applied',$);
#616=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Temperature_Sensor','Outside Air Temperature Sensor','Outside Air Temperature Sensor',#607,'Measures the temperature of outside air',$);
#617=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Intake_Air_Temperature_Sensor','Intake Air Temperature Sensor','Intake Air Temperature Sensor',#616,'Measures air at the interface between the building and the outside',$);
#618=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_Temperature_Enable_Differential_Sensor','Outside Air Temperature Enable Differential Sensor','Outside Air Temperature Enable Differential Sensor',#616,'',$);
#619=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Low_Outside_Air_Temperature_Enable_Differential_Sensor','Low Outside Air Temperature Enable Differential Sensor','Low Outside Air Temperature Enable Differential Sensor',#618,'',$);
#620=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Zone_Air_Temperature_Sensor','Zone Air Temperature Sensor','Zone Air Temperature Sensor',#607,'A physical or virtual sensor which represents the temperature of an HVAC Zone',$);
#621=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Average_Zone_Air_Temperature_Sensor','Average Zone Air Temperature Sensor','Average Zone Air Temperature Sensor',#620,'The computed average temperature of air in a zone, over some period of time',$);
#622=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Coldest_Zone_Air_Temperature_Sensor','Coldest Zone Air Temperature Sensor','Coldest Zone Air Temperature Sensor',#620,'The zone temperature that is coldest; drives the supply temperature of hot air. A computed value rather than a physical sensor. Also referred to as a ''Lowest Zone Air Temperature Sensor''',$);
#623=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Warmest_Zone_Air_Temperature_Sensor','Warmest Zone Air Temperature Sensor','Warmest Zone Air Temperature Sensor',#620,'The zone temperature that is warmest; drives the supply temperature of cold air. A computed value rather than a physical sensor. Also referred to as a ''Highest Zone Air Temperature Sensor''',$);
#624=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Temperature_Sensor','Water Temperature Sensor','Water Temperature Sensor',#596,'Measures the temperature of water',$);
#625=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Collection_Basin_Water_Temperature_Sensor','Collection Basin Water Temperature Sensor','Collection Basin Water Temperature Sensor',#624,'Measures the temperature of the water in the collection basin, e.g. within a Cooling_Tower',$);
#626=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Water_Temperature_Sensor','Entering Water Temperature Sensor','Entering Water Temperature Sensor',#624,'Measures the temperature of entering water',$);
#627=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Water_Temperature_Sensor','Leaving Water Temperature Sensor','Leaving Water Temperature Sensor',#624,'Measures the temperature of water leaving a piece of equipment or system',$);
#628=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Heat_Exchanger_Leaving_Water_Temperature_Sensor','Heat Exchanger Leaving Water Temperature Sensor','Heat Exchanger Leaving Water Temperature Sensor',#627,'',$);
#629=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ice_Tank_Leaving_Water_Temperature_Sensor','Ice Tank Leaving Water Temperature Sensor','Ice Tank Leaving Water Temperature Sensor',#627,'Measures the temperature of water leaving an ice tank',$);
#630=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Domestic_Hot_Water_Temperature_Sensor','Domestic Hot Water Temperature Sensor','Domestic Hot Water Temperature Sensor',#624,'',$);
#631=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Domestic_Hot_Water_Temperature_Sensor','Entering Domestic Hot Water Temperature Sensor','Entering Domestic Hot Water Temperature Sensor',#630,'',$);
#632=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Domestic_Hot_Water_Temperature_Sensor','Leaving Domestic Hot Water Temperature Sensor','Leaving Domestic Hot Water Temperature Sensor',#630,'Measures the temperature of domestic water supplied by a hot water system',$);
#633=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Hot_Water_Temperature_Sensor','Entering Hot Water Temperature Sensor','Entering Hot Water Temperature Sensor',#624,'Measures the temperature of water enteringed to a hot water system',$);
#634=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_High_Temperature_Hot_Water_Temperature_Sensor','Entering High Temperature Hot Water Temperature Sensor','Entering High Temperature Hot Water Temperature Sensor',#633,'Measures the temperature of high-temperature hot water enteringed to a hot water system',$);
#635=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Medium_Temperature_Hot_Water_Temperature_Sensor','Entering Medium Temperature Hot Water Temperature Sensor','Entering Medium Temperature Hot Water Temperature Sensor',#633,'Measures the temperature of medium-temperature hot water entering a hot water system',$);
#636=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Hot_Water_Differential_Temperature_Sensor','Hot Water Differential Temperature Sensor','Hot Water Differential Temperature Sensor',#633,'Measures the difference in temperature between the entering water to the boiler or other water heating device and leaving water from the same boiler or other water heating device',$);
#637=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Hot_Water_Temperature_Sensor','Leaving Hot Water Temperature Sensor','Leaving Hot Water Temperature Sensor',#624,'Measures the temperature of water supplied by a hot water system',$);
#638=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_High_Temperature_Hot_Water_Temperature_Sensor','Leaving High Temperature Hot Water Temperature Sensor','Leaving High Temperature Hot Water Temperature Sensor',#637,'Measures the temperature of high-temperature hot water supplied by a hot water system',$);
#639=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Medium_Temperature_Hot_Water_Temperature_Sensor','Leaving Medium Temperature Hot Water Temperature Sensor','Leaving Medium Temperature Hot Water Temperature Sensor',#637,'Measures the temperature of medium-temperature hot water supplied by a hot water system',$);
#640=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Water_Differential_Temperature_Sensor','Water Differential Temperature Sensor','Water Differential Temperature Sensor',#624,'Measures the difference in water temperature between an upstream and downstream point in a pipe or conduit',$);
#641=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Differential_Temperature_Sensor','Chilled Water Differential Temperature Sensor','Chilled Water Differential Temperature Sensor',#640,'Measures the difference in temperature between the entering water to the chiller or other water cooling device and leaving water from the same chiller or other water cooling device',$);
#642=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Condenser_Water_Temperature_Sensor','Condenser Water Temperature Sensor','Condenser Water Temperature Sensor',#624,'Measures the temperature of condenser water',$);
#643=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Condenser_Water_Temperature_Sensor','Entering Condenser Water Temperature Sensor','Entering Condenser Water Temperature Sensor',#642,'Measures the temperature of the entering condenser water',$);
#644=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Condenser_Water_Temperature_Sensor','Leaving Condenser Water Temperature Sensor','Leaving Condenser Water Temperature Sensor',#642,'Measures the temperature of the leaving condenser water',$);
#645=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Chilled_Water_Temperature_Sensor','Chilled Water Temperature Sensor','Chilled Water Temperature Sensor',#624,'Measures the temperature of chilled water',$);
#646=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Differential_Entering_Leaving_Water_Temperature_Sensor','Differential Entering Leaving Water Temperature Sensor','Differential Entering Leaving Water Temperature Sensor',#645,'Measures the difference in temperature between entering and leaving water of water a circuit',$);
#647=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Entering_Chilled_Water_Temperature_Sensor','Entering Chilled Water Temperature Sensor','Entering Chilled Water Temperature Sensor',#645,'Measures the temperature of chilled water that is enteringed to a cooling tower',$);
#648=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Leaving_Chilled_Water_Temperature_Sensor','Leaving Chilled Water Temperature Sensor','Leaving Chilled Water Temperature Sensor',#645,'Measures the temperature of chilled water that is supplied from a chiller',$);
#649=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Air_Quality_Sensor','Air Quality Sensor','Air Quality Sensor',#437,'A sensor which provides a measure of air quality',$);
#650=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ammonia_Sensor','Ammonia Sensor','Ammonia Sensor',#649,'',$);
#651=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Formaldehyde_Level_Sensor','Formaldehyde Level Sensor','Formaldehyde Level Sensor',#649,'Measures the concentration of formaldehyde in air',$);
#652=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Methane_Level_Sensor','Methane Level Sensor','Methane Level Sensor',#649,'Measures the concentration of methane in air',$);
#653=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#NO2_Level_Sensor','NO2 Level Sensor','NO2 Level Sensor',#649,'Measures the concentration of NO2 in air',$);
#654=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Ozone_Level_Sensor','Ozone Level Sensor','Ozone Level Sensor',#649,'Measures the concentration of ozone in air',$);
#655=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radioactivity_Concentration_Sensor','Radioactivity Concentration Sensor','Radioactivity Concentration Sensor',#649,'Measures the concentration of radioactivity',$);
#656=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Radon_Concentration_Sensor','Radon Concentration Sensor','Radon Concentration Sensor',#655,'Measures the concentration of radioactivity due to radon',$);
#657=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO2_Sensor','CO2 Sensor','CO2 Sensor',#649,'Measures properties of CO2 in air',$);
#658=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO2_Differential_Sensor','CO2 Differential Sensor','CO2 Differential Sensor',#657,'Measures the difference between CO2 levels of inside and outside air',$);
#659=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO2_Level_Sensor','CO2 Level Sensor','CO2 Level Sensor',#657,'Measures the concentration of CO2 in air',$);
#660=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_CO2_Sensor','Outside Air CO2 Sensor','Outside Air CO2 Sensor',#657,'Measures the concentration of CO2 in outside air',$);
#661=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_CO2_Sensor','Return Air CO2 Sensor','Return Air CO2 Sensor',#657,'Measures the concentration of CO2 in return air',$);
#662=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO_Sensor','CO Sensor','CO Sensor',#649,'Measures properties of CO',$);
#663=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO_Differential_Sensor','CO Differential Sensor','CO Differential Sensor',#662,'',$);
#664=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#CO_Level_Sensor','CO Level Sensor','CO Level Sensor',#662,'Measures the concentration of CO',$);
#665=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Outside_Air_CO_Sensor','Outside Air CO Sensor','Outside Air CO Sensor',#662,'Measures the concentration of CO in outside air',$);
#666=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Return_Air_CO_Sensor','Return Air CO Sensor','Return Air CO Sensor',#662,'Measures the concentration of CO in return air',$);
#667=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#Particulate_Matter_Sensor','Particulate Matter Sensor','Particulate Matter Sensor',#649,'Detects pollutants in the ambient air',$);
#668=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PM10_Sensor','PM10 Sensor','PM10 Sensor',#667,'Detects matter of size 10 microns',$);
#669=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PM10_Level_Sensor','PM10 Level Sensor','PM10 Level Sensor',#668,'Detects level of particulates of size 10 microns',$);
#670=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PM1_Sensor','PM1 Sensor','PM1 Sensor',#667,'Detects matter of size 1 micron',$);
#671=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PM1_Level_Sensor','PM1 Level Sensor','PM1 Level Sensor',#670,'Detects level of particulates of size 1 microns',$);
#672=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PM2.5_Sensor','PM2.5 Sensor','PM2.5 Sensor',#667,'Detects matter of size 2.5 microns',$);
#673=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#PM2.5_Level_Sensor','PM2.5 Level Sensor','PM2.5 Level Sensor',#672,'Detects level of particulates of size 2.5 microns',$);
#674=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#TVOC_Sensor','TVOC Sensor','TVOC Sensor',#667,'',$);
#675=IFCCLASSIFICATIONREFERENCE('https://brickschema.org/schema/Brick#TVOC_Level_Sensor','TVOC Level Sensor','TVOC Level Sensor',#674,'A sensor measuring the level of all VOCs in air',$);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,76 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:28',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'CBI Classification - Level 2',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('Masterspec','2019','2019-08-23','CBI Classification - Level 2','CBI (Co-ordinated Building Information) is a classification system designed by and for members of the construction industry, to co-ordinate the five main information sources: drawings; specifications; quantities; technical and research information; trade information and publications.','https://masterspec.co.nz',$);
#3=IFCRELASSOCIATESCLASSIFICATION('2v50VmRmf4EAM0pQ5vIPQA',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'1','General',#2,$,$);
#5=IFCCLASSIFICATIONREFERENCE($,'11','Contract conditions',#4,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'12','General requirements',#4,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'2','Site',#2,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'21','Demolition',#7,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'22','Preparation and groundwork',#7,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'23','Foundations',#7,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'24','Minor demolition and alterations',#7,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'3','Structure',#2,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'31','Concrete',#12,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'32','Earth',#12,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'33','Masonry',#12,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'34','Steel',#12,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'35','Stainless steel',#12,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'36','Aluminium',#12,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'37','Other metals',#12,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'38','Timber',#12,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'39','Plastics',#12,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'4','Enclosure',#2,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'41','Tanking and pre-cladding',#22,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'42','Wall cladding',#22,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'43','Roofing and decking',#22,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'44','Membrane roofing',#22,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'45','Windows and doors',#22,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'46','Glazing',#22,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'47','Insulation',#22,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'48','Enclosure sundries',#22,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'49','Metalwork',#22,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'5','Interior',#2,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'51','Wall and ceiling linings',#32,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'52','Partitions and doors',#32,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'53','Ceiling systems',#32,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'54','Floors',#32,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'55','Joinery fixtures and hardware',#32,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'56','Specialist equipment and assemblies',#32,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'57','Furniture and appliances',#32,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'58','Signs and features',#32,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'6','Finish',#2,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'61','Applied coatings',#41,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'62','Tiling',#41,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'63','Overlay flooring and wall panelling',#41,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'64','Resilient surfacing',#41,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'65','Carpeting',#41,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'66','Flooring ancillaries',#41,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'67','Painting, decoration and coating',#41,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'68','Finishes sundries',#41,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'7','Services',#2,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'71','Liquid supply',#50,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'72','Gas',#50,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'73','Fire',#50,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'74','Liquid disposal',#50,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'75','Heating and cooling',#50,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'76','Ventilation and air-conditioning',#50,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'77','Electrical',#50,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'78','Communications and controls',#50,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'79','Transport',#50,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'8','External',#2,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'81','Retaining walls',#60,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'82','Pavements',#60,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'83','Landscape cultivation',#60,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'84','Landscape structures',#60,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'85','Landscape services',#60,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'86','Civil engineering infrastructure',#60,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'88','Specialist structures',#60,$,$);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,120 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:29',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'Rumsfunktionskoder CC001 - 001',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('BIMAlliance','001','2014-08-25','Rumsfunktionskoder CC001 - 001','Klasslista rumsfunktionskoder Malm\X2\00F6\X0\ Stadsfastigheter','ttp://tools.bimalliance.se/fi2listor/Klasslistor.aspx',('-'));
#3=IFCRELASSOCIATESCLASSIFICATION('1P_4sDwnf8gxT5Xzy60GRt',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'20','Arbetslokaler',#2,$,$);
#5=IFCCLASSIFICATIONREFERENCE($,'20-01','Kontor',#4,'arbetsrum, kurator',$);
#6=IFCCLASSIFICATIONREFERENCE($,'20-02','Kontorslandskap',#4,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'20-03','Konferensrum',#4,'Sammantr\X2\00E4\X0\desrum',$);
#8=IFCCLASSIFICATIONREFERENCE($,'20-04','Grupprum',#4,'samtal, klubbrum',$);
#9=IFCCLASSIFICATIONREFERENCE($,'20-05','Expedition',#4,'reception, expedition, mottagning',$);
#10=IFCCLASSIFICATIONREFERENCE($,'20-06','Kopiering',#4,'skrivare',$);
#11=IFCCLASSIFICATIONREFERENCE($,'20-07','Pausrum',#4,'paus, personal, l\X2\00E4\X0\rarrum',$);
#12=IFCCLASSIFICATIONREFERENCE($,'20-08','Matrum',#4,'matsal',$);
#13=IFCCLASSIFICATIONREFERENCE($,'20-09','Vilrum',#4,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'20-10','Atelj\X2\00E9\X0\',#4,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'20-11','Bibliotek',#4,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'20-12','Samlingsrum',#4,'dagrum, gillestuga, studierum, lekrum,',$);
#17=IFCCLASSIFICATIONREFERENCE($,'20-13','Utbildningssal',#4,'Basrum, Lektionssal, Bild, data, musik, hemkunskap, klassrumsl\X2\00F6\X0\jd, textilsl\X2\00F6\X0\jd,Ytbehandling, NO, tr\X2\00E4\X0\sl\X2\00F6\X0\jd, metallsl\X2\00F6\X0\jd',$);
#18=IFCCLASSIFICATIONREFERENCE($,'20-14','Behandling',#4,'l\X2\00E4\X0\karmottagning, aktivitetsrum, sjukgymnast, sk\X2\00F6\X0\teskemottagning, tandl\X2\00E4\X0\karmottagning, motionsrum',$);
#19=IFCCLASSIFICATIONREFERENCE($,'20-15','Aktivitetsrum',#4,'inom social resursf\X2\00F6\X0\rvaltning.',$);
#20=IFCCLASSIFICATIONREFERENCE($,'20-16','Laboratorie',#4,'laboratorierum',$);
#21=IFCCLASSIFICATIONREFERENCE($,'21','Utrymmen f\X2\00F6\X0\r boende',#2,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'21-01','Sovrum',#21,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'21-02','Vardagsrum',#21,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'21-03','Allrum',#21,'studentrum, \X2\00E4\X0\ldreboende; vardagsrum m. sovalkov.',$);
#25=IFCCLASSIFICATIONREFERENCE($,'22','Publika Utrymmen',#2,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'22-01','Foaj\X2\00E9\X0\',#25,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'22-02','Salong',#25,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'22-03','Utst\X2\00E4\X0\llning',#25,'galleri, utst\X2\00E4\X0\llninglokal',$);
#29=IFCCLASSIFICATIONREFERENCE($,'22-04','Aula/skrivsal',#25,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'22-05','Torg',#25,'elevrum, fritidslokal, uppeh\X2\00E5\X0\llsrum, ',$);
#31=IFCCLASSIFICATIONREFERENCE($,'22-06','Butik',#25,'biljettf\X2\00F6\X0\rs\X2\00E4\X0\ljning',$);
#32=IFCCLASSIFICATIONREFERENCE($,'22-07','Restaurang',#25,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'22-08','Caf\X2\00E9\X0\',#25,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'22-09','Idrottshall',#25,'spelplan, gymnastiksal',$);
#35=IFCCLASSIFICATIONREFERENCE($,'22-10','L\X2\00E4\X0\ktare',#25,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'22-11','V\X2\00E4\X0\ntrum',#25,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'23','Kommunikations-utrymmen',#2,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'23-01','Entr\X2\00E9\X0\',#37,'groventr\X2\00E9\X0\, huvudentr\X2\00E9\X0\',$);
#39=IFCCLASSIFICATIONREFERENCE($,'23-02','Vindf\X2\00E5\X0\ng',#37,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'23-03','Korridor',#37,'hall, passage',$);
#41=IFCCLASSIFICATIONREFERENCE($,'23-04','Trappa',#37,'trapphus, trapphall',$);
#42=IFCCLASSIFICATIONREFERENCE($,'23-05','Hiss',#37,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'23-06','Hisshall',#37,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'23-07','Entresoleplan',#37,'balkong',$);
#45=IFCCLASSIFICATIONREFERENCE($,'23-08','Kapprum',#37,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'23-09','Veranda',#37,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'23-10','Balkong',#37,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'23-11','Kulvert',#37,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'24','Utrymmen f\X2\00F6\X0\r skydd och f\X2\00F6\X0\rsvar',#2,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'24-01','Skyddsrum',#49,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'24-02','Skyddsrumsf\X2\00F6\X0\rr\X2\00E5\X0\d',#49,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'25','Hygienutrymmen',#2,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'25-01','WC',#52,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'25-02','RWC',#52,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'25-03','WC/Dusch',#52,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'25-04','Dusch',#52,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'25-05','WC/Bad',#52,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'25-06','Bastu',#52,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'25-07','F\X2\00F6\X0\rrum',#52,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'25-08','Sk\X2\00F6\X0\trum',#52,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'25-09','K\X2\00F6\X0\k',#52,'mottagning, tillagningsk\X2\00F6\X0\k, bostadsk\X2\00F6\X0\k',$);
#62=IFCCLASSIFICATIONREFERENCE($,'25-10','Diskrum',#52,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'25-11','Pentry',#52,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'25-12','Renseri',#52,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'25-13','Frys-/kylrum',#52,'kylrum, frysrum',$);
#66=IFCCLASSIFICATIONREFERENCE($,'25-14','Sk\X2\00F6\X0\ljrum',#52,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'25-15','Tv\X2\00E4\X0\tt',#52,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'26','Driftutrymmen',#2,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'26-01','Schakt',#68,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'26-02','Undercentral',#68,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'26-03','Pannrum',#68,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'26-04','Fl\X2\00E4\X0\ktrum',#68,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'26-05','Elcenttral',#68,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'26-06','El/telenisch',#68,'telerum',$);
#75=IFCCLASSIFICATIONREFERENCE($,'26-07','Datanisch',#68,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'26-08','Serverrum',#68,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'26-09','Hissmaskinrum',#68,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'26-10','Teknisk kulvert',#68,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'26-11','Reningsanl\X2\00E4\X0\ggning',#68,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'26-12','Kylmaskinrum',#68,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'26-13','Gasf\X2\00E5\X0\ng',#68,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'26-14','Sp\X2\00E5\X0\nsug',#68,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'27','Specialutrymmen',#2,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'27-01','Orkesterdike',#83,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'27-02','Repetitionslokal',#83,'\X2\00F6\X0\vning',$);
#86=IFCCLASSIFICATIONREFERENCE($,'27-03','Scen',#83,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'27-04','Inspelningstudio',#83,'studio, mediatek',$);
#88=IFCCLASSIFICATIONREFERENCE($,'27-05','Loge',#83,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'27-06','Akvarie',#83,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'27-07','Bass\X2\00E4\X0\ng',#83,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'27-08','Terrarie',#83,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'27-09','Djurlokal',#83,'stall',$);
#93=IFCCLASSIFICATIONREFERENCE($,'27-10','Ishall',#83,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'27-11','Verkstad',#83,'smedja',$);
#95=IFCCLASSIFICATIONREFERENCE($,'27-12','V\X2\00E4\X0\xthus',#83,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'28','St\X2\00F6\X0\dfunktioner',#2,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'28-01','Apparatrum',#96,'Apparatrum, sterilrum, teknikrum, preparation',$);
#98=IFCCLASSIFICATIONREFERENCE($,'28-02','Arkiv',#96,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'28-03','F\X2\00F6\X0\rr\X2\00E5\X0\d',#96,'Barnvagn, redskap, garderob, vagnhall, materialrum, klk',$);
#100=IFCCLASSIFICATIONREFERENCE($,'28-04','M\X2\00F6\X0\rkrum',#96,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'28-05','Nodrum',#96,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'28-06','Omkl\X2\00E4\X0\dning',#96,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'28-07','Sortering',#96,'post, uppackning, vaktm\X2\00E4\X0\steri, varuintag',$);
#104=IFCCLASSIFICATIONREFERENCE($,'28-08','Lager',#96,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'28-09','Garage',#96,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'28-10','Soprum',#96,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'28-11','Milj\X2\00F6\X0\rum',#96,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'28-12','Torkrum',#96,'t\X2\00E5\X0\gvind',$);
#109=IFCCLASSIFICATIONREFERENCE($,'28-13','Vind',#96,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'28-14','Disponibelt',#96,'Ospecificerat',$);
#111=IFCCLASSIFICATIONREFERENCE($,'28-15','St\X2\00E4\X0\drum',#96,$,$);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,924 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:29',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'CCS',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('Molio','R1 (Dansk udgave)','2017-06-21','CCS',$,'http://ccs.bips.dk/News/CCS_Vaerktoejer',$);
#3=IFCRELASSOCIATESCLASSIFICATION('16Vg7v96zBfeP3BuNvWizJ',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'Bygv\X2\00E6\X0\rksanvendelse',$,#2,'Tildeler klassifikation af funktion til IFC Building og IFC Site baseret p\X2\00E5\X0\ CCS (R0) specifikationen.',$);
#5=IFCCLASSIFICATIONREFERENCE($,'[E]A??','Bygning til menneskeligt behov og virke',#4,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'[E]AA?','Beboelsesbygning',#5,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'[E]AAA','Enfamilieshus',#6,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'[E]AAB','Flerfamilieshus',#6,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'[E]AAC','Boligkompleks',#6,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'[E]AB?','Hotel- og restaurationsbygning',#5,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'[E]ABA','Hotelbygning',#10,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'[E]ABB','Vandrehjemsbygning',#10,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'[E]ABC','Restaurantbygning',#10,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'[E]AC?','Hygiejnebygning',#5,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'[E]ACA','Toiletbygning',#14,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'[E]ACB','Badebygning',#14,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'[E]ACC','Saunabygning',#14,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'[E]ACD','Omkl\X2\00E6\X0\dningsbygning',#14,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'[E]AD?','Isolationsbygning',#5,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'[E]ADA','Beskyttelsesbygning',#19,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'[E]ADB','F\X2\00E6\X0\ngselsbygning',#19,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'[E]AE?','Administrationsbygning',#5,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'[E]AEA','Kontorbygning',#22,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'[E]AEB','Servicebygning',#22,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'[E]AEC','Beredskabsbygning',#22,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'[E]AF?','Produktionsbygning',#5,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'[E]AFA','Fabrikationsbygning',#26,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'[E]AFB','V\X2\00E6\X0\rkstedsbygning',#26,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'[E]AG?','Handelsbygning',#5,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'[E]AGA','Butiksbygning',#29,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'[E]AGB','Butikscenter',#29,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'[E]AGC','Galleri',#29,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'[E]AGD','Messehal',#29,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'[E]AH?','Undervisningsbygning',#5,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'[E]AHA','Skolebygning',#34,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'[E]AHB','Universitetsbygning',#34,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'[E]AHC','Kursuscenterbygning',#34,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'[E]AJ?','Omsorgsbygning',#5,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'[E]AJA','B\X2\00F8\X0\rneinstitutionsbygning',#38,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'[E]AJB','Hospitalsbygning',#38,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'[E]AJC','Plejehjemsbygning',#38,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'[E]AK?','Fritidsbygning',#5,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'[E]AKA','Sommerhus',#42,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'[E]AKB','Kolonihavehus',#42,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'[E]AKC','Lysthus',#42,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'[E]AKD','Udestue',#42,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'[E]AL?','Sportsbygning',#5,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'[E]ALA','Sportshal',#47,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'[E]ALB','Tilskuertribune',#47,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'[E]ALC','Sv\X2\00F8\X0\mmehal',#47,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'[E]ALD','Ridehus',#47,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'[E]ALE','Udspringst\X2\00E5\X0\rn',#47,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'[E]ALF','Bowlinghal',#47,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'[E]AM?','Kulturbygning',#5,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'[E]AMA','Teaterbygning',#54,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'[E]AMB','Koncertbygning',#54,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'[E]AMC','Udstillingsbygning',#54,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'[E]AMD','Planetarium',#54,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'[E]AME','Biografbygning',#54,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'[E]AMF','Biblioteksbygning',#54,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'[E]AMG','Multihus',#54,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'[E]AN?','Forsamlingsbygning',#5,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'[E]ANA','Beboerhus',#62,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'[E]ANB','Medborgerhus',#62,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'[E]ANC','Klubhus',#62,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'[E]AND','Religionsbygning',#62,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'[E]AP?','Opbevaringsbygning',#5,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'[E]APA','Materialebygning',#67,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'[E]APB','Materielbygning',#67,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'[E]APC','Dyrebygning',#67,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'[E]APD','Plantebygning',#67,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'[E]APE','Morsbygning',#67,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'[E]AQ?','Fordelingsbygning',#5,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'[E]AQA','Gangbygning',#73,$,$);
#75=IFCCLASSIFICATIONREFERENCE($,'[E]AQB','Trappet\X2\00E5\X0\rn',#73,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'[E]AQC','Elevatorbygning',#73,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'[E]AQD','Portbygning',#73,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'[E]B??','Teknikanl\X2\00E6\X0\g',#4,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'[E]BA?','Produktionsanl\X2\00E6\X0\g',#78,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'[E]BAA','Kraftvarmev\X2\00E6\X0\rk',#79,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'[E]BAB','Vandv\X2\00E6\X0\rk',#79,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'[E]BAC','R\X2\00E5\X0\stofanl\X2\00E6\X0\g',#79,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'[E]BB?','Forbindelsesanl\X2\00E6\X0\g',#78,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'[E]BBA','Signalanl\X2\00E6\X0\g',#83,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'[E]BBB','Masteanl\X2\00E6\X0\g',#83,$,$);
#86=IFCCLASSIFICATIONREFERENCE($,'[E]BBC','Kabelanl\X2\00E6\X0\g',#83,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'[E]BBD','R\X2\00F8\X0\rledningsanl\X2\00E6\X0\g',#83,$,$);
#88=IFCCLASSIFICATIONREFERENCE($,'[E]BBE','Koblingsanl\X2\00E6\X0\g',#83,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'[E]BC?','Bortskaffelsesanl\X2\00E6\X0\g',#78,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'[E]BCA','Skorstensanl\X2\00E6\X0\g',#89,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'[E]BCB','Kloakanl\X2\00E6\X0\g',#89,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'[E]BD?','Transportanl\X2\00E6\X0\g',#78,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'[E]BDA','Krananl\X2\00E6\X0\g',#92,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'[E]BDB','Transport\X2\00F8\X0\ranl\X2\00E6\X0\g',#92,$,$);
#95=IFCCLASSIFICATIONREFERENCE($,'[E]BDC','Sv\X2\00E6\X0\vebane',#92,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'[E]BE?','Opbevaringsanl\X2\00E6\X0\g',#78,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'[E]BEA','M\X2\00E5\X0\lestation',#96,$,$);
#98=IFCCLASSIFICATIONREFERENCE($,'[E]BEB','Deponeringsplads',#96,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'[E]BEC','Containerplads',#96,$,$);
#100=IFCCLASSIFICATIONREFERENCE($,'[E]BED','Beholderanl\X2\00E6\X0\g',#96,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'[E]BEE','Bassin',#96,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'[E]BF?','Behandlingsanl\X2\00E6\X0\g',#78,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'[E]BFA','Pumpestation',#102,$,$);
#104=IFCCLASSIFICATIONREFERENCE($,'[E]BFB','Rensningsbassin',#102,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'[E]BFC','Slamrensningsanl\X2\00E6\X0\g',#102,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'[E]BG?','Forlystelsesanl\X2\00E6\X0\g',#78,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'[E]BGA','Rutchebane',#106,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'[E]BGB','Karrussel',#106,$,$);
#109=IFCCLASSIFICATIONREFERENCE($,'[E]BGC','Pariserhjul',#106,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'[E]BGD','Springvand',#106,$,$);
#111=IFCCLASSIFICATIONREFERENCE($,'[E]C??','Infrastrukturanl\X2\00E6\X0\g',#4,$,$);
#112=IFCCLASSIFICATIONREFERENCE($,'[E]CA?','Trafikanl\X2\00E6\X0\g',#111,$,$);
#113=IFCCLASSIFICATIONREFERENCE($,'[E]CAA','Bro',#112,$,$);
#114=IFCCLASSIFICATIONREFERENCE($,'[E]CAB','Tunnel',#112,$,$);
#115=IFCCLASSIFICATIONREFERENCE($,'[E]CAC','Trafikkanal',#112,$,$);
#116=IFCCLASSIFICATIONREFERENCE($,'[E]CAD','Skinneanl\X2\00E6\X0\g',#112,$,$);
#117=IFCCLASSIFICATIONREFERENCE($,'[E]CAE','Vej',#112,$,$);
#118=IFCCLASSIFICATIONREFERENCE($,'[E]CAF','Fortov',#112,$,$);
#119=IFCCLASSIFICATIONREFERENCE($,'[E]CAG','Sti',#112,$,$);
#120=IFCCLASSIFICATIONREFERENCE($,'[E]CB?','Terminalanl\X2\00E6\X0\g',#111,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'[E]CBA','Kaj',#120,$,$);
#122=IFCCLASSIFICATIONREFERENCE($,'[E]CBB','Perron',#120,$,$);
#123=IFCCLASSIFICATIONREFERENCE($,'[E]CBC','Vejkryds',#120,$,$);
#124=IFCCLASSIFICATIONREFERENCE($,'[E]CBD','Togterminal',#120,$,$);
#125=IFCCLASSIFICATIONREFERENCE($,'[E]CBE','Lufthavnsterminal',#120,$,$);
#126=IFCCLASSIFICATIONREFERENCE($,'[E]CBF','Busterminal',#120,$,$);
#127=IFCCLASSIFICATIONREFERENCE($,'[E]CBG','F\X2\00E6\X0\rgeterminal',#120,$,$);
#128=IFCCLASSIFICATIONREFERENCE($,'[E]CC?','Parkeringsanl\X2\00E6\X0\g',#111,$,$);
#129=IFCCLASSIFICATIONREFERENCE($,'[E]CCA','Cykelparkeringsanl\X2\00E6\X0\g',#128,$,$);
#130=IFCCLASSIFICATIONREFERENCE($,'[E]CCB','Parkeringsplads',#128,$,$);
#131=IFCCLASSIFICATIONREFERENCE($,'[E]CCC','Ranger anl\X2\00E6\X0\g',#128,$,$);
#132=IFCCLASSIFICATIONREFERENCE($,'[E]CCD','Flyveplads',#128,$,$);
#133=IFCCLASSIFICATIONREFERENCE($,'[E]CD?','Kommunikationsbygning',#111,$,$);
#134=IFCCLASSIFICATIONREFERENCE($,'[E]CDA','Kontrolt\X2\00E5\X0\rn',#133,$,$);
#135=IFCCLASSIFICATIONREFERENCE($,'[E]CDB','Antennet\X2\00E5\X0\rn',#133,$,$);
#136=IFCCLASSIFICATIONREFERENCE($,'[E]CDC','Fyrt\X2\00E5\X0\rn',#133,$,$);
#137=IFCCLASSIFICATIONREFERENCE($,'[E]CDD','Klokket\X2\00E5\X0\rn',#133,$,$);
#138=IFCCLASSIFICATIONREFERENCE($,'[E]CE?','Vandreguleringsanl\X2\00E6\X0\g',#111,$,$);
#139=IFCCLASSIFICATIONREFERENCE($,'[E]CEA','D\X2\00E6\X0\mning',#138,$,$);
#140=IFCCLASSIFICATIONREFERENCE($,'[E]CEB','Kanal',#138,$,$);
#141=IFCCLASSIFICATIONREFERENCE($,'[E]CEC','Stemmev\X2\00E6\X0\rk',#138,$,$);
#142=IFCCLASSIFICATIONREFERENCE($,'[E]CED','Sluseanl\X2\00E6\X0\g',#138,$,$);
#143=IFCCLASSIFICATIONREFERENCE($,'[E]CEE','Mole',#138,$,$);
#144=IFCCLASSIFICATIONREFERENCE($,'[E]D??','Landskab',#4,$,$);
#145=IFCCLASSIFICATIONREFERENCE($,'[E]DA?','Naturomr\X2\00E5\X0\de',#144,$,$);
#146=IFCCLASSIFICATIONREFERENCE($,'[E]DAA','Strand',#145,$,$);
#147=IFCCLASSIFICATIONREFERENCE($,'[E]DAB','Klit',#145,$,$);
#148=IFCCLASSIFICATIONREFERENCE($,'[E]DAC','S\X2\00F8\X0\',#145,$,$);
#149=IFCCLASSIFICATIONREFERENCE($,'[E]DAD','Eng',#145,$,$);
#150=IFCCLASSIFICATIONREFERENCE($,'[E]DAE','V\X2\00E5\X0\domr\X2\00E5\X0\de',#145,$,$);
#151=IFCCLASSIFICATIONREFERENCE($,'[E]DAF','Vandl\X2\00F8\X0\b',#145,$,$);
#152=IFCCLASSIFICATIONREFERENCE($,'[E]DB?','Rekreativt omr\X2\00E5\X0\de',#144,$,$);
#153=IFCCLASSIFICATIONREFERENCE($,'[E]DBA','Have',#152,$,$);
#154=IFCCLASSIFICATIONREFERENCE($,'[E]DBB','Park',#152,$,$);
#155=IFCCLASSIFICATIONREFERENCE($,'[E]DBC','Campingplads',#152,$,$);
#156=IFCCLASSIFICATIONREFERENCE($,'[E]DC?','Forsamlingsomr\X2\00E5\X0\de',#144,$,$);
#157=IFCCLASSIFICATIONREFERENCE($,'[E]DCA','M\X2\00F8\X0\deplads',#156,$,$);
#158=IFCCLASSIFICATIONREFERENCE($,'[E]DCB','Torv',#156,$,$);
#159=IFCCLASSIFICATIONREFERENCE($,'[E]DCC','Tr\X2\00E6\X0\ningsplads',#156,$,$);
#160=IFCCLASSIFICATIONREFERENCE($,'[E]DCD','Legeplads',#156,$,$);
#161=IFCCLASSIFICATIONREFERENCE($,'[E]DD?','Produktionsomr\X2\00E5\X0\de',#144,$,$);
#162=IFCCLASSIFICATIONREFERENCE($,'[E]DDA','Grund',#161,$,$);
#163=IFCCLASSIFICATIONREFERENCE($,'[E]DDB','Brud',#161,$,$);
#164=IFCCLASSIFICATIONREFERENCE($,'[E]DDC','Grav',#161,$,$);
#165=IFCCLASSIFICATIONREFERENCE($,'[E]DDD','Skov',#161,$,$);
#166=IFCCLASSIFICATIONREFERENCE($,'[E]DDE','Mark',#161,$,$);
#167=IFCCLASSIFICATIONREFERENCE($,'[E]DE?','Sportsanl\X2\00E6\X0\g',#144,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'[E]DEA','Boldbane',#167,$,$);
#169=IFCCLASSIFICATIONREFERENCE($,'[E]DEB','V\X2\00E6\X0\ddel\X2\00F8\X0\bsbane',#167,$,$);
#170=IFCCLASSIFICATIONREFERENCE($,'[E]DEC','Atletikbane',#167,$,$);
#171=IFCCLASSIFICATIONREFERENCE($,'[E]DED','Sv\X2\00F8\X0\mmebassin',#167,$,$);
#172=IFCCLASSIFICATIONREFERENCE($,'[E]E??','Monument',#4,$,$);
#173=IFCCLASSIFICATIONREFERENCE($,'[E]EA?','Mindesm\X2\00E6\X0\rke',#172,$,$);
#174=IFCCLASSIFICATIONREFERENCE($,'[E]EAA','Kulturminde',#173,$,$);
#175=IFCCLASSIFICATIONREFERENCE($,'[E]EAB','Fortidsminde',#173,$,$);
#176=IFCCLASSIFICATIONREFERENCE($,'[E]Z??','Ikke defineret',#4,$,$);
#177=IFCCLASSIFICATIONREFERENCE($,'[E]ZZ?','Ikke defineret',#176,$,$);
#178=IFCCLASSIFICATIONREFERENCE($,'[E]ZZZ','Ikke defineret',#177,$,$);
#179=IFCCLASSIFICATIONREFERENCE($,'Rumanvendelse',$,#2,'Tildeler klassifikation af funktion til IFC Spaces (= ARCHICAD zoner) og IFC Zones baseret p\X2\00E5\X0\ CCS (R1) specifikationen.',$);
#180=IFCCLASSIFICATIONREFERENCE($,'[A]A??','Rum til menneskeligt behov og virke',#179,$,$);
#181=IFCCLASSIFICATIONREFERENCE($,'[A]AA?','Opholdsrum',#180,$,$);
#182=IFCCLASSIFICATIONREFERENCE($,'[A]AAA','V\X2\00E6\X0\relse',#181,$,$);
#183=IFCCLASSIFICATIONREFERENCE($,'[A]AAB','Stue',#181,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'[A]AAC','Venterum',#181,$,$);
#185=IFCCLASSIFICATIONREFERENCE($,'[A]AAD','G\X2\00E5\X0\rdrum',#181,$,$);
#186=IFCCLASSIFICATIONREFERENCE($,'[A]AB?','Hygiejnerum',#180,$,$);
#187=IFCCLASSIFICATIONREFERENCE($,'[A]ABA','Badev\X2\00E6\X0\relse',#186,$,$);
#188=IFCCLASSIFICATIONREFERENCE($,'[A]ABB','Toilet',#186,$,$);
#189=IFCCLASSIFICATIONREFERENCE($,'[A]ABC','Puslerum',#186,$,$);
#190=IFCCLASSIFICATIONREFERENCE($,'[A]ABD','Omkl\X2\00E6\X0\dningsrum',#186,$,$);
#191=IFCCLASSIFICATIONREFERENCE($,'[A]ABE','Baderum',#186,$,$);
#192=IFCCLASSIFICATIONREFERENCE($,'[A]ABF','Sauna',#186,$,$);
#193=IFCCLASSIFICATIONREFERENCE($,'[A]AC?','Isolationsrum',#180,$,$);
#194=IFCCLASSIFICATIONREFERENCE($,'[A]ACA','Beskyttelsesrum',#193,$,$);
#195=IFCCLASSIFICATIONREFERENCE($,'[A]ACB','Celle',#193,$,$);
#196=IFCCLASSIFICATIONREFERENCE($,'[A]AD?','Arbejdsrum',#180,$,$);
#197=IFCCLASSIFICATIONREFERENCE($,'[A]ADA','Kontor',#196,$,$);
#198=IFCCLASSIFICATIONREFERENCE($,'[A]ADB','M\X2\00F8\X0\derum',#196,$,$);
#199=IFCCLASSIFICATIONREFERENCE($,'[A]ADC','Reception',#196,$,$);
#200=IFCCLASSIFICATIONREFERENCE($,'[A]ADD','Salgslokale',#196,$,$);
#201=IFCCLASSIFICATIONREFERENCE($,'[A]ADE','Undervisningsrum',#196,$,$);
#202=IFCCLASSIFICATIONREFERENCE($,'[A]ADF','Studierum',#196,$,$);
#203=IFCCLASSIFICATIONREFERENCE($,'[A]ADG','Vaskerum',#196,$,$);
#204=IFCCLASSIFICATIONREFERENCE($,'[A]ADH','Pakkerum',#196,$,$);
#205=IFCCLASSIFICATIONREFERENCE($,'[A]ADJ','Behandlingsrum',#196,$,$);
#206=IFCCLASSIFICATIONREFERENCE($,'[A]ADK','Unders\X2\00F8\X0\gelsesrum',#196,$,$);
#207=IFCCLASSIFICATIONREFERENCE($,'[A]ADL','Overv\X2\00E5\X0\gningsrum',#196,$,$);
#208=IFCCLASSIFICATIONREFERENCE($,'[A]ADM','Betragterrum',#196,$,$);
#209=IFCCLASSIFICATIONREFERENCE($,'[A]ADN','Mediev\X2\00E6\X0\rksted',#196,$,$);
#210=IFCCLASSIFICATIONREFERENCE($,'[A]ADP','Varemodtagelsesrum',#196,$,$);
#211=IFCCLASSIFICATIONREFERENCE($,'[A]ADQ','Postrum',#196,$,$);
#212=IFCCLASSIFICATIONREFERENCE($,'[A]AE?','Produktionsrum',#180,$,$);
#213=IFCCLASSIFICATIONREFERENCE($,'[A]AEA','K\X2\00F8\X0\kken',#212,$,$);
#214=IFCCLASSIFICATIONREFERENCE($,'[A]AEB','Materialev\X2\00E6\X0\rksted',#212,$,$);
#215=IFCCLASSIFICATIONREFERENCE($,'[A]AEC','Teknikv\X2\00E6\X0\rksted',#212,$,$);
#216=IFCCLASSIFICATIONREFERENCE($,'[A]AED','Kunstv\X2\00E6\X0\rksted',#212,$,$);
#217=IFCCLASSIFICATIONREFERENCE($,'[A]AF?','Fors\X2\00F8\X0\gsrum',#180,$,$);
#218=IFCCLASSIFICATIONREFERENCE($,'[A]AFA','Tekniklaboratorium',#217,$,$);
#219=IFCCLASSIFICATIONREFERENCE($,'[A]AFB','Materialelaboratorium',#217,$,$);
#220=IFCCLASSIFICATIONREFERENCE($,'[A]AFC','Biologilaboratorium',#217,$,$);
#221=IFCCLASSIFICATIONREFERENCE($,'[A]AG?','Udfoldelsesrum',#180,$,$);
#222=IFCCLASSIFICATIONREFERENCE($,'[A]AGA','Sportshal',#221,$,$);
#223=IFCCLASSIFICATIONREFERENCE($,'[A]AGB','Tr\X2\00E6\X0\ningsrum',#221,$,$);
#224=IFCCLASSIFICATIONREFERENCE($,'[A]AGC','\X2\00D8\X0\verum',#221,$,$);
#225=IFCCLASSIFICATIONREFERENCE($,'[A]AGD','Scenerum',#221,$,$);
#226=IFCCLASSIFICATIONREFERENCE($,'[A]AGE','Legerum',#221,$,$);
#227=IFCCLASSIFICATIONREFERENCE($,'[A]AH?','Forsamlingsrum',#180,$,$);
#228=IFCCLASSIFICATIONREFERENCE($,'[A]AHA','Spiserum',#227,$,$);
#229=IFCCLASSIFICATIONREFERENCE($,'[A]AHB','Auditorium',#227,$,$);
#230=IFCCLASSIFICATIONREFERENCE($,'[A]AHC','Sal',#227,$,$);
#231=IFCCLASSIFICATIONREFERENCE($,'[A]AHD','Udstillingsrum',#227,$,$);
#232=IFCCLASSIFICATIONREFERENCE($,'[A]AHE','Religi\X2\00F8\X0\se rum',#227,$,$);
#233=IFCCLASSIFICATIONREFERENCE($,'[A]AHF','Biblioteksrum',#227,$,$);
#234=IFCCLASSIFICATIONREFERENCE($,'[A]C??','Rum til opbevaring',#179,$,$);
#235=IFCCLASSIFICATIONREFERENCE($,'[A]CA?','Materialerum',#234,$,$);
#236=IFCCLASSIFICATIONREFERENCE($,'[A]CAA','Affaldsrum',#235,$,$);
#237=IFCCLASSIFICATIONREFERENCE($,'[A]CAB','Kemikaliedepot',#235,$,$);
#238=IFCCLASSIFICATIONREFERENCE($,'[A]CAC','Medicindepot',#235,$,$);
#239=IFCCLASSIFICATIONREFERENCE($,'[A]CAD','Informationsarkiv',#235,$,$);
#240=IFCCLASSIFICATIONREFERENCE($,'[A]CAE','V\X2\00E6\X0\skedepot',#235,$,$);
#241=IFCCLASSIFICATIONREFERENCE($,'[A]CAF','R\X2\00E5\X0\stofdepot',#235,$,$);
#242=IFCCLASSIFICATIONREFERENCE($,'[A]CAG','F\X2\00F8\X0\devaredepot',#235,$,$);
#243=IFCCLASSIFICATIONREFERENCE($,'[A]CAH','V\X2\00E6\X0\rdidepot',#235,$,$);
#244=IFCCLASSIFICATIONREFERENCE($,'[A]CAJ','Emballagedepot',#235,$,$);
#245=IFCCLASSIFICATIONREFERENCE($,'[A]CAK','Bekl\X2\00E6\X0\dningsdepot',#235,$,$);
#246=IFCCLASSIFICATIONREFERENCE($,'[A]CAL','Byggevaredepot',#235,$,$);
#247=IFCCLASSIFICATIONREFERENCE($,'[A]CB?','Materielrum',#234,$,$);
#248=IFCCLASSIFICATIONREFERENCE($,'[A]CBA','Inventardepot',#247,$,$);
#249=IFCCLASSIFICATIONREFERENCE($,'[A]CBB','Redskabsdepot',#247,$,$);
#250=IFCCLASSIFICATIONREFERENCE($,'[A]CBC','Apparatdepot',#247,$,$);
#251=IFCCLASSIFICATIONREFERENCE($,'[A]CBD','Transportmiddeldepot',#247,$,$);
#252=IFCCLASSIFICATIONREFERENCE($,'[A]CBE','Reng\X2\00F8\X0\ringsrum',#247,$,$);
#253=IFCCLASSIFICATIONREFERENCE($,'[A]CC?','Dyrerum',#234,$,$);
#254=IFCCLASSIFICATIONREFERENCE($,'[A]CCA','Bur',#253,$,$);
#255=IFCCLASSIFICATIONREFERENCE($,'[A]CCB','B\X2\00E5\X0\s',#253,$,$);
#256=IFCCLASSIFICATIONREFERENCE($,'[A]CCC','Stald',#253,$,$);
#257=IFCCLASSIFICATIONREFERENCE($,'[A]CCD','Bassin',#253,$,$);
#258=IFCCLASSIFICATIONREFERENCE($,'[A]CD?','Planterum',#234,$,$);
#259=IFCCLASSIFICATIONREFERENCE($,'[A]CDA','V\X2\00E6\X0\ksthus',#258,$,$);
#260=IFCCLASSIFICATIONREFERENCE($,'[A]CDB','Haverum',#258,$,$);
#261=IFCCLASSIFICATIONREFERENCE($,'[A]CE?','Morsrum',#234,$,$);
#262=IFCCLASSIFICATIONREFERENCE($,'[A]CEA','Ligrum',#261,$,$);
#263=IFCCLASSIFICATIONREFERENCE($,'[A]CEB','Gravkammer',#261,$,$);
#264=IFCCLASSIFICATIONREFERENCE($,'[A]D??','Rum til tekniske systemer',#179,$,$);
#265=IFCCLASSIFICATIONREFERENCE($,'[A]DA?','Driftsteknikrum',#264,$,$);
#266=IFCCLASSIFICATIONREFERENCE($,'[A]DAA','El-teknikrum',#265,$,$);
#267=IFCCLASSIFICATIONREFERENCE($,'[A]DAB','IT-teknikrum',#265,$,$);
#268=IFCCLASSIFICATIONREFERENCE($,'[A]DAC','Maskinteknikrum',#265,$,$);
#269=IFCCLASSIFICATIONREFERENCE($,'[A]DAD','F\X2\00E6\X0\llesteknikrum',#265,$,$);
#270=IFCCLASSIFICATIONREFERENCE($,'[A]DB?','Udstyrsrum',#264,$,$);
#271=IFCCLASSIFICATIONREFERENCE($,'[A]DBA','Kontroludstyrsrum',#270,$,$);
#272=IFCCLASSIFICATIONREFERENCE($,'[A]DBB','Produktionsudstyrsrum',#270,$,$);
#273=IFCCLASSIFICATIONREFERENCE($,'[A]DBC','Serviceudstyrsrum',#270,$,$);
#274=IFCCLASSIFICATIONREFERENCE($,'[A]DBD','Unders\X2\00F8\X0\gelsesudstyrsrum',#270,$,$);
#275=IFCCLASSIFICATIONREFERENCE($,'[A]E??','Rum til infrastruktur',#179,$,$);
#276=IFCCLASSIFICATIONREFERENCE($,'[A]EA?','Fordelingsrum',#275,$,$);
#277=IFCCLASSIFICATIONREFERENCE($,'[A]EAA','Forhal',#276,$,$);
#278=IFCCLASSIFICATIONREFERENCE($,'[A]EAB','Sluse',#276,$,$);
#279=IFCCLASSIFICATIONREFERENCE($,'[A]EAC','Gang',#276,$,$);
#280=IFCCLASSIFICATIONREFERENCE($,'[A]EAD','Trapperum',#276,$,$);
#281=IFCCLASSIFICATIONREFERENCE($,'[A]EAE','Elevatorrum',#276,$,$);
#282=IFCCLASSIFICATIONREFERENCE($,'[A]EAF','Portrum',#276,$,$);
#283=IFCCLASSIFICATIONREFERENCE($,'[A]EB?','Teknisk f\X2\00F8\X0\ringsrum',#275,$,$);
#284=IFCCLASSIFICATIONREFERENCE($,'[A]EBA','Servicegang',#283,$,$);
#285=IFCCLASSIFICATIONREFERENCE($,'[A]EBB','Skakt',#283,$,$);
#286=IFCCLASSIFICATIONREFERENCE($,'[A]EBC','Kanal',#283,$,$);
#287=IFCCLASSIFICATIONREFERENCE($,'[A]EC?','Transportrum',#275,$,$);
#288=IFCCLASSIFICATIONREFERENCE($,'[A]ECA','Fritrumsprofil',#287,$,$);
#289=IFCCLASSIFICATIONREFERENCE($,'[A]ECB','Tunnelrum',#287,$,$);
#290=IFCCLASSIFICATIONREFERENCE($,'[A]Z??','Ikke defineret',#179,$,$);
#291=IFCCLASSIFICATIONREFERENCE($,'[A]ZZ?','Ikke defineret',#290,$,$);
#292=IFCCLASSIFICATIONREFERENCE($,'[A]ZZZ','Ikke defineret',#291,$,$);
#293=IFCCLASSIFICATIONREFERENCE($,'Bygningsdele - Funktionelle systemer',$,#2,'Tildeler klassifikation efter funktion, placering og/eller form til ARCHICAD bygningsdele baseret p\X2\00E5\X0\ CCS (R1) specifikationen.',$);
#294=IFCCLASSIFICATIONREFERENCE($,'[L]A','Terr\X2\00E6\X0\nsystem',#293,$,$);
#295=IFCCLASSIFICATIONREFERENCE($,'[L]B','V\X2\00E6\X0\gsystem',#293,$,$);
#296=IFCCLASSIFICATIONREFERENCE($,'[L]C','D\X2\00E6\X0\ksystem',#293,$,$);
#297=IFCCLASSIFICATIONREFERENCE($,'[L]D','Tagsystem',#293,$,$);
#298=IFCCLASSIFICATIONREFERENCE($,'[L]E','Gas- og luftsystem',#293,$,$);
#299=IFCCLASSIFICATIONREFERENCE($,'[L]F','Vand- og v\X2\00E6\X0\skesystem',#293,$,$);
#300=IFCCLASSIFICATIONREFERENCE($,'[L]G','Afl\X2\00F8\X0\b- og affaldssystem',#293,$,$);
#301=IFCCLASSIFICATIONREFERENCE($,'[L]H','K\X2\00F8\X0\le- og varmesystem',#293,$,$);
#302=IFCCLASSIFICATIONREFERENCE($,'[L]J','Ventilationssystem',#293,$,$);
#303=IFCCLASSIFICATIONREFERENCE($,'[L]K','El-system',#293,$,$);
#304=IFCCLASSIFICATIONREFERENCE($,'[L]L','Automationsystem',#293,$,$);
#305=IFCCLASSIFICATIONREFERENCE($,'[L]M','IT- og kommunikationssystem',#293,$,$);
#306=IFCCLASSIFICATIONREFERENCE($,'[L]N','Transportsystem',#293,$,$);
#307=IFCCLASSIFICATIONREFERENCE($,'[L]P','Indretningssystem',#293,$,$);
#308=IFCCLASSIFICATIONREFERENCE($,'Bygningsdele - Tekniske systemer',$,#2,'Tildeler klassifikation efter funktion, placering og/eller form til ARCHICAD bygningsdele baseret p\X2\00E5\X0\ CCS (R1) specifikationen.',$);
#309=IFCCLASSIFICATIONREFERENCE($,'[L]A?','Opbyggende teknisk system',#308,$,$);
#310=IFCCLASSIFICATIONREFERENCE($,'[L]AA','Bel\X2\00E6\X0\gningsopbygning',#309,$,$);
#311=IFCCLASSIFICATIONREFERENCE($,'[L]AB','Fundamentsopbygning',#309,$,$);
#312=IFCCLASSIFICATIONREFERENCE($,'[L]AC','Etageadskillelsesopbygning',#309,$,$);
#313=IFCCLASSIFICATIONREFERENCE($,'[L]AD','V\X2\00E6\X0\gopbygning',#309,$,$);
#314=IFCCLASSIFICATIONREFERENCE($,'[L]AE','Tagopbygning',#309,$,$);
#315=IFCCLASSIFICATIONREFERENCE($,'[L]AF','Trappeopbygning',#309,$,$);
#316=IFCCLASSIFICATIONREFERENCE($,'[L]AG','Rampeopbygning',#309,$,$);
#317=IFCCLASSIFICATIONREFERENCE($,'[L]B?','Konstruktivt teknisk system',#308,$,$);
#318=IFCCLASSIFICATIONREFERENCE($,'[L]BA','Terr\X2\00E6\X0\nkonstruktion',#317,$,$);
#319=IFCCLASSIFICATIONREFERENCE($,'[L]BB','Fundamentskonstruktion',#317,$,$);
#320=IFCCLASSIFICATIONREFERENCE($,'[L]BC','D\X2\00E6\X0\kkonstruktion',#317,$,$);
#321=IFCCLASSIFICATIONREFERENCE($,'[L]BD','V\X2\00E6\X0\gkonstruktion',#317,$,$);
#322=IFCCLASSIFICATIONREFERENCE($,'[L]BE','Tagkonstruktion',#317,$,$);
#323=IFCCLASSIFICATIONREFERENCE($,'[L]BF','Gulvkonstruktion',#317,$,$);
#324=IFCCLASSIFICATIONREFERENCE($,'[L]BG','Loftkonstruktion',#317,$,$);
#325=IFCCLASSIFICATIONREFERENCE($,'[L]H?','Forsynende teknisk system',#308,$,$);
#326=IFCCLASSIFICATIONREFERENCE($,'[L]HA','Gas- og luftforsyningsanl\X2\00E6\X0\g',#325,$,$);
#327=IFCCLASSIFICATIONREFERENCE($,'[L]HB','Vandforsyningsanl\X2\00E6\X0\g',#325,$,$);
#328=IFCCLASSIFICATIONREFERENCE($,'[L]HC','K\X2\00F8\X0\leforsyningsanl\X2\00E6\X0\g',#325,$,$);
#329=IFCCLASSIFICATIONREFERENCE($,'[L]HD','Varmeforsyningsanl\X2\00E6\X0\g',#325,$,$);
#330=IFCCLASSIFICATIONREFERENCE($,'[L]HE','Kombineret varme- og k\X2\00F8\X0\leforsyningsanl\X2\00E6\X0\g',#325,$,$);
#331=IFCCLASSIFICATIONREFERENCE($,'[L]HF','Ventilationsanl\X2\00E6\X0\g',#325,$,$);
#332=IFCCLASSIFICATIONREFERENCE($,'[L]HG','El-forsyningsanl\X2\00E6\X0\g',#325,$,$);
#333=IFCCLASSIFICATIONREFERENCE($,'[L]HH','Belysningsanl\X2\00E6\X0\g',#325,$,$);
#334=IFCCLASSIFICATIONREFERENCE($,'[L]HJ','Signalforsyningsanl\X2\00E6\X0\g',#325,$,$);
#335=IFCCLASSIFICATIONREFERENCE($,'[L]J?','Transporterende teknisk system',#308,$,$);
#336=IFCCLASSIFICATIONREFERENCE($,'[L]JA','Gasfordelingsanl\X2\00E6\X0\g',#335,$,$);
#337=IFCCLASSIFICATIONREFERENCE($,'[L]JB','Vandfordelingsanl\X2\00E6\X0\g',#335,$,$);
#338=IFCCLASSIFICATIONREFERENCE($,'[L]JC','Kemikaliefordelingsanl\X2\00E6\X0\g',#335,$,$);
#339=IFCCLASSIFICATIONREFERENCE($,'[L]JD','Bortledningsanl\X2\00E6\X0\g',#335,$,$);
#340=IFCCLASSIFICATIONREFERENCE($,'[L]JE','Affaldsanl\X2\00E6\X0\g',#335,$,$);
#341=IFCCLASSIFICATIONREFERENCE($,'[L]JF','K\X2\00F8\X0\lefordelingsanl\X2\00E6\X0\g',#335,$,$);
#342=IFCCLASSIFICATIONREFERENCE($,'[L]JG','Varmefordelingsanl\X2\00E6\X0\g',#335,$,$);
#343=IFCCLASSIFICATIONREFERENCE($,'[L]JH','Kombineret varme- og k\X2\00F8\X0\lefordelingsanl\X2\00E6\X0\g',#335,$,$);
#344=IFCCLASSIFICATIONREFERENCE($,'[L]JJ','Luftfordelingsanl\X2\00E6\X0\g',#335,$,$);
#345=IFCCLASSIFICATIONREFERENCE($,'[L]JK','El-fordelingsanl\X2\00E6\X0\g',#335,$,$);
#346=IFCCLASSIFICATIONREFERENCE($,'[L]JL','Signalfordelingsanl\X2\00E6\X0\g',#335,$,$);
#347=IFCCLASSIFICATIONREFERENCE($,'[L]JM','Persontransportanl\X2\00E6\X0\g',#335,$,$);
#348=IFCCLASSIFICATIONREFERENCE($,'[L]JN','Godstransportanl\X2\00E6\X0\g',#335,$,$);
#349=IFCCLASSIFICATIONREFERENCE($,'[L]JP','Teknisk f\X2\00F8\X0\ringsanl\X2\00E6\X0\g',#335,$,$);
#350=IFCCLASSIFICATIONREFERENCE($,'[L]K?','Behandlende teknisk system',#308,$,$);
#351=IFCCLASSIFICATIONREFERENCE($,'[L]KA','Solafsk\X2\00E6\X0\rmningsanl\X2\00E6\X0\g',#350,$,$);
#352=IFCCLASSIFICATIONREFERENCE($,'[L]KB','D\X2\00F8\X0\r- og vinduesoplukkeanl\X2\00E6\X0\g',#350,$,$);
#353=IFCCLASSIFICATIONREFERENCE($,'[L]KC','Filteranl\X2\00E6\X0\g',#350,$,$);
#354=IFCCLASSIFICATIONREFERENCE($,'[L]KD','Udskilleranl\X2\00E6\X0\g',#350,$,$);
#355=IFCCLASSIFICATIONREFERENCE($,'[L]KE','Vandbehandlingsanl\X2\00E6\X0\g',#350,$,$);
#356=IFCCLASSIFICATIONREFERENCE($,'[L]KF','Pumpeanl\X2\00E6\X0\g',#350,$,$);
#357=IFCCLASSIFICATIONREFERENCE($,'[L]KG','Trykholde- og ekspansionsanl\X2\00E6\X0\g',#350,$,$);
#358=IFCCLASSIFICATIONREFERENCE($,'[L]KH','Omformeranl\X2\00E6\X0\g',#350,$,$);
#359=IFCCLASSIFICATIONREFERENCE($,'[L]KJ','Antenneanl\X2\00E6\X0\g',#350,$,$);
#360=IFCCLASSIFICATIONREFERENCE($,'[L]KK','Vejrstationsanl\X2\00E6\X0\g',#350,$,$);
#361=IFCCLASSIFICATIONREFERENCE($,'[L]KL','Adgangsanl\X2\00E6\X0\g',#350,$,$);
#362=IFCCLASSIFICATIONREFERENCE($,'[L]L?','Overv\X2\00E5\X0\gende teknisk system',#308,$,$);
#363=IFCCLASSIFICATIONREFERENCE($,'[L]LA','Gasalarmanl\X2\00E6\X0\g',#362,$,$);
#364=IFCCLASSIFICATIONREFERENCE($,'[L]LB','Brandalarmanl\X2\00E6\X0\g',#362,$,$);
#365=IFCCLASSIFICATIONREFERENCE($,'[L]LC','Automationsanl\X2\00E6\X0\g',#362,$,$);
#366=IFCCLASSIFICATIONREFERENCE($,'[L]LD','Adgangskontrolanl\X2\00E6\X0\g',#362,$,$);
#367=IFCCLASSIFICATIONREFERENCE($,'[L]LE','Alarmanl\X2\00E6\X0\g',#362,$,$);
#368=IFCCLASSIFICATIONREFERENCE($,'[L]LF','TV-overv\X2\00E5\X0\gningsanl\X2\00E6\X0\g',#362,$,$);
#369=IFCCLASSIFICATIONREFERENCE($,'[L]M?','Informationspr\X2\00E6\X0\senterende teknisk system',#308,$,$);
#370=IFCCLASSIFICATIONREFERENCE($,'[L]MA','Varslingsanl\X2\00E6\X0\g',#369,$,$);
#371=IFCCLASSIFICATIONREFERENCE($,'[L]MB','Audio-Video anl\X2\00E6\X0\g',#369,$,$);
#372=IFCCLASSIFICATIONREFERENCE($,'[L]MC','Trafikanl\X2\00E6\X0\g',#369,$,$);
#373=IFCCLASSIFICATIONREFERENCE($,'[L]P?','Beskyttende teknisk system',#308,$,$);
#374=IFCCLASSIFICATIONREFERENCE($,'[L]PA','Brandbeskyttelsesanl\X2\00E6\X0\g',#373,$,$);
#375=IFCCLASSIFICATIONREFERENCE($,'[L]PB','Brandslukningsanl\X2\00E6\X0\g',#373,$,$);
#376=IFCCLASSIFICATIONREFERENCE($,'[L]PC','Jordingsanl\X2\00E6\X0\g',#373,$,$);
#377=IFCCLASSIFICATIONREFERENCE($,'[L]PD','Lynbeskyttelsesanl\X2\00E6\X0\g',#373,$,$);
#378=IFCCLASSIFICATIONREFERENCE($,'[L]PE','Katodisk beskyttelsesanl\X2\00E6\X0\g',#373,$,$);
#379=IFCCLASSIFICATIONREFERENCE($,'[L]Q?','Lagrende teknisk system',#308,$,$);
#380=IFCCLASSIFICATIONREFERENCE($,'[L]QA','M\X2\00E5\X0\leranl\X2\00E6\X0\g',#379,$,$);
#381=IFCCLASSIFICATIONREFERENCE($,'[L]QB','Gas- og luftart lageranl\X2\00E6\X0\g',#379,$,$);
#382=IFCCLASSIFICATIONREFERENCE($,'[L]QC','V\X2\00E6\X0\skelageranl\X2\00E6\X0\g',#379,$,$);
#383=IFCCLASSIFICATIONREFERENCE($,'[L]R?','Indrettende teknisk system',#308,$,$);
#384=IFCCLASSIFICATIONREFERENCE($,'[L]RA','Beplantning',#383,$,$);
#385=IFCCLASSIFICATIONREFERENCE($,'[L]RB','Inventar',#383,$,$);
#386=IFCCLASSIFICATIONREFERENCE($,'[L]RC','Udstyr',#383,$,$);
#387=IFCCLASSIFICATIONREFERENCE($,'Bygningsdele - Komponenter',$,#2,'Tildeler klassifikation efter funktion, placering og/eller form til ARCHICAD bygningsdele baseret p\X2\00E5\X0\ CCS (R1) specifikationen.',$);
#388=IFCCLASSIFICATIONREFERENCE($,'[L]B??','Omformende komponent',#387,$,$);
#389=IFCCLASSIFICATIONREFERENCE($,'[L]BA?','Elektrisk potentialeomformende komponent',#388,$,$);
#390=IFCCLASSIFICATIONREFERENCE($,'[L]BAA','Sp\X2\00E6\X0\ndingsm\X2\00E5\X0\lerel\X2\00E6\X0\',#389,$,$);
#391=IFCCLASSIFICATIONREFERENCE($,'[L]BAB','Sp\X2\00E6\X0\ndingsm\X2\00E5\X0\letransformer',#389,$,$);
#392=IFCCLASSIFICATIONREFERENCE($,'[L]BC?','Elektrisk str\X2\00F8\X0\momformende komponent',#388,$,$);
#393=IFCCLASSIFICATIONREFERENCE($,'[L]BCA','Str\X2\00F8\X0\mm\X2\00E5\X0\lerel\X2\00E6\X0\',#392,$,$);
#394=IFCCLASSIFICATIONREFERENCE($,'[L]BCB','Str\X2\00F8\X0\mm\X2\00E5\X0\letransformer',#392,$,$);
#395=IFCCLASSIFICATIONREFERENCE($,'[L]BD?','Densitetomformende komponent',#388,$,$);
#396=IFCCLASSIFICATIONREFERENCE($,'[L]BDA','Densitetstransmitter',#395,$,$);
#397=IFCCLASSIFICATIONREFERENCE($,'[L]BDB','Densitet switch',#395,$,$);
#398=IFCCLASSIFICATIONREFERENCE($,'[L]BE?','Elektromagnetisk variabelomformende komponent',#388,$,$);
#399=IFCCLASSIFICATIONREFERENCE($,'[L]BEA','Elektromagnetisk m\X2\00E5\X0\lerel\X2\00E6\X0\',#398,$,$);
#400=IFCCLASSIFICATIONREFERENCE($,'[L]BEB','Elektromagnetisk m\X2\00E5\X0\letransformer',#398,$,$);
#401=IFCCLASSIFICATIONREFERENCE($,'[L]BF?','Flowomformende komponent',#388,$,$);
#402=IFCCLASSIFICATIONREFERENCE($,'[L]BFA','V\X2\00E6\X0\skeflowm\X2\00E5\X0\ler',#401,$,$);
#403=IFCCLASSIFICATIONREFERENCE($,'[L]BFB','Gasflowm\X2\00E5\X0\ler',#401,$,$);
#404=IFCCLASSIFICATIONREFERENCE($,'[L]BFC','Lufttransmitter',#401,$,$);
#405=IFCCLASSIFICATIONREFERENCE($,'[L]BFD','Luftswitch',#401,$,$);
#406=IFCCLASSIFICATIONREFERENCE($,'[L]BG?','Positionsomformende komponent',#388,$,$);
#407=IFCCLASSIFICATIONREFERENCE($,'[L]BGA','Positionstransmitter',#406,$,$);
#408=IFCCLASSIFICATIONREFERENCE($,'[L]BGB','Positionsswitch',#406,$,$);
#409=IFCCLASSIFICATIONREFERENCE($,'[L]BGC','Bev\X2\00E6\X0\gelsesdetektor',#406,$,$);
#410=IFCCLASSIFICATIONREFERENCE($,'[L]BGD','Retningsm\X2\00E5\X0\ler',#406,$,$);
#411=IFCCLASSIFICATIONREFERENCE($,'[L]BJ?','Forbrugsomformende komponent',#388,$,$);
#412=IFCCLASSIFICATIONREFERENCE($,'[L]BJA','Gasm\X2\00E5\X0\ler',#411,$,$);
#413=IFCCLASSIFICATIONREFERENCE($,'[L]BJB','K\X2\00F8\X0\lem\X2\00E5\X0\ler',#411,$,$);
#414=IFCCLASSIFICATIONREFERENCE($,'[L]BJC','Varmem\X2\00E5\X0\ler',#411,$,$);
#415=IFCCLASSIFICATIONREFERENCE($,'[L]BJD','El-m\X2\00E5\X0\ler',#411,$,$);
#416=IFCCLASSIFICATIONREFERENCE($,'[L]BK?','Tidsomformende komponent',#388,$,$);
#417=IFCCLASSIFICATIONREFERENCE($,'[L]BKA','M\X2\00E5\X0\leur',#416,$,$);
#418=IFCCLASSIFICATIONREFERENCE($,'[L]BKB','Urswitch',#416,$,$);
#419=IFCCLASSIFICATIONREFERENCE($,'[L]BL?','Niveauomformende komponent',#388,$,$);
#420=IFCCLASSIFICATIONREFERENCE($,'[L]BLA','Niveautransmitter',#419,$,$);
#421=IFCCLASSIFICATIONREFERENCE($,'[L]BLB','Niveauswitch',#419,$,$);
#422=IFCCLASSIFICATIONREFERENCE($,'[L]BM?','Fugtighedsomformende komponent',#388,$,$);
#423=IFCCLASSIFICATIONREFERENCE($,'[L]BMA','Fugttransmitter',#422,$,$);
#424=IFCCLASSIFICATIONREFERENCE($,'[L]BMB','Fugtswitch',#422,$,$);
#425=IFCCLASSIFICATIONREFERENCE($,'[L]BP?','Trykomformende komponent',#388,$,$);
#426=IFCCLASSIFICATIONREFERENCE($,'[L]BPA','Tryktransmitter',#425,$,$);
#427=IFCCLASSIFICATIONREFERENCE($,'[L]BPB','Trykswitch',#425,$,$);
#428=IFCCLASSIFICATIONREFERENCE($,'[L]BQ?','Kvalitetsomformende komponent',#388,$,$);
#429=IFCCLASSIFICATIONREFERENCE($,'[L]BQA','Luftkvalitettransmitter',#428,$,$);
#430=IFCCLASSIFICATIONREFERENCE($,'[L]BQB','Luftkvalitetsdetektor',#428,$,$);
#431=IFCCLASSIFICATIONREFERENCE($,'[L]BQC','R\X2\00F8\X0\gtransmitter',#428,$,$);
#432=IFCCLASSIFICATIONREFERENCE($,'[L]BQD','R\X2\00F8\X0\gdetektor',#428,$,$);
#433=IFCCLASSIFICATIONREFERENCE($,'[L]BR?','Str\X2\00E5\X0\lingsomformende komponent',#388,$,$);
#434=IFCCLASSIFICATIONREFERENCE($,'[L]BRA','Lystransmitter',#433,$,$);
#435=IFCCLASSIFICATIONREFERENCE($,'[L]BRB','Lysswitch',#433,$,$);
#436=IFCCLASSIFICATIONREFERENCE($,'[L]BRC','Flammedetektor',#433,$,$);
#437=IFCCLASSIFICATIONREFERENCE($,'[L]BRD','Fotocelle',#433,$,$);
#438=IFCCLASSIFICATIONREFERENCE($,'[L]BS?','Hastighed/frekvensomformende komponent',#388,$,$);
#439=IFCCLASSIFICATIONREFERENCE($,'[L]BSA','Frekvensm\X2\00E5\X0\ler',#438,$,$);
#440=IFCCLASSIFICATIONREFERENCE($,'[L]BSB','Speedometer',#438,$,$);
#441=IFCCLASSIFICATIONREFERENCE($,'[L]BSC','Tachometer',#438,$,$);
#442=IFCCLASSIFICATIONREFERENCE($,'[L]BSD','Accelerationsmeter',#438,$,$);
#443=IFCCLASSIFICATIONREFERENCE($,'[L]BSE','Vibrationsdetektor',#438,$,$);
#444=IFCCLASSIFICATIONREFERENCE($,'[L]BT?','Temperaturomformende komponent',#388,$,$);
#445=IFCCLASSIFICATIONREFERENCE($,'[L]BTA','Temperaturtransmitter',#444,$,$);
#446=IFCCLASSIFICATIONREFERENCE($,'[L]BTB','Temperaturswitch',#444,$,$);
#447=IFCCLASSIFICATIONREFERENCE($,'[L]BU?','Multivatriabelomformende komponent',#388,$,$);
#448=IFCCLASSIFICATIONREFERENCE($,'[L]BUA','Multitransmitter',#447,$,$);
#449=IFCCLASSIFICATIONREFERENCE($,'[L]BUB','Multiswitch',#447,$,$);
#450=IFCCLASSIFICATIONREFERENCE($,'[L]BUC','Encoder',#447,$,$);
#451=IFCCLASSIFICATIONREFERENCE($,'[L]BW?','V\X2\00E6\X0\gt/kraftomformende komponent',#388,$,$);
#452=IFCCLASSIFICATIONREFERENCE($,'[L]BWA','V\X2\00E6\X0\gt',#451,$,$);
#453=IFCCLASSIFICATIONREFERENCE($,'[L]BWB','Kraftm\X2\00E5\X0\ler',#451,$,$);
#454=IFCCLASSIFICATIONREFERENCE($,'[L]BX?','Lyd- og billedomformende komponent',#388,$,$);
#455=IFCCLASSIFICATIONREFERENCE($,'[L]BXA','Mikrofon',#454,$,$);
#456=IFCCLASSIFICATIONREFERENCE($,'[L]BXB','Kamera',#454,$,$);
#457=IFCCLASSIFICATIONREFERENCE($,'[L]BY?','Stofomformende komponent',#388,$,$);
#458=IFCCLASSIFICATIONREFERENCE($,'[L]BYA','Plante',#457,$,$);
#459=IFCCLASSIFICATIONREFERENCE($,'[L]BZ?','H\X2\00E6\X0\ndelsesomformende komponent',#388,$,$);
#460=IFCCLASSIFICATIONREFERENCE($,'[L]BZA','M\X2\00E6\X0\ngdem\X2\00E5\X0\ler',#459,$,$);
#461=IFCCLASSIFICATIONREFERENCE($,'[L]BZB','V\X2\00E6\X0\skedetektor',#459,$,$);
#462=IFCCLASSIFICATIONREFERENCE($,'[L]BZC','Kortl\X2\00E6\X0\ser',#459,$,$);
#463=IFCCLASSIFICATIONREFERENCE($,'[L]BZE','Cyklus detektor',#459,$,$);
#464=IFCCLASSIFICATIONREFERENCE($,'[L]BZF','Synkroniseringsenhed',#459,$,$);
#465=IFCCLASSIFICATIONREFERENCE($,'[L]BZG','Ledningsevnem\X2\00E5\X0\ler',#459,$,$);
#466=IFCCLASSIFICATIONREFERENCE($,'[L]C??','Lagrende komponent',#387,$,$);
#467=IFCCLASSIFICATIONREFERENCE($,'[L]CA?','Kapacitiv lagrende komponent',#466,$,$);
#468=IFCCLASSIFICATIONREFERENCE($,'[L]CAA','Kapacitor',#467,$,$);
#469=IFCCLASSIFICATIONREFERENCE($,'[L]CF?','Informationslagrende komponent',#466,$,$);
#470=IFCCLASSIFICATIONREFERENCE($,'[L]CFA','Lagermedie',#469,$,$);
#471=IFCCLASSIFICATIONREFERENCE($,'[L]CM?','Lukket station\X2\00E6\X0\r komponent',#466,$,$);
#472=IFCCLASSIFICATIONREFERENCE($,'[L]CMA','Beholder',#471,$,$);
#473=IFCCLASSIFICATIONREFERENCE($,'[L]CMB','Bassin',#471,$,$);
#474=IFCCLASSIFICATIONREFERENCE($,'[L]CMC','Boks',#471,$,$);
#475=IFCCLASSIFICATIONREFERENCE($,'[L]CN?','Lukket flytbar komponent',#466,$,$);
#476=IFCCLASSIFICATIONREFERENCE($,'[L]CNA','Container',#475,$,$);
#477=IFCCLASSIFICATIONREFERENCE($,'[L]CNB','Gasflaske',#475,$,$);
#478=IFCCLASSIFICATIONREFERENCE($,'[L]CNC','Tromle',#475,$,$);
#479=IFCCLASSIFICATIONREFERENCE($,'[L]CND','Elevatorstol',#475,$,$);
#480=IFCCLASSIFICATIONREFERENCE($,'[L]CP?','Termisk energilagrende komponent',#466,$,$);
#481=IFCCLASSIFICATIONREFERENCE($,'[L]CPA','Varmtvandsbeholder',#480,$,$);
#482=IFCCLASSIFICATIONREFERENCE($,'[L]CPB','Istank',#480,$,$);
#483=IFCCLASSIFICATIONREFERENCE($,'[L]CPC','Dampbeholder',#480,$,$);
#484=IFCCLASSIFICATIONREFERENCE($,'[L]E??','Energigivende komponent',#387,$,$);
#485=IFCCLASSIFICATIONREFERENCE($,'[L]EA?','Lysafgivende komponent',#484,$,$);
#486=IFCCLASSIFICATIONREFERENCE($,'[L]EAA','Gl\X2\00F8\X0\delampe',#485,$,$);
#487=IFCCLASSIFICATIONREFERENCE($,'[L]EAB','Damplampe',#485,$,$);
#488=IFCCLASSIFICATIONREFERENCE($,'[L]EAC','LED lyskilde',#485,$,$);
#489=IFCCLASSIFICATIONREFERENCE($,'[L]EB?','Elektrisk varmeenergikomponent',#484,$,$);
#490=IFCCLASSIFICATIONREFERENCE($,'[L]EBA','Elektrisk kedel',#489,$,$);
#491=IFCCLASSIFICATIONREFERENCE($,'[L]EBB','Elektrisk varmflade',#489,$,$);
#492=IFCCLASSIFICATIONREFERENCE($,'[L]EBC','Elektrisk varmekabel',#489,$,$);
#493=IFCCLASSIFICATIONREFERENCE($,'[L]EBD','Elektrisk varmebl\X2\00E6\X0\ser',#489,$,$);
#494=IFCCLASSIFICATIONREFERENCE($,'[L]EBE','Elektrisk varmer\X2\00F8\X0\r',#489,$,$);
#495=IFCCLASSIFICATIONREFERENCE($,'[L]EM?','Forbr\X2\00E6\X0\ndingskomponent',#484,$,$);
#496=IFCCLASSIFICATIONREFERENCE($,'[L]EMA','Ovn',#495,$,$);
#497=IFCCLASSIFICATIONREFERENCE($,'[L]EMB','Kedel',#495,$,$);
#498=IFCCLASSIFICATIONREFERENCE($,'[L]EMC','Br\X2\00E6\X0\nder',#495,$,$);
#499=IFCCLASSIFICATIONREFERENCE($,'[L]EP?','Varmeoverf\X2\00F8\X0\rselskomponent',#484,$,$);
#500=IFCCLASSIFICATIONREFERENCE($,'[L]EPA','Varmeflade',#499,$,$);
#501=IFCCLASSIFICATIONREFERENCE($,'[L]EPB','Vandvarmer',#499,$,$);
#502=IFCCLASSIFICATIONREFERENCE($,'[L]EPC','Varmeveksler',#499,$,$);
#503=IFCCLASSIFICATIONREFERENCE($,'[L]EPD','Varmepumpe',#499,$,$);
#504=IFCCLASSIFICATIONREFERENCE($,'[L]EPE','Radiator',#499,$,$);
#505=IFCCLASSIFICATIONREFERENCE($,'[L]EPF','Varmer\X2\00F8\X0\r',#499,$,$);
#506=IFCCLASSIFICATIONREFERENCE($,'[L]EPG','Varmepanel',#499,$,$);
#507=IFCCLASSIFICATIONREFERENCE($,'[L]EQ?','Konvektionsk\X2\00F8\X0\ling komponent',#484,$,$);
#508=IFCCLASSIFICATIONREFERENCE($,'[L]EQA','K\X2\00F8\X0\leflade',#507,$,$);
#509=IFCCLASSIFICATIONREFERENCE($,'[L]EQB','Fordamper',#507,$,$);
#510=IFCCLASSIFICATIONREFERENCE($,'[L]EQC','K\X2\00F8\X0\lepumpe',#507,$,$);
#511=IFCCLASSIFICATIONREFERENCE($,'[L]EQD','K\X2\00F8\X0\let\X2\00E5\X0\rn',#507,$,$);
#512=IFCCLASSIFICATIONREFERENCE($,'[L]EQE','K\X2\00F8\X0\lepanel',#507,$,$);
#513=IFCCLASSIFICATIONREFERENCE($,'[L]EQF','T\X2\00F8\X0\rk\X2\00F8\X0\ler',#507,$,$);
#514=IFCCLASSIFICATIONREFERENCE($,'[L]ES?','Fordampningsk\X2\00F8\X0\ling komponent',#484,$,$);
#515=IFCCLASSIFICATIONREFERENCE($,'[L]ESA','K\X2\00F8\X0\lemaskine',#514,$,$);
#516=IFCCLASSIFICATIONREFERENCE($,'[L]EV?','Varmestr\X2\00E5\X0\lingsenergi komponent',#484,$,$);
#517=IFCCLASSIFICATIONREFERENCE($,'[L]EVA','Solfanger',#516,$,$);
#518=IFCCLASSIFICATIONREFERENCE($,'[L]EZ?','Kombineret energigivende komponent',#484,$,$);
#519=IFCCLASSIFICATIONREFERENCE($,'[L]EZA','Varmeventilator',#518,$,$);
#520=IFCCLASSIFICATIONREFERENCE($,'[L]EZB','Kulde/varme r\X2\00F8\X0\r',#518,$,$);
#521=IFCCLASSIFICATIONREFERENCE($,'[L]EZC','K\X2\00F8\X0\lefancoil',#518,$,$);
#522=IFCCLASSIFICATIONREFERENCE($,'[L]EZD','Kombineret varme- og k\X2\00F8\X0\lefancoil',#518,$,$);
#523=IFCCLASSIFICATIONREFERENCE($,'[L]F??','Beskyttende komponent',#387,$,$);
#524=IFCCLASSIFICATIONREFERENCE($,'[L]FA?','Oversp\X2\00E6\X0\ndingskomponent',#523,$,$);
#525=IFCCLASSIFICATIONREFERENCE($,'[L]FAA','Lynafleder',#524,$,$);
#526=IFCCLASSIFICATIONREFERENCE($,'[L]FAB','Oversp\X2\00E6\X0\ndingsafleder',#524,$,$);
#527=IFCCLASSIFICATIONREFERENCE($,'[L]FB?','Fejlstr\X2\00F8\X0\mskomponent',#523,$,$);
#528=IFCCLASSIFICATIONREFERENCE($,'[L]FBA','HPFI-rel\X2\00E6\X0\',#527,$,$);
#529=IFCCLASSIFICATIONREFERENCE($,'[L]FC?','Overstr\X2\00F8\X0\mskomponent',#523,$,$);
#530=IFCCLASSIFICATIONREFERENCE($,'[L]FCA','Sikring',#529,$,$);
#531=IFCCLASSIFICATIONREFERENCE($,'[L]FCB','Maksimalafbryder',#529,$,$);
#532=IFCCLASSIFICATIONREFERENCE($,'[L]FL?','Trykbetinget fare komponent',#523,$,$);
#533=IFCCLASSIFICATIONREFERENCE($,'[L]FLA','Sikkerhedsventil',#532,$,$);
#534=IFCCLASSIFICATIONREFERENCE($,'[L]FLB','Sikkerhedsspj\X2\00E6\X0\ld',#532,$,$);
#535=IFCCLASSIFICATIONREFERENCE($,'[L]FLC','Vakuumbryder',#532,$,$);
#536=IFCCLASSIFICATIONREFERENCE($,'[L]FM?','Brandsikringskomponent',#523,$,$);
#537=IFCCLASSIFICATIONREFERENCE($,'[L]FMA','Brandspj\X2\00E6\X0\ld',#536,$,$);
#538=IFCCLASSIFICATIONREFERENCE($,'[L]FMB','R\X2\00F8\X0\gspj\X2\00E6\X0\ld',#536,$,$);
#539=IFCCLASSIFICATIONREFERENCE($,'[L]FMC','Kombinerede brand- og r\X2\00F8\X0\gspj\X2\00E6\X0\ld',#536,$,$);
#540=IFCCLASSIFICATIONREFERENCE($,'[L]FMD','Brandmanchet',#536,$,$);
#541=IFCCLASSIFICATIONREFERENCE($,'[L]FME','Brandjalousi',#536,$,$);
#542=IFCCLASSIFICATIONREFERENCE($,'[L]FMF','R\X2\00F8\X0\ggardin',#536,$,$);
#543=IFCCLASSIFICATIONREFERENCE($,'[L]FMG','R\X2\00F8\X0\glukning',#536,$,$);
#544=IFCCLASSIFICATIONREFERENCE($,'[L]FQ?','Hindrende komponent',#523,$,$);
#545=IFCCLASSIFICATIONREFERENCE($,'[L]FQA','Fuglenet',#544,$,$);
#546=IFCCLASSIFICATIONREFERENCE($,'[L]FQB','Snefang',#544,$,$);
#547=IFCCLASSIFICATIONREFERENCE($,'[L]FQC','H\X2\00E5\X0\ndliste',#544,$,$);
#548=IFCCLASSIFICATIONREFERENCE($,'[L]FQD','V\X2\00E6\X0\rn',#544,$,$);
#549=IFCCLASSIFICATIONREFERENCE($,'[L]FQE','Jordd\X2\00E6\X0\kning',#544,$,$);
#550=IFCCLASSIFICATIONREFERENCE($,'[L]FR?','Klimabeskyttende komponent',#523,$,$);
#551=IFCCLASSIFICATIONREFERENCE($,'[L]FRA','Puds',#550,$,$);
#552=IFCCLASSIFICATIONREFERENCE($,'[L]FRB','Maling',#550,$,$);
#553=IFCCLASSIFICATIONREFERENCE($,'[L]FRC','Impr\X2\00E6\X0\gnering',#550,$,$);
#554=IFCCLASSIFICATIONREFERENCE($,'[L]FRD','Korrosionsbeskyttelse',#550,$,$);
#555=IFCCLASSIFICATIONREFERENCE($,'[L]FRE','Bundsikringslag',#550,$,$);
#556=IFCCLASSIFICATIONREFERENCE($,'[L]G??','Flowgivende komponent',#387,$,$);
#557=IFCCLASSIFICATIONREFERENCE($,'[L]GA?','Mekanisk energikomponent',#556,$,$);
#558=IFCCLASSIFICATIONREFERENCE($,'[L]GAA','Generator',#557,$,$);
#559=IFCCLASSIFICATIONREFERENCE($,'[L]GAB','Dynamo',#557,$,$);
#560=IFCCLASSIFICATIONREFERENCE($,'[L]GB?','Kemisk energikomponent',#556,$,$);
#561=IFCCLASSIFICATIONREFERENCE($,'[L]GBA','Batteri',#560,$,$);
#562=IFCCLASSIFICATIONREFERENCE($,'[L]GBB','Br\X2\00E6\X0\ndselscelle',#560,$,$);
#563=IFCCLASSIFICATIONREFERENCE($,'[L]GC?','Str\X2\00E5\X0\lingsenergi komponent',#556,$,$);
#564=IFCCLASSIFICATIONREFERENCE($,'[L]GCA','Solcelle',#563,$,$);
#565=IFCCLASSIFICATIONREFERENCE($,'[L]GF?','Signalgivende komponent',#556,$,$);
#566=IFCCLASSIFICATIONREFERENCE($,'[L]GFA','TV-station',#565,$,$);
#567=IFCCLASSIFICATIONREFERENCE($,'[L]GFB','Telefoncentral',#565,$,$);
#568=IFCCLASSIFICATIONREFERENCE($,'[L]GP?','V\X2\00E6\X0\skegivende komponent',#556,$,$);
#569=IFCCLASSIFICATIONREFERENCE($,'[L]GPA','Pumpe',#568,$,$);
#570=IFCCLASSIFICATIONREFERENCE($,'[L]GQ?','Gas- og luftgivende komponent',#556,$,$);
#571=IFCCLASSIFICATIONREFERENCE($,'[L]GQA','Ventilator',#570,$,$);
#572=IFCCLASSIFICATIONREFERENCE($,'[L]GQB','Kompressor',#570,$,$);
#573=IFCCLASSIFICATIONREFERENCE($,'[L]GQC','Vakuumpumpe',#570,$,$);
#574=IFCCLASSIFICATIONREFERENCE($,'[L]H??','Separerende komponent',#387,$,$);
#575=IFCCLASSIFICATIONREFERENCE($,'[L]HN?','Tyngdekraftseparerende komponent',#574,$,$);
#576=IFCCLASSIFICATIONREFERENCE($,'[L]HNA','Seperator',#575,$,$);
#577=IFCCLASSIFICATIONREFERENCE($,'[L]HNB','S\X2\00E6\X0\tningstank',#575,$,$);
#578=IFCCLASSIFICATIONREFERENCE($,'[L]HP?','Termikseparerende komponent',#574,$,$);
#579=IFCCLASSIFICATIONREFERENCE($,'[L]HPA','T\X2\00F8\X0\rreenhed',#578,$,$);
#580=IFCCLASSIFICATIONREFERENCE($,'[L]HPB','Affugter',#578,$,$);
#581=IFCCLASSIFICATIONREFERENCE($,'[L]HQ?','Filtrerende komponent',#574,$,$);
#582=IFCCLASSIFICATIONREFERENCE($,'[L]HQA','Filter',#581,$,$);
#583=IFCCLASSIFICATIONREFERENCE($,'[L]HQB','Rive',#581,$,$);
#584=IFCCLASSIFICATIONREFERENCE($,'[L]HR?','Elektrostatikseparerende komponent',#574,$,$);
#585=IFCCLASSIFICATIONREFERENCE($,'[L]HRA','Elektrostatfilter',#584,$,$);
#586=IFCCLASSIFICATIONREFERENCE($,'[L]HRB','Magnetisk separator',#584,$,$);
#587=IFCCLASSIFICATIONREFERENCE($,'[L]K??','Informationsbehandlende komponent',#387,$,$);
#588=IFCCLASSIFICATIONREFERENCE($,'[L]KF?','Elektrisk signalinformation komponent',#587,$,$);
#589=IFCCLASSIFICATIONREFERENCE($,'[L]KFA','Rel\X2\00E6\X0\',#588,$,$);
#590=IFCCLASSIFICATIONREFERENCE($,'[L]KFB','Tidsrel\X2\00E6\X0\',#588,$,$);
#591=IFCCLASSIFICATIONREFERENCE($,'[L]KFC','Computer',#588,$,$);
#592=IFCCLASSIFICATIONREFERENCE($,'[L]KFD','Styre- og reguleringsenhed',#588,$,$);
#593=IFCCLASSIFICATIONREFERENCE($,'[L]KFE','IT-switch',#588,$,$);
#594=IFCCLASSIFICATIONREFERENCE($,'[L]KFF','Input/output modul',#588,$,$);
#595=IFCCLASSIFICATIONREFERENCE($,'[L]KFG','Sender',#588,$,$);
#596=IFCCLASSIFICATIONREFERENCE($,'[L]KFH','Modtager',#588,$,$);
#597=IFCCLASSIFICATIONREFERENCE($,'[L]KG?','Optisk signalinformation komponent',#587,$,$);
#598=IFCCLASSIFICATIONREFERENCE($,'[L]KGA','Optisk switch',#597,$,$);
#599=IFCCLASSIFICATIONREFERENCE($,'[L]KGB','Optisk router',#597,$,$);
#600=IFCCLASSIFICATIONREFERENCE($,'[L]KGC','Optisk sender',#597,$,$);
#601=IFCCLASSIFICATIONREFERENCE($,'[L]KGD','Optisk modtager',#597,$,$);
#602=IFCCLASSIFICATIONREFERENCE($,'[L]KGE','Optisk repeater',#597,$,$);
#603=IFCCLASSIFICATIONREFERENCE($,'[L]KH?','Mekanisk signalinformation komponent',#587,$,$);
#604=IFCCLASSIFICATIONREFERENCE($,'[L]KHA','Regulator',#603,$,$);
#605=IFCCLASSIFICATIONREFERENCE($,'[L]KZ?','Kombineret signalinformation komponent',#587,$,$);
#606=IFCCLASSIFICATIONREFERENCE($,'[L]KZA','Sender/modtager kombineret',#605,$,$);
#607=IFCCLASSIFICATIONREFERENCE($,'[L]KZB','Tavlecomputer',#605,$,$);
#608=IFCCLASSIFICATIONREFERENCE($,'[L]KZC','Kortskriver',#605,$,$);
#609=IFCCLASSIFICATIONREFERENCE($,'[L]M??','Drivende komponent',#387,$,$);
#610=IFCCLASSIFICATIONREFERENCE($,'[L]MA?','Elektromagentisk drivkomponent',#609,$,$);
#611=IFCCLASSIFICATIONREFERENCE($,'[L]MAA','Elektromotor',#610,$,$);
#612=IFCCLASSIFICATIONREFERENCE($,'[L]MAB','Linearmotor',#610,$,$);
#613=IFCCLASSIFICATIONREFERENCE($,'[L]MAC','Elektrisk aktuator',#610,$,$);
#614=IFCCLASSIFICATIONREFERENCE($,'[L]ML?','Mekanisk drivkomponent',#609,$,$);
#615=IFCCLASSIFICATIONREFERENCE($,'[L]MLA','Mekanisk aktuator',#614,$,$);
#616=IFCCLASSIFICATIONREFERENCE($,'[L]MLB','D\X2\00F8\X0\rlukker',#614,$,$);
#617=IFCCLASSIFICATIONREFERENCE($,'[L]MS?','Kemisk drivkomponent',#609,$,$);
#618=IFCCLASSIFICATIONREFERENCE($,'[L]MSA','Forbr\X2\00E6\X0\ndingsmotor',#617,$,$);
#619=IFCCLASSIFICATIONREFERENCE($,'[L]N??','D\X2\00E6\X0\kkende komponent',#387,$,$);
#620=IFCCLASSIFICATIONREFERENCE($,'[L]NA?','Udfyldende komponent',#619,$,$);
#621=IFCCLASSIFICATIONREFERENCE($,'[L]NAA','Rude',#620,$,$);
#622=IFCCLASSIFICATIONREFERENCE($,'[L]NAB','Felt',#620,$,$);
#623=IFCCLASSIFICATIONREFERENCE($,'[L]NAC','Gitter',#620,$,$);
#624=IFCCLASSIFICATIONREFERENCE($,'[L]NAD','Fuge',#620,$,$);
#625=IFCCLASSIFICATIONREFERENCE($,'[L]NAE','Pakning',#620,$,$);
#626=IFCCLASSIFICATIONREFERENCE($,'[L]NB?','Afd\X2\00E6\X0\kkende komponent',#619,$,$);
#627=IFCCLASSIFICATIONREFERENCE($,'[L]NBA','D\X2\00F8\X0\rblad',#626,$,$);
#628=IFCCLASSIFICATIONREFERENCE($,'[L]NBB','Portblad',#626,$,$);
#629=IFCCLASSIFICATIONREFERENCE($,'[L]NBC','Skabsl\X2\00E5\X0\ge',#626,$,$);
#630=IFCCLASSIFICATIONREFERENCE($,'[L]NBD','L\X2\00E5\X0\geramme',#626,$,$);
#631=IFCCLASSIFICATIONREFERENCE($,'[L]NBE','D\X2\00E6\X0\ksel',#626,$,$);
#632=IFCCLASSIFICATIONREFERENCE($,'[L]NC?','Afd\X2\00E6\X0\kkende komponent',#619,$,$);
#633=IFCCLASSIFICATIONREFERENCE($,'[L]NCA','Bel\X2\00E6\X0\gning',#632,$,$);
#634=IFCCLASSIFICATIONREFERENCE($,'[L]NCB','V\X2\00E6\X0\gbekl\X2\00E6\X0\dning',#632,$,$);
#635=IFCCLASSIFICATIONREFERENCE($,'[L]NCC','Gulvbel\X2\00E6\X0\gning',#632,$,$);
#636=IFCCLASSIFICATIONREFERENCE($,'[L]NCD','Loftbekl\X2\00E6\X0\dning',#632,$,$);
#637=IFCCLASSIFICATIONREFERENCE($,'[L]NCE','Tagd\X2\00E6\X0\kning',#632,$,$);
#638=IFCCLASSIFICATIONREFERENCE($,'[L]NCF','S\X2\00E5\X0\lb\X2\00E6\X0\nk',#632,$,$);
#639=IFCCLASSIFICATIONREFERENCE($,'[L]NCG','Vinduesplade',#632,$,$);
#640=IFCCLASSIFICATIONREFERENCE($,'[L]NCH','Lysning',#632,$,$);
#641=IFCCLASSIFICATIONREFERENCE($,'[L]NCJ','Indfatning',#632,$,$);
#642=IFCCLASSIFICATIONREFERENCE($,'[L]NCK','Fodpanel',#632,$,$);
#643=IFCCLASSIFICATIONREFERENCE($,'[L]NCL','Fejeliste',#632,$,$);
#644=IFCCLASSIFICATIONREFERENCE($,'[L]NCM','Rygning',#632,$,$);
#645=IFCCLASSIFICATIONREFERENCE($,'[L]NCN','Murafd\X2\00E6\X0\kning',#632,$,$);
#646=IFCCLASSIFICATIONREFERENCE($,'[L]NCP','Skorstensafd\X2\00E6\X0\kning',#632,$,$);
#647=IFCCLASSIFICATIONREFERENCE($,'[L]NCQ','B\X2\00F8\X0\sning',#632,$,$);
#648=IFCCLASSIFICATIONREFERENCE($,'[L]NCR','D\X2\00F8\X0\rskilt',#632,$,$);
#649=IFCCLASSIFICATIONREFERENCE($,'[L]NCS','D\X2\00F8\X0\rroset',#632,$,$);
#650=IFCCLASSIFICATIONREFERENCE($,'[L]ND?','Afsluttende komponent',#619,$,$);
#651=IFCCLASSIFICATIONREFERENCE($,'[L]NDA','Kant',#650,$,$);
#652=IFCCLASSIFICATIONREFERENCE($,'[L]NDB','Murkrone',#650,$,$);
#653=IFCCLASSIFICATIONREFERENCE($,'[L]NDC','Stern',#650,$,$);
#654=IFCCLASSIFICATIONREFERENCE($,'[L]NDD','Udh\X2\00E6\X0\ng',#650,$,$);
#655=IFCCLASSIFICATIONREFERENCE($,'[L]NDE','Vindskede',#650,$,$);
#656=IFCCLASSIFICATIONREFERENCE($,'[L]P??','Informationspr\X2\00E6\X0\senterende komponent',#387,$,$);
#657=IFCCLASSIFICATIONREFERENCE($,'[L]PF?','Diskret-tilstand komponent',#656,$,$);
#658=IFCCLASSIFICATIONREFERENCE($,'[L]PFA','Signallampe',#657,$,$);
#659=IFCCLASSIFICATIONREFERENCE($,'[L]PFB','Blink',#657,$,$);
#660=IFCCLASSIFICATIONREFERENCE($,'[L]PFC','Trafiklys',#657,$,$);
#661=IFCCLASSIFICATIONREFERENCE($,'[L]PG?','Diskret-variabel komponent',#656,$,$);
#662=IFCCLASSIFICATIONREFERENCE($,'[L]PGA','Termometer',#661,$,$);
#663=IFCCLASSIFICATIONREFERENCE($,'[L]PGB','Barometer',#661,$,$);
#664=IFCCLASSIFICATIONREFERENCE($,'[L]PGC','Hygrometer',#661,$,$);
#665=IFCCLASSIFICATIONREFERENCE($,'[L]PGD','Trykviser',#661,$,$);
#666=IFCCLASSIFICATIONREFERENCE($,'[L]PGE','Omdrejningsviser',#661,$,$);
#667=IFCCLASSIFICATIONREFERENCE($,'[L]PGF','Amperemeter',#661,$,$);
#668=IFCCLASSIFICATIONREFERENCE($,'[L]PGG','Voltmeter',#661,$,$);
#669=IFCCLASSIFICATIONREFERENCE($,'[L]PGH','Wattmeter',#661,$,$);
#670=IFCCLASSIFICATIONREFERENCE($,'[L]PGJ','Frekvensmeter',#661,$,$);
#671=IFCCLASSIFICATIONREFERENCE($,'[L]PGK','Watt-timemeter',#661,$,$);
#672=IFCCLASSIFICATIONREFERENCE($,'[L]PGL','Ur',#661,$,$);
#673=IFCCLASSIFICATIONREFERENCE($,'[L]PGM','Cos-phi meter',#661,$,$);
#674=IFCCLASSIFICATIONREFERENCE($,'[L]PGN','VAR-meter',#661,$,$);
#675=IFCCLASSIFICATIONREFERENCE($,'[L]PH?','Variabel-information komponent',#656,$,$);
#676=IFCCLASSIFICATIONREFERENCE($,'[L]PHA','Display',#675,$,$);
#677=IFCCLASSIFICATIONREFERENCE($,'[L]PHB','Projektor',#675,$,$);
#678=IFCCLASSIFICATIONREFERENCE($,'[L]PHC','Printer',#675,$,$);
#679=IFCCLASSIFICATIONREFERENCE($,'[L]PHD','Skilt',#675,$,$);
#680=IFCCLASSIFICATIONREFERENCE($,'[L]PHE','Afm\X2\00E6\X0\rkning',#675,$,$);
#681=IFCCLASSIFICATIONREFERENCE($,'[L]PJ?','H\X2\00F8\X0\rbar information komponent',#656,$,$);
#682=IFCCLASSIFICATIONREFERENCE($,'[L]PJA','H\X2\00F8\X0\jttaler',#681,$,$);
#683=IFCCLASSIFICATIONREFERENCE($,'[L]PJB','Horn',#681,$,$);
#684=IFCCLASSIFICATIONREFERENCE($,'[L]PJC','Klokke',#681,$,$);
#685=IFCCLASSIFICATIONREFERENCE($,'[L]PL?','Udsmykkende komponent',#656,$,$);
#686=IFCCLASSIFICATIONREFERENCE($,'[L]PLA','Gesims',#685,$,$);
#687=IFCCLASSIFICATIONREFERENCE($,'[L]PLB','Figur',#685,$,$);
#688=IFCCLASSIFICATIONREFERENCE($,'[L]PLC','Frise',#685,$,$);
#689=IFCCLASSIFICATIONREFERENCE($,'[L]PLD','Stukatur',#685,$,$);
#690=IFCCLASSIFICATIONREFERENCE($,'[L]PLE','Billede',#685,$,$);
#691=IFCCLASSIFICATIONREFERENCE($,'[L]PLF','T\X2\00E6\X0\ppe',#685,$,$);
#692=IFCCLASSIFICATIONREFERENCE($,'[L]Q??','\X2\00C5\X0\bnende og lukkende komponent',#387,$,$);
#693=IFCCLASSIFICATIONREFERENCE($,'[L]QA?','Elektrisk koblende komponent',#692,$,$);
#694=IFCCLASSIFICATIONREFERENCE($,'[L]QAA','Kontaktor',#693,$,$);
#695=IFCCLASSIFICATIONREFERENCE($,'[L]QAB','Motorstarter',#693,$,$);
#696=IFCCLASSIFICATIONREFERENCE($,'[L]QAC','Thyristor',#693,$,$);
#697=IFCCLASSIFICATIONREFERENCE($,'[L]QB?','Elektrisk adskillende komponent',#692,$,$);
#698=IFCCLASSIFICATIONREFERENCE($,'[L]QBA','Lastafbryder',#697,$,$);
#699=IFCCLASSIFICATIONREFERENCE($,'[L]QBB','Sikringsadskiller',#697,$,$);
#700=IFCCLASSIFICATIONREFERENCE($,'[L]QC?','Jordende elektrisk komponent',#692,$,$);
#701=IFCCLASSIFICATIONREFERENCE($,'[L]QCA','Jordingskobler',#700,$,$);
#702=IFCCLASSIFICATIONREFERENCE($,'[L]QM?','Mekanisk koblende komponent',#692,$,$);
#703=IFCCLASSIFICATIONREFERENCE($,'[L]QMA','Afsp\X2\00E6\X0\rringsventil',#702,$,$);
#704=IFCCLASSIFICATIONREFERENCE($,'[L]QMB','On-off spj\X2\00E6\X0\ld',#702,$,$);
#705=IFCCLASSIFICATIONREFERENCE($,'[L]QN?','Mekanisk varierende komponent',#692,$,$);
#706=IFCCLASSIFICATIONREFERENCE($,'[L]QNA','Reguleringsventil',#705,$,$);
#707=IFCCLASSIFICATIONREFERENCE($,'[L]QNB','Reguleringsspj\X2\00E6\X0\ld',#705,$,$);
#708=IFCCLASSIFICATIONREFERENCE($,'[L]QQ?','Adgangsgivende komponent',#692,$,$);
#709=IFCCLASSIFICATIONREFERENCE($,'[L]QQA','Vindue',#708,$,$);
#710=IFCCLASSIFICATIONREFERENCE($,'[L]QQB','Vinduesparti',#708,$,$);
#711=IFCCLASSIFICATIONREFERENCE($,'[L]QQC','D\X2\00F8\X0\r',#708,$,$);
#712=IFCCLASSIFICATIONREFERENCE($,'[L]QQD','Lem',#708,$,$);
#713=IFCCLASSIFICATIONREFERENCE($,'[L]QQE','Port',#708,$,$);
#714=IFCCLASSIFICATIONREFERENCE($,'[L]QQF','L\X2\00E5\X0\ge',#708,$,$);
#715=IFCCLASSIFICATIONREFERENCE($,'[L]R??','Regulerende komponent',#387,$,$);
#716=IFCCLASSIFICATIONREFERENCE($,'[L]RA?','Elektrisk begr\X2\00E6\X0\nsende komponent',#715,$,$);
#717=IFCCLASSIFICATIONREFERENCE($,'[L]RAA','Diode',#716,$,$);
#718=IFCCLASSIFICATIONREFERENCE($,'[L]RAB','Induktionsspole',#716,$,$);
#719=IFCCLASSIFICATIONREFERENCE($,'[L]RAC','Modstand',#716,$,$);
#720=IFCCLASSIFICATIONREFERENCE($,'[L]RB?','Elektrisk stabiliserende komponent',#715,$,$);
#721=IFCCLASSIFICATIONREFERENCE($,'[L]RBA','Afbrydelsesfri str\X2\00F8\X0\mforsyning',#720,$,$);
#722=IFCCLASSIFICATIONREFERENCE($,'[L]RBB','Harmonisk filter',#720,$,$);
#723=IFCCLASSIFICATIONREFERENCE($,'[L]RBC','Fasekompensering',#720,$,$);
#724=IFCCLASSIFICATIONREFERENCE($,'[L]RF?','Signalstabiliserende komponent',#715,$,$);
#725=IFCCLASSIFICATIONREFERENCE($,'[L]RFA','Equalizer',#724,$,$);
#726=IFCCLASSIFICATIONREFERENCE($,'[L]RFB','Elektrisk filter',#724,$,$);
#727=IFCCLASSIFICATIONREFERENCE($,'[L]RL?','Mekanisk begr\X2\00E6\X0\nsende komponent',#715,$,$);
#728=IFCCLASSIFICATIONREFERENCE($,'[L]RLA','L\X2\00E5\X0\s',#727,$,$);
#729=IFCCLASSIFICATIONREFERENCE($,'[L]RLB','Rottesp\X2\00E6\X0\rre',#727,$,$);
#730=IFCCLASSIFICATIONREFERENCE($,'[L]RLC','St\X2\00F8\X0\dd\X2\00E6\X0\mper',#727,$,$);
#731=IFCCLASSIFICATIONREFERENCE($,'[L]RM?','V\X2\00E6\X0\skebegr\X2\00E6\X0\nsende komponent',#715,$,$);
#732=IFCCLASSIFICATIONREFERENCE($,'[L]RMA','Kontraventil',#731,$,$);
#733=IFCCLASSIFICATIONREFERENCE($,'[L]RMB','Indreguleringsventil',#731,$,$);
#734=IFCCLASSIFICATIONREFERENCE($,'[L]RMC','Dyse',#731,$,$);
#735=IFCCLASSIFICATIONREFERENCE($,'[L]RMD','Vandl\X2\00E5\X0\s',#731,$,$);
#736=IFCCLASSIFICATIONREFERENCE($,'[L]RN?','Luftbegr\X2\00E6\X0\nsende komponent',#715,$,$);
#737=IFCCLASSIFICATIONREFERENCE($,'[L]RNA','Kontraspj\X2\00E6\X0\ld',#736,$,$);
#738=IFCCLASSIFICATIONREFERENCE($,'[L]RNB','Indreguleringsspj\X2\00E6\X0\ld',#736,$,$);
#739=IFCCLASSIFICATIONREFERENCE($,'[L]RNC','Diffusor',#736,$,$);
#740=IFCCLASSIFICATIONREFERENCE($,'[L]RQ?','Milj\X2\00F8\X0\stabiliserende komponent',#715,$,$);
#741=IFCCLASSIFICATIONREFERENCE($,'[L]RQA','Isolering',#740,$,$);
#742=IFCCLASSIFICATIONREFERENCE($,'[L]RQB','Membran',#740,$,$);
#743=IFCCLASSIFICATIONREFERENCE($,'[L]RQC','St\X2\00F8\X0\jbeskyttelse',#740,$,$);
#744=IFCCLASSIFICATIONREFERENCE($,'[L]RQD','Sk\X2\00E6\X0\rm',#740,$,$);
#745=IFCCLASSIFICATIONREFERENCE($,'[L]RQE','Gardin',#740,$,$);
#746=IFCCLASSIFICATIONREFERENCE($,'[L]RQF','Persienne',#740,$,$);
#747=IFCCLASSIFICATIONREFERENCE($,'[L]RQG','Skodde',#740,$,$);
#748=IFCCLASSIFICATIONREFERENCE($,'[L]RU?','Adgangsbegr\X2\00E6\X0\nsende komponent',#715,$,$);
#749=IFCCLASSIFICATIONREFERENCE($,'[L]RUA','Hegn',#748,$,$);
#750=IFCCLASSIFICATIONREFERENCE($,'[L]RUB','Bom',#748,$,$);
#751=IFCCLASSIFICATIONREFERENCE($,'[L]RUC','Karrusel',#748,$,$);
#752=IFCCLASSIFICATIONREFERENCE($,'[L]RUD','Pullert',#748,$,$);
#753=IFCCLASSIFICATIONREFERENCE($,'[L]RV?','Indsigtsbegr\X2\00E6\X0\nsende komponent',#715,$,$);
#754=IFCCLASSIFICATIONREFERENCE($,'[L]RVA','Skjuler',#753,$,$);
#755=IFCCLASSIFICATIONREFERENCE($,'[L]S??','Manuel omformende komponent',#387,$,$);
#756=IFCCLASSIFICATIONREFERENCE($,'[L]SF?','Elektrisk signalgiverkomponent',#755,$,$);
#757=IFCCLASSIFICATIONREFERENCE($,'[L]SFA','Afbryder',#756,$,$);
#758=IFCCLASSIFICATIONREFERENCE($,'[L]SFB','Omskifter',#756,$,$);
#759=IFCCLASSIFICATIONREFERENCE($,'[L]SFC','Trykknap',#756,$,$);
#760=IFCCLASSIFICATIONREFERENCE($,'[L]SFD','Panel',#756,$,$);
#761=IFCCLASSIFICATIONREFERENCE($,'[L]SFE','Tastatur',#756,$,$);
#762=IFCCLASSIFICATIONREFERENCE($,'[L]SG?','Optisk-akustisk signalgiverkomponent',#755,$,$);
#763=IFCCLASSIFICATIONREFERENCE($,'[L]SGA','N\X2\00F8\X0\dkald',#762,$,$);
#764=IFCCLASSIFICATIONREFERENCE($,'[L]SL?','Mekanisk signalgiverkomponent',#755,$,$);
#765=IFCCLASSIFICATIONREFERENCE($,'[L]SLA','Greb',#764,$,$);
#766=IFCCLASSIFICATIONREFERENCE($,'[L]SLB','N\X2\00F8\X0\glecylinder',#764,$,$);
#767=IFCCLASSIFICATIONREFERENCE($,'[L]T??','Transformerende komponent',#387,$,$);
#768=IFCCLASSIFICATIONREFERENCE($,'[L]TA?','Elektrisk energiomformende komponent',#767,$,$);
#769=IFCCLASSIFICATIONREFERENCE($,'[L]TAA','Transformer',#768,$,$);
#770=IFCCLASSIFICATIONREFERENCE($,'[L]TAB','Adskillelsestransformer',#768,$,$);
#771=IFCCLASSIFICATIONREFERENCE($,'[L]TAC','Ensretter',#768,$,$);
#772=IFCCLASSIFICATIONREFERENCE($,'[L]TAD','Vekselretter',#768,$,$);
#773=IFCCLASSIFICATIONREFERENCE($,'[L]TAE','Frekvensomformer',#768,$,$);
#774=IFCCLASSIFICATIONREFERENCE($,'[L]TF?','Signalomformende komponent',#767,$,$);
#775=IFCCLASSIFICATIONREFERENCE($,'[L]TFA','Forst\X2\00E6\X0\rker',#774,$,$);
#776=IFCCLASSIFICATIONREFERENCE($,'[L]TFB','Antenne',#774,$,$);
#777=IFCCLASSIFICATIONREFERENCE($,'[L]TFC','Gateway',#774,$,$);
#778=IFCCLASSIFICATIONREFERENCE($,'[L]TM?','Form\X2\00E6\X0\ndrende komponent',#767,$,$);
#779=IFCCLASSIFICATIONREFERENCE($,'[L]TMA','Affaldskv\X2\00E6\X0\rn',#778,$,$);
#780=IFCCLASSIFICATIONREFERENCE($,'[L]TT?','Miksende komponent',#767,$,$);
#781=IFCCLASSIFICATIONREFERENCE($,'[L]TTA','Befugter',#780,$,$);
#782=IFCCLASSIFICATIONREFERENCE($,'[L]TTB','Mikser',#780,$,$);
#783=IFCCLASSIFICATIONREFERENCE($,'[L]TTC','T\X2\00E5\X0\gegenerator',#780,$,$);
#784=IFCCLASSIFICATIONREFERENCE($,'[L]U??','Fastholdende komponent',#387,$,$);
#785=IFCCLASSIFICATIONREFERENCE($,'[L]UA?','Indkapslende komponent',#784,$,$);
#786=IFCCLASSIFICATIONREFERENCE($,'[L]UAA','El-tavle',#785,$,$);
#787=IFCCLASSIFICATIONREFERENCE($,'[L]UAB','Rack',#785,$,$);
#788=IFCCLASSIFICATIONREFERENCE($,'[L]UAC','Belysningsarmatur',#785,$,$);
#789=IFCCLASSIFICATIONREFERENCE($,'[L]UAD','Skab for slangevinder',#785,$,$);
#790=IFCCLASSIFICATIONREFERENCE($,'[L]UB?','Underst\X2\00F8\X0\ttende komponent',#784,$,$);
#791=IFCCLASSIFICATIONREFERENCE($,'[L]UBA','Kabelf\X2\00F8\X0\ringsvej',#790,$,$);
#792=IFCCLASSIFICATIONREFERENCE($,'[L]UBB','Oph\X2\00E6\X0\ng',#790,$,$);
#793=IFCCLASSIFICATIONREFERENCE($,'[L]UBC','Isolator',#790,$,$);
#794=IFCCLASSIFICATIONREFERENCE($,'[L]UBD','Mast',#790,$,$);
#795=IFCCLASSIFICATIONREFERENCE($,'[L]UK?','Konstruktiv komponent i undergrunden',#784,$,$);
#796=IFCCLASSIFICATIONREFERENCE($,'[L]UKA','B\X2\00E6\X0\relag',#795,$,$);
#797=IFCCLASSIFICATIONREFERENCE($,'[L]UKB','Afretningslag',#795,$,$);
#798=IFCCLASSIFICATIONREFERENCE($,'[L]UKC','Jordanker',#795,$,$);
#799=IFCCLASSIFICATIONREFERENCE($,'[L]UKD','Fundamentss\X2\00F8\X0\jle',#795,$,$);
#800=IFCCLASSIFICATIONREFERENCE($,'[L]UKE','Fundamentsbj\X2\00E6\X0\lke',#795,$,$);
#801=IFCCLASSIFICATIONREFERENCE($,'[L]UKF','Fundamentsd\X2\00E6\X0\kplade',#795,$,$);
#802=IFCCLASSIFICATIONREFERENCE($,'[L]UKG','Fundamentsmassiv',#795,$,$);
#803=IFCCLASSIFICATIONREFERENCE($,'[L]UKH','Fundamentsv\X2\00E6\X0\gplade',#795,$,$);
#804=IFCCLASSIFICATIONREFERENCE($,'[L]UL?','Konstruktiv komponent udenfor undergrunden',#784,$,$);
#805=IFCCLASSIFICATIONREFERENCE($,'[L]ULC','Sokkel',#804,$,$);
#806=IFCCLASSIFICATIONREFERENCE($,'[L]ULD','S\X2\00F8\X0\jle',#804,$,$);
#807=IFCCLASSIFICATIONREFERENCE($,'[L]ULE','Bj\X2\00E6\X0\lke',#804,$,$);
#808=IFCCLASSIFICATIONREFERENCE($,'[L]ULF','Tr\X2\00E6\X0\kb\X2\00E5\X0\nd',#804,$,$);
#809=IFCCLASSIFICATIONREFERENCE($,'[L]ULG','Sten',#804,$,$);
#810=IFCCLASSIFICATIONREFERENCE($,'[L]ULH','Blok',#804,$,$);
#811=IFCCLASSIFICATIONREFERENCE($,'[L]ULJ','Massiv',#804,$,$);
#812=IFCCLASSIFICATIONREFERENCE($,'[L]ULK','D\X2\00E6\X0\kplade',#804,$,$);
#813=IFCCLASSIFICATIONREFERENCE($,'[L]ULL','Undergulv',#804,$,$);
#814=IFCCLASSIFICATIONREFERENCE($,'[L]ULM','V\X2\00E6\X0\gplade',#804,$,$);
#815=IFCCLASSIFICATIONREFERENCE($,'[L]ULN','Konsol',#804,$,$);
#816=IFCCLASSIFICATIONREFERENCE($,'[L]ULP','Vange',#804,$,$);
#817=IFCCLASSIFICATIONREFERENCE($,'[L]ULQ','Trin',#804,$,$);
#818=IFCCLASSIFICATIONREFERENCE($,'[L]ULR','Baluster',#804,$,$);
#819=IFCCLASSIFICATIONREFERENCE($,'[L]ULS','Underlag',#804,$,$);
#820=IFCCLASSIFICATIONREFERENCE($,'[L]ULT','Lejeplade',#804,$,$);
#821=IFCCLASSIFICATIONREFERENCE($,'[L]ULU','Opbinding',#804,$,$);
#822=IFCCLASSIFICATIONREFERENCE($,'[L]UM?','Forst\X2\00E6\X0\rkende komponent',#784,$,$);
#823=IFCCLASSIFICATIONREFERENCE($,'[L]UMA','Armeringsstang',#822,$,$);
#824=IFCCLASSIFICATIONREFERENCE($,'[L]UMB','Armeringsv\X2\00E6\X0\v',#822,$,$);
#825=IFCCLASSIFICATIONREFERENCE($,'[L]UMC','Forst\X2\00E6\X0\rkningslag',#822,$,$);
#826=IFCCLASSIFICATIONREFERENCE($,'[L]UN?','Indrammende komponent',#784,$,$);
#827=IFCCLASSIFICATIONREFERENCE($,'[L]UNA','Karm',#826,$,$);
#828=IFCCLASSIFICATIONREFERENCE($,'[L]UNB','D\X2\00F8\X0\rtrin',#826,$,$);
#829=IFCCLASSIFICATIONREFERENCE($,'[L]UNC','Ramme',#826,$,$);
#830=IFCCLASSIFICATIONREFERENCE($,'[L]UND','Sprosse',#826,$,$);
#831=IFCCLASSIFICATIONREFERENCE($,'[L]UP?','Samlende komponent',#784,$,$);
#832=IFCCLASSIFICATIONREFERENCE($,'[L]UPA','Samlingsanordning',#831,$,$);
#833=IFCCLASSIFICATIONREFERENCE($,'[L]UPB','Konstruktiv fuge',#831,$,$);
#834=IFCCLASSIFICATIONREFERENCE($,'[L]UPC','Mekanisk samling',#831,$,$);
#835=IFCCLASSIFICATIONREFERENCE($,'[L]UPD','Kemisk samling',#831,$,$);
#836=IFCCLASSIFICATIONREFERENCE($,'[L]UQ?','Forbindelsesmiddel',#784,$,$);
#837=IFCCLASSIFICATIONREFERENCE($,'[L]UQA','Permanent mekanisk fastg\X2\00F8\X0\relsesmiddel',#836,$,$);
#838=IFCCLASSIFICATIONREFERENCE($,'[L]UQB','Reversibelt mekanisk fastg\X2\00F8\X0\relsesmiddel',#836,$,$);
#839=IFCCLASSIFICATIONREFERENCE($,'[L]UQC','Kemisk fastg\X2\00F8\X0\relsesmiddel',#836,$,$);
#840=IFCCLASSIFICATIONREFERENCE($,'[L]W??','Transporterende komponent',#387,$,$);
#841=IFCCLASSIFICATIONREFERENCE($,'[L]WB?','H\X2\00F8\X0\jsp\X2\00E6\X0\ndingstransporterende komponent',#840,$,$);
#842=IFCCLASSIFICATIONREFERENCE($,'[L]WBA','H\X2\00F8\X0\jsp\X2\00E6\X0\ndingskanalskinne',#841,$,$);
#843=IFCCLASSIFICATIONREFERENCE($,'[L]WBB','H\X2\00F8\X0\jsp\X2\00E6\X0\ndingskabel',#841,$,$);
#844=IFCCLASSIFICATIONREFERENCE($,'[L]WD?','Lavsp\X2\00E6\X0\ndingstransporterende komponent',#840,$,$);
#845=IFCCLASSIFICATIONREFERENCE($,'[L]WDA','Lavsp\X2\00E6\X0\ningskanalskinne',#844,$,$);
#846=IFCCLASSIFICATIONREFERENCE($,'[L]WDB','Lavsp\X2\00E6\X0\ndingskabel',#844,$,$);
#847=IFCCLASSIFICATIONREFERENCE($,'[L]WE?','Potentialetransporterende komponent',#840,$,$);
#848=IFCCLASSIFICATIONREFERENCE($,'[L]WEA','Jordskinne',#847,$,$);
#849=IFCCLASSIFICATIONREFERENCE($,'[L]WEB','Jordleder',#847,$,$);
#850=IFCCLASSIFICATIONREFERENCE($,'[L]WEC','Udligningsskinne',#847,$,$);
#851=IFCCLASSIFICATIONREFERENCE($,'[L]WED','Udligningsforbindelse',#847,$,$);
#852=IFCCLASSIFICATIONREFERENCE($,'[L]WG?','Elektronisk signaltransporterende komponent',#840,$,$);
#853=IFCCLASSIFICATIONREFERENCE($,'[L]WGA','Styrekabel',#852,$,$);
#854=IFCCLASSIFICATIONREFERENCE($,'[L]WGB','Datakabel',#852,$,$);
#855=IFCCLASSIFICATIONREFERENCE($,'[L]WGC','Antennekabel',#852,$,$);
#856=IFCCLASSIFICATIONREFERENCE($,'[L]WH?','Optisk signaltransporterende komponent',#840,$,$);
#857=IFCCLASSIFICATIONREFERENCE($,'[L]WHA','Fiberkabel',#856,$,$);
#858=IFCCLASSIFICATIONREFERENCE($,'[L]WHB','Lysfiberkabel',#856,$,$);
#859=IFCCLASSIFICATIONREFERENCE($,'[L]WM?','\X2\00C5\X0\ben v\X2\00E6\X0\sketransporterende komponent',#840,$,$);
#860=IFCCLASSIFICATIONREFERENCE($,'[L]WMA','Dr\X2\00E6\X0\nlag',#859,$,$);
#861=IFCCLASSIFICATIONREFERENCE($,'[L]WMB','Rende',#859,$,$);
#862=IFCCLASSIFICATIONREFERENCE($,'[L]WMC','Indd\X2\00E6\X0\kning',#859,$,$);
#863=IFCCLASSIFICATIONREFERENCE($,'[L]WMD','Vandn\X2\00E6\X0\se',#859,$,$);
#864=IFCCLASSIFICATIONREFERENCE($,'[L]WME','Fodblik',#859,$,$);
#865=IFCCLASSIFICATIONREFERENCE($,'[L]WP?','Lukket transporterende komponent',#840,$,$);
#866=IFCCLASSIFICATIONREFERENCE($,'[L]WPA','R\X2\00F8\X0\r',#865,$,$);
#867=IFCCLASSIFICATIONREFERENCE($,'[L]WPB','Luftkanal',#865,$,$);
#868=IFCCLASSIFICATIONREFERENCE($,'[L]WPC','Vandslange',#865,$,$);
#869=IFCCLASSIFICATIONREFERENCE($,'[L]WPD','Luftslange',#865,$,$);
#870=IFCCLASSIFICATIONREFERENCE($,'[L]WPE','Skorsten',#865,$,$);
#871=IFCCLASSIFICATIONREFERENCE($,'[L]WU?','Organisk stoftransporterende komponent',#840,$,$);
#872=IFCCLASSIFICATIONREFERENCE($,'[L]WUA','V\X2\00E6\X0\kstlag',#871,$,$);
#873=IFCCLASSIFICATIONREFERENCE($,'[L]X??','Forbindende komponent',#387,$,$);
#874=IFCCLASSIFICATIONREFERENCE($,'[L]XD?','Effektforbindende komponent',#873,$,$);
#875=IFCCLASSIFICATIONREFERENCE($,'[L]XDA','Klemme',#874,$,$);
#876=IFCCLASSIFICATIONREFERENCE($,'[L]XDB','Stikkontakt',#874,$,$);
#877=IFCCLASSIFICATIONREFERENCE($,'[L]XDC','El-d\X2\00E5\X0\se',#874,$,$);
#878=IFCCLASSIFICATIONREFERENCE($,'[L]XDD','Udtag',#874,$,$);
#879=IFCCLASSIFICATIONREFERENCE($,'[L]XDE','Str\X2\00F8\X0\mfordeler',#874,$,$);
#880=IFCCLASSIFICATIONREFERENCE($,'[L]XDF','Teknikbr\X2\00F8\X0\nd',#874,$,$);
#881=IFCCLASSIFICATIONREFERENCE($,'[L]XE?','Potentialeforbindende komponent',#873,$,$);
#882=IFCCLASSIFICATIONREFERENCE($,'[L]XEA','Jordklemme',#881,$,$);
#883=IFCCLASSIFICATIONREFERENCE($,'[L]XEB','Udligningsklemme',#881,$,$);
#884=IFCCLASSIFICATIONREFERENCE($,'[L]XEC','Stelklemme',#881,$,$);
#885=IFCCLASSIFICATIONREFERENCE($,'[L]XED','Jordelektrode',#881,$,$);
#886=IFCCLASSIFICATIONREFERENCE($,'[L]XEE','Indfanger',#881,$,$);
#887=IFCCLASSIFICATIONREFERENCE($,'[L]XG?','Signalforbindende komponent',#873,$,$);
#888=IFCCLASSIFICATIONREFERENCE($,'[L]XGA','Signalstik',#887,$,$);
#889=IFCCLASSIFICATIONREFERENCE($,'[L]XGB','Signald\X2\00E5\X0\se',#887,$,$);
#890=IFCCLASSIFICATIONREFERENCE($,'[L]XGC','Patchpanel',#887,$,$);
#891=IFCCLASSIFICATIONREFERENCE($,'[L]XGD','Signalfordeler',#887,$,$);
#892=IFCCLASSIFICATIONREFERENCE($,'[L]XL?','Kapsel-flow forbindende komponent',#873,$,$);
#893=IFCCLASSIFICATIONREFERENCE($,'[L]XLA','Vandhane',#892,$,$);
#894=IFCCLASSIFICATIONREFERENCE($,'[L]XLB','Bruser',#892,$,$);
#895=IFCCLASSIFICATIONREFERENCE($,'[L]XLC','Vask',#892,$,$);
#896=IFCCLASSIFICATIONREFERENCE($,'[L]XLD','Toilet',#892,$,$);
#897=IFCCLASSIFICATIONREFERENCE($,'[L]XLE','Urinal',#892,$,$);
#898=IFCCLASSIFICATIONREFERENCE($,'[L]XLF','Drypkop',#892,$,$);
#899=IFCCLASSIFICATIONREFERENCE($,'[L]XLG','Udluftning',#892,$,$);
#900=IFCCLASSIFICATIONREFERENCE($,'[L]XLH','Gulvafl\X2\00F8\X0\b',#892,$,$);
#901=IFCCLASSIFICATIONREFERENCE($,'[L]XM?','Flow-flow forbindende komponent',#873,$,$);
#902=IFCCLASSIFICATIONREFERENCE($,'[L]XMA','Slangekobling',#901,$,$);
#903=IFCCLASSIFICATIONREFERENCE($,'[L]XMB','R\X2\00F8\X0\rkobling',#901,$,$);
#904=IFCCLASSIFICATIONREFERENCE($,'[L]XMC','R\X2\00F8\X0\rfitting',#901,$,$);
#905=IFCCLASSIFICATIONREFERENCE($,'[L]XMD','R\X2\00F8\X0\rflange',#901,$,$);
#906=IFCCLASSIFICATIONREFERENCE($,'[L]XME','Br\X2\00F8\X0\nd',#901,$,$);
#907=IFCCLASSIFICATIONREFERENCE($,'[L]XMF','Kanalfitting',#901,$,$);
#908=IFCCLASSIFICATIONREFERENCE($,'[L]XS?','Niveauforbindende komponent',#873,$,$);
#909=IFCCLASSIFICATIONREFERENCE($,'[L]XSA','Repos',#908,$,$);
#910=IFCCLASSIFICATIONREFERENCE($,'[L]XSB','Trappel\X2\00F8\X0\b',#908,$,$);
#911=IFCCLASSIFICATIONREFERENCE($,'[L]XSC','Stige',#908,$,$);
#912=IFCCLASSIFICATIONREFERENCE($,'[L]XT?','Rumforbindende komponent',#873,$,$);
#913=IFCCLASSIFICATIONREFERENCE($,'[L]XTA','Hul',#912,$,$);
#914=IFCCLASSIFICATIONREFERENCE($,'[L]XTB','Udsparing',#912,$,$);
#915=IFCCLASSIFICATIONREFERENCE($,'[L]XTC','Udgravning',#912,$,$);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,924 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:29',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'CCS',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('Molio','R1 (English version)','2017-06-21','CCS','CCS provides the building and civil engineering sector with a common language and methods for creating unambiguous exchange of information throughout the construction process from idea to operation.','http://ccs.bips.dk/News/CCS_Vaerktoejer',$);
#3=IFCRELASSOCIATESCLASSIFICATION('30D4Z$ts503eGUqY6ZfKw5',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'Construction Entities by Function',$,#2,'Assigns a functional classification to IFC Building and IFC Site based on this CCS (R0) specification.',$);
#5=IFCCLASSIFICATIONREFERENCE($,'[E]A??','Building for human needs and human activity',#4,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'[E]AA?','Residential building',#5,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'[E]AAA','Single-family house',#6,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'[E]AAB','House for multiple occupation',#6,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'[E]AAC','Housing complex',#6,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'[E]AB?','Hotel and restaurant building',#5,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'[E]ABA','Hotel building',#10,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'[E]ABB','Youth hostel building',#10,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'[E]ABC','Restaurant building',#10,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'[E]AC?','Hygiene building',#5,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'[E]ACA','Toilet building',#14,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'[E]ACB','Baths building',#14,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'[E]ACC','Sauna building',#14,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'[E]ACD','Changing building',#14,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'[E]AD?','Isolation building',#5,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'[E]ADA','Shelter building',#19,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'[E]ADB','Prison building',#19,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'[E]AE?','Administration building',#5,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'[E]AEA','Office building',#22,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'[E]AEB','Service building',#22,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'[E]AEC','Emergency services building',#22,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'[E]AF?','Production building',#5,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'[E]AFA','Fabrication building',#26,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'[E]AFB','Workshop building',#26,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'[E]AG?','Trading building',#5,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'[E]AGA','Shop building',#29,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'[E]AGB','Shopping centre',#29,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'[E]AGC','Gallery',#29,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'[E]AGD','Exhibition hall',#29,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'[E]AH?','Teaching building',#5,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'[E]AHA','School building',#34,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'[E]AHB','University building',#34,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'[E]AHC','Course centre building',#34,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'[E]AJ?','Care facility',#5,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'[E]AJA','Children''s institution building',#38,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'[E]AJB','Hospital building',#38,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'[E]AJC','Care home building',#38,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'[E]AK?','Leisure facility',#5,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'[E]AKA','Summer house',#42,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'[E]AKB','Allotment hut',#42,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'[E]AKC','Gazebo',#42,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'[E]AKD','Conservatory',#42,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'[E]AL?','Sports building',#5,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'[E]ALA','Sports hall',#47,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'[E]ALB','Stand',#47,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'[E]ALC','Swimming hall',#47,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'[E]ALD','Riding school',#47,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'[E]ALE','Diving tower',#47,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'[E]ALF','Bowling hall',#47,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'[E]AM?','Cultural building',#5,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'[E]AMA','Theatre building',#54,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'[E]AMB','Concert building',#54,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'[E]AMC','Exhibition building',#54,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'[E]AMD','Planetarium',#54,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'[E]AME','Cinema building',#54,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'[E]AMF','Library building',#54,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'[E]AMG','Multi-functional building',#54,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'[E]AN?','Assembly hall',#5,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'[E]ANA','Residents'' hall',#62,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'[E]ANB','Local hall',#62,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'[E]ANC','Clubhouse',#62,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'[E]AND','Religious building',#62,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'[E]AP?','Storage building',#5,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'[E]APA','Materials store',#67,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'[E]APB','Equipment building (garage)',#67,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'[E]APC','Animal house',#67,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'[E]APD','Greenhouse',#67,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'[E]APE','Mortuary',#67,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'[E]AQ?','Access building',#5,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'[E]AQA','Passageway',#73,$,$);
#75=IFCCLASSIFICATIONREFERENCE($,'[E]AQB','Staircase tower',#73,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'[E]AQC','Lift tower',#73,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'[E]AQD','Gatehouse',#73,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'[E]B??','Plant room',#4,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'[E]BA?','Production plant',#78,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'[E]BAA','Combined heat and power station',#79,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'[E]BAB','Water treatment works',#79,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'[E]BAC','Raw material plant',#79,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'[E]BB?','Linking equipment',#78,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'[E]BBA','Signalling equipment',#83,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'[E]BBB','Transmission mast',#83,$,$);
#86=IFCCLASSIFICATIONREFERENCE($,'[E]BBC','Cabling',#83,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'[E]BBD','Piped network',#83,$,$);
#88=IFCCLASSIFICATIONREFERENCE($,'[E]BBE','Coupling equipment',#83,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'[E]BC?','Disposal systems',#78,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'[E]BCA','Chimney system',#89,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'[E]BCB','Sewer system',#89,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'[E]BD?','Transport system',#78,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'[E]BDA','Crane equipment',#92,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'[E]BDB','Transporter system',#92,$,$);
#95=IFCCLASSIFICATIONREFERENCE($,'[E]BDC','Ropeway',#92,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'[E]BE?','Storage equipment',#78,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'[E]BEA','Measuring station',#96,$,$);
#98=IFCCLASSIFICATIONREFERENCE($,'[E]BEB','Landfill site',#96,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'[E]BEC','Container space',#96,$,$);
#100=IFCCLASSIFICATIONREFERENCE($,'[E]BED','Tank farm',#96,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'[E]BEE','Pool',#96,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'[E]BF?','Process plant',#78,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'[E]BFA','Pumping station',#102,$,$);
#104=IFCCLASSIFICATIONREFERENCE($,'[E]BFB','Treatment pond',#102,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'[E]BFC','Sludge treatment plant',#102,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'[E]BG?','Entertainment system',#78,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'[E]BGA','Roller-coaster',#106,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'[E]BGB','Merry-go-round',#106,$,$);
#109=IFCCLASSIFICATIONREFERENCE($,'[E]BGC','Ferris wheel',#106,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'[E]BGD','Flume',#106,$,$);
#111=IFCCLASSIFICATIONREFERENCE($,'[E]C??','Infrastructure facility',#4,$,$);
#112=IFCCLASSIFICATIONREFERENCE($,'[E]CA?','Bridge',#111,$,$);
#113=IFCCLASSIFICATIONREFERENCE($,'[E]CAA','Bridge',#112,$,$);
#114=IFCCLASSIFICATIONREFERENCE($,'[E]CAB','Tunnel',#112,$,$);
#115=IFCCLASSIFICATIONREFERENCE($,'[E]CAC','Transport canal',#112,$,$);
#116=IFCCLASSIFICATIONREFERENCE($,'[E]CAD','Rail network',#112,$,$);
#117=IFCCLASSIFICATIONREFERENCE($,'[E]CAE','Road',#112,$,$);
#118=IFCCLASSIFICATIONREFERENCE($,'[E]CAF','Footpath',#112,$,$);
#119=IFCCLASSIFICATIONREFERENCE($,'[E]CAG','Path',#112,$,$);
#120=IFCCLASSIFICATIONREFERENCE($,'[E]CB?','Terminus',#111,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'[E]CBA','Quay',#120,$,$);
#122=IFCCLASSIFICATIONREFERENCE($,'[E]CBB','Platform',#120,$,$);
#123=IFCCLASSIFICATIONREFERENCE($,'[E]CBC','Crossroads',#120,$,$);
#124=IFCCLASSIFICATIONREFERENCE($,'[E]CBD','Rail terminus',#120,$,$);
#125=IFCCLASSIFICATIONREFERENCE($,'[E]CBE','Airport terminal',#120,$,$);
#126=IFCCLASSIFICATIONREFERENCE($,'[E]CBF','Bus terminus',#120,$,$);
#127=IFCCLASSIFICATIONREFERENCE($,'[E]CBG','Ferry terminal',#120,$,$);
#128=IFCCLASSIFICATIONREFERENCE($,'[E]CC?','Parking equipment',#111,$,$);
#129=IFCCLASSIFICATIONREFERENCE($,'[E]CCA','Cycle park',#128,$,$);
#130=IFCCLASSIFICATIONREFERENCE($,'[E]CCB','Car park',#128,$,$);
#131=IFCCLASSIFICATIONREFERENCE($,'[E]CCC','Sidings system',#128,$,$);
#132=IFCCLASSIFICATIONREFERENCE($,'[E]CCD','Airfield',#128,$,$);
#133=IFCCLASSIFICATIONREFERENCE($,'[E]CD?','Traffic system',#111,$,$);
#134=IFCCLASSIFICATIONREFERENCE($,'[E]CDA','Control tower',#133,$,$);
#135=IFCCLASSIFICATIONREFERENCE($,'[E]CDB','Aerial mast',#133,$,$);
#136=IFCCLASSIFICATIONREFERENCE($,'[E]CDC','Lighthouse',#133,$,$);
#137=IFCCLASSIFICATIONREFERENCE($,'[E]CDD','Belfry',#133,$,$);
#138=IFCCLASSIFICATIONREFERENCE($,'[E]CE?','Water control facility',#111,$,$);
#139=IFCCLASSIFICATIONREFERENCE($,'[E]CEA','Dam',#138,$,$);
#140=IFCCLASSIFICATIONREFERENCE($,'[E]CEB','Canal',#138,$,$);
#141=IFCCLASSIFICATIONREFERENCE($,'[E]CEC','Barrage',#138,$,$);
#142=IFCCLASSIFICATIONREFERENCE($,'[E]CED','Sluice system',#138,$,$);
#143=IFCCLASSIFICATIONREFERENCE($,'[E]CEE','Mole',#138,$,$);
#144=IFCCLASSIFICATIONREFERENCE($,'[E]D??','Landscape',#4,$,$);
#145=IFCCLASSIFICATIONREFERENCE($,'[E]DA?','Natural area',#144,$,$);
#146=IFCCLASSIFICATIONREFERENCE($,'[E]DAA','Beach',#145,$,$);
#147=IFCCLASSIFICATIONREFERENCE($,'[E]DAB','Dunes',#145,$,$);
#148=IFCCLASSIFICATIONREFERENCE($,'[E]DAC','Lake',#145,$,$);
#149=IFCCLASSIFICATIONREFERENCE($,'[E]DAD','Meadow',#145,$,$);
#150=IFCCLASSIFICATIONREFERENCE($,'[E]DAE','Wetland',#145,$,$);
#151=IFCCLASSIFICATIONREFERENCE($,'[E]DAF','Watercourse',#145,$,$);
#152=IFCCLASSIFICATIONREFERENCE($,'[E]DB?','Recreational area',#144,$,$);
#153=IFCCLASSIFICATIONREFERENCE($,'[E]DBA','Garden',#152,$,$);
#154=IFCCLASSIFICATIONREFERENCE($,'[E]DBB','Park',#152,$,$);
#155=IFCCLASSIFICATIONREFERENCE($,'[E]DBC','Campsite',#152,$,$);
#156=IFCCLASSIFICATIONREFERENCE($,'[E]DC?','Assembly area',#144,$,$);
#157=IFCCLASSIFICATIONREFERENCE($,'[E]DCA','Meeting place',#156,$,$);
#158=IFCCLASSIFICATIONREFERENCE($,'[E]DCB','Market square',#156,$,$);
#159=IFCCLASSIFICATIONREFERENCE($,'[E]DCC','Training site',#156,$,$);
#160=IFCCLASSIFICATIONREFERENCE($,'[E]DCD','Playground',#156,$,$);
#161=IFCCLASSIFICATIONREFERENCE($,'[E]DD?','Production area',#144,$,$);
#162=IFCCLASSIFICATIONREFERENCE($,'[E]DDA','Plot',#161,$,$);
#163=IFCCLASSIFICATIONREFERENCE($,'[E]DDB','Quarry',#161,$,$);
#164=IFCCLASSIFICATIONREFERENCE($,'[E]DDC','Pit',#161,$,$);
#165=IFCCLASSIFICATIONREFERENCE($,'[E]DDD','Woodland',#161,$,$);
#166=IFCCLASSIFICATIONREFERENCE($,'[E]DDE','Field',#161,$,$);
#167=IFCCLASSIFICATIONREFERENCE($,'[E]DE?','Sports field',#144,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'[E]DEA','Playing field',#167,$,$);
#169=IFCCLASSIFICATIONREFERENCE($,'[E]DEB','Race track',#167,$,$);
#170=IFCCLASSIFICATIONREFERENCE($,'[E]DEC','Athletics track',#167,$,$);
#171=IFCCLASSIFICATIONREFERENCE($,'[E]DED','Swimming pool',#167,$,$);
#172=IFCCLASSIFICATIONREFERENCE($,'[E]E??','Monument',#4,$,$);
#173=IFCCLASSIFICATIONREFERENCE($,'[E]EA?','Memorial',#172,$,$);
#174=IFCCLASSIFICATIONREFERENCE($,'[E]EAA','Cultural monument',#173,$,$);
#175=IFCCLASSIFICATIONREFERENCE($,'[E]EAB','Ancient monument',#173,$,$);
#176=IFCCLASSIFICATIONREFERENCE($,'[E]Z??','Undefined',#4,$,$);
#177=IFCCLASSIFICATIONREFERENCE($,'[E]ZZ?','Undefined',#176,$,$);
#178=IFCCLASSIFICATIONREFERENCE($,'[E]ZZZ','Undefined',#177,$,$);
#179=IFCCLASSIFICATIONREFERENCE($,'Construction Spaces by Function',$,#2,'Assigns a functional classification to IFC Spaces (= ARCHICAD Zones) and IFC Zones based on this CCS (R1) specification.\X2\000A00090009\X0\',$);
#180=IFCCLASSIFICATIONREFERENCE($,'[A]A??','Space for human needs',#179,$,$);
#181=IFCCLASSIFICATIONREFERENCE($,'[A]AA?','Occupiable room',#180,$,$);
#182=IFCCLASSIFICATIONREFERENCE($,'[A]AAA','Room',#181,$,$);
#183=IFCCLASSIFICATIONREFERENCE($,'[A]AAB','Living room',#181,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'[A]AAC','Waiting room',#181,$,$);
#185=IFCCLASSIFICATIONREFERENCE($,'[A]AAD','Courtyard',#181,$,$);
#186=IFCCLASSIFICATIONREFERENCE($,'[A]AB?','Washroom',#180,$,$);
#187=IFCCLASSIFICATIONREFERENCE($,'[A]ABA','Bathroom',#186,$,$);
#188=IFCCLASSIFICATIONREFERENCE($,'[A]ABB','Toilet',#186,$,$);
#189=IFCCLASSIFICATIONREFERENCE($,'[A]ABC','Nappy change',#186,$,$);
#190=IFCCLASSIFICATIONREFERENCE($,'[A]ABD','Changing room',#186,$,$);
#191=IFCCLASSIFICATIONREFERENCE($,'[A]ABE','Bathing room',#186,$,$);
#192=IFCCLASSIFICATIONREFERENCE($,'[A]ABF','Sauna',#186,$,$);
#193=IFCCLASSIFICATIONREFERENCE($,'[A]AC?','Isolation room',#180,$,$);
#194=IFCCLASSIFICATIONREFERENCE($,'[A]ACA','Shelter',#193,$,$);
#195=IFCCLASSIFICATIONREFERENCE($,'[A]ACB','Cell',#193,$,$);
#196=IFCCLASSIFICATIONREFERENCE($,'[A]AD?','Workroom',#180,$,$);
#197=IFCCLASSIFICATIONREFERENCE($,'[A]ADA','Office',#196,$,$);
#198=IFCCLASSIFICATIONREFERENCE($,'[A]ADB','Meeting room',#196,$,$);
#199=IFCCLASSIFICATIONREFERENCE($,'[A]ADC','Reception',#196,$,$);
#200=IFCCLASSIFICATIONREFERENCE($,'[A]ADD','Sales area',#196,$,$);
#201=IFCCLASSIFICATIONREFERENCE($,'[A]ADE','Teaching room',#196,$,$);
#202=IFCCLASSIFICATIONREFERENCE($,'[A]ADF','Study',#196,$,$);
#203=IFCCLASSIFICATIONREFERENCE($,'[A]ADG','Laundry',#196,$,$);
#204=IFCCLASSIFICATIONREFERENCE($,'[A]ADH','Packing room',#196,$,$);
#205=IFCCLASSIFICATIONREFERENCE($,'[A]ADJ','Treatment room',#196,$,$);
#206=IFCCLASSIFICATIONREFERENCE($,'[A]ADK','Examining room',#196,$,$);
#207=IFCCLASSIFICATIONREFERENCE($,'[A]ADL','Observation room',#196,$,$);
#208=IFCCLASSIFICATIONREFERENCE($,'[A]ADM','Viewing room',#196,$,$);
#209=IFCCLASSIFICATIONREFERENCE($,'[A]ADN','Media workshop',#196,$,$);
#210=IFCCLASSIFICATIONREFERENCE($,'[A]ADP','Goods reception room',#196,$,$);
#211=IFCCLASSIFICATIONREFERENCE($,'[A]ADQ','Mail room',#196,$,$);
#212=IFCCLASSIFICATIONREFERENCE($,'[A]AE?','Production room',#180,$,$);
#213=IFCCLASSIFICATIONREFERENCE($,'[A]AEA','Kitchen',#212,$,$);
#214=IFCCLASSIFICATIONREFERENCE($,'[A]AEB','Materials workshop',#212,$,$);
#215=IFCCLASSIFICATIONREFERENCE($,'[A]AEC','Machine shop',#212,$,$);
#216=IFCCLASSIFICATIONREFERENCE($,'[A]AED','Studio',#212,$,$);
#217=IFCCLASSIFICATIONREFERENCE($,'[A]AF?','Laboratory',#180,$,$);
#218=IFCCLASSIFICATIONREFERENCE($,'[A]AFA','Technical laboratory',#217,$,$);
#219=IFCCLASSIFICATIONREFERENCE($,'[A]AFB','Materials laboratory',#217,$,$);
#220=IFCCLASSIFICATIONREFERENCE($,'[A]AFC','Biology laboratory',#217,$,$);
#221=IFCCLASSIFICATIONREFERENCE($,'[A]AG?','Practice room',#180,$,$);
#222=IFCCLASSIFICATIONREFERENCE($,'[A]AGA','Sports hall',#221,$,$);
#223=IFCCLASSIFICATIONREFERENCE($,'[A]AGB','Training room',#221,$,$);
#224=IFCCLASSIFICATIONREFERENCE($,'[A]AGC','Rehearsal room',#221,$,$);
#225=IFCCLASSIFICATIONREFERENCE($,'[A]AGD','Stage',#221,$,$);
#226=IFCCLASSIFICATIONREFERENCE($,'[A]AGE','Playroom',#221,$,$);
#227=IFCCLASSIFICATIONREFERENCE($,'[A]AH?','Assembly room',#180,$,$);
#228=IFCCLASSIFICATIONREFERENCE($,'[A]AHA','Dining room',#227,$,$);
#229=IFCCLASSIFICATIONREFERENCE($,'[A]AHB','Auditorium',#227,$,$);
#230=IFCCLASSIFICATIONREFERENCE($,'[A]AHC','Hall',#227,$,$);
#231=IFCCLASSIFICATIONREFERENCE($,'[A]AHD','Gallery',#227,$,$);
#232=IFCCLASSIFICATIONREFERENCE($,'[A]AHE','Religious faith room',#227,$,$);
#233=IFCCLASSIFICATIONREFERENCE($,'[A]AHF','Library room',#227,$,$);
#234=IFCCLASSIFICATIONREFERENCE($,'[A]C??','Storage space',#179,$,$);
#235=IFCCLASSIFICATIONREFERENCE($,'[A]CA?','Materials store',#234,$,$);
#236=IFCCLASSIFICATIONREFERENCE($,'[A]CAA','Refuse storage room',#235,$,$);
#237=IFCCLASSIFICATIONREFERENCE($,'[A]CAB','Chemicals store',#235,$,$);
#238=IFCCLASSIFICATIONREFERENCE($,'[A]CAC','Medicine store',#235,$,$);
#239=IFCCLASSIFICATIONREFERENCE($,'[A]CAD','Archive room',#235,$,$);
#240=IFCCLASSIFICATIONREFERENCE($,'[A]CAE','Liquids store',#235,$,$);
#241=IFCCLASSIFICATIONREFERENCE($,'[A]CAF','Raw materials store',#235,$,$);
#242=IFCCLASSIFICATIONREFERENCE($,'[A]CAG','Larder',#235,$,$);
#243=IFCCLASSIFICATIONREFERENCE($,'[A]CAH','Secure storage',#235,$,$);
#244=IFCCLASSIFICATIONREFERENCE($,'[A]CAJ','Packaging store',#235,$,$);
#245=IFCCLASSIFICATIONREFERENCE($,'[A]CAK','Clothes store',#235,$,$);
#246=IFCCLASSIFICATIONREFERENCE($,'[A]CAL','Building materials store',#235,$,$);
#247=IFCCLASSIFICATIONREFERENCE($,'[A]CB?','Equipment room',#234,$,$);
#248=IFCCLASSIFICATIONREFERENCE($,'[A]CBA','Furniture store',#247,$,$);
#249=IFCCLASSIFICATIONREFERENCE($,'[A]CBB','Tool store',#247,$,$);
#250=IFCCLASSIFICATIONREFERENCE($,'[A]CBC','Instrument store',#247,$,$);
#251=IFCCLASSIFICATIONREFERENCE($,'[A]CBD','Garage',#247,$,$);
#252=IFCCLASSIFICATIONREFERENCE($,'[A]CBE','Cleaning room',#247,$,$);
#253=IFCCLASSIFICATIONREFERENCE($,'[A]CC?','Animal room',#234,$,$);
#254=IFCCLASSIFICATIONREFERENCE($,'[A]CCA','Cage',#253,$,$);
#255=IFCCLASSIFICATIONREFERENCE($,'[A]CCB','Stall',#253,$,$);
#256=IFCCLASSIFICATIONREFERENCE($,'[A]CCC','Stable',#253,$,$);
#257=IFCCLASSIFICATIONREFERENCE($,'[A]CCD','Pool',#253,$,$);
#258=IFCCLASSIFICATIONREFERENCE($,'[A]CD?','Plant house',#234,$,$);
#259=IFCCLASSIFICATIONREFERENCE($,'[A]CDA','Greenhouse',#258,$,$);
#260=IFCCLASSIFICATIONREFERENCE($,'[A]CDB','Conservatory',#258,$,$);
#261=IFCCLASSIFICATIONREFERENCE($,'[A]CE?','Mortuary',#234,$,$);
#262=IFCCLASSIFICATIONREFERENCE($,'[A]CEA','Chapel of rest',#261,$,$);
#263=IFCCLASSIFICATIONREFERENCE($,'[A]CEB','Crypt',#261,$,$);
#264=IFCCLASSIFICATIONREFERENCE($,'[A]D??','Room for technical systems',#179,$,$);
#265=IFCCLASSIFICATIONREFERENCE($,'[A]DA?','Plant room',#264,$,$);
#266=IFCCLASSIFICATIONREFERENCE($,'[A]DAA','Electrical plant room',#265,$,$);
#267=IFCCLASSIFICATIONREFERENCE($,'[A]DAB','IT equipment room',#265,$,$);
#268=IFCCLASSIFICATIONREFERENCE($,'[A]DAC','Mechanical plant room',#265,$,$);
#269=IFCCLASSIFICATIONREFERENCE($,'[A]DAD','Shared plant room',#265,$,$);
#270=IFCCLASSIFICATIONREFERENCE($,'[A]DB?','Equipment room',#264,$,$);
#271=IFCCLASSIFICATIONREFERENCE($,'[A]DBA','Control equipment room',#270,$,$);
#272=IFCCLASSIFICATIONREFERENCE($,'[A]DBB','Production plant room',#270,$,$);
#273=IFCCLASSIFICATIONREFERENCE($,'[A]DBC','Service equipment room',#270,$,$);
#274=IFCCLASSIFICATIONREFERENCE($,'[A]DBD','Analysis equipment room',#270,$,$);
#275=IFCCLASSIFICATIONREFERENCE($,'[A]E??','Space for infrastructure',#179,$,$);
#276=IFCCLASSIFICATIONREFERENCE($,'[A]EA?','Circulation space',#275,$,$);
#277=IFCCLASSIFICATIONREFERENCE($,'[A]EAA','Anteroom',#276,$,$);
#278=IFCCLASSIFICATIONREFERENCE($,'[A]EAB','Airlock',#276,$,$);
#279=IFCCLASSIFICATIONREFERENCE($,'[A]EAC','Corridor',#276,$,$);
#280=IFCCLASSIFICATIONREFERENCE($,'[A]EAD','Stairwell',#276,$,$);
#281=IFCCLASSIFICATIONREFERENCE($,'[A]EAE','Lift space',#276,$,$);
#282=IFCCLASSIFICATIONREFERENCE($,'[A]EAF','Portico',#276,$,$);
#283=IFCCLASSIFICATIONREFERENCE($,'[A]EB?','Services duct',#275,$,$);
#284=IFCCLASSIFICATIONREFERENCE($,'[A]EBA','Services tunnel',#283,$,$);
#285=IFCCLASSIFICATIONREFERENCE($,'[A]EBB','Shaft',#283,$,$);
#286=IFCCLASSIFICATIONREFERENCE($,'[A]EBC','Duct',#283,$,$);
#287=IFCCLASSIFICATIONREFERENCE($,'[A]EC?','Transport space',#275,$,$);
#288=IFCCLASSIFICATIONREFERENCE($,'[A]ECA','Clearance profile',#287,$,$);
#289=IFCCLASSIFICATIONREFERENCE($,'[A]ECB','Tunnel',#287,$,$);
#290=IFCCLASSIFICATIONREFERENCE($,'[A]Z??','Undefined',#179,$,$);
#291=IFCCLASSIFICATIONREFERENCE($,'[A]ZZ?','Undefined',#290,$,$);
#292=IFCCLASSIFICATIONREFERENCE($,'[A]ZZZ','Undefined',#291,$,$);
#293=IFCCLASSIFICATIONREFERENCE($,'Construction Elements - Functional Systems',$,#2,'Assigns a classification by Function, Location and/or Shape to ARCHICAD Construction Elements based on this CCS (R1) specification.',$);
#294=IFCCLASSIFICATIONREFERENCE($,'[L]A','Ground system',#293,$,$);
#295=IFCCLASSIFICATIONREFERENCE($,'[L]B','Wall system',#293,$,$);
#296=IFCCLASSIFICATIONREFERENCE($,'[L]C','Structural floor system',#293,$,$);
#297=IFCCLASSIFICATIONREFERENCE($,'[L]D','Roof system',#293,$,$);
#298=IFCCLASSIFICATIONREFERENCE($,'[L]E','Gas and air system',#293,$,$);
#299=IFCCLASSIFICATIONREFERENCE($,'[L]F','Water and fluid system',#293,$,$);
#300=IFCCLASSIFICATIONREFERENCE($,'[L]G','Drainage and waste system',#293,$,$);
#301=IFCCLASSIFICATIONREFERENCE($,'[L]H','Cooling and heating system',#293,$,$);
#302=IFCCLASSIFICATIONREFERENCE($,'[L]J','Ventilation system',#293,$,$);
#303=IFCCLASSIFICATIONREFERENCE($,'[L]K','Electrical system',#293,$,$);
#304=IFCCLASSIFICATIONREFERENCE($,'[L]L','Automation system',#293,$,$);
#305=IFCCLASSIFICATIONREFERENCE($,'[L]M','IT and communication system',#293,$,$);
#306=IFCCLASSIFICATIONREFERENCE($,'[L]N','Transportation system',#293,$,$);
#307=IFCCLASSIFICATIONREFERENCE($,'[L]P','Fitting out system',#293,$,$);
#308=IFCCLASSIFICATIONREFERENCE($,'Construction Elements - Technical Systems',$,#2,'Assigns a classification by Function, Location and/or Shape to ARCHICAD Construction Elements based on this CCS (R1) specification.',$);
#309=IFCCLASSIFICATIONREFERENCE($,'[L]A?','Assembling technical system',#308,$,$);
#310=IFCCLASSIFICATIONREFERENCE($,'[L]AA','Pavement assembly',#309,$,$);
#311=IFCCLASSIFICATIONREFERENCE($,'[L]AB','Foundation assembly',#309,$,$);
#312=IFCCLASSIFICATIONREFERENCE($,'[L]AC','Floor separating assembly',#309,$,$);
#313=IFCCLASSIFICATIONREFERENCE($,'[L]AD','Wall assembly',#309,$,$);
#314=IFCCLASSIFICATIONREFERENCE($,'[L]AE','Roof assembly',#309,$,$);
#315=IFCCLASSIFICATIONREFERENCE($,'[L]AF','Stairway assembly',#309,$,$);
#316=IFCCLASSIFICATIONREFERENCE($,'[L]AG','Ramp assembly',#309,$,$);
#317=IFCCLASSIFICATIONREFERENCE($,'[L]B?','Structural technical system',#308,$,$);
#318=IFCCLASSIFICATIONREFERENCE($,'[L]BA','Groundworks structure',#317,$,$);
#319=IFCCLASSIFICATIONREFERENCE($,'[L]BB','Foundation structure',#317,$,$);
#320=IFCCLASSIFICATIONREFERENCE($,'[L]BC','Slab structure',#317,$,$);
#321=IFCCLASSIFICATIONREFERENCE($,'[L]BD','Wall structure',#317,$,$);
#322=IFCCLASSIFICATIONREFERENCE($,'[L]BE','Roof structure',#317,$,$);
#323=IFCCLASSIFICATIONREFERENCE($,'[L]BF','Floor structure',#317,$,$);
#324=IFCCLASSIFICATIONREFERENCE($,'[L]BG','Ceiling structure',#317,$,$);
#325=IFCCLASSIFICATIONREFERENCE($,'[L]H?','Supplying technical system',#308,$,$);
#326=IFCCLASSIFICATIONREFERENCE($,'[L]HA','Gas and air supply system',#325,$,$);
#327=IFCCLASSIFICATIONREFERENCE($,'[L]HB','Water supply system',#325,$,$);
#328=IFCCLASSIFICATIONREFERENCE($,'[L]HC','Cooling supply system',#325,$,$);
#329=IFCCLASSIFICATIONREFERENCE($,'[L]HD','Heating supply system',#325,$,$);
#330=IFCCLASSIFICATIONREFERENCE($,'[L]HE','Combined heating and cooling supply system',#325,$,$);
#331=IFCCLASSIFICATIONREFERENCE($,'[L]HF','Ventilation plant',#325,$,$);
#332=IFCCLASSIFICATIONREFERENCE($,'[L]HG','Power supply system',#325,$,$);
#333=IFCCLASSIFICATIONREFERENCE($,'[L]HH','Lighting system',#325,$,$);
#334=IFCCLASSIFICATIONREFERENCE($,'[L]HJ','Signal supply system',#325,$,$);
#335=IFCCLASSIFICATIONREFERENCE($,'[L]J?','Transporting technical system',#308,$,$);
#336=IFCCLASSIFICATIONREFERENCE($,'[L]JA','Gas distribution system',#335,$,$);
#337=IFCCLASSIFICATIONREFERENCE($,'[L]JB','Water distribution system',#335,$,$);
#338=IFCCLASSIFICATIONREFERENCE($,'[L]JC','Chemical distribution system',#335,$,$);
#339=IFCCLASSIFICATIONREFERENCE($,'[L]JD','Effluent system',#335,$,$);
#340=IFCCLASSIFICATIONREFERENCE($,'[L]JE','Refuse system',#335,$,$);
#341=IFCCLASSIFICATIONREFERENCE($,'[L]JF','Cooling distribution system',#335,$,$);
#342=IFCCLASSIFICATIONREFERENCE($,'[L]JG','Heating distribution system',#335,$,$);
#343=IFCCLASSIFICATIONREFERENCE($,'[L]JH','Combined heating and cooling distribution system',#335,$,$);
#344=IFCCLASSIFICATIONREFERENCE($,'[L]JJ','Air distribution system',#335,$,$);
#345=IFCCLASSIFICATIONREFERENCE($,'[L]JK','Power distribution system',#335,$,$);
#346=IFCCLASSIFICATIONREFERENCE($,'[L]JL','Signal distribution system',#335,$,$);
#347=IFCCLASSIFICATIONREFERENCE($,'[L]JM','Person transportation system',#335,$,$);
#348=IFCCLASSIFICATIONREFERENCE($,'[L]JN','Goods transportation system',#335,$,$);
#349=IFCCLASSIFICATIONREFERENCE($,'[L]JP','Building services routing',#335,$,$);
#350=IFCCLASSIFICATIONREFERENCE($,'[L]K?','Processing technical system',#308,$,$);
#351=IFCCLASSIFICATIONREFERENCE($,'[L]KA','Solar screening system',#350,$,$);
#352=IFCCLASSIFICATIONREFERENCE($,'[L]KB','Door and window opening system',#350,$,$);
#353=IFCCLASSIFICATIONREFERENCE($,'[L]KC','Filtration system',#350,$,$);
#354=IFCCLASSIFICATIONREFERENCE($,'[L]KD','Separator system',#350,$,$);
#355=IFCCLASSIFICATIONREFERENCE($,'[L]KE','Water treatment system',#350,$,$);
#356=IFCCLASSIFICATIONREFERENCE($,'[L]KF','Pump system',#350,$,$);
#357=IFCCLASSIFICATIONREFERENCE($,'[L]KG','Pressure and expansion system',#350,$,$);
#358=IFCCLASSIFICATIONREFERENCE($,'[L]KH','Converter system',#350,$,$);
#359=IFCCLASSIFICATIONREFERENCE($,'[L]KJ','Aerial system',#350,$,$);
#360=IFCCLASSIFICATIONREFERENCE($,'[L]KK','Weather station system',#350,$,$);
#361=IFCCLASSIFICATIONREFERENCE($,'[L]KL','Access system',#350,$,$);
#362=IFCCLASSIFICATIONREFERENCE($,'[L]L?','Monitoring technical system',#308,$,$);
#363=IFCCLASSIFICATIONREFERENCE($,'[L]LA','Gas alarm system',#362,$,$);
#364=IFCCLASSIFICATIONREFERENCE($,'[L]LB','Fire alarm system',#362,$,$);
#365=IFCCLASSIFICATIONREFERENCE($,'[L]LC','Automation system',#362,$,$);
#366=IFCCLASSIFICATIONREFERENCE($,'[L]LD','Access control system',#362,$,$);
#367=IFCCLASSIFICATIONREFERENCE($,'[L]LE','Alarm system',#362,$,$);
#368=IFCCLASSIFICATIONREFERENCE($,'[L]LF','CCTV system',#362,$,$);
#369=IFCCLASSIFICATIONREFERENCE($,'[L]M?','Information presenting technical system',#308,$,$);
#370=IFCCLASSIFICATIONREFERENCE($,'[L]MA','Warning system',#369,$,$);
#371=IFCCLASSIFICATIONREFERENCE($,'[L]MB','Audio-Video system',#369,$,$);
#372=IFCCLASSIFICATIONREFERENCE($,'[L]MC','Traffic control system',#369,$,$);
#373=IFCCLASSIFICATIONREFERENCE($,'[L]P?','Protecting technical system',#308,$,$);
#374=IFCCLASSIFICATIONREFERENCE($,'[L]PA','Fire protection system',#373,$,$);
#375=IFCCLASSIFICATIONREFERENCE($,'[L]PB','Firefighting system',#373,$,$);
#376=IFCCLASSIFICATIONREFERENCE($,'[L]PC','Earthing system',#373,$,$);
#377=IFCCLASSIFICATIONREFERENCE($,'[L]PD','Lightning protection system',#373,$,$);
#378=IFCCLASSIFICATIONREFERENCE($,'[L]PE','Cathodic protection system',#373,$,$);
#379=IFCCLASSIFICATIONREFERENCE($,'[L]Q?','Storing technical system',#308,$,$);
#380=IFCCLASSIFICATIONREFERENCE($,'[L]QA','Meter system',#379,$,$);
#381=IFCCLASSIFICATIONREFERENCE($,'[L]QB','Gas and air storage system',#379,$,$);
#382=IFCCLASSIFICATIONREFERENCE($,'[L]QC','Liquid storage system',#379,$,$);
#383=IFCCLASSIFICATIONREFERENCE($,'[L]R?','Furnishing technical system',#308,$,$);
#384=IFCCLASSIFICATIONREFERENCE($,'[L]RA','Planting',#383,$,$);
#385=IFCCLASSIFICATIONREFERENCE($,'[L]RB','Furniture',#383,$,$);
#386=IFCCLASSIFICATIONREFERENCE($,'[L]RC','Equipment',#383,$,$);
#387=IFCCLASSIFICATIONREFERENCE($,'Construction Elements - Components',$,#2,'Assigns a classification by Function, Location and/or Shape to ARCHICAD Construction Elements based on this CCS (R1) specification.',$);
#388=IFCCLASSIFICATIONREFERENCE($,'[L]B??','Converting component',#387,$,$);
#389=IFCCLASSIFICATIONREFERENCE($,'[L]BA?','Electrical potential converting component',#388,$,$);
#390=IFCCLASSIFICATIONREFERENCE($,'[L]BAA','Measuring relay (voltage)',#389,$,$);
#391=IFCCLASSIFICATIONREFERENCE($,'[L]BAB','Measuring transformer (voltage)',#389,$,$);
#392=IFCCLASSIFICATIONREFERENCE($,'[L]BC?','Electrical current converting component',#388,$,$);
#393=IFCCLASSIFICATIONREFERENCE($,'[L]BCA','Measuring relay (current)',#392,$,$);
#394=IFCCLASSIFICATIONREFERENCE($,'[L]BCB','Measuring transformer (current)',#392,$,$);
#395=IFCCLASSIFICATIONREFERENCE($,'[L]BD?','Density converting component',#388,$,$);
#396=IFCCLASSIFICATIONREFERENCE($,'[L]BDA','Density transmitter',#395,$,$);
#397=IFCCLASSIFICATIONREFERENCE($,'[L]BDB','Density switch',#395,$,$);
#398=IFCCLASSIFICATIONREFERENCE($,'[L]BE?','Electromagnetic variable converting component',#388,$,$);
#399=IFCCLASSIFICATIONREFERENCE($,'[L]BEA','Measuring relay',#398,$,$);
#400=IFCCLASSIFICATIONREFERENCE($,'[L]BEB','Electromagnetic measuring transformer',#398,$,$);
#401=IFCCLASSIFICATIONREFERENCE($,'[L]BF?','Flow converting component',#388,$,$);
#402=IFCCLASSIFICATIONREFERENCE($,'[L]BFA','Liquid flow meter',#401,$,$);
#403=IFCCLASSIFICATIONREFERENCE($,'[L]BFB','Gas flow meter',#401,$,$);
#404=IFCCLASSIFICATIONREFERENCE($,'[L]BFC','Air flow transmitter',#401,$,$);
#405=IFCCLASSIFICATIONREFERENCE($,'[L]BFD','Air flow switch',#401,$,$);
#406=IFCCLASSIFICATIONREFERENCE($,'[L]BG?','Position converting component',#388,$,$);
#407=IFCCLASSIFICATIONREFERENCE($,'[L]BGA','Position transmitter',#406,$,$);
#408=IFCCLASSIFICATIONREFERENCE($,'[L]BGB','Position switch',#406,$,$);
#409=IFCCLASSIFICATIONREFERENCE($,'[L]BGC','Motion detector',#406,$,$);
#410=IFCCLASSIFICATIONREFERENCE($,'[L]BGD','Directional detector',#406,$,$);
#411=IFCCLASSIFICATIONREFERENCE($,'[L]BJ?','Consumption converting component',#388,$,$);
#412=IFCCLASSIFICATIONREFERENCE($,'[L]BJA','Gas meter',#411,$,$);
#413=IFCCLASSIFICATIONREFERENCE($,'[L]BJB','Cooling consumption meter',#411,$,$);
#414=IFCCLASSIFICATIONREFERENCE($,'[L]BJC','Heat consumption meter',#411,$,$);
#415=IFCCLASSIFICATIONREFERENCE($,'[L]BJD','Electricity meter',#411,$,$);
#416=IFCCLASSIFICATIONREFERENCE($,'[L]BK?','Time converting component',#388,$,$);
#417=IFCCLASSIFICATIONREFERENCE($,'[L]BKA','Time counter',#416,$,$);
#418=IFCCLASSIFICATIONREFERENCE($,'[L]BKB','Timer switch',#416,$,$);
#419=IFCCLASSIFICATIONREFERENCE($,'[L]BL?','Level converting component',#388,$,$);
#420=IFCCLASSIFICATIONREFERENCE($,'[L]BLA','Level transmitter',#419,$,$);
#421=IFCCLASSIFICATIONREFERENCE($,'[L]BLB','Level switch',#419,$,$);
#422=IFCCLASSIFICATIONREFERENCE($,'[L]BM?','Moisture content converting component',#388,$,$);
#423=IFCCLASSIFICATIONREFERENCE($,'[L]BMA','Humidity transmitter',#422,$,$);
#424=IFCCLASSIFICATIONREFERENCE($,'[L]BMB','Humidity switch',#422,$,$);
#425=IFCCLASSIFICATIONREFERENCE($,'[L]BP?','Pressure converting component',#388,$,$);
#426=IFCCLASSIFICATIONREFERENCE($,'[L]BPA','Pressure transmitter',#425,$,$);
#427=IFCCLASSIFICATIONREFERENCE($,'[L]BPB','Pressure switch',#425,$,$);
#428=IFCCLASSIFICATIONREFERENCE($,'[L]BQ?','Quality converting component',#388,$,$);
#429=IFCCLASSIFICATIONREFERENCE($,'[L]BQA','Air quality meter',#428,$,$);
#430=IFCCLASSIFICATIONREFERENCE($,'[L]BQB','Air quality detector',#428,$,$);
#431=IFCCLASSIFICATIONREFERENCE($,'[L]BQC','Smoke transmitter',#428,$,$);
#432=IFCCLASSIFICATIONREFERENCE($,'[L]BQD','Smoke detector',#428,$,$);
#433=IFCCLASSIFICATIONREFERENCE($,'[L]BR?','Radiation converting component',#388,$,$);
#434=IFCCLASSIFICATIONREFERENCE($,'[L]BRA','Light transmitter',#433,$,$);
#435=IFCCLASSIFICATIONREFERENCE($,'[L]BRB','Light switch',#433,$,$);
#436=IFCCLASSIFICATIONREFERENCE($,'[L]BRC','Flame detector',#433,$,$);
#437=IFCCLASSIFICATIONREFERENCE($,'[L]BRD','Photocell',#433,$,$);
#438=IFCCLASSIFICATIONREFERENCE($,'[L]BS?','Velocity/ frequency converting component',#388,$,$);
#439=IFCCLASSIFICATIONREFERENCE($,'[L]BSA','Frequency meter',#438,$,$);
#440=IFCCLASSIFICATIONREFERENCE($,'[L]BSB','Speedometer',#438,$,$);
#441=IFCCLASSIFICATIONREFERENCE($,'[L]BSC','Tachometer',#438,$,$);
#442=IFCCLASSIFICATIONREFERENCE($,'[L]BSD','Accelerometer',#438,$,$);
#443=IFCCLASSIFICATIONREFERENCE($,'[L]BSE','Vibration detector',#438,$,$);
#444=IFCCLASSIFICATIONREFERENCE($,'[L]BT?','Temperature converting component',#388,$,$);
#445=IFCCLASSIFICATIONREFERENCE($,'[L]BTA','Temperature transmitter',#444,$,$);
#446=IFCCLASSIFICATIONREFERENCE($,'[L]BTB','Temperature switch',#444,$,$);
#447=IFCCLASSIFICATIONREFERENCE($,'[L]BU?','Multivariate converting component',#388,$,$);
#448=IFCCLASSIFICATIONREFERENCE($,'[L]BUA','Multi transmitter',#447,$,$);
#449=IFCCLASSIFICATIONREFERENCE($,'[L]BUB','Multi switch',#447,$,$);
#450=IFCCLASSIFICATIONREFERENCE($,'[L]BUC','Encoder',#447,$,$);
#451=IFCCLASSIFICATIONREFERENCE($,'[L]BW?','Weight or force converting component',#388,$,$);
#452=IFCCLASSIFICATIONREFERENCE($,'[L]BWA','Load cell',#451,$,$);
#453=IFCCLASSIFICATIONREFERENCE($,'[L]BWB','Force meter',#451,$,$);
#454=IFCCLASSIFICATIONREFERENCE($,'[L]BX?','Sound and image converting component',#388,$,$);
#455=IFCCLASSIFICATIONREFERENCE($,'[L]BXA','Microphone',#454,$,$);
#456=IFCCLASSIFICATIONREFERENCE($,'[L]BXB','Camera',#454,$,$);
#457=IFCCLASSIFICATIONREFERENCE($,'[L]BY?','Matter converting component',#388,$,$);
#458=IFCCLASSIFICATIONREFERENCE($,'[L]BYA','Plant',#457,$,$);
#459=IFCCLASSIFICATIONREFERENCE($,'[L]BZ?','Event converting component',#388,$,$);
#460=IFCCLASSIFICATIONREFERENCE($,'[L]BZA','Quantity meter',#459,$,$);
#461=IFCCLASSIFICATIONREFERENCE($,'[L]BZB','Liquid detector',#459,$,$);
#462=IFCCLASSIFICATIONREFERENCE($,'[L]BZC','Card reader',#459,$,$);
#463=IFCCLASSIFICATIONREFERENCE($,'[L]BZE','Cycle detector',#459,$,$);
#464=IFCCLASSIFICATIONREFERENCE($,'[L]BZF','Syncronising device',#459,$,$);
#465=IFCCLASSIFICATIONREFERENCE($,'[L]BZG','Conductivity meter',#459,$,$);
#466=IFCCLASSIFICATIONREFERENCE($,'[L]C??','Storing component',#387,$,$);
#467=IFCCLASSIFICATIONREFERENCE($,'[L]CA?','Capacitative storing component',#466,$,$);
#468=IFCCLASSIFICATIONREFERENCE($,'[L]CAA','Capacitor',#467,$,$);
#469=IFCCLASSIFICATIONREFERENCE($,'[L]CF?','Information storing component',#466,$,$);
#470=IFCCLASSIFICATIONREFERENCE($,'[L]CFA','Storage media',#469,$,$);
#471=IFCCLASSIFICATIONREFERENCE($,'[L]CM?','Enclosed stationary storing component',#466,$,$);
#472=IFCCLASSIFICATIONREFERENCE($,'[L]CMA','Tank',#471,$,$);
#473=IFCCLASSIFICATIONREFERENCE($,'[L]CMB','Pool',#471,$,$);
#474=IFCCLASSIFICATIONREFERENCE($,'[L]CMC','Box',#471,$,$);
#475=IFCCLASSIFICATIONREFERENCE($,'[L]CN?','Enclosed moveable storing component',#466,$,$);
#476=IFCCLASSIFICATIONREFERENCE($,'[L]CNA','Container',#475,$,$);
#477=IFCCLASSIFICATIONREFERENCE($,'[L]CNB','Gas cylinder',#475,$,$);
#478=IFCCLASSIFICATIONREFERENCE($,'[L]CNC','Drum',#475,$,$);
#479=IFCCLASSIFICATIONREFERENCE($,'[L]CND','Lift car',#475,$,$);
#480=IFCCLASSIFICATIONREFERENCE($,'[L]CP?','Thermal energy storing component',#466,$,$);
#481=IFCCLASSIFICATIONREFERENCE($,'[L]CPA','Hot water tank',#480,$,$);
#482=IFCCLASSIFICATIONREFERENCE($,'[L]CPB','Ice tank',#480,$,$);
#483=IFCCLASSIFICATIONREFERENCE($,'[L]CPC','Steam tank',#480,$,$);
#484=IFCCLASSIFICATIONREFERENCE($,'[L]E??','Energy supplying component',#387,$,$);
#485=IFCCLASSIFICATIONREFERENCE($,'[L]EA?','Light emitting component',#484,$,$);
#486=IFCCLASSIFICATIONREFERENCE($,'[L]EAA','Incandescent lamp',#485,$,$);
#487=IFCCLASSIFICATIONREFERENCE($,'[L]EAB','Fluorescent lamp',#485,$,$);
#488=IFCCLASSIFICATIONREFERENCE($,'[L]EAC','LED lamp',#485,$,$);
#489=IFCCLASSIFICATIONREFERENCE($,'[L]EB?','Electric thermal energy generating component',#484,$,$);
#490=IFCCLASSIFICATIONREFERENCE($,'[L]EBA','Electrical boiler',#489,$,$);
#491=IFCCLASSIFICATIONREFERENCE($,'[L]EBB','Electric heating surface',#489,$,$);
#492=IFCCLASSIFICATIONREFERENCE($,'[L]EBC','Heating cable',#489,$,$);
#493=IFCCLASSIFICATIONREFERENCE($,'[L]EBD','Electric hot air blower',#489,$,$);
#494=IFCCLASSIFICATIONREFERENCE($,'[L]EBE','Electric heating pipe',#489,$,$);
#495=IFCCLASSIFICATIONREFERENCE($,'[L]EM?','Combusting component',#484,$,$);
#496=IFCCLASSIFICATIONREFERENCE($,'[L]EMA','Stove',#495,$,$);
#497=IFCCLASSIFICATIONREFERENCE($,'[L]EMB','Boiler',#495,$,$);
#498=IFCCLASSIFICATIONREFERENCE($,'[L]EMC','Burner',#495,$,$);
#499=IFCCLASSIFICATIONREFERENCE($,'[L]EP?','Heat transferring component',#484,$,$);
#500=IFCCLASSIFICATIONREFERENCE($,'[L]EPA','Heating surface',#499,$,$);
#501=IFCCLASSIFICATIONREFERENCE($,'[L]EPB','Water heater',#499,$,$);
#502=IFCCLASSIFICATIONREFERENCE($,'[L]EPC','Heat exchanger',#499,$,$);
#503=IFCCLASSIFICATIONREFERENCE($,'[L]EPD','Heat pump',#499,$,$);
#504=IFCCLASSIFICATIONREFERENCE($,'[L]EPE','Radiator',#499,$,$);
#505=IFCCLASSIFICATIONREFERENCE($,'[L]EPF','Heating pipe',#499,$,$);
#506=IFCCLASSIFICATIONREFERENCE($,'[L]EPG','Heating panel',#499,$,$);
#507=IFCCLASSIFICATIONREFERENCE($,'[L]EQ?','Convection cooling component',#484,$,$);
#508=IFCCLASSIFICATIONREFERENCE($,'[L]EQA','Cooling surface',#507,$,$);
#509=IFCCLASSIFICATIONREFERENCE($,'[L]EQB','Evaporator',#507,$,$);
#510=IFCCLASSIFICATIONREFERENCE($,'[L]EQC','Cooling pump',#507,$,$);
#511=IFCCLASSIFICATIONREFERENCE($,'[L]EQD','Cooling tower',#507,$,$);
#512=IFCCLASSIFICATIONREFERENCE($,'[L]EQE','Cooling panel',#507,$,$);
#513=IFCCLASSIFICATIONREFERENCE($,'[L]EQF','Dry chiller',#507,$,$);
#514=IFCCLASSIFICATIONREFERENCE($,'[L]ES?','Evaporative cooling component',#484,$,$);
#515=IFCCLASSIFICATIONREFERENCE($,'[L]ESA','Chiller',#514,$,$);
#516=IFCCLASSIFICATIONREFERENCE($,'[L]EV?','Radiant energy heating component',#484,$,$);
#517=IFCCLASSIFICATIONREFERENCE($,'[L]EVA','Solar panel',#516,$,$);
#518=IFCCLASSIFICATIONREFERENCE($,'[L]EZ?','Combined energy supplying component',#484,$,$);
#519=IFCCLASSIFICATIONREFERENCE($,'[L]EZA','Heating ventilator',#518,$,$);
#520=IFCCLASSIFICATIONREFERENCE($,'[L]EZB','Heating/cooling pipe',#518,$,$);
#521=IFCCLASSIFICATIONREFERENCE($,'[L]EZC','Cooling fancoil',#518,$,$);
#522=IFCCLASSIFICATIONREFERENCE($,'[L]EZD','Combined heating and cooling fancoil',#518,$,$);
#523=IFCCLASSIFICATIONREFERENCE($,'[L]F??','Protecting component',#387,$,$);
#524=IFCCLASSIFICATIONREFERENCE($,'[L]FA?','Overvoltage protecting component',#523,$,$);
#525=IFCCLASSIFICATIONREFERENCE($,'[L]FAA','Lightning arrester',#524,$,$);
#526=IFCCLASSIFICATIONREFERENCE($,'[L]FAB','Surge arrester',#524,$,$);
#527=IFCCLASSIFICATIONREFERENCE($,'[L]FB?','Fault current protecting component',#523,$,$);
#528=IFCCLASSIFICATIONREFERENCE($,'[L]FBA','Residual current device',#527,$,$);
#529=IFCCLASSIFICATIONREFERENCE($,'[L]FC?','Overcurrent protecting component',#523,$,$);
#530=IFCCLASSIFICATIONREFERENCE($,'[L]FCA','Fuse',#529,$,$);
#531=IFCCLASSIFICATIONREFERENCE($,'[L]FCB','Circuit breaker',#529,$,$);
#532=IFCCLASSIFICATIONREFERENCE($,'[L]FL?','Pressure related protecting component',#523,$,$);
#533=IFCCLASSIFICATIONREFERENCE($,'[L]FLA','Safety valve',#532,$,$);
#534=IFCCLASSIFICATIONREFERENCE($,'[L]FLB','Safety damper',#532,$,$);
#535=IFCCLASSIFICATIONREFERENCE($,'[L]FLC','Vacuum breaker',#532,$,$);
#536=IFCCLASSIFICATIONREFERENCE($,'[L]FM?','Fire protecting component',#523,$,$);
#537=IFCCLASSIFICATIONREFERENCE($,'[L]FMA','Fire damper',#536,$,$);
#538=IFCCLASSIFICATIONREFERENCE($,'[L]FMB','Flue damper',#536,$,$);
#539=IFCCLASSIFICATIONREFERENCE($,'[L]FMC','Combined fire and flue damper',#536,$,$);
#540=IFCCLASSIFICATIONREFERENCE($,'[L]FMD','Fire cuff',#536,$,$);
#541=IFCCLASSIFICATIONREFERENCE($,'[L]FME','Fire blind',#536,$,$);
#542=IFCCLASSIFICATIONREFERENCE($,'[L]FMF','Smoke curtain',#536,$,$);
#543=IFCCLASSIFICATIONREFERENCE($,'[L]FMG','Smoke closure',#536,$,$);
#544=IFCCLASSIFICATIONREFERENCE($,'[L]FQ?','Preventing component',#523,$,$);
#545=IFCCLASSIFICATIONREFERENCE($,'[L]FQA','Bird mesh',#544,$,$);
#546=IFCCLASSIFICATIONREFERENCE($,'[L]FQB','Snow guard',#544,$,$);
#547=IFCCLASSIFICATIONREFERENCE($,'[L]FQC','Handrail',#544,$,$);
#548=IFCCLASSIFICATIONREFERENCE($,'[L]FQD','Guard rail',#544,$,$);
#549=IFCCLASSIFICATIONREFERENCE($,'[L]FQE','Weed control fabric',#544,$,$);
#550=IFCCLASSIFICATIONREFERENCE($,'[L]FR?','Climate protecting component',#523,$,$);
#551=IFCCLASSIFICATIONREFERENCE($,'[L]FRA','Plaster',#550,$,$);
#552=IFCCLASSIFICATIONREFERENCE($,'[L]FRB','Paint',#550,$,$);
#553=IFCCLASSIFICATIONREFERENCE($,'[L]FRC','Impregnation',#550,$,$);
#554=IFCCLASSIFICATIONREFERENCE($,'[L]FRD','Corrosion protection',#550,$,$);
#555=IFCCLASSIFICATIONREFERENCE($,'[L]FRE','Subbase',#550,$,$);
#556=IFCCLASSIFICATIONREFERENCE($,'[L]G??','Flow generating component',#387,$,$);
#557=IFCCLASSIFICATIONREFERENCE($,'[L]GA?','Mechanical energy component',#556,$,$);
#558=IFCCLASSIFICATIONREFERENCE($,'[L]GAA','Generator',#557,$,$);
#559=IFCCLASSIFICATIONREFERENCE($,'[L]GAB','Dynamo',#557,$,$);
#560=IFCCLASSIFICATIONREFERENCE($,'[L]GB?','Chemical energy component',#556,$,$);
#561=IFCCLASSIFICATIONREFERENCE($,'[L]GBA','Battery',#560,$,$);
#562=IFCCLASSIFICATIONREFERENCE($,'[L]GBB','Fuel cell',#560,$,$);
#563=IFCCLASSIFICATIONREFERENCE($,'[L]GC?','Radiant energy component',#556,$,$);
#564=IFCCLASSIFICATIONREFERENCE($,'[L]GCA','Solar cell',#563,$,$);
#565=IFCCLASSIFICATIONREFERENCE($,'[L]GF?','Signal generating component',#556,$,$);
#566=IFCCLASSIFICATIONREFERENCE($,'[L]GFA','Television station',#565,$,$);
#567=IFCCLASSIFICATIONREFERENCE($,'[L]GFB','Telephone exchange',#565,$,$);
#568=IFCCLASSIFICATIONREFERENCE($,'[L]GP?','Fluid flow generating component',#556,$,$);
#569=IFCCLASSIFICATIONREFERENCE($,'[L]GPA','Pump',#568,$,$);
#570=IFCCLASSIFICATIONREFERENCE($,'[L]GQ?','Gas or air flow generating component',#556,$,$);
#571=IFCCLASSIFICATIONREFERENCE($,'[L]GQA','Ventilator',#570,$,$);
#572=IFCCLASSIFICATIONREFERENCE($,'[L]GQB','Compressor',#570,$,$);
#573=IFCCLASSIFICATIONREFERENCE($,'[L]GQC','Vacuum pump',#570,$,$);
#574=IFCCLASSIFICATIONREFERENCE($,'[L]H??','Separating component',#387,$,$);
#575=IFCCLASSIFICATIONREFERENCE($,'[L]HN?','Gravity separating component',#574,$,$);
#576=IFCCLASSIFICATIONREFERENCE($,'[L]HNA','Separator',#575,$,$);
#577=IFCCLASSIFICATIONREFERENCE($,'[L]HNB','Settling tank',#575,$,$);
#578=IFCCLASSIFICATIONREFERENCE($,'[L]HP?','Thermal separating component',#574,$,$);
#579=IFCCLASSIFICATIONREFERENCE($,'[L]HPA','Drying unit',#578,$,$);
#580=IFCCLASSIFICATIONREFERENCE($,'[L]HPB','Dehumidifier',#578,$,$);
#581=IFCCLASSIFICATIONREFERENCE($,'[L]HQ?','Filtration separating component',#574,$,$);
#582=IFCCLASSIFICATIONREFERENCE($,'[L]HQA','Filter',#581,$,$);
#583=IFCCLASSIFICATIONREFERENCE($,'[L]HQB','Rake',#581,$,$);
#584=IFCCLASSIFICATIONREFERENCE($,'[L]HR?','Electrostatic separating component',#574,$,$);
#585=IFCCLASSIFICATIONREFERENCE($,'[L]HRA','Electrostatic filter',#584,$,$);
#586=IFCCLASSIFICATIONREFERENCE($,'[L]HRB','Magnetic seperator',#584,$,$);
#587=IFCCLASSIFICATIONREFERENCE($,'[L]K??','Information processing component',#387,$,$);
#588=IFCCLASSIFICATIONREFERENCE($,'[L]KF?','Electrical signalling component',#587,$,$);
#589=IFCCLASSIFICATIONREFERENCE($,'[L]KFA','Relay',#588,$,$);
#590=IFCCLASSIFICATIONREFERENCE($,'[L]KFB','Time relay',#588,$,$);
#591=IFCCLASSIFICATIONREFERENCE($,'[L]KFC','Computer',#588,$,$);
#592=IFCCLASSIFICATIONREFERENCE($,'[L]KFD','Control unit',#588,$,$);
#593=IFCCLASSIFICATIONREFERENCE($,'[L]KFE','IT switch',#588,$,$);
#594=IFCCLASSIFICATIONREFERENCE($,'[L]KFF','I/O module',#588,$,$);
#595=IFCCLASSIFICATIONREFERENCE($,'[L]KFG','Transmitter',#588,$,$);
#596=IFCCLASSIFICATIONREFERENCE($,'[L]KFH','Receiver',#588,$,$);
#597=IFCCLASSIFICATIONREFERENCE($,'[L]KG?','Optical signalling component',#587,$,$);
#598=IFCCLASSIFICATIONREFERENCE($,'[L]KGA','Optical switch',#597,$,$);
#599=IFCCLASSIFICATIONREFERENCE($,'[L]KGB','Optical router',#597,$,$);
#600=IFCCLASSIFICATIONREFERENCE($,'[L]KGC','Optical transmitter',#597,$,$);
#601=IFCCLASSIFICATIONREFERENCE($,'[L]KGD','Optical receiver',#597,$,$);
#602=IFCCLASSIFICATIONREFERENCE($,'[L]KGE','Optical repeater',#597,$,$);
#603=IFCCLASSIFICATIONREFERENCE($,'[L]KH?','Mechanical signalling component',#587,$,$);
#604=IFCCLASSIFICATIONREFERENCE($,'[L]KHA','Mechanical regulator',#603,$,$);
#605=IFCCLASSIFICATIONREFERENCE($,'[L]KZ?','Combined signalling component',#587,$,$);
#606=IFCCLASSIFICATIONREFERENCE($,'[L]KZA','Combined transmitter/receiver',#605,$,$);
#607=IFCCLASSIFICATIONREFERENCE($,'[L]KZB','Tablet computer',#605,$,$);
#608=IFCCLASSIFICATIONREFERENCE($,'[L]KZC','Magnetic card writer',#605,$,$);
#609=IFCCLASSIFICATIONREFERENCE($,'[L]M??','Powering component',#387,$,$);
#610=IFCCLASSIFICATIONREFERENCE($,'[L]MA?','Electromagnetic drive component',#609,$,$);
#611=IFCCLASSIFICATIONREFERENCE($,'[L]MAA','Electric motor',#610,$,$);
#612=IFCCLASSIFICATIONREFERENCE($,'[L]MAB','Linear motor',#610,$,$);
#613=IFCCLASSIFICATIONREFERENCE($,'[L]MAC','Electric actuator',#610,$,$);
#614=IFCCLASSIFICATIONREFERENCE($,'[L]ML?','Mechanical drive component',#609,$,$);
#615=IFCCLASSIFICATIONREFERENCE($,'[L]MLA','Mechanical actuator',#614,$,$);
#616=IFCCLASSIFICATIONREFERENCE($,'[L]MLB','Door closer',#614,$,$);
#617=IFCCLASSIFICATIONREFERENCE($,'[L]MS?','Chemical drive component',#609,$,$);
#618=IFCCLASSIFICATIONREFERENCE($,'[L]MSA','Combustion engine',#617,$,$);
#619=IFCCLASSIFICATIONREFERENCE($,'[L]N??','Covering component',#387,$,$);
#620=IFCCLASSIFICATIONREFERENCE($,'[L]NA?','Infilling component',#619,$,$);
#621=IFCCLASSIFICATIONREFERENCE($,'[L]NAA','Pane',#620,$,$);
#622=IFCCLASSIFICATIONREFERENCE($,'[L]NAB','Panel',#620,$,$);
#623=IFCCLASSIFICATIONREFERENCE($,'[L]NAC','Grating',#620,$,$);
#624=IFCCLASSIFICATIONREFERENCE($,'[L]NAD','Joint',#620,$,$);
#625=IFCCLASSIFICATIONREFERENCE($,'[L]NAE','Gasket',#620,$,$);
#626=IFCCLASSIFICATIONREFERENCE($,'[L]NB?','Closing component',#619,$,$);
#627=IFCCLASSIFICATIONREFERENCE($,'[L]NBA','Door leaf',#626,$,$);
#628=IFCCLASSIFICATIONREFERENCE($,'[L]NBB','Leaf of large door',#626,$,$);
#629=IFCCLASSIFICATIONREFERENCE($,'[L]NBC','Cupboard door',#626,$,$);
#630=IFCCLASSIFICATIONREFERENCE($,'[L]NBD','Gate frame',#626,$,$);
#631=IFCCLASSIFICATIONREFERENCE($,'[L]NBE','Hatch cover',#626,$,$);
#632=IFCCLASSIFICATIONREFERENCE($,'[L]NC?','Finishing component',#619,$,$);
#633=IFCCLASSIFICATIONREFERENCE($,'[L]NCA','Paving',#632,$,$);
#634=IFCCLASSIFICATIONREFERENCE($,'[L]NCB','Wallcovering',#632,$,$);
#635=IFCCLASSIFICATIONREFERENCE($,'[L]NCC','Flooring',#632,$,$);
#636=IFCCLASSIFICATIONREFERENCE($,'[L]NCD','Ceiling finish',#632,$,$);
#637=IFCCLASSIFICATIONREFERENCE($,'[L]NCE','Roofing',#632,$,$);
#638=IFCCLASSIFICATIONREFERENCE($,'[L]NCF','Window sill',#632,$,$);
#639=IFCCLASSIFICATIONREFERENCE($,'[L]NCG','Window board',#632,$,$);
#640=IFCCLASSIFICATIONREFERENCE($,'[L]NCH','Reveal liner',#632,$,$);
#641=IFCCLASSIFICATIONREFERENCE($,'[L]NCJ','Architrave',#632,$,$);
#642=IFCCLASSIFICATIONREFERENCE($,'[L]NCK','Skirting board',#632,$,$);
#643=IFCCLASSIFICATIONREFERENCE($,'[L]NCL','Base shoe',#632,$,$);
#644=IFCCLASSIFICATIONREFERENCE($,'[L]NCM','Ridge',#632,$,$);
#645=IFCCLASSIFICATIONREFERENCE($,'[L]NCN','Flashing',#632,$,$);
#646=IFCCLASSIFICATIONREFERENCE($,'[L]NCP','Flaunching',#632,$,$);
#647=IFCCLASSIFICATIONREFERENCE($,'[L]NCQ','Bushing',#632,$,$);
#648=IFCCLASSIFICATIONREFERENCE($,'[L]NCR','Key plate',#632,$,$);
#649=IFCCLASSIFICATIONREFERENCE($,'[L]NCS','Door rose',#632,$,$);
#650=IFCCLASSIFICATIONREFERENCE($,'[L]ND?','Terminating component',#619,$,$);
#651=IFCCLASSIFICATIONREFERENCE($,'[L]NDA','Edge',#650,$,$);
#652=IFCCLASSIFICATIONREFERENCE($,'[L]NDB','Crown',#650,$,$);
#653=IFCCLASSIFICATIONREFERENCE($,'[L]NDC','Eaves',#650,$,$);
#654=IFCCLASSIFICATIONREFERENCE($,'[L]NDD','Overhang',#650,$,$);
#655=IFCCLASSIFICATIONREFERENCE($,'[L]NDE','Barge',#650,$,$);
#656=IFCCLASSIFICATIONREFERENCE($,'[L]P??','Information presenting component',#387,$,$);
#657=IFCCLASSIFICATIONREFERENCE($,'[L]PF?','Discrete state component',#656,$,$);
#658=IFCCLASSIFICATIONREFERENCE($,'[L]PFA','Signal lamp',#657,$,$);
#659=IFCCLASSIFICATIONREFERENCE($,'[L]PFB','Blinker',#657,$,$);
#660=IFCCLASSIFICATIONREFERENCE($,'[L]PFC','Traffic signal',#657,$,$);
#661=IFCCLASSIFICATIONREFERENCE($,'[L]PG?','Discrete variable component',#656,$,$);
#662=IFCCLASSIFICATIONREFERENCE($,'[L]PGA','Thermometer',#661,$,$);
#663=IFCCLASSIFICATIONREFERENCE($,'[L]PGB','Barometer',#661,$,$);
#664=IFCCLASSIFICATIONREFERENCE($,'[L]PGC','Hygrometer',#661,$,$);
#665=IFCCLASSIFICATIONREFERENCE($,'[L]PGD','Pressure indicator',#661,$,$);
#666=IFCCLASSIFICATIONREFERENCE($,'[L]PGE','Tachometer',#661,$,$);
#667=IFCCLASSIFICATIONREFERENCE($,'[L]PGF','Ammeter',#661,$,$);
#668=IFCCLASSIFICATIONREFERENCE($,'[L]PGG','Voltmeter',#661,$,$);
#669=IFCCLASSIFICATIONREFERENCE($,'[L]PGH','Wattmeter',#661,$,$);
#670=IFCCLASSIFICATIONREFERENCE($,'[L]PGJ','Frequency meter',#661,$,$);
#671=IFCCLASSIFICATIONREFERENCE($,'[L]PGK','Watt-hour meter',#661,$,$);
#672=IFCCLASSIFICATIONREFERENCE($,'[L]PGL','Clock',#661,$,$);
#673=IFCCLASSIFICATIONREFERENCE($,'[L]PGM','Cos-phi meter',#661,$,$);
#674=IFCCLASSIFICATIONREFERENCE($,'[L]PGN','VAR meter',#661,$,$);
#675=IFCCLASSIFICATIONREFERENCE($,'[L]PH?','Variable information component',#656,$,$);
#676=IFCCLASSIFICATIONREFERENCE($,'[L]PHA','Display',#675,$,$);
#677=IFCCLASSIFICATIONREFERENCE($,'[L]PHB','Projector',#675,$,$);
#678=IFCCLASSIFICATIONREFERENCE($,'[L]PHC','Printer',#675,$,$);
#679=IFCCLASSIFICATIONREFERENCE($,'[L]PHD','Sign',#675,$,$);
#680=IFCCLASSIFICATIONREFERENCE($,'[L]PHE','Marking',#675,$,$);
#681=IFCCLASSIFICATIONREFERENCE($,'[L]PJ?','Audible information component',#656,$,$);
#682=IFCCLASSIFICATIONREFERENCE($,'[L]PJA','Loudspeaker',#681,$,$);
#683=IFCCLASSIFICATIONREFERENCE($,'[L]PJB','Horn',#681,$,$);
#684=IFCCLASSIFICATIONREFERENCE($,'[L]PJC','Bell',#681,$,$);
#685=IFCCLASSIFICATIONREFERENCE($,'[L]PL?','Adorning component',#656,$,$);
#686=IFCCLASSIFICATIONREFERENCE($,'[L]PLA','Cornice',#685,$,$);
#687=IFCCLASSIFICATIONREFERENCE($,'[L]PLB','Figure',#685,$,$);
#688=IFCCLASSIFICATIONREFERENCE($,'[L]PLC','Frieze',#685,$,$);
#689=IFCCLASSIFICATIONREFERENCE($,'[L]PLD','Stucco',#685,$,$);
#690=IFCCLASSIFICATIONREFERENCE($,'[L]PLE','Picture',#685,$,$);
#691=IFCCLASSIFICATIONREFERENCE($,'[L]PLF','Carpet',#685,$,$);
#692=IFCCLASSIFICATIONREFERENCE($,'[L]Q??','Opening and closing component',#387,$,$);
#693=IFCCLASSIFICATIONREFERENCE($,'[L]QA?','Electrically connecting component',#692,$,$);
#694=IFCCLASSIFICATIONREFERENCE($,'[L]QAA','Contactor',#693,$,$);
#695=IFCCLASSIFICATIONREFERENCE($,'[L]QAB','Motor starter',#693,$,$);
#696=IFCCLASSIFICATIONREFERENCE($,'[L]QAC','Thyristor',#693,$,$);
#697=IFCCLASSIFICATIONREFERENCE($,'[L]QB?','Electrically separating component',#692,$,$);
#698=IFCCLASSIFICATIONREFERENCE($,'[L]QBA','Load-break switch',#697,$,$);
#699=IFCCLASSIFICATIONREFERENCE($,'[L]QBB','Fuse-switch disconnector',#697,$,$);
#700=IFCCLASSIFICATIONREFERENCE($,'[L]QC?','Electrically earthing component',#692,$,$);
#701=IFCCLASSIFICATIONREFERENCE($,'[L]QCA','Earthing switch',#700,$,$);
#702=IFCCLASSIFICATIONREFERENCE($,'[L]QM?','Mechanically connecting component',#692,$,$);
#703=IFCCLASSIFICATIONREFERENCE($,'[L]QMA','Shutoff valve',#702,$,$);
#704=IFCCLASSIFICATIONREFERENCE($,'[L]QMB','On-off damper',#702,$,$);
#705=IFCCLASSIFICATIONREFERENCE($,'[L]QN?','Mechanically varying component',#692,$,$);
#706=IFCCLASSIFICATIONREFERENCE($,'[L]QNA','Control valve',#705,$,$);
#707=IFCCLASSIFICATIONREFERENCE($,'[L]QNB','Control damper',#705,$,$);
#708=IFCCLASSIFICATIONREFERENCE($,'[L]QQ?','Access granting component',#692,$,$);
#709=IFCCLASSIFICATIONREFERENCE($,'[L]QQA','Window',#708,$,$);
#710=IFCCLASSIFICATIONREFERENCE($,'[L]QQB','Window unit',#708,$,$);
#711=IFCCLASSIFICATIONREFERENCE($,'[L]QQC','Door',#708,$,$);
#712=IFCCLASSIFICATIONREFERENCE($,'[L]QQD','Hatch',#708,$,$);
#713=IFCCLASSIFICATIONREFERENCE($,'[L]QQE','Large door',#708,$,$);
#714=IFCCLASSIFICATIONREFERENCE($,'[L]QQF','Gate',#708,$,$);
#715=IFCCLASSIFICATIONREFERENCE($,'[L]R??','Regulating component',#387,$,$);
#716=IFCCLASSIFICATIONREFERENCE($,'[L]RA?','Electrically limiting component',#715,$,$);
#717=IFCCLASSIFICATIONREFERENCE($,'[L]RAA','Diode',#716,$,$);
#718=IFCCLASSIFICATIONREFERENCE($,'[L]RAB','Induction coil',#716,$,$);
#719=IFCCLASSIFICATIONREFERENCE($,'[L]RAC','Resistor',#716,$,$);
#720=IFCCLASSIFICATIONREFERENCE($,'[L]RB?','Electrically stabilising component',#715,$,$);
#721=IFCCLASSIFICATIONREFERENCE($,'[L]RBA','Uninterruptible power supply (UPS)',#720,$,$);
#722=IFCCLASSIFICATIONREFERENCE($,'[L]RBB','Harmonic filter',#720,$,$);
#723=IFCCLASSIFICATIONREFERENCE($,'[L]RBC','Phase compensation',#720,$,$);
#724=IFCCLASSIFICATIONREFERENCE($,'[L]RF?','Signal stabilising component',#715,$,$);
#725=IFCCLASSIFICATIONREFERENCE($,'[L]RFA','Equaliser',#724,$,$);
#726=IFCCLASSIFICATIONREFERENCE($,'[L]RFB','Electric filter',#724,$,$);
#727=IFCCLASSIFICATIONREFERENCE($,'[L]RL?','Mechanically limiting component',#715,$,$);
#728=IFCCLASSIFICATIONREFERENCE($,'[L]RLA','Lock',#727,$,$);
#729=IFCCLASSIFICATIONREFERENCE($,'[L]RLB','Rat stop device',#727,$,$);
#730=IFCCLASSIFICATIONREFERENCE($,'[L]RLC','Shock absorber',#727,$,$);
#731=IFCCLASSIFICATIONREFERENCE($,'[L]RM?','Fluid flow restricting component',#715,$,$);
#732=IFCCLASSIFICATIONREFERENCE($,'[L]RMA','Non-return valve',#731,$,$);
#733=IFCCLASSIFICATIONREFERENCE($,'[L]RMB','Regulation valve',#731,$,$);
#734=IFCCLASSIFICATIONREFERENCE($,'[L]RMC','Nozzle',#731,$,$);
#735=IFCCLASSIFICATIONREFERENCE($,'[L]RMD','Trap',#731,$,$);
#736=IFCCLASSIFICATIONREFERENCE($,'[L]RN?','Air flow restricting component',#715,$,$);
#737=IFCCLASSIFICATIONREFERENCE($,'[L]RNA','Check damper',#736,$,$);
#738=IFCCLASSIFICATIONREFERENCE($,'[L]RNB','Regulation damper',#736,$,$);
#739=IFCCLASSIFICATIONREFERENCE($,'[L]RNC','Diffusor',#736,$,$);
#740=IFCCLASSIFICATIONREFERENCE($,'[L]RQ?','Climate stabilising component',#715,$,$);
#741=IFCCLASSIFICATIONREFERENCE($,'[L]RQA','Insulation',#740,$,$);
#742=IFCCLASSIFICATIONREFERENCE($,'[L]RQB','Membrane',#740,$,$);
#743=IFCCLASSIFICATIONREFERENCE($,'[L]RQC','Noise protection',#740,$,$);
#744=IFCCLASSIFICATIONREFERENCE($,'[L]RQD','Screen',#740,$,$);
#745=IFCCLASSIFICATIONREFERENCE($,'[L]RQE','Curtain',#740,$,$);
#746=IFCCLASSIFICATIONREFERENCE($,'[L]RQF','Louvred blind',#740,$,$);
#747=IFCCLASSIFICATIONREFERENCE($,'[L]RQG','Shutter',#740,$,$);
#748=IFCCLASSIFICATIONREFERENCE($,'[L]RU?','Access restricting component',#715,$,$);
#749=IFCCLASSIFICATIONREFERENCE($,'[L]RUA','Fence',#748,$,$);
#750=IFCCLASSIFICATIONREFERENCE($,'[L]RUB','Bar',#748,$,$);
#751=IFCCLASSIFICATIONREFERENCE($,'[L]RUC','Turnstile',#748,$,$);
#752=IFCCLASSIFICATIONREFERENCE($,'[L]RUD','Bollard',#748,$,$);
#753=IFCCLASSIFICATIONREFERENCE($,'[L]RV?','Inward visibility restricting component',#715,$,$);
#754=IFCCLASSIFICATIONREFERENCE($,'[L]RVA','Blind',#753,$,$);
#755=IFCCLASSIFICATIONREFERENCE($,'[L]S??','Manually converting component',#387,$,$);
#756=IFCCLASSIFICATIONREFERENCE($,'[L]SF?','Electrical signalling component',#755,$,$);
#757=IFCCLASSIFICATIONREFERENCE($,'[L]SFA','Switch',#756,$,$);
#758=IFCCLASSIFICATIONREFERENCE($,'[L]SFB','Selector',#756,$,$);
#759=IFCCLASSIFICATIONREFERENCE($,'[L]SFC','Pushbutton',#756,$,$);
#760=IFCCLASSIFICATIONREFERENCE($,'[L]SFD','Panel',#756,$,$);
#761=IFCCLASSIFICATIONREFERENCE($,'[L]SFE','Keyboard',#756,$,$);
#762=IFCCLASSIFICATIONREFERENCE($,'[L]SG?','Optical-acoustic signalling componemt',#755,$,$);
#763=IFCCLASSIFICATIONREFERENCE($,'[L]SGA','Emergency alarm',#762,$,$);
#764=IFCCLASSIFICATIONREFERENCE($,'[L]SL?','Mechanical signalling component',#755,$,$);
#765=IFCCLASSIFICATIONREFERENCE($,'[L]SLA','Handle',#764,$,$);
#766=IFCCLASSIFICATIONREFERENCE($,'[L]SLB','Key cylinder',#764,$,$);
#767=IFCCLASSIFICATIONREFERENCE($,'[L]T??','Transforming component',#387,$,$);
#768=IFCCLASSIFICATIONREFERENCE($,'[L]TA?','Electrical energy transforming component',#767,$,$);
#769=IFCCLASSIFICATIONREFERENCE($,'[L]TAA','Transformer',#768,$,$);
#770=IFCCLASSIFICATIONREFERENCE($,'[L]TAB','Isolating transformer',#768,$,$);
#771=IFCCLASSIFICATIONREFERENCE($,'[L]TAC','Rectifier',#768,$,$);
#772=IFCCLASSIFICATIONREFERENCE($,'[L]TAD','Inverter',#768,$,$);
#773=IFCCLASSIFICATIONREFERENCE($,'[L]TAE','Frequency converter',#768,$,$);
#774=IFCCLASSIFICATIONREFERENCE($,'[L]TF?','Signal transforming component',#767,$,$);
#775=IFCCLASSIFICATIONREFERENCE($,'[L]TFA','Amplifier',#774,$,$);
#776=IFCCLASSIFICATIONREFERENCE($,'[L]TFB','Aerial',#774,$,$);
#777=IFCCLASSIFICATIONREFERENCE($,'[L]TFC','Gateway',#774,$,$);
#778=IFCCLASSIFICATIONREFERENCE($,'[L]TM?','Form converting component',#767,$,$);
#779=IFCCLASSIFICATIONREFERENCE($,'[L]TMA','Waste grinder',#778,$,$);
#780=IFCCLASSIFICATIONREFERENCE($,'[L]TT?','Mixing component',#767,$,$);
#781=IFCCLASSIFICATIONREFERENCE($,'[L]TTA','Humidifier',#780,$,$);
#782=IFCCLASSIFICATIONREFERENCE($,'[L]TTB','Mixer',#780,$,$);
#783=IFCCLASSIFICATIONREFERENCE($,'[L]TTC','Fog generator',#780,$,$);
#784=IFCCLASSIFICATIONREFERENCE($,'[L]U??','Fixing component',#387,$,$);
#785=IFCCLASSIFICATIONREFERENCE($,'[L]UA?','Enclosing component',#784,$,$);
#786=IFCCLASSIFICATIONREFERENCE($,'[L]UAA','Electrical panel',#785,$,$);
#787=IFCCLASSIFICATIONREFERENCE($,'[L]UAB','Rack',#785,$,$);
#788=IFCCLASSIFICATIONREFERENCE($,'[L]UAC','Light fixture',#785,$,$);
#789=IFCCLASSIFICATIONREFERENCE($,'[L]UAD','Hose reel cubicle',#785,$,$);
#790=IFCCLASSIFICATIONREFERENCE($,'[L]UB?','Supporting component',#784,$,$);
#791=IFCCLASSIFICATIONREFERENCE($,'[L]UBA','Service duct',#790,$,$);
#792=IFCCLASSIFICATIONREFERENCE($,'[L]UBB','Hanger',#790,$,$);
#793=IFCCLASSIFICATIONREFERENCE($,'[L]UBC','Insulator',#790,$,$);
#794=IFCCLASSIFICATIONREFERENCE($,'[L]UBD','Pylon',#790,$,$);
#795=IFCCLASSIFICATIONREFERENCE($,'[L]UK?','Structural component in subbase',#784,$,$);
#796=IFCCLASSIFICATIONREFERENCE($,'[L]UKA','Sub-base',#795,$,$);
#797=IFCCLASSIFICATIONREFERENCE($,'[L]UKB','Screed',#795,$,$);
#798=IFCCLASSIFICATIONREFERENCE($,'[L]UKC','Earth anchor',#795,$,$);
#799=IFCCLASSIFICATIONREFERENCE($,'[L]UKD','Foundation column',#795,$,$);
#800=IFCCLASSIFICATIONREFERENCE($,'[L]UKE','Foundation beam',#795,$,$);
#801=IFCCLASSIFICATIONREFERENCE($,'[L]UKF','Foundation slab plate',#795,$,$);
#802=IFCCLASSIFICATIONREFERENCE($,'[L]UKG','Foundation mass',#795,$,$);
#803=IFCCLASSIFICATIONREFERENCE($,'[L]UKH','Foundation wall plate',#795,$,$);
#804=IFCCLASSIFICATIONREFERENCE($,'[L]UL?','Structural component outside sublease',#784,$,$);
#805=IFCCLASSIFICATIONREFERENCE($,'[L]ULC','Plinth',#804,$,$);
#806=IFCCLASSIFICATIONREFERENCE($,'[L]ULD','Column',#804,$,$);
#807=IFCCLASSIFICATIONREFERENCE($,'[L]ULE','Beam',#804,$,$);
#808=IFCCLASSIFICATIONREFERENCE($,'[L]ULF','Tension brace',#804,$,$);
#809=IFCCLASSIFICATIONREFERENCE($,'[L]ULG','Stone',#804,$,$);
#810=IFCCLASSIFICATIONREFERENCE($,'[L]ULH','Block',#804,$,$);
#811=IFCCLASSIFICATIONREFERENCE($,'[L]ULJ','Mass',#804,$,$);
#812=IFCCLASSIFICATIONREFERENCE($,'[L]ULK','Floorslab',#804,$,$);
#813=IFCCLASSIFICATIONREFERENCE($,'[L]ULL','Subfloor',#804,$,$);
#814=IFCCLASSIFICATIONREFERENCE($,'[L]ULM','Wall plate',#804,$,$);
#815=IFCCLASSIFICATIONREFERENCE($,'[L]ULN','Corbel',#804,$,$);
#816=IFCCLASSIFICATIONREFERENCE($,'[L]ULP','Stringer',#804,$,$);
#817=IFCCLASSIFICATIONREFERENCE($,'[L]ULQ','Step',#804,$,$);
#818=IFCCLASSIFICATIONREFERENCE($,'[L]ULR','Baluster',#804,$,$);
#819=IFCCLASSIFICATIONREFERENCE($,'[L]ULS','Underlay (backing)',#804,$,$);
#820=IFCCLASSIFICATIONREFERENCE($,'[L]ULT','Bearing plate',#804,$,$);
#821=IFCCLASSIFICATIONREFERENCE($,'[L]ULU','Stake',#804,$,$);
#822=IFCCLASSIFICATIONREFERENCE($,'[L]UM?','Reinforcing component',#784,$,$);
#823=IFCCLASSIFICATIONREFERENCE($,'[L]UMA','Reinforcement bar',#822,$,$);
#824=IFCCLASSIFICATIONREFERENCE($,'[L]UMB','Reinforcement mesh',#822,$,$);
#825=IFCCLASSIFICATIONREFERENCE($,'[L]UMC','Pavement reinforcement',#822,$,$);
#826=IFCCLASSIFICATIONREFERENCE($,'[L]UN?','Framing component',#784,$,$);
#827=IFCCLASSIFICATIONREFERENCE($,'[L]UNA','Frame',#826,$,$);
#828=IFCCLASSIFICATIONREFERENCE($,'[L]UNB','Threshold',#826,$,$);
#829=IFCCLASSIFICATIONREFERENCE($,'[L]UNC','Frame',#826,$,$);
#830=IFCCLASSIFICATIONREFERENCE($,'[L]UND','Glazing bar',#826,$,$);
#831=IFCCLASSIFICATIONREFERENCE($,'[L]UP?','Jointing component',#784,$,$);
#832=IFCCLASSIFICATIONREFERENCE($,'[L]UPA','Jointing device',#831,$,$);
#833=IFCCLASSIFICATIONREFERENCE($,'[L]UPB','Structural joint',#831,$,$);
#834=IFCCLASSIFICATIONREFERENCE($,'[L]UPC','Mechanical joint',#831,$,$);
#835=IFCCLASSIFICATIONREFERENCE($,'[L]UPD','Chemical joint',#831,$,$);
#836=IFCCLASSIFICATIONREFERENCE($,'[L]UQ?','connecting device',#784,$,$);
#837=IFCCLASSIFICATIONREFERENCE($,'[L]UQA','Permanent mechanical fixing',#836,$,$);
#838=IFCCLASSIFICATIONREFERENCE($,'[L]UQB','Reversible mechanical fixing',#836,$,$);
#839=IFCCLASSIFICATIONREFERENCE($,'[L]UQC','Chemical fixing',#836,$,$);
#840=IFCCLASSIFICATIONREFERENCE($,'[L]W??','Transporting component',#387,$,$);
#841=IFCCLASSIFICATIONREFERENCE($,'[L]WB?','High voltage transmission component',#840,$,$);
#842=IFCCLASSIFICATIONREFERENCE($,'[L]WBA','High voltage busbar',#841,$,$);
#843=IFCCLASSIFICATIONREFERENCE($,'[L]WBB','High voltage cable',#841,$,$);
#844=IFCCLASSIFICATIONREFERENCE($,'[L]WD?','Low voltage transmission component',#840,$,$);
#845=IFCCLASSIFICATIONREFERENCE($,'[L]WDA','Low voltage busbar',#844,$,$);
#846=IFCCLASSIFICATIONREFERENCE($,'[L]WDB','Low voltage cable',#844,$,$);
#847=IFCCLASSIFICATIONREFERENCE($,'[L]WE?','Earthing potential transmission component',#840,$,$);
#848=IFCCLASSIFICATIONREFERENCE($,'[L]WEA','Earthing rail',#847,$,$);
#849=IFCCLASSIFICATIONREFERENCE($,'[L]WEB','Earthing cable',#847,$,$);
#850=IFCCLASSIFICATIONREFERENCE($,'[L]WEC','Equipotential bonding rail',#847,$,$);
#851=IFCCLASSIFICATIONREFERENCE($,'[L]WED','Equipotential bonding connection',#847,$,$);
#852=IFCCLASSIFICATIONREFERENCE($,'[L]WG?','Electronic signal transmission component',#840,$,$);
#853=IFCCLASSIFICATIONREFERENCE($,'[L]WGA','Control cable',#852,$,$);
#854=IFCCLASSIFICATIONREFERENCE($,'[L]WGB','Data cable',#852,$,$);
#855=IFCCLASSIFICATIONREFERENCE($,'[L]WGC','Aerial cable',#852,$,$);
#856=IFCCLASSIFICATIONREFERENCE($,'[L]WH?','Optical signal transmission component',#840,$,$);
#857=IFCCLASSIFICATIONREFERENCE($,'[L]WHA','Fibre cable',#856,$,$);
#858=IFCCLASSIFICATIONREFERENCE($,'[L]WHB','Fiber optical cable',#856,$,$);
#859=IFCCLASSIFICATIONREFERENCE($,'[L]WM?','Open liquid transporting component',#840,$,$);
#860=IFCCLASSIFICATIONREFERENCE($,'[L]WMA','Drainage layer',#859,$,$);
#861=IFCCLASSIFICATIONREFERENCE($,'[L]WMB','Gutter',#859,$,$);
#862=IFCCLASSIFICATIONREFERENCE($,'[L]WMC','Flashing',#859,$,$);
#863=IFCCLASSIFICATIONREFERENCE($,'[L]WMD','Drip nose',#859,$,$);
#864=IFCCLASSIFICATIONREFERENCE($,'[L]WME','Gutter drip',#859,$,$);
#865=IFCCLASSIFICATIONREFERENCE($,'[L]WP?','Enclosed transporting component',#840,$,$);
#866=IFCCLASSIFICATIONREFERENCE($,'[L]WPA','Pipe',#865,$,$);
#867=IFCCLASSIFICATIONREFERENCE($,'[L]WPB','Duct',#865,$,$);
#868=IFCCLASSIFICATIONREFERENCE($,'[L]WPC','Water hose',#865,$,$);
#869=IFCCLASSIFICATIONREFERENCE($,'[L]WPD','Air hose',#865,$,$);
#870=IFCCLASSIFICATIONREFERENCE($,'[L]WPE','Chimney',#865,$,$);
#871=IFCCLASSIFICATIONREFERENCE($,'[L]WU?','Organic matter transporting component',#840,$,$);
#872=IFCCLASSIFICATIONREFERENCE($,'[L]WUA','Growth layer',#871,$,$);
#873=IFCCLASSIFICATIONREFERENCE($,'[L]X??','Connecting component',#387,$,$);
#874=IFCCLASSIFICATIONREFERENCE($,'[L]XD?','Electrical power connecting component',#873,$,$);
#875=IFCCLASSIFICATIONREFERENCE($,'[L]XDA','Low voltage terminal',#874,$,$);
#876=IFCCLASSIFICATIONREFERENCE($,'[L]XDB','Power socket',#874,$,$);
#877=IFCCLASSIFICATIONREFERENCE($,'[L]XDC','Terminal box',#874,$,$);
#878=IFCCLASSIFICATIONREFERENCE($,'[L]XDD','Power outlet',#874,$,$);
#879=IFCCLASSIFICATIONREFERENCE($,'[L]XDE','Power distributor',#874,$,$);
#880=IFCCLASSIFICATIONREFERENCE($,'[L]XDF','Services chamber',#874,$,$);
#881=IFCCLASSIFICATIONREFERENCE($,'[L]XE?','Potential connecting component',#873,$,$);
#882=IFCCLASSIFICATIONREFERENCE($,'[L]XEA','Earth terminal',#881,$,$);
#883=IFCCLASSIFICATIONREFERENCE($,'[L]XEB','Equipotential bonding terminal',#881,$,$);
#884=IFCCLASSIFICATIONREFERENCE($,'[L]XEC','Ground terminal',#881,$,$);
#885=IFCCLASSIFICATIONREFERENCE($,'[L]XED','Earting rod',#881,$,$);
#886=IFCCLASSIFICATIONREFERENCE($,'[L]XEE','Collector',#881,$,$);
#887=IFCCLASSIFICATIONREFERENCE($,'[L]XG?','Signal connecting component',#873,$,$);
#888=IFCCLASSIFICATIONREFERENCE($,'[L]XGA','Signal socket',#887,$,$);
#889=IFCCLASSIFICATIONREFERENCE($,'[L]XGB','Terminal outlet',#887,$,$);
#890=IFCCLASSIFICATIONREFERENCE($,'[L]XGC','Patch panel',#887,$,$);
#891=IFCCLASSIFICATIONREFERENCE($,'[L]XGD','Signal distributor',#887,$,$);
#892=IFCCLASSIFICATIONREFERENCE($,'[L]XL?','Terminal to flow connecting component',#873,$,$);
#893=IFCCLASSIFICATIONREFERENCE($,'[L]XLA','Draw-off tap',#892,$,$);
#894=IFCCLASSIFICATIONREFERENCE($,'[L]XLB','Shower',#892,$,$);
#895=IFCCLASSIFICATIONREFERENCE($,'[L]XLC','Sink',#892,$,$);
#896=IFCCLASSIFICATIONREFERENCE($,'[L]XLD','Toilet',#892,$,$);
#897=IFCCLASSIFICATIONREFERENCE($,'[L]XLE','Urinal',#892,$,$);
#898=IFCCLASSIFICATIONREFERENCE($,'[L]XLF','Drip cup',#892,$,$);
#899=IFCCLASSIFICATIONREFERENCE($,'[L]XLG','Vent',#892,$,$);
#900=IFCCLASSIFICATIONREFERENCE($,'[L]XLH','Floor drain',#892,$,$);
#901=IFCCLASSIFICATIONREFERENCE($,'[L]XM?','Flow to flow connecting component',#873,$,$);
#902=IFCCLASSIFICATIONREFERENCE($,'[L]XMA','Hose coupling',#901,$,$);
#903=IFCCLASSIFICATIONREFERENCE($,'[L]XMB','Pipe coupling',#901,$,$);
#904=IFCCLASSIFICATIONREFERENCE($,'[L]XMC','Pipe fitting',#901,$,$);
#905=IFCCLASSIFICATIONREFERENCE($,'[L]XMD','Pipe flange',#901,$,$);
#906=IFCCLASSIFICATIONREFERENCE($,'[L]XME','Chamber',#901,$,$);
#907=IFCCLASSIFICATIONREFERENCE($,'[L]XMF','Duct fitting',#901,$,$);
#908=IFCCLASSIFICATIONREFERENCE($,'[L]XS?','Level connecting component',#873,$,$);
#909=IFCCLASSIFICATIONREFERENCE($,'[L]XSA','Landing',#908,$,$);
#910=IFCCLASSIFICATIONREFERENCE($,'[L]XSB','Flight of stairs',#908,$,$);
#911=IFCCLASSIFICATIONREFERENCE($,'[L]XSC','Ladder',#908,$,$);
#912=IFCCLASSIFICATIONREFERENCE($,'[L]XT?','Space linking component',#873,$,$);
#913=IFCCLASSIFICATIONREFERENCE($,'[L]XTA','Hole',#912,$,$);
#914=IFCCLASSIFICATIONREFERENCE($,'[L]XTB','Box-out',#912,$,$);
#915=IFCCLASSIFICATIONREFERENCE($,'[L]XTC','Excavation',#912,$,$);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,164 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:30',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'Funktionskoder Regionservice CD001 - 001',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('BIMAlliance','004','2017-04-04','Funktionskoder Regionservice CD001 - 001','CD001_001_004 Komplettering av version 003, korrigerad 2017-04-04\X2\000A000A\X0\','http://tools.bimalliance.se/fi2listor/Klasslistor.aspx',$);
#3=IFCRELASSOCIATESCLASSIFICATION('0pacSftg17nPo8ieMe8M$7',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'0',$,#2,'NIV\X2\00C5\X0\ 0',$);
#5=IFCCLASSIFICATIONREFERENCE($,'000','SAKNAS',#4,'SAKNAS',$);
#6=IFCCLASSIFICATIONREFERENCE($,'1',$,#2,'NIV\X2\00C5\X0\ 1',$);
#7=IFCCLASSIFICATIONREFERENCE($,'001','RADERAS!',#6,'RADERAS!',$);
#8=IFCCLASSIFICATIONREFERENCE($,'2',$,#2,'NIV\X2\00C5\X0\ 2',$);
#9=IFCCLASSIFICATIONREFERENCE($,'100','HYGIEN- OCH V\X2\00C5\X0\TUTRYMME OSPEC',#8,'HYGIEN- OCH V\X2\00C5\X0\TUTRYMME OSPEC',$);
#10=IFCCLASSIFICATIONREFERENCE($,'111','WC',#9,'WC',$);
#11=IFCCLASSIFICATIONREFERENCE($,'112','RWC',#9,'RWC',$);
#12=IFCCLASSIFICATIONREFERENCE($,'113','D',#9,'DUSCH',$);
#13=IFCCLASSIFICATIONREFERENCE($,'115','WC/D',#9,'WC MED DUSCH',$);
#14=IFCCLASSIFICATIONREFERENCE($,'116','RWC/D',#9,'RWC MED DUSCH',$);
#15=IFCCLASSIFICATIONREFERENCE($,'117','WC/SK\X2\00D6\X0\LJ',#9,'WC MED SK\X2\00D6\X0\LJ',$);
#16=IFCCLASSIFICATIONREFERENCE($,'119','WC/BAD',#9,'WC MED BAD',$);
#17=IFCCLASSIFICATIONREFERENCE($,'120','RWC/SK\X2\00D6\X0\TR.',#9,'RWC/SK\X2\00D6\X0\TRUM',$);
#18=IFCCLASSIFICATIONREFERENCE($,'121','TV\X2\00C4\X0\TTR.',#9,'TV\X2\00C4\X0\TTRUM',$);
#19=IFCCLASSIFICATIONREFERENCE($,'123','SK\X2\00D6\X0\TR.',#9,'SK\X2\00D6\X0\TRUM',$);
#20=IFCCLASSIFICATIONREFERENCE($,'124','BAD',#9,'BADRUM',$);
#21=IFCCLASSIFICATIONREFERENCE($,'125','BASTU',#9,'BASTU',$);
#22=IFCCLASSIFICATIONREFERENCE($,'127','BAS\X2\00C4\X0\NG/SIMHALL',#9,'BAS\X2\00C4\X0\NG/SIMHALL',$);
#23=IFCCLASSIFICATIONREFERENCE($,'131','SK\X2\00D6\X0\LJ-/V\X2\00C5\X0\TR.',#9,'SK\X2\00D6\X0\LJRUM/V\X2\00C5\X0\TRUM',$);
#24=IFCCLASSIFICATIONREFERENCE($,'137','MEDICINR.',#9,'MEDICINRUM',$);
#25=IFCCLASSIFICATIONREFERENCE($,'138','STRYK/TV\X2\00C4\X0\TTSTUGA',#9,'STRYK/TV\X2\00C4\X0\TTSTUGA',$);
#26=IFCCLASSIFICATIONREFERENCE($,'200','PATIENTUTRYMME OSPEC.',#8,'PATIENTUTRYMME OSPEC.',$);
#27=IFCCLASSIFICATIONREFERENCE($,'209','F\X2\00D6\X0\RR./SLUSS M TV\X2\00C4\X0\TTST.',#26,'F\X2\00D6\X0\RRUM/SLUSS MED TV\X2\00C4\X0\TTST\X2\00C4\X0\LL',$);
#28=IFCCLASSIFICATIONREFERENCE($,'210','F\X2\00D6\X0\RR./SLUSS',#26,'F\X2\00D6\X0\RRUM/SLUSS',$);
#29=IFCCLASSIFICATIONREFERENCE($,'211','1-PAT',#26,'V\X2\00C5\X0\RDRUM-1PAT',$);
#30=IFCCLASSIFICATIONREFERENCE($,'212','2-PAT',#26,'V\X2\00C5\X0\RDRUM-2PAT',$);
#31=IFCCLASSIFICATIONREFERENCE($,'213','3-PAT',#26,'V\X2\00C5\X0\RDRUM-3PAT',$);
#32=IFCCLASSIFICATIONREFERENCE($,'214','4-PAT',#26,'V\X2\00C5\X0\RDRUM-4PAT',$);
#33=IFCCLASSIFICATIONREFERENCE($,'215','> 4-PAT',#26,'V\X2\00C5\X0\RDRUM >4PAT',$);
#34=IFCCLASSIFICATIONREFERENCE($,'216','1-PAT ISOL',#26,'V\X2\00C5\X0\RDRUM-1PAT ISOLERING',$);
#35=IFCCLASSIFICATIONREFERENCE($,'217','2-PAT ISOL',#26,'V\X2\00C5\X0\RDRUM-2PAT ISOLERING',$);
#36=IFCCLASSIFICATIONREFERENCE($,'218','ISOL',#26,'ISOLERINGSRUM',$);
#37=IFCCLASSIFICATIONREFERENCE($,'219','DIALYS',#26,'DIALYS',$);
#38=IFCCLASSIFICATIONREFERENCE($,'220','VATTEN',#26,'VATTENRUM',$);
#39=IFCCLASSIFICATIONREFERENCE($,'221','MATSAL',#26,'MATSAL',$);
#40=IFCCLASSIFICATIONREFERENCE($,'222','DAGR.',#26,'DAGRUM',$);
#41=IFCCLASSIFICATIONREFERENCE($,'223','MAT-/DAGR.',#26,'MAT- OCH DAGRUM',$);
#42=IFCCLASSIFICATIONREFERENCE($,'224','R\X2\00D6\X0\KR.',#26,'R\X2\00D6\X0\KRUM',$);
#43=IFCCLASSIFICATIONREFERENCE($,'225','V\X2\00C4\X0\NTR.',#26,'V\X2\00C4\X0\NTRUM',$);
#44=IFCCLASSIFICATIONREFERENCE($,'226','K\X2\00D6\X0\K',#26,'K\X2\00D6\X0\K',$);
#45=IFCCLASSIFICATIONREFERENCE($,'228','LEKR.',#26,'LEKRUM',$);
#46=IFCCLASSIFICATIONREFERENCE($,'230','BEREDN.',#26,'BEREDNING',$);
#47=IFCCLASSIFICATIONREFERENCE($,'231','UB',#26,'UNDERS\X2\00D6\X0\KNING-/BEHANDLINGSRUM',$);
#48=IFCCLASSIFICATIONREFERENCE($,'232','UBEX',#26,'UBEX',$);
#49=IFCCLASSIFICATIONREFERENCE($,'233','UBEX ISOL',#26,'UBEX ISOLERING',$);
#50=IFCCLASSIFICATIONREFERENCE($,'281','ANH\X2\00D6\X0\RIGR.',#26,'ANH\X2\00D6\X0\RIGRUM',$);
#51=IFCCLASSIFICATIONREFERENCE($,'282','VILR./HYTT',#26,'VILRUM/HYTT',$);
#52=IFCCLASSIFICATIONREFERENCE($,'300','PERSONALUTRYMME OSPEC.',#8,'PERSONALUTRYMME OSPEC.',$);
#53=IFCCLASSIFICATIONREFERENCE($,'311','OMKL',#52,'OMKL\X2\00C4\X0\DNRUM',$);
#54=IFCCLASSIFICATIONREFERENCE($,'318','PENTRY',#52,'PENTRY',$);
#55=IFCCLASSIFICATIONREFERENCE($,'319','PENTRY/MATR.',#52,'PENTRY/MATRUM',$);
#56=IFCCLASSIFICATIONREFERENCE($,'323','JOUR',#52,'JOURRUM',$);
#57=IFCCLASSIFICATIONREFERENCE($,'335','VILRUM',#52,'VILRUM',$);
#58=IFCCLASSIFICATIONREFERENCE($,'344','PERSONAL',#52,'PERSONALRUM',$);
#59=IFCCLASSIFICATIONREFERENCE($,'400','SPECIALAVDELING OSPEC.',#8,'SPECIALAVDELING OSPEC.',$);
#60=IFCCLASSIFICATIONREFERENCE($,'411','GYMN',#59,'GYMNASTIKSAL',$);
#61=IFCCLASSIFICATIONREFERENCE($,'421','TERAPI',#59,'TERAPILOKAL',$);
#62=IFCCLASSIFICATIONREFERENCE($,'444','DISP',#59,'DISPONIBEL RUM UTAN VERKSAMHET',$);
#63=IFCCLASSIFICATIONREFERENCE($,'451','OPERATION',#59,'OPERATIONSUTRYMME',$);
#64=IFCCLASSIFICATIONREFERENCE($,'452','F\X2\00D6\X0\RLOSSN',#59,'F\X2\00D6\X0\RLOSSNINGSRUM',$);
#65=IFCCLASSIFICATIONREFERENCE($,'453','F\X2\00D6\X0\RBER',#59,'F\X2\00D6\X0\RBEREDELSERUM',$);
#66=IFCCLASSIFICATIONREFERENCE($,'459','UPP-/\X2\00D6\X0\VERVAKN.',#59,'UPPVAKNING/\X2\00D6\X0\VERVAKNING',$);
#67=IFCCLASSIFICATIONREFERENCE($,'461','R\X2\00D6\X0\NTGEN',#59,'R\X2\00D6\X0\NTGENRUM',$);
#68=IFCCLASSIFICATIONREFERENCE($,'462','MAN\X2\00D6\X0\VER',#59,'MAN\X2\00D6\X0\VERRUM',$);
#69=IFCCLASSIFICATIONREFERENCE($,'464','M\X2\00D6\X0\RK',#59,'M\X2\00D6\X0\RKRUM',$);
#70=IFCCLASSIFICATIONREFERENCE($,'466','GRANSKN',#59,'GRANSKNINGSRUM',$);
#71=IFCCLASSIFICATIONREFERENCE($,'471','PROVTAGN',#59,'PROVTAGNINGSRUM',$);
#72=IFCCLASSIFICATIONREFERENCE($,'472','LAB',#59,'LABORATORIE',$);
#73=IFCCLASSIFICATIONREFERENCE($,'473','DJUR',#59,'DJURRUM',$);
#74=IFCCLASSIFICATIONREFERENCE($,'474','RENA RUM',#59,'RENA RUM',$);
#75=IFCCLASSIFICATIONREFERENCE($,'476','FOTOATELJ\X2\00C9\X0\',#59,'FOTOATELJ\X2\00C9\X0\',$);
#76=IFCCLASSIFICATIONREFERENCE($,'477','LAB 2',#59,'INSTRUMENTRUM',$);
#77=IFCCLASSIFICATIONREFERENCE($,'478','LAB 3',#59,'MANUELLT LABORATORIER',$);
#78=IFCCLASSIFICATIONREFERENCE($,'479','LAB 1',#59,'SPECIAL LABORATORIER OCH ANALYSHALLAR',$);
#79=IFCCLASSIFICATIONREFERENCE($,'480','TANDV\X2\00C5\X0\RD',#59,'TANDV\X2\00C5\X0\RDSUTRYMME',$);
#80=IFCCLASSIFICATIONREFERENCE($,'500','BOSTAD - HOTELLRUM',#8,'BOSTAD - HOTELLRUM',$);
#81=IFCCLASSIFICATIONREFERENCE($,'510','BOSTAD',#80,'BOSTAD',$);
#82=IFCCLASSIFICATIONREFERENCE($,'511','HOTELLRUM',#80,'HOTELLRUM',$);
#83=IFCCLASSIFICATIONREFERENCE($,'600','TEKN DRIFT',#8,'TEKNISKT DRIFTUTRYMME',$);
#84=IFCCLASSIFICATIONREFERENCE($,'601','UC',#83,'UNDERCENTRAL',$);
#85=IFCCLASSIFICATIONREFERENCE($,'602','FL\X2\00C4\X0\KTRUM',#83,'FL\X2\00C4\X0\KTRUM',$);
#86=IFCCLASSIFICATIONREFERENCE($,'614','KULV. TEKN.',#83,'KULVERT (TEKNIK)',$);
#87=IFCCLASSIFICATIONREFERENCE($,'615','SCHAKT',#83,'SCHAKT',$);
#88=IFCCLASSIFICATIONREFERENCE($,'630','EL',#83,'EL-CENTRAL',$);
#89=IFCCLASSIFICATIONREFERENCE($,'640','TELE',#83,'TELE-CENTRAL',$);
#90=IFCCLASSIFICATIONREFERENCE($,'645','DATA',#83,'DATA',$);
#91=IFCCLASSIFICATIONREFERENCE($,'650','VVS',#83,'VENT OCH R\X2\00D6\X0\R',$);
#92=IFCCLASSIFICATIONREFERENCE($,'651','BRANDUTR.',#83,'BRANDUTRUSTNING',$);
#93=IFCCLASSIFICATIONREFERENCE($,'657','V',#83,'VENTILATION',$);
#94=IFCCLASSIFICATIONREFERENCE($,'659','VS',#83,'R\X2\00D6\X0\R',$);
#95=IFCCLASSIFICATIONREFERENCE($,'671','HISSMASR.',#83,'HISSMASKINRUM',$);
#96=IFCCLASSIFICATIONREFERENCE($,'691','VIND',#83,'VIND',$);
#97=IFCCLASSIFICATIONREFERENCE($,'700','UTRYMME F\X2\00D6\X0\R ST\X2\00D6\X0\DFUNKTIONER OSPEC.',#8,'UTRYMME F\X2\00D6\X0\R ST\X2\00D6\X0\DFUNKTIONER OSPEC.',$);
#98=IFCCLASSIFICATIONREFERENCE($,'710','K\X2\00D6\X0\K',#97,'K\X2\00D6\X0\KSUTRYMME',$);
#99=IFCCLASSIFICATIONREFERENCE($,'711','KYL-/FRYSR.',#97,'KYLRUM/FRYSRUM',$);
#100=IFCCLASSIFICATIONREFERENCE($,'713','DISKR.',#97,'DISKRUM',$);
#101=IFCCLASSIFICATIONREFERENCE($,'720','STERILR.',#97,'STERILRUM',$);
#102=IFCCLASSIFICATIONREFERENCE($,'722','FRD STERIL',#97,'STERILF\X2\00D6\X0\RR\X2\00C5\X0\D',$);
#103=IFCCLASSIFICATIONREFERENCE($,'723','UTL\X2\00C4\X0\MN.',#97,'UTL\X2\00C4\X0\MNING',$);
#104=IFCCLASSIFICATIONREFERENCE($,'724','INL\X2\00C4\X0\MN.',#97,'INL\X2\00C4\X0\MNING',$);
#105=IFCCLASSIFICATIONREFERENCE($,'750','VERKSTAD',#97,'VERKSTAD',$);
#106=IFCCLASSIFICATIONREFERENCE($,'760','SKYDDSR.',#97,'SKYDDSRUM',$);
#107=IFCCLASSIFICATIONREFERENCE($,'771','KAPELL/ANDAKTSR.',#97,'KAPELL/ANDAKTSRUM',$);
#108=IFCCLASSIFICATIONREFERENCE($,'772','SVEPN-/VISNR',#97,'SVEPNING/VISNGSRUM',$);
#109=IFCCLASSIFICATIONREFERENCE($,'773','OBDUKT-/ KYLR.',#97,'OBDUKTIONSRUM/KYLRUM',$);
#110=IFCCLASSIFICATIONREFERENCE($,'791','TV\X2\00C4\X0\TTHANT.',#97,'TV\X2\00C4\X0\TTHANTERING',$);
#111=IFCCLASSIFICATIONREFERENCE($,'792','SOP',#97,'SOPRUM',$);
#112=IFCCLASSIFICATIONREFERENCE($,'793','FRD',#97,'F\X2\00D6\X0\RR\X2\00C5\X0\D',$);
#113=IFCCLASSIFICATIONREFERENCE($,'794','MILJ\X2\00D6\X0\',#97,'MILJ\X2\00D6\X0\RUM',$);
#114=IFCCLASSIFICATIONREFERENCE($,'795','ST\X2\00C4\X0\D',#97,'ST\X2\00C4\X0\DRUM',$);
#115=IFCCLASSIFICATIONREFERENCE($,'797','RULL MTR',#97,'RULLANDE MATERIAL',$);
#116=IFCCLASSIFICATIONREFERENCE($,'799','SMUTSTV\X2\00C4\X0\TT',#97,'SMUTSTV\X2\00C4\X0\TT',$);
#117=IFCCLASSIFICATIONREFERENCE($,'800','KONTOR - UTBILDNING OSPEC.',#8,'KONTOR - UTBILDNING OSPEC.',$);
#118=IFCCLASSIFICATIONREFERENCE($,'811','KONTOR',#117,'KONTOR',$);
#119=IFCCLASSIFICATIONREFERENCE($,'812','EXP.',#117,'EXPEDITION',$);
#120=IFCCLASSIFICATIONREFERENCE($,'813','EXP. M TV\X2\00C4\X0\TTST.',#117,'EXPEDITION MED TV\X2\00C4\X0\TTST\X2\00C4\X0\LL',$);
#121=IFCCLASSIFICATIONREFERENCE($,'816','REC',#117,'RECEPTION',$);
#122=IFCCLASSIFICATIONREFERENCE($,'817','SAMTALSR.',#117,'SAMTALSRUM',$);
#123=IFCCLASSIFICATIONREFERENCE($,'820','DATAR.',#117,'DATARUM',$);
#124=IFCCLASSIFICATIONREFERENCE($,'821','ARKIV',#117,'ARKIV',$);
#125=IFCCLASSIFICATIONREFERENCE($,'822','KOP',#117,'KOPIERING',$);
#126=IFCCLASSIFICATIONREFERENCE($,'831','KONF',#117,'KONFERENSRUM',$);
#127=IFCCLASSIFICATIONREFERENCE($,'834','UTBILDN',#117,'UTBILDNINGSRUM',$);
#128=IFCCLASSIFICATIONREFERENCE($,'835','GRUPPR.',#117,'GRUPPRUM',$);
#129=IFCCLASSIFICATIONREFERENCE($,'837','BIBL',#117,'BIBLIOTEK',$);
#130=IFCCLASSIFICATIONREFERENCE($,'839','F\X2\00D6\X0\REL\X2\00C4\X0\SN.SAL',#117,'F\X2\00D6\X0\REL\X2\00C4\X0\SNINGSSAL',$);
#131=IFCCLASSIFICATIONREFERENCE($,'900','ALLM\X2\00C4\X0\NT KOMMUNIKATIONSUTRYMME',#8,'ALLM\X2\00C4\X0\NT KOMMUNIKATIONSUTRYMME',$);
#132=IFCCLASSIFICATIONREFERENCE($,'911','\X2\00C5\X0\TERVR',#131,'\X2\00C5\X0\TERVINNINGSRUM',$);
#133=IFCCLASSIFICATIONREFERENCE($,'921','KULVERT',#131,'KULVERT',$);
#134=IFCCLASSIFICATIONREFERENCE($,'922','KORRIDOR',#131,'KORRIDOR',$);
#135=IFCCLASSIFICATIONREFERENCE($,'923','PASS.',#131,'PASSAGE',$);
#136=IFCCLASSIFICATIONREFERENCE($,'924','VINDF.',#131,'VINDF\X2\00C5\X0\NG',$);
#137=IFCCLASSIFICATIONREFERENCE($,'925','SLUSS',#131,'SLUSS',$);
#138=IFCCLASSIFICATIONREFERENCE($,'926','KARUSELL',#131,'KARUSELLENTR\X2\00C9\X0\',$);
#139=IFCCLASSIFICATIONREFERENCE($,'930','KAPPR.',#131,'KAPPRUM',$);
#140=IFCCLASSIFICATIONREFERENCE($,'931','ENTR\X2\00C9\X0\HALL',#131,'ENTR\X2\00C9\X0\HALL',$);
#141=IFCCLASSIFICATIONREFERENCE($,'932','ENTR\X2\00C9\X0\',#131,'ENTR\X2\00C9\X0\',$);
#142=IFCCLASSIFICATIONREFERENCE($,'933','TRAPPHALL',#131,'TRAPPHALL',$);
#143=IFCCLASSIFICATIONREFERENCE($,'934','TRAPPA/TRAPPPL.',#131,'TRAPPA/TRAPPLAN',$);
#144=IFCCLASSIFICATIONREFERENCE($,'935','HISSHALL',#131,'HISSHALL',$);
#145=IFCCLASSIFICATIONREFERENCE($,'936','HISS',#131,'HISS',$);
#146=IFCCLASSIFICATIONREFERENCE($,'937','UPPST./VAGNHALL',#131,'UPPST\X2\00C4\X0\LLNING/VAGNHALL',$);
#147=IFCCLASSIFICATIONREFERENCE($,'938','GARAGE/TV\X2\00C4\X0\TTH.',#131,'GARAGE/TV\X2\00C4\X0\TTHALL',$);
#148=IFCCLASSIFICATIONREFERENCE($,'939','HISSCHAKT',#131,'HISSCHAKT',$);
#149=IFCCLASSIFICATIONREFERENCE($,'940','TRUCKLADDN.',#131,'TRUCKLADDNING',$);
#150=IFCCLASSIFICATIONREFERENCE($,'941','CAFETERIA',#131,'CAFETERIA',$);
#151=IFCCLASSIFICATIONREFERENCE($,'942','BUTIKSLOKAL',#131,'BUTIKSLOKAL',$);
#152=IFCCLASSIFICATIONREFERENCE($,'944','AMBULANSHALL',#131,'AMBULANSHALL',$);
#153=IFCCLASSIFICATIONREFERENCE($,'945','SANERINGSHALL',#131,'SANERINGSHALL',$);
#154=IFCCLASSIFICATIONREFERENCE($,'951','VARUINTAG/LASTKAJ',#131,'VARUINTAG/LASTKAJ',$);
#155=IFCCLASSIFICATIONREFERENCE($,'952','ALTAN/BALKONG',#131,'ALTAN/BALKONG',$);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,206 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:30',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'Rumsfunktion Blekinge CD002 - 001',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('BIMAlliance','001','2014-09-08','Rumsfunktion Blekinge CD002 - 001','Rumsfunktion Blekinge','http://tools.bimalliance.se/fi2listor/Klasslistor.aspx',$);
#3=IFCRELASSOCIATESCLASSIFICATION('0LHEmKRxT9teAk1hi0ntR1',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'1','Ospecificerat utrymme',#2,'OSPECIFICERAT',$);
#5=IFCCLASSIFICATIONREFERENCE($,'2','Outgr\X2\00E4\X0\vt utrymme',#2,'OUTGR\X2\00C4\X0\VT',$);
#6=IFCCLASSIFICATIONREFERENCE($,'3','Ej anv\X2\00E4\X0\ndbart utrymme',#2,'EJ ANV\X2\00C4\X0\NDBART',$);
#7=IFCCLASSIFICATIONREFERENCE($,'10','Odefinierad yta inget rums',#2,'ODEFINIERAD. EJ ID.',$);
#8=IFCCLASSIFICATIONREFERENCE($,'11','Borttagning av rums identifierings nr.',#2,'BORT. ID.NR',$);
#9=IFCCLASSIFICATIONREFERENCE($,'100','Hygien- och V\X2\00E5\X0\tutrymmen',#2,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'111','WC',#9,'WC',$);
#11=IFCCLASSIFICATIONREFERENCE($,'112','RWC',#9,'RWC',$);
#12=IFCCLASSIFICATIONREFERENCE($,'113','Dusch',#9,'DUSCH',$);
#13=IFCCLASSIFICATIONREFERENCE($,'114','Lavemangsrum',#9,'LAVEMANG',$);
#14=IFCCLASSIFICATIONREFERENCE($,'115','WC/Dusch',#9,'WC/D',$);
#15=IFCCLASSIFICATIONREFERENCE($,'116','RWC/Dusch',#9,'RWC/D',$);
#16=IFCCLASSIFICATIONREFERENCE($,'117','WC/Sk\X2\00F6\X0\lj',#9,'WC/SK\X2\00D6\X0\LJ',$);
#17=IFCCLASSIFICATIONREFERENCE($,'119','WC/Bad',#9,'WC/BAD',$);
#18=IFCCLASSIFICATIONREFERENCE($,'120','RWC/Sk\X2\00F6\X0\trum',#9,'RWC/SK\X2\00D6\X0\T',$);
#19=IFCCLASSIFICATIONREFERENCE($,'121','Tv\X2\00E4\X0\ttrum',#9,'TV\X2\00C4\X0\TT',$);
#20=IFCCLASSIFICATIONREFERENCE($,'123','Sk\X2\00F6\X0\trum',#9,'SK\X2\00D6\X0\TRUM',$);
#21=IFCCLASSIFICATIONREFERENCE($,'124','Badrum',#9,'BADRUM',$);
#22=IFCCLASSIFICATIONREFERENCE($,'125','Bastu',#9,'BASTU',$);
#23=IFCCLASSIFICATIONREFERENCE($,'127','Bass\X2\00E4\X0\ng/Simhall',#9,'BASS\X2\00C4\X0\NG',$);
#24=IFCCLASSIFICATIONREFERENCE($,'128','Solarium',#9,'SOLARIUM',$);
#25=IFCCLASSIFICATIONREFERENCE($,'131','Sk\X2\00F6\X0\ljrum/V\X2\00E5\X0\trum',#9,'SK\X2\00D6\X0\LJ',$);
#26=IFCCLASSIFICATIONREFERENCE($,'137','Medicinrum',#9,'MEDICIN',$);
#27=IFCCLASSIFICATIONREFERENCE($,'138','Strykning',#9,'STRYKNING',$);
#28=IFCCLASSIFICATIONREFERENCE($,'200','Patientutrymme',#2,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'209','Sluss med tv\X2\00E4\X0\ttst\X2\00E4\X0\ll (i anslutning till patientrum)',#28,'SLUSS',$);
#30=IFCCLASSIFICATIONREFERENCE($,'210','F\X2\00F6\X0\rrum/Sluss',#28,'F\X2\00D6\X0\RRUM',$);
#31=IFCCLASSIFICATIONREFERENCE($,'211','V\X2\00E5\X0\rdrum f\X2\00F6\X0\r en patient',#28,'V\X2\00C5\X0\RDRUM 1-PAT',$);
#32=IFCCLASSIFICATIONREFERENCE($,'212','V\X2\00E5\X0\rdrum f\X2\00F6\X0\r tv\X2\00E5\X0\ patienter',#28,'V\X2\00C5\X0\RDRUM 2-PAT',$);
#33=IFCCLASSIFICATIONREFERENCE($,'213','V\X2\00E5\X0\rdrum f\X2\00F6\X0\r tre patienter',#28,'V\X2\00C5\X0\RDRUM 3-PAT',$);
#34=IFCCLASSIFICATIONREFERENCE($,'214','V\X2\00E5\X0\rdrum f\X2\00F6\X0\r fyra patienter',#28,'V\X2\00C5\X0\RDRUM 4-PAT',$);
#35=IFCCLASSIFICATIONREFERENCE($,'215','V\X2\00E5\X0\rdrum mer \X2\00E4\X0\n fyra patienter',#28,'V\X2\00C5\X0\RDRUM >4 PAT',$);
#36=IFCCLASSIFICATIONREFERENCE($,'216','Isoleringsrum f\X2\00F6\X0\r en patient',#28,'ISOLERING 1-PAT',$);
#37=IFCCLASSIFICATIONREFERENCE($,'217','Isoleringsrum f\X2\00F6\X0\r tv\X2\00E5\X0\ patienter',#28,'ISOLERING 2-PAT',$);
#38=IFCCLASSIFICATIONREFERENCE($,'218','Isoleringsrum',#28,'ISOLERING',$);
#39=IFCCLASSIFICATIONREFERENCE($,'219','Dialys',#28,'DIALYS',$);
#40=IFCCLASSIFICATIONREFERENCE($,'220','Vattenrum',#28,'VATTEN',$);
#41=IFCCLASSIFICATIONREFERENCE($,'221','Matsal (avdelnings-)',#28,'MATSAL',$);
#42=IFCCLASSIFICATIONREFERENCE($,'222','Dagrum',#28,'DAGRUM',$);
#43=IFCCLASSIFICATIONREFERENCE($,'223','Matsal/Dagrum',#28,'MATSAL/DAGRUM',$);
#44=IFCCLASSIFICATIONREFERENCE($,'224','R\X2\00F6\X0\krum',#28,'R\X2\00D6\X0\KRUM',$);
#45=IFCCLASSIFICATIONREFERENCE($,'225','V\X2\00E4\X0\ntrum',#28,'V\X2\00C4\X0\NTRUM',$);
#46=IFCCLASSIFICATIONREFERENCE($,'226','K\X2\00F6\X0\k (avdelnings-)',#28,'K\X2\00D6\X0\K',$);
#47=IFCCLASSIFICATIONREFERENCE($,'228','Lekrum',#28,'LEKRUM',$);
#48=IFCCLASSIFICATIONREFERENCE($,'229','S\X2\00E4\X0\ngv\X2\00E4\X0\ntrum',#28,'S\X2\00C4\X0\NGV\X2\00C4\X0\NTRUM',$);
#49=IFCCLASSIFICATIONREFERENCE($,'230','Beredningsrum',#28,'BEREDNING',$);
#50=IFCCLASSIFICATIONREFERENCE($,'231','Unders\X2\00F6\X0\knings-/Behandlingsrum',#28,'UNDERS\X2\00D6\X0\K/BEHANDL.',$);
#51=IFCCLASSIFICATIONREFERENCE($,'232','Mottagning, unders\X2\00F6\X0\kning och expedition',#28,'MUE',$);
#52=IFCCLASSIFICATIONREFERENCE($,'233','Mottagning, unders\X2\00F6\X0\kning och expedition, isolering',#28,'MUE ISOLERING',$);
#53=IFCCLASSIFICATIONREFERENCE($,'237','Gipsrum',#28,'GIPSRUM',$);
#54=IFCCLASSIFICATIONREFERENCE($,'240','Unders\X2\00F6\X0\kningsrum',#28,'UNDERS\X2\00D6\X0\KNING',$);
#55=IFCCLASSIFICATIONREFERENCE($,'241','Behandlingsrum',#28,'BEHANDLING',$);
#56=IFCCLASSIFICATIONREFERENCE($,'242','Mottagningsrum',#28,'MOTTAGNING',$);
#57=IFCCLASSIFICATIONREFERENCE($,'243','Akutrum',#28,'AKUTRUM',$);
#58=IFCCLASSIFICATIONREFERENCE($,'281','Anh\X2\00F6\X0\rigrum',#28,'ANH\X2\00D6\X0\RIGRUM',$);
#59=IFCCLASSIFICATIONREFERENCE($,'282','Vilhytt',#28,'VILHYTT',$);
#60=IFCCLASSIFICATIONREFERENCE($,'300','Personalutrymme',#2,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'311','Omkl\X2\00E4\X0\dningsrum',#60,'OMKL.',$);
#62=IFCCLASSIFICATIONREFERENCE($,'318','Pentry',#60,'PENTRY',$);
#63=IFCCLASSIFICATIONREFERENCE($,'319','Pentry/Matrum',#60,'PENTRY/MATRUM',$);
#64=IFCCLASSIFICATIONREFERENCE($,'323','Jourrum',#60,'JOUR',$);
#65=IFCCLASSIFICATIONREFERENCE($,'335','Vilrum',#60,'VILRUM',$);
#66=IFCCLASSIFICATIONREFERENCE($,'344','Personalrum',#60,'PERSONAL',$);
#67=IFCCLASSIFICATIONREFERENCE($,'400','Specialutrymme',#2,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'410','Redskapsrum',#67,'REDSKAP',$);
#69=IFCCLASSIFICATIONREFERENCE($,'411','Gymnastiksal',#67,'GYMNASTIK',$);
#70=IFCCLASSIFICATIONREFERENCE($,'412','Terapilokal',#67,'TERAPI',$);
#71=IFCCLASSIFICATIONREFERENCE($,'422','Ljusterapi',#67,'LJUSTERAPI',$);
#72=IFCCLASSIFICATIONREFERENCE($,'440','Intensivv\X2\00E5\X0\rdsrum',#67,'INTENSIVV\X2\00C5\X0\RD',$);
#73=IFCCLASSIFICATIONREFERENCE($,'444','Disponibelt utrymme',#67,'DISPONIBELT',$);
#74=IFCCLASSIFICATIONREFERENCE($,'451','Operationssal',#67,'OPERATION',$);
#75=IFCCLASSIFICATIONREFERENCE($,'452','F\X2\00F6\X0\rlossningsrum',#67,'F\X2\00D6\X0\RLOSSNING',$);
#76=IFCCLASSIFICATIONREFERENCE($,'453','F\X2\00F6\X0\rberedelserum',#67,'F\X2\00D6\X0\RBEREDELSE',$);
#77=IFCCLASSIFICATIONREFERENCE($,'454','Avvecklingsrum',#67,'AVVECKLING',$);
#78=IFCCLASSIFICATIONREFERENCE($,'455','Neonatalrum',#67,'NEONATAL',$);
#79=IFCCLASSIFICATIONREFERENCE($,'456','\X2\00D6\X0\vervakning',#67,'\X2\00D6\X0\VERVAKNING',$);
#80=IFCCLASSIFICATIONREFERENCE($,'459','Uppvakning',#67,'UPPVAKNING',$);
#81=IFCCLASSIFICATIONREFERENCE($,'461','R\X2\00F6\X0\ntgenrum',#67,'R\X2\00D6\X0\NTGEN',$);
#82=IFCCLASSIFICATIONREFERENCE($,'462','Man\X2\00F6\X0\verrum',#67,'MAN\X2\00D6\X0\VER',$);
#83=IFCCLASSIFICATIONREFERENCE($,'464','M\X2\00F6\X0\rkrum',#67,'M\X2\00D6\X0\RKRUM',$);
#84=IFCCLASSIFICATIONREFERENCE($,'466','Granskningsrum',#67,'GRANSKNING',$);
#85=IFCCLASSIFICATIONREFERENCE($,'470','Provrum',#67,'PROVRUM',$);
#86=IFCCLASSIFICATIONREFERENCE($,'471','Provtagning',#67,'PROVTAGNING',$);
#87=IFCCLASSIFICATIONREFERENCE($,'472','Laboratorie',#67,'LAB.',$);
#88=IFCCLASSIFICATIONREFERENCE($,'473','Djurrum',#67,'DJUR',$);
#89=IFCCLASSIFICATIONREFERENCE($,'474','Renrum',#67,'RENRUM',$);
#90=IFCCLASSIFICATIONREFERENCE($,'476','Fotoatelj\X2\00E9\X0\',#67,'FOTOATELJ\X2\00C9\X0\',$);
#91=IFCCLASSIFICATIONREFERENCE($,'480','Tandv\X2\00E5\X0\rd',#67,'TANDV\X2\00C5\X0\RD',$);
#92=IFCCLASSIFICATIONREFERENCE($,'500','Bostad och hotell',#2,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'510','Bostad',#92,'BOSTAD',$);
#94=IFCCLASSIFICATIONREFERENCE($,'511','Hotellrum',#92,'HOTELLRUM',$);
#95=IFCCLASSIFICATIONREFERENCE($,'512','Sovrum',#92,'SOVRUM',$);
#96=IFCCLASSIFICATIONREFERENCE($,'513','Hall',#92,'HALL',$);
#97=IFCCLASSIFICATIONREFERENCE($,'514','K\X2\00F6\X0\k',#92,'K\X2\00D6\X0\K',$);
#98=IFCCLASSIFICATIONREFERENCE($,'515','Vardagsrum',#92,'VARDAGSRUM',$);
#99=IFCCLASSIFICATIONREFERENCE($,'516','Tv\X2\00E4\X0\tt',#92,'TV\X2\00C4\X0\TT',$);
#100=IFCCLASSIFICATIONREFERENCE($,'517','Badrum',#92,'BADRUM',$);
#101=IFCCLASSIFICATIONREFERENCE($,'518','WC',#92,'WC',$);
#102=IFCCLASSIFICATIONREFERENCE($,'600','Fastighetstekniska utrymme',#2,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'601','Undercentral',#102,'UNDERCENTRAL',$);
#104=IFCCLASSIFICATIONREFERENCE($,'602','Fl\X2\00E4\X0\ktrum',#102,'FL\X2\00C4\X0\KRUM',$);
#105=IFCCLASSIFICATIONREFERENCE($,'603','Kompressorrum',#102,'KOMPRESSOR',$);
#106=IFCCLASSIFICATIONREFERENCE($,'604','Kylmaskinrum',#102,'KYLMASKIN',$);
#107=IFCCLASSIFICATIONREFERENCE($,'614','Kulvert (teknik-, r\X2\00F6\X0\r- mm)',#102,'KULVERT',$);
#108=IFCCLASSIFICATIONREFERENCE($,'615','Schakt',#102,'SCHAKT',$);
#109=IFCCLASSIFICATIONREFERENCE($,'630','Elcentral',#102,'ELC.',$);
#110=IFCCLASSIFICATIONREFERENCE($,'631','St\X2\00E4\X0\llverk',#102,'ST\X2\00C4\X0\LLVERK',$);
#111=IFCCLASSIFICATIONREFERENCE($,'640','Tele',#102,'TELE',$);
#112=IFCCLASSIFICATIONREFERENCE($,'641','El/Tele',#102,'EL/TELE',$);
#113=IFCCLASSIFICATIONREFERENCE($,'645','Data',#102,'DATA',$);
#114=IFCCLASSIFICATIONREFERENCE($,'646','Tele/Data',#102,'TELE/DATA',$);
#115=IFCCLASSIFICATIONREFERENCE($,'651','Brandutrustning',#102,'BRANDUTRUST.',$);
#116=IFCCLASSIFICATIONREFERENCE($,'657','Ventilation',#102,'VENTILATION',$);
#117=IFCCLASSIFICATIONREFERENCE($,'659','R\X2\00F6\X0\r',#102,'R\X2\00D6\X0\R',$);
#118=IFCCLASSIFICATIONREFERENCE($,'671','Hissmaskinrum',#102,'HISSMASKIN',$);
#119=IFCCLASSIFICATIONREFERENCE($,'691','Vind',#102,'VIND',$);
#120=IFCCLASSIFICATIONREFERENCE($,'700','St\X2\00F6\X0\dfunktioner',#2,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'710','K\X2\00F6\X0\ksutrymme',#120,'K\X2\00D6\X0\K',$);
#122=IFCCLASSIFICATIONREFERENCE($,'711','Kylrum/Frysrum',#120,'KYL/FRYS',$);
#123=IFCCLASSIFICATIONREFERENCE($,'712','Butikslokal',#120,'BUTIK',$);
#124=IFCCLASSIFICATIONREFERENCE($,'713','Diskrum',#120,'DISK',$);
#125=IFCCLASSIFICATIONREFERENCE($,'714','Autoklavrum',#120,'AUTOKLAV',$);
#126=IFCCLASSIFICATIONREFERENCE($,'715','Desinfektionsrum',#120,'DESINFEKTION',$);
#127=IFCCLASSIFICATIONREFERENCE($,'716','Reng\X2\00F6\X0\rningsrum',#120,'RENG\X2\00D6\X0\RNING',$);
#128=IFCCLASSIFICATIONREFERENCE($,'717','Kylrum',#120,'KYLRUM',$);
#129=IFCCLASSIFICATIONREFERENCE($,'718','Frysrum',#120,'FRYSRUM',$);
#130=IFCCLASSIFICATIONREFERENCE($,'720','Sterilrum',#120,'STERIL',$);
#131=IFCCLASSIFICATIONREFERENCE($,'722','Sterilf\X2\00F6\X0\rr\X2\00E5\X0\d',#120,'STERIL FRD',$);
#132=IFCCLASSIFICATIONREFERENCE($,'723','Utl\X2\00E4\X0\mning',#120,'UTL\X2\00C4\X0\MNING',$);
#133=IFCCLASSIFICATIONREFERENCE($,'724','Inl\X2\00E4\X0\mning',#120,'INL\X2\00C4\X0\MNING',$);
#134=IFCCLASSIFICATIONREFERENCE($,'725','B\X2\00E4\X0\ddrum',#120,'B\X2\00C4\X0\DDRUM',$);
#135=IFCCLASSIFICATIONREFERENCE($,'740','H\X2\00E5\X0\rv\X2\00E5\X0\rd',#120,'H\X2\00C5\X0\RV\X2\00C5\X0\RD',$);
#136=IFCCLASSIFICATIONREFERENCE($,'750','Verkstad',#120,'VERKSTAD',$);
#137=IFCCLASSIFICATIONREFERENCE($,'751','Tryckeri',#120,'TRYCKERI',$);
#138=IFCCLASSIFICATIONREFERENCE($,'752','Varumottagning',#120,'VARUMOTT.',$);
#139=IFCCLASSIFICATIONREFERENCE($,'753','Truckladdning',#120,'TRUCKLADDNING',$);
#140=IFCCLASSIFICATIONREFERENCE($,'754','\X2\00C5\X0\tervinning',#120,'\X2\00C5\X0\TERVINNING',$);
#141=IFCCLASSIFICATIONREFERENCE($,'760','Skyddsrum',#120,'SKYDDSRUM',$);
#142=IFCCLASSIFICATIONREFERENCE($,'761','Ambulanshall',#120,'AMBULANS',$);
#143=IFCCLASSIFICATIONREFERENCE($,'762','Apotek',#120,'APOTEK',$);
#144=IFCCLASSIFICATIONREFERENCE($,'763','Avfallsrum',#120,'AVFALL',$);
#145=IFCCLASSIFICATIONREFERENCE($,'764','Cafeteria',#120,'CAFETERIA',$);
#146=IFCCLASSIFICATIONREFERENCE($,'765','Kiosk',#120,'KIOSK',$);
#147=IFCCLASSIFICATIONREFERENCE($,'766','K\X2\00E4\X0\llsorteringsrum',#120,'K\X2\00C4\X0\LLSORTERING',$);
#148=IFCCLASSIFICATIONREFERENCE($,'767','Matsal',#120,'MATSAL',$);
#149=IFCCLASSIFICATIONREFERENCE($,'768','Saneringshall',#120,'SANERING',$);
#150=IFCCLASSIFICATIONREFERENCE($,'771','Kapell-/Andaktsrum',#120,'KAPELL alt. ANDAKT',$);
#151=IFCCLASSIFICATIONREFERENCE($,'772','Svepnings-/Visningsrum',#120,'SVEPNING alt. VISNING',$);
#152=IFCCLASSIFICATIONREFERENCE($,'773','Obduktionsrum',#120,'OBDUKTION',$);
#153=IFCCLASSIFICATIONREFERENCE($,'774','B\X2\00E5\X0\rhus',#120,'B\X2\00C5\X0\RHUS',$);
#154=IFCCLASSIFICATIONREFERENCE($,'775','Avlidna',#120,'AVLIDNA',$);
#155=IFCCLASSIFICATIONREFERENCE($,'780','St\X2\00E4\X0\dcentral',#120,'ST\X2\00C4\X0\DCENTRAL',$);
#156=IFCCLASSIFICATIONREFERENCE($,'781','Telefonv\X2\00E4\X0\xel (bemannad)',#120,'TELEFONV\X2\00C4\X0\XEL',$);
#157=IFCCLASSIFICATIONREFERENCE($,'782','Telefonhytt',#120,'TFN',$);
#158=IFCCLASSIFICATIONREFERENCE($,'790','Grovf\X2\00F6\X0\rr\X2\00E5\X0\d',#120,'GROV FRD',$);
#159=IFCCLASSIFICATIONREFERENCE($,'791','Tv\X2\00E4\X0\tthantering',#120,'TV\X2\00C4\X0\TT',$);
#160=IFCCLASSIFICATIONREFERENCE($,'792','Soprum',#120,'SOPRUM',$);
#161=IFCCLASSIFICATIONREFERENCE($,'793','F\X2\00F6\X0\rr\X2\00E5\X0\d',#120,'F\X2\00D6\X0\RR\X2\00C5\X0\D',$);
#162=IFCCLASSIFICATIONREFERENCE($,'794','Milj\X2\00F6\X0\station',#120,'MILJ\X2\00D6\X0\STATION',$);
#163=IFCCLASSIFICATIONREFERENCE($,'795','St\X2\00E4\X0\d',#120,'ST\X2\00C4\X0\D',$);
#164=IFCCLASSIFICATIONREFERENCE($,'796','Textilf\X2\00F6\X0\rr\X2\00E5\X0\d',#120,'TEXTIL',$);
#165=IFCCLASSIFICATIONREFERENCE($,'797','Rullande material',#120,'RULL. MATERIAL',$);
#166=IFCCLASSIFICATIONREFERENCE($,'799','Smutstv\X2\00E4\X0\tt',#120,'SMUTSTV\X2\00C4\X0\TT',$);
#167=IFCCLASSIFICATIONREFERENCE($,'800','Administration',#2,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'811','Kontor (administrativa lokaler)',#167,'KONTOR',$);
#169=IFCCLASSIFICATIONREFERENCE($,'812','Expedition (v\X2\00E5\X0\rdlokaler)',#167,'EXP.',$);
#170=IFCCLASSIFICATIONREFERENCE($,'813','Expedition med tv\X2\00E4\X0\ttst\X2\00E4\X0\ll (v\X2\00E5\X0\rdlokaler)',#167,'EXP.',$);
#171=IFCCLASSIFICATIONREFERENCE($,'816','Reception',#167,'RECEPTION',$);
#172=IFCCLASSIFICATIONREFERENCE($,'817','Samtalsrum',#167,'SAMTAL',$);
#173=IFCCLASSIFICATIONREFERENCE($,'820','Datasal',#167,'DATASAL',$);
#174=IFCCLASSIFICATIONREFERENCE($,'821','Arkiv',#167,'ARKIV',$);
#175=IFCCLASSIFICATIONREFERENCE($,'822','Kopieringsrum',#167,'KOPIERING',$);
#176=IFCCLASSIFICATIONREFERENCE($,'823','Kassa',#167,'KASSA',$);
#177=IFCCLASSIFICATIONREFERENCE($,'831','Konferensrum',#167,'KONFERENS',$);
#178=IFCCLASSIFICATIONREFERENCE($,'834','Utbildningssal',#167,'UTBILDNING',$);
#179=IFCCLASSIFICATIONREFERENCE($,'835','Grupprum',#167,'GRUPPRUM',$);
#180=IFCCLASSIFICATIONREFERENCE($,'837','Bibliotek',#167,'BIBLIOTEK',$);
#181=IFCCLASSIFICATIONREFERENCE($,'839','F\X2\00F6\X0\rel\X2\00E4\X0\sningssal',#167,'F\X2\00D6\X0\REL\X2\00C4\X0\SNING',$);
#182=IFCCLASSIFICATIONREFERENCE($,'840','Demonstrationsrum',#167,'DEMONSTRATION',$);
#183=IFCCLASSIFICATIONREFERENCE($,'900','Allm\X2\00E4\X0\nt kommunikationsutrymme',#2,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'921','Kulvert',#183,'KULVERT',$);
#185=IFCCLASSIFICATIONREFERENCE($,'922','Korridor',#183,'KORRIDOR',$);
#186=IFCCLASSIFICATIONREFERENCE($,'923','Passage',#183,'PASSAGE',$);
#187=IFCCLASSIFICATIONREFERENCE($,'924','Vindf\X2\00E5\X0\ng',#183,'VF',$);
#188=IFCCLASSIFICATIONREFERENCE($,'925','Sluss',#183,'SLUSS',$);
#189=IFCCLASSIFICATIONREFERENCE($,'930','Kapprum',#183,'KAPPRUM',$);
#190=IFCCLASSIFICATIONREFERENCE($,'932','Entr\X2\00E9\X0\',#183,'ENTR\X2\00C9\X0\',$);
#191=IFCCLASSIFICATIONREFERENCE($,'934','Trappa',#183,'TRAPPA',$);
#192=IFCCLASSIFICATIONREFERENCE($,'935','Hisshall',#183,'HISSHALL',$);
#193=IFCCLASSIFICATIONREFERENCE($,'936','Hiss',#183,'HISS',$);
#194=IFCCLASSIFICATIONREFERENCE($,'937','Uppst\X2\00E4\X0\llning/Vagnhall',#183,'UPPST\X2\00C4\X0\LL.',$);
#195=IFCCLASSIFICATIONREFERENCE($,'938','Garage/Tv\X2\00E4\X0\tthall',#183,'GARAGE',$);
#196=IFCCLASSIFICATIONREFERENCE($,'939','Parkering',#183,'PARKERING',$);
#197=IFCCLASSIFICATIONREFERENCE($,'952','Balkong',#183,'BALKONG',$);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,544 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:31',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'GuBIMclass CA',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('GuBIMClass','1.2','2017-07-21','GuBIMclass CA','Sistema de classificaci\X2\00F3\X0\ d''elements de construcci\X2\00F3\X0\ d''acord a la seva funci\X2\00F3\X0\ principal dins d''un entorn BIM.','http://www.gubimclass.org',('.'));
#3=IFCRELASSOCIATESCLASSIFICATION('1oIjeANsf58xp_tAmYhpX1',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'00','Treballs previs i replanteig general',#2,$,$);
#5=IFCCLASSIFICATIONREFERENCE($,'00.10','Elements auxiliars de replanteig del model',#4,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'00.10.10','Origen de coordenades',#5,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'00.10.20','Elements d''alineaci\X2\00F3\X0\ de model',#5,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'00.10.30','Eixos',#5,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'00.10.40','Nivells',#5,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'00.20','Preexist\X2\00E8\X0\ncies',#4,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'00.20.10','Edificacions colindants preexistents',#10,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'00.20.20','Elements d''entorn urb\X2\00E0\X0\ preexistent',#10,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'00.20.30','Serveis urbans preexistents',#10,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'00.30','Assaigs previs',#4,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'00.30.10','Assaig al terreny',#14,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'00.30.10.10','Sondeig',#15,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'00.30.10.20','Penetr\X2\00F2\X0\metre',#15,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'00.30.10.30','Piez\X2\00F2\X0\metre',#15,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'00.30.20','Assaig d''elements estructurals',#14,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'00.30.20.10','Assaig sobre element de formig\X2\00F3\X0\',#19,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'00.30.20.20','Assaig sobre estructura d''acer',#19,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'00.30.20.30','Assaig sobre estructura de f\X2\00E0\X0\brica',#19,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'10','Adequaci\X2\00F3\X0\ del terreny i sustentaci\X2\00F3\X0\ de l''edifici',#2,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'10.10','Actuacions per reduir i controlar les afectacions a edificis ve\X2\00EF\X0\ns, serveis i altres elements',#23,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'10.10.10','Apuntalaments i estrebades',#24,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'10.10.10.10','Puntals met\X2\00E0\X0\l\X2\00B7\X0\lics',#25,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'10.10.10.20','Ancoratges temporals',#25,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'10.10.20','Altres actuacions per a controlar afectacions',#24,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'10.20','Moviment de terres',#23,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'10.20.10','Topografia',#29,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'10.20.20','Excavacions',#29,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'10.20.20.10','Excavaci\X2\00F3\X0\ general',#31,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'10.20.20.20','Excavaci\X2\00F3\X0\ de fonamentaci\X2\00F3\X0\',#31,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'10.20.30','Reblerts',#29,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'10.20.30.10','Terraplenat',#34,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'10.20.30.20','Millora del terreny',#34,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'10.20.30.30','Reblert trasdos del mur',#34,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'10.30','Esgotament del nivell fre\X2\00E0\X0\tic',#23,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'10.30.10','Elements generals d''esgotament del nivell fre\X2\00E0\X0\tic',#38,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'10.30.10.10','Decantador',#39,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'10.30.10.20','Tuberia per a esgotaments',#39,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'10.30.10.30','Comptador per a esgotaments',#39,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'10.30.20','Esgotament amb sistema de bombeig',#38,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'10.30.20.10','Pou de bombeig',#43,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'10.30.30','Esgotament amb sistema Wellpoint',#38,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'10.30.30.10','Llan\X2\00E7\X0\a de succi\X2\00F3\X0\',#45,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'20','Sistema estructural',#2,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'20.10','Fonaments i contenci\X2\00F3\X0\ de terres',#47,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'20.10.10','Elements superficials',#48,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'20.10.10.10','Traves',#49,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'20.10.10.20','Sabates',#49,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'20.10.10.30','Enceps',#49,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'20.10.10.40','Lloses de fonamentaci\X2\00F3\X0\',#49,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'20.10.10.50','Formig\X2\00F3\X0\ de neteja',#49,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'20.10.10.60','Pous de fonamentacio',#49,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'20.10.20','Elements profunds',#48,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'20.10.20.20','Pantalles de fonamentaci\X2\00F3\X0\',#56,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'20.10.20.30','Pilons de fonamentaci\X2\00F3\X0\',#56,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'20.10.20.40','Micropilons',#56,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'20.10.20.50','Jet-grouting',#56,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'20.10.30','Elements de contenci\X2\00F3\X0\',#48,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'20.10.30.10','Murs de contenci\X2\00F3\X0\',#61,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'20.10.30.15','Mur gunitat',#61,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'20.10.30.20','Pantalles de contenci\X2\00F3\X0\',#61,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'20.10.30.30','Pilons de contenci\X2\00F3\X0\',#61,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'20.10.30.40','Murs de micropilons',#61,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'20.10.30.50','Murs de jet-grouting',#61,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'20.10.30.60','Murs de palplanxes',#61,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'20.10.30.70','Sistemes d''ancoratge i apuntalament d''elements de contenci\X2\00F3\X0\ definitius',#61,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'20.10.40','Bases',#48,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'20.10.40.10','Soleres',#70,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'20.10.40.20','Rampes',#70,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'20.10.40.30','Subbases',#70,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'20.20','Estructura',#47,$,$);
#75=IFCCLASSIFICATIONREFERENCE($,'20.20.10','Estructura vertical',#74,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'20.20.10.10','Pilars',#75,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'20.20.10.20','M\X2\00E8\X0\nsules',#75,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'20.20.10.30','Murs estructurals',#75,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'20.20.10.40','Escales d''estructura',#75,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'20.20.10.50','Rampes d''estructura',#75,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'20.20.10.60','Tensors verticals',#75,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'20.20.20','Estructura horitzontal',#74,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'20.20.20.10','Forjats',#82,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'20.20.20.20','J\X2\00E0\X0\sseres',#82,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'20.20.20.30','Encavallades',#82,$,$);
#86=IFCCLASSIFICATIONREFERENCE($,'20.20.20.40','Biguetes',#82,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'20.20.20.50','Tensors horitzontals',#82,$,$);
#88=IFCCLASSIFICATIONREFERENCE($,'20.20.30','Estructura tridimensional',#74,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'20.20.30.10','Volta',#88,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'20.20.30.20','Arc',#88,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'20.20.30.30','C\X2\00FA\X0\pula',#88,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'20.20.30.40','Malla espacial',#88,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'30','Sistemes d''envolvent i d''acabats exteriors',#2,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'30.10','Envolvent vertical',#93,$,$);
#95=IFCCLASSIFICATIONREFERENCE($,'30.10.10','Fa\X2\00E7\X0\anes',#94,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'30.10.10.10','Fa\X2\00E7\X0\anes in situ',#95,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'30.10.10.20','Fa\X2\00E7\X0\anes prefabricades',#95,$,$);
#98=IFCCLASSIFICATIONREFERENCE($,'30.10.10.30','Sistemes especials de fa\X2\00E7\X0\anes',#95,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'30.10.10.40','Acabats de fa\X2\00E7\X0\anes',#95,$,$);
#100=IFCCLASSIFICATIONREFERENCE($,'30.10.10.50','Remats de fa\X2\00E7\X0\anes',#95,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'30.10.20','Fuster\X2\00ED\X0\a de fa\X2\00E7\X0\ana',#94,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'30.10.20.10','Finestres de fa\X2\00E7\X0\anes',#101,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'30.10.20.20','Portes de fa\X2\00E7\X0\anes',#101,$,$);
#104=IFCCLASSIFICATIONREFERENCE($,'30.10.20.30','Proteccions solars de fa\X2\00E7\X0\anes',#101,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'30.10.20.40','Proteccions de seguretat de fa\X2\00E7\X0\anes',#101,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'30.20','Envolvent horizontal superior',#93,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'30.20.10','Cobertes',#106,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'30.20.10.10','Cobertes in-situ',#107,$,$);
#109=IFCCLASSIFICATIONREFERENCE($,'30.20.10.20','Cobertes Pre-fabricades',#107,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'30.20.10.30','Sistemes especials de cobertes',#107,$,$);
#111=IFCCLASSIFICATIONREFERENCE($,'30.20.10.40','Acabats de cobertes',#107,$,$);
#112=IFCCLASSIFICATIONREFERENCE($,'30.20.10.50','Remats de cobertes',#107,$,$);
#113=IFCCLASSIFICATIONREFERENCE($,'30.20.20','Fusteria de cobertes',#106,$,$);
#114=IFCCLASSIFICATIONREFERENCE($,'30.20.20.10','Finestres de cobertes',#113,$,$);
#115=IFCCLASSIFICATIONREFERENCE($,'30.20.20.20','Portes de cobertes',#113,$,$);
#116=IFCCLASSIFICATIONREFERENCE($,'30.20.20.30','Proteccions solars de cobertes',#113,$,$);
#117=IFCCLASSIFICATIONREFERENCE($,'30.20.20.40','Proteccions de seguretat de cobertes',#113,$,$);
#118=IFCCLASSIFICATIONREFERENCE($,'30.30','Envolvent horizontal inferior',#93,$,$);
#119=IFCCLASSIFICATIONREFERENCE($,'30.30.10','Compartimentaci\X2\00F3\X0\ exterior Horizontal',#118,$,$);
#120=IFCCLASSIFICATIONREFERENCE($,'30.30.10.10','Falsos sostres exteriors',#119,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'30.30.10.20','Remats compartimentaci\X2\00F3\X0\ exterior horizontal',#119,$,$);
#122=IFCCLASSIFICATIONREFERENCE($,'30.30.20','Acabats envolvent horizontal inferior',#118,$,$);
#123=IFCCLASSIFICATIONREFERENCE($,'30.30.20.10','Revestiments continus d''envolvent inferior',#122,$,$);
#124=IFCCLASSIFICATIONREFERENCE($,'30.30.20.20','Remats envolvent inferior',#122,$,$);
#125=IFCCLASSIFICATIONREFERENCE($,'30.40','Escales i rampes exteriors',#93,$,$);
#126=IFCCLASSIFICATIONREFERENCE($,'30.40.10','Esglaonament exterior',#125,$,$);
#127=IFCCLASSIFICATIONREFERENCE($,'30.40.10.10','Graons exteriors',#126,$,$);
#128=IFCCLASSIFICATIONREFERENCE($,'30.40.10.20','Recrescut de graons exteriors',#126,$,$);
#129=IFCCLASSIFICATIONREFERENCE($,'30.40.20','Acabats d''esglaonament i rampes exteriors',#125,$,$);
#130=IFCCLASSIFICATIONREFERENCE($,'30.40.20.10','Acabat de tram exterior',#129,$,$);
#131=IFCCLASSIFICATIONREFERENCE($,'30.40.20.20','Acabat de repl\X2\00E0\X0\ exterior',#129,$,$);
#132=IFCCLASSIFICATIONREFERENCE($,'40','Sistemes de compartimentaci\X2\00F3\X0\ i d''acabats interiors',#2,$,$);
#133=IFCCLASSIFICATIONREFERENCE($,'40.10','Compartimentaci\X2\00F3\X0\ i acabats interiors verticals ',#132,$,$);
#134=IFCCLASSIFICATIONREFERENCE($,'40.10.10','Compartimentaci\X2\00F3\X0\ interior vertical',#133,$,$);
#135=IFCCLASSIFICATIONREFERENCE($,'40.10.10.10','Envans',#134,$,$);
#136=IFCCLASSIFICATIONREFERENCE($,'40.10.10.20','Mampares',#134,$,$);
#137=IFCCLASSIFICATIONREFERENCE($,'40.10.10.30','Extradossats',#134,$,$);
#138=IFCCLASSIFICATIONREFERENCE($,'40.10.10.40','Fusteria interior',#134,$,$);
#139=IFCCLASSIFICATIONREFERENCE($,'40.10.10.50','Proteccions interiors',#134,$,$);
#140=IFCCLASSIFICATIONREFERENCE($,'40.10.20','Acabats interiors verticals',#133,$,$);
#141=IFCCLASSIFICATIONREFERENCE($,'40.10.20.10','Revestiments discontinus',#140,$,$);
#142=IFCCLASSIFICATIONREFERENCE($,'40.10.20.20','Revestiments continus',#140,$,$);
#143=IFCCLASSIFICATIONREFERENCE($,'40.10.20.30','Remats interiors',#140,$,$);
#144=IFCCLASSIFICATIONREFERENCE($,'40.10.20.40','Pintures i vinils',#140,$,$);
#145=IFCCLASSIFICATIONREFERENCE($,'40.20','Compartimentaci\X2\00F3\X0\ i acabats interiors horitzontals',#132,$,$);
#146=IFCCLASSIFICATIONREFERENCE($,'40.20.10','Compartimentaci\X2\00F3\X0\ interior horitzontal',#145,$,$);
#147=IFCCLASSIFICATIONREFERENCE($,'40.20.10.10','Falsos sostres interiors',#146,$,$);
#148=IFCCLASSIFICATIONREFERENCE($,'40.20.10.20','Terres t\X2\00E8\X0\cnics',#146,$,$);
#149=IFCCLASSIFICATIONREFERENCE($,'40.20.10.30','Recrescuts',#146,$,$);
#150=IFCCLASSIFICATIONREFERENCE($,'40.20.20','Acabats interiors horitzontals',#145,$,$);
#151=IFCCLASSIFICATIONREFERENCE($,'40.20.20.10','Revestiments sostres',#150,$,$);
#152=IFCCLASSIFICATIONREFERENCE($,'40.20.20.20','Paviments',#150,$,$);
#153=IFCCLASSIFICATIONREFERENCE($,'40.30','Escales i rampes interiors',#132,$,$);
#154=IFCCLASSIFICATIONREFERENCE($,'40.30.10','Esglaonament interior',#153,$,$);
#155=IFCCLASSIFICATIONREFERENCE($,'40.30.10.10','Graons interiors',#154,$,$);
#156=IFCCLASSIFICATIONREFERENCE($,'40.30.10.20','Recrescut de graons interiors',#154,$,$);
#157=IFCCLASSIFICATIONREFERENCE($,'40.30.20','Acabats d''esglaonament i rampes interiors',#153,$,$);
#158=IFCCLASSIFICATIONREFERENCE($,'40.30.20.10','Acabat de tram interior',#157,$,$);
#159=IFCCLASSIFICATIONREFERENCE($,'40.30.20.20','Acabat de repl\X2\00E0\X0\ interior',#157,$,$);
#160=IFCCLASSIFICATIONREFERENCE($,'40.40','Elements especials d''acabats interiors',#132,$,$);
#161=IFCCLASSIFICATIONREFERENCE($,'40.40.10','Elements de senyalitzaci\X2\00F3\X0\',#160,$,$);
#162=IFCCLASSIFICATIONREFERENCE($,'40.40.10.10','Senyalitzaci\X2\00F3\X0\ de sostre',#161,$,$);
#163=IFCCLASSIFICATIONREFERENCE($,'40.40.10.20','Senyalitzaci\X2\00F3\X0\ mural',#161,$,$);
#164=IFCCLASSIFICATIONREFERENCE($,'40.40.10.30','Senyalitzaci\X2\00F3\X0\ de terres',#161,$,$);
#165=IFCCLASSIFICATIONREFERENCE($,'40.40.20','Altres elements especials d''acabats interiors',#160,$,$);
#166=IFCCLASSIFICATIONREFERENCE($,'50','Sistemes de condicionaments, instal\X2\00B7\X0\lacions i serveis',#2,$,$);
#167=IFCCLASSIFICATIONREFERENCE($,'50.10','Fontaneria',#166,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'50.10.10','Equips principals de fontaneria',#167,$,$);
#169=IFCCLASSIFICATIONREFERENCE($,'50.10.10.10','Equips de mesura i control de fontaneria',#168,$,$);
#170=IFCCLASSIFICATIONREFERENCE($,'50.10.10.20','Grups de pressi\X2\00F3\X0\ de fontaneria',#168,$,$);
#171=IFCCLASSIFICATIONREFERENCE($,'50.10.10.30','Dip\X2\00F2\X0\sits, acumuladors i escalfadors',#168,$,$);
#172=IFCCLASSIFICATIONREFERENCE($,'50.10.20','Xarxa de distribuci\X2\00F3\X0\ de fontaneria',#167,$,$);
#173=IFCCLASSIFICATIONREFERENCE($,'50.10.20.10','V\X2\00E0\X0\lvules i instruments de mesura i control de fluxe de fontaneria',#172,$,$);
#174=IFCCLASSIFICATIONREFERENCE($,'50.10.20.20','Dispositius de fontaneria',#172,$,$);
#175=IFCCLASSIFICATIONREFERENCE($,'50.10.20.30','Canalitzacions d''aigua sanit\X2\00E0\X0\ria',#172,$,$);
#176=IFCCLASSIFICATIONREFERENCE($,'50.10.20.40','Canalitzacions d''aigua tractada',#172,$,$);
#177=IFCCLASSIFICATIONREFERENCE($,'50.10.20.50','Arquetes i pous de fontaneria',#172,$,$);
#178=IFCCLASSIFICATIONREFERENCE($,'50.10.20.60','Terminals de fontaneria',#172,$,$);
#179=IFCCLASSIFICATIONREFERENCE($,'50.20','Evacuaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#166,$,$);
#180=IFCCLASSIFICATIONREFERENCE($,'50.20.10','Equips principals d''evacuaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#179,$,$);
#181=IFCCLASSIFICATIONREFERENCE($,'50.20.10.10','Equips de mesura i control d''evacuaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#180,$,$);
#182=IFCCLASSIFICATIONREFERENCE($,'50.20.10.20','Grups de pressi\X2\00F3\X0\ d''evacuaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#180,$,$);
#183=IFCCLASSIFICATIONREFERENCE($,'50.20.10.30','Dip\X2\00F2\X0\sits d''evacuaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#180,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'50.20.10.40','Dispositius d''evacuaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#180,$,$);
#185=IFCCLASSIFICATIONREFERENCE($,'50.20.20','Xarxa de recollida',#179,$,$);
#186=IFCCLASSIFICATIONREFERENCE($,'50.20.20.10','Canalitzacions d''aig\X2\00FC\X0\es pluvials',#185,$,$);
#187=IFCCLASSIFICATIONREFERENCE($,'50.20.20.20','Canalitzacions d''aig\X2\00FC\X0\es residuals',#185,$,$);
#188=IFCCLASSIFICATIONREFERENCE($,'50.20.20.30','Canalitzacions d''aig\X2\00FC\X0\es grises',#185,$,$);
#189=IFCCLASSIFICATIONREFERENCE($,'50.20.20.40','Canalitzacions per a ventilaci\X2\00F3\X0\ sanejament',#185,$,$);
#190=IFCCLASSIFICATIONREFERENCE($,'50.20.20.50','Arquetes i pous d''evaquaci\X2\00F3\X0\ d''aig\X2\00FC\X0\es',#185,$,$);
#191=IFCCLASSIFICATIONREFERENCE($,'50.20.20.60','Terminals de drenatge',#185,$,$);
#192=IFCCLASSIFICATIONREFERENCE($,'50.30','Instal\X2\00B7\X0\lacions t\X2\00E9\X0\rmiques i de ventilaci\X2\00F3\X0\',#166,$,$);
#193=IFCCLASSIFICATIONREFERENCE($,'50.30.10','Equips de producci\X2\00F3\X0\ d''instal\X2\00B7\X0\lacions t\X2\00E8\X0\rmiques',#192,$,$);
#194=IFCCLASSIFICATIONREFERENCE($,'50.30.10.10','Torres de refrigeraci\X2\00F3\X0\',#193,$,$);
#195=IFCCLASSIFICATIONREFERENCE($,'50.30.10.20','Unitats exteriors d''instal\X2\00B7\X0\lacions t\X2\00E8\X0\rmiques',#193,$,$);
#196=IFCCLASSIFICATIONREFERENCE($,'50.30.10.30','Unitats interiors d''instal\X2\00B7\X0\lacions t\X2\00E8\X0\rmiques',#193,$,$);
#197=IFCCLASSIFICATIONREFERENCE($,'50.30.10.40','Calderes',#193,$,$);
#198=IFCCLASSIFICATIONREFERENCE($,'50.30.10.50','Termoacumuladors',#193,$,$);
#199=IFCCLASSIFICATIONREFERENCE($,'50.30.10.60','Geot\X2\00E8\X0\rmia',#193,$,$);
#200=IFCCLASSIFICATIONREFERENCE($,'50.30.10.70','Captadors solars t\X2\00E8\X0\rmics',#193,$,$);
#201=IFCCLASSIFICATIONREFERENCE($,'50.30.10.80','Ventiladors',#193,$,$);
#202=IFCCLASSIFICATIONREFERENCE($,'50.30.10.90','Recuperadors',#193,$,$);
#203=IFCCLASSIFICATIONREFERENCE($,'50.30.20','Equips secundaris d''instal\X2\00B7\X0\lacions t\X2\00E8\X0\rmiques',#192,$,$);
#204=IFCCLASSIFICATIONREFERENCE($,'50.30.20.10','Equips de bombeig d''instal\X2\00B7\X0\lacions t\X2\00E8\X0\rmiques',#203,$,$);
#205=IFCCLASSIFICATIONREFERENCE($,'50.30.20.20','Silenciadors',#203,$,$);
#206=IFCCLASSIFICATIONREFERENCE($,'50.30.20.30','Comportes',#203,$,$);
#207=IFCCLASSIFICATIONREFERENCE($,'50.30.20.40','Reguladors',#203,$,$);
#208=IFCCLASSIFICATIONREFERENCE($,'50.30.20.50','Condensadors',#203,$,$);
#209=IFCCLASSIFICATIONREFERENCE($,'50.30.20.60','V\X2\00E0\X0\lvules i instruments de mesura i control de fluxe de climatitzaci\X2\00F3\X0\',#203,$,$);
#210=IFCCLASSIFICATIONREFERENCE($,'50.30.30','Circuits de distribuci\X2\00F3\X0\ de fluids fred/calor',#192,$,$);
#211=IFCCLASSIFICATIONREFERENCE($,'50.30.30.10','L\X2\00ED\X0\nies frigor\X2\00ED\X0\fiques',#210,$,$);
#212=IFCCLASSIFICATIONREFERENCE($,'50.30.30.20','L\X2\00ED\X0\nies hidr\X2\00E0\X0\uliques',#210,$,$);
#213=IFCCLASSIFICATIONREFERENCE($,'50.30.40','Conductes de distribuci\X2\00F3\X0\ d''aire',#192,$,$);
#214=IFCCLASSIFICATIONREFERENCE($,'50.30.40.10','Aportaci\X2\00F3\X0\ de aire primari',#213,$,$);
#215=IFCCLASSIFICATIONREFERENCE($,'50.30.40.20','Extracci\X2\00F3\X0\ de aire primari',#213,$,$);
#216=IFCCLASSIFICATIONREFERENCE($,'50.30.40.30','Impulsi\X2\00F3\X0\ de aire tractat',#213,$,$);
#217=IFCCLASSIFICATIONREFERENCE($,'50.30.40.40','Retorn de aire tractat',#213,$,$);
#218=IFCCLASSIFICATIONREFERENCE($,'50.30.40.50','Extracci\X2\00F3\X0\ de fums',#213,$,$);
#219=IFCCLASSIFICATIONREFERENCE($,'50.30.50','Terminals i difusors',#192,$,$);
#220=IFCCLASSIFICATIONREFERENCE($,'50.30.50.10','Radiadors',#219,$,$);
#221=IFCCLASSIFICATIONREFERENCE($,'50.30.50.20','Difusors',#219,$,$);
#222=IFCCLASSIFICATIONREFERENCE($,'50.30.50.30','Terra radiant',#219,$,$);
#223=IFCCLASSIFICATIONREFERENCE($,'50.30.50.40','Forjats radiants',#219,$,$);
#224=IFCCLASSIFICATIONREFERENCE($,'50.30.50.50','Reixetes',#219,$,$);
#225=IFCCLASSIFICATIONREFERENCE($,'50.30.60','Dispositius de maniobra i control',#192,$,$);
#226=IFCCLASSIFICATIONREFERENCE($,'50.30.60.10','Cablejat / BUS de climatitzaci\X2\00F3\X0\',#225,$,$);
#227=IFCCLASSIFICATIONREFERENCE($,'50.30.60.20','Detectors de CO2',#225,$,$);
#228=IFCCLASSIFICATIONREFERENCE($,'50.40','Subministrament de combustibles',#166,$,$);
#229=IFCCLASSIFICATIONREFERENCE($,'50.40.10','Equips principals de subministrament de combustibles',#228,$,$);
#230=IFCCLASSIFICATIONREFERENCE($,'50.40.10.10','Equips de mesura, regulaci\X2\00F3\X0\ i control de combustibles',#229,$,$);
#231=IFCCLASSIFICATIONREFERENCE($,'50.40.10.20','Dip\X2\00F2\X0\sits de combustible',#229,$,$);
#232=IFCCLASSIFICATIONREFERENCE($,'50.40.10.30','Grups de pressi\X2\00F3\X0\ de combustible',#229,$,$);
#233=IFCCLASSIFICATIONREFERENCE($,'50.40.20','Equips secundaris de subministrament de combustibles',#228,$,$);
#234=IFCCLASSIFICATIONREFERENCE($,'50.40.20.10','V\X2\00E0\X0\lvules i instruments de mesura i control de fluxe de combustibles',#233,$,$);
#235=IFCCLASSIFICATIONREFERENCE($,'50.40.20.20','Dispositius de subministrament de combustibles',#233,$,$);
#236=IFCCLASSIFICATIONREFERENCE($,'50.40.30','Xarxa de distribuci\X2\00F3\X0\ de subministrament de combustibles',#228,$,$);
#237=IFCCLASSIFICATIONREFERENCE($,'50.40.30.10','Canalitzacions de subministrament de combustibles',#236,$,$);
#238=IFCCLASSIFICATIONREFERENCE($,'50.40.30.20','Arquetes i pous de subministrament de combustibles',#236,$,$);
#239=IFCCLASSIFICATIONREFERENCE($,'50.40.40','Terminals de subministrament de combustibles',#228,$,$);
#240=IFCCLASSIFICATIONREFERENCE($,'50.40.40.10','Aixetes de subministrament de combustibles',#239,$,$);
#241=IFCCLASSIFICATIONREFERENCE($,'50.40.40.20','Cremadors',#239,$,$);
#242=IFCCLASSIFICATIONREFERENCE($,'50.40.50','Dispositius de maniobra i control',#228,$,$);
#243=IFCCLASSIFICATIONREFERENCE($,'50.40.50.10','Cablejat / BUS per a subministrament de combustibles',#242,$,$);
#244=IFCCLASSIFICATIONREFERENCE($,'50.40.50.20','Detector de gasos ',#242,$,$);
#245=IFCCLASSIFICATIONREFERENCE($,'50.50','Protecci\X2\00F3\X0\ contra incendis',#166,$,$);
#246=IFCCLASSIFICATIONREFERENCE($,'50.50.10','Extinci\X2\00F3\X0\ d''incendis',#245,$,$);
#247=IFCCLASSIFICATIONREFERENCE($,'50.50.10.10','Dip\X2\00F2\X0\sits d''extinci\X2\00F3\X0\ d''incendis',#246,$,$);
#248=IFCCLASSIFICATIONREFERENCE($,'50.50.10.20','Grups de pressi\X2\00F3\X0\ d''extinci\X2\00F3\X0\ d''incendis',#246,$,$);
#249=IFCCLASSIFICATIONREFERENCE($,'50.50.10.30','V\X2\00E0\X0\lvules i instruments de mesura i control de fluxe d''extinci\X2\00F3\X0\ d''incendis',#246,$,$);
#250=IFCCLASSIFICATIONREFERENCE($,'50.50.10.40','Dispositius d''extinci\X2\00F3\X0\ d''incendis',#246,$,$);
#251=IFCCLASSIFICATIONREFERENCE($,'50.50.10.50','Canalitzacions d''extinci\X2\00F3\X0\ d''incendis',#246,$,$);
#252=IFCCLASSIFICATIONREFERENCE($,'50.50.10.60','Ruixadors',#246,$,$);
#253=IFCCLASSIFICATIONREFERENCE($,'50.50.10.70','BIES',#246,$,$);
#254=IFCCLASSIFICATIONREFERENCE($,'50.50.10.80','Extintors',#246,$,$);
#255=IFCCLASSIFICATIONREFERENCE($,'50.50.20','Detecci\X2\00F3\X0\ d''incendis',#245,$,$);
#256=IFCCLASSIFICATIONREFERENCE($,'50.50.20.10','Centraletes i racks de detecci\X2\00F3\X0\ d''incendis',#255,$,$);
#257=IFCCLASSIFICATIONREFERENCE($,'50.50.20.20','Equips especials de detecci\X2\00F3\X0\ d''incendis',#255,$,$);
#258=IFCCLASSIFICATIONREFERENCE($,'50.50.20.30','Canalitzacions de detecci\X2\00F3\X0\ d''incendis',#255,$,$);
#259=IFCCLASSIFICATIONREFERENCE($,'50.50.20.40','Caixes de distribuci\X2\00F3\X0\ de detecci\X2\00F3\X0\ d''incendis',#255,$,$);
#260=IFCCLASSIFICATIONREFERENCE($,'50.50.30','Dispositius de maniobra i control',#245,$,$);
#261=IFCCLASSIFICATIONREFERENCE($,'50.50.30.10','Polsadors',#260,$,$);
#262=IFCCLASSIFICATIONREFERENCE($,'50.50.30.20','Quadres de comandament per contra incendis',#260,$,$);
#263=IFCCLASSIFICATIONREFERENCE($,'50.50.30.30','Detectors d''incendis',#260,$,$);
#264=IFCCLASSIFICATIONREFERENCE($,'50.50.30.40','Mecanismes d''extinci\X2\00F3\X0\ i detecci\X2\00F3\X0\ d''incendis',#260,$,$);
#265=IFCCLASSIFICATIONREFERENCE($,'50.50.30.50','Cablejat / BUS de contra incendis',#260,$,$);
#266=IFCCLASSIFICATIONREFERENCE($,'50.60','Instal\X2\00B7\X0\lacions el\X2\00E8\X0\ctriques',#166,$,$);
#267=IFCCLASSIFICATIONREFERENCE($,'50.60.10','Equips el\X2\00E8\X0\ctrics principals',#266,$,$);
#268=IFCCLASSIFICATIONREFERENCE($,'50.60.10.10','Quadres el\X2\00E8\X0\ctrics',#267,$,$);
#269=IFCCLASSIFICATIONREFERENCE($,'50.60.10.20','Grups electr\X2\00F2\X0\gens',#267,$,$);
#270=IFCCLASSIFICATIONREFERENCE($,'50.60.10.30','Escomeses el\X2\00E8\X0\ctriques',#267,$,$);
#271=IFCCLASSIFICATIONREFERENCE($,'50.60.10.40','Transformadors',#267,$,$);
#272=IFCCLASSIFICATIONREFERENCE($,'50.60.20','Equips el\X2\00E8\X0\ctrics secundaris',#266,$,$);
#273=IFCCLASSIFICATIONREFERENCE($,'50.60.20.10','Bateries i SAI',#272,$,$);
#274=IFCCLASSIFICATIONREFERENCE($,'50.60.20.20','Quadres de comandament el\X2\00E8\X0\ctric',#272,$,$);
#275=IFCCLASSIFICATIONREFERENCE($,'50.60.20.30','Bateries de condensadors',#272,$,$);
#276=IFCCLASSIFICATIONREFERENCE($,'50.60.20.40','Embarrats i transformadors',#272,$,$);
#277=IFCCLASSIFICATIONREFERENCE($,'50.60.30','Canalitzacions de distribuci\X2\00F3\X0\ el\X2\00E8\X0\ctriques',#266,$,$);
#278=IFCCLASSIFICATIONREFERENCE($,'50.60.30.10','Safates de distribuci\X2\00F3\X0\ el\X2\00E8\X0\ctrica',#277,$,$);
#279=IFCCLASSIFICATIONREFERENCE($,'50.60.30.20','Canals de superf\X2\00ED\X0\cie de distribuci\X2\00F3\X0\ el\X2\00E9\X0\ctrica',#277,$,$);
#280=IFCCLASSIFICATIONREFERENCE($,'50.60.30.30','Caixes de distribuci\X2\00F3\X0\ el\X2\00E8\X0\ctrica',#277,$,$);
#281=IFCCLASSIFICATIONREFERENCE($,'50.60.30.40','M\X2\00E0\X0\negues i tubs de distribuci\X2\00F3\X0\ el\X2\00E8\X0\ctrica',#277,$,$);
#282=IFCCLASSIFICATIONREFERENCE($,'50.60.30.50','Arquetes i pous de distribuci\X2\00F3\X0\ el\X2\00E8\X0\ctrica',#277,$,$);
#283=IFCCLASSIFICATIONREFERENCE($,'50.60.30.60','Cablejat el\X2\00E8\X0\ctric',#277,$,$);
#284=IFCCLASSIFICATIONREFERENCE($,'50.60.40','Dispositius de maniobra i control',#266,$,$);
#285=IFCCLASSIFICATIONREFERENCE($,'50.60.40.10','Mecanismes',#284,$,$);
#286=IFCCLASSIFICATIONREFERENCE($,'50.60.40.20','Preses',#284,$,$);
#287=IFCCLASSIFICATIONREFERENCE($,'50.60.50','Il\X2\00B7\X0\luminaci\X2\00F3\X0\',#266,$,$);
#288=IFCCLASSIFICATIONREFERENCE($,'50.60.50.10','Il\X2\00B7\X0\luminaci\X2\00F3\X0\ exterior',#287,$,$);
#289=IFCCLASSIFICATIONREFERENCE($,'50.60.50.20','Il\X2\00B7\X0\luminaci\X2\00F3\X0\ interior',#287,$,$);
#290=IFCCLASSIFICATIONREFERENCE($,'50.60.50.30','Il\X2\00B7\X0\luminaci\X2\00F3\X0\ d''emerg\X2\00E8\X0\ncia',#287,$,$);
#291=IFCCLASSIFICATIONREFERENCE($,'50.60.60','Xarxa de terres',#266,$,$);
#292=IFCCLASSIFICATIONREFERENCE($,'50.60.60.10','Parallamps',#291,$,$);
#293=IFCCLASSIFICATIONREFERENCE($,'50.60.60.20','Piquetes i arquetes',#291,$,$);
#294=IFCCLASSIFICATIONREFERENCE($,'50.60.60.30','Mecanismes de la xarxa de terres',#291,$,$);
#295=IFCCLASSIFICATIONREFERENCE($,'50.70','Telecomunicacions i audiovisuals',#166,$,$);
#296=IFCCLASSIFICATIONREFERENCE($,'50.70.10','Equips principals de telecomunicacions',#295,$,$);
#297=IFCCLASSIFICATIONREFERENCE($,'50.70.10.10','Antenes',#296,$,$);
#298=IFCCLASSIFICATIONREFERENCE($,'50.70.10.20','Escomeses de telecomunicacions',#296,$,$);
#299=IFCCLASSIFICATIONREFERENCE($,'50.70.10.30','Armaris RACK',#296,$,$);
#300=IFCCLASSIFICATIONREFERENCE($,'50.70.10.40','Servidors',#296,$,$);
#301=IFCCLASSIFICATIONREFERENCE($,'50.70.20','Equips secundaris de telecomunicacions',#295,$,$);
#302=IFCCLASSIFICATIONREFERENCE($,'50.70.20.10','Conversors',#301,$,$);
#303=IFCCLASSIFICATIONREFERENCE($,'50.70.20.20','Amplificadors',#301,$,$);
#304=IFCCLASSIFICATIONREFERENCE($,'50.70.20.30','Altaveus',#301,$,$);
#305=IFCCLASSIFICATIONREFERENCE($,'50.70.20.40','Centraletes',#301,$,$);
#306=IFCCLASSIFICATIONREFERENCE($,'50.70.20.50','Routers',#301,$,$);
#307=IFCCLASSIFICATIONREFERENCE($,'50.70.20.60','Monitors',#301,$,$);
#308=IFCCLASSIFICATIONREFERENCE($,'50.70.30','Canalitzacions de distribuci\X2\00F3\X0\ per a senyals d\X2\00E8\X0\bils',#295,$,$);
#309=IFCCLASSIFICATIONREFERENCE($,'50.70.30.10','Safates de distribuci\X2\00F3\X0\ per a senyals d\X2\00E8\X0\bils',#308,$,$);
#310=IFCCLASSIFICATIONREFERENCE($,'50.70.30.20','Canals de superficie per a senyals d\X2\00E8\X0\bils',#308,$,$);
#311=IFCCLASSIFICATIONREFERENCE($,'50.70.30.30','Caixes de distribuci\X2\00F3\X0\ per a senyals d\X2\00E8\X0\bils',#308,$,$);
#312=IFCCLASSIFICATIONREFERENCE($,'50.70.30.40','Cablejat de senyals d\X2\00E8\X0\bils',#308,$,$);
#313=IFCCLASSIFICATIONREFERENCE($,'50.70.30.50','M\X2\00E0\X0\negues i tubs de distribuci\X2\00F3\X0\ per a senyals d\X2\00E8\X0\bils',#308,$,$);
#314=IFCCLASSIFICATIONREFERENCE($,'50.70.30.60','Arquetes i pous per a senyals d\X2\00E8\X0\bils',#308,$,$);
#315=IFCCLASSIFICATIONREFERENCE($,'50.70.40','Dispositius de maniobra i control de telecomunicacions',#295,$,$);
#316=IFCCLASSIFICATIONREFERENCE($,'50.70.40.10','Preses de telecomunicacions ',#315,$,$);
#317=IFCCLASSIFICATIONREFERENCE($,'50.70.40.20','Quadres de comandament de telecomunicacions',#315,$,$);
#318=IFCCLASSIFICATIONREFERENCE($,'50.70.50','Terminals de telecomunicacions',#295,$,$);
#319=IFCCLASSIFICATIONREFERENCE($,'50.70.50.10','Equips de telecomunicacions',#318,$,$);
#320=IFCCLASSIFICATIONREFERENCE($,'50.70.50.20','Emissors de telecomunicacions',#318,$,$);
#321=IFCCLASSIFICATIONREFERENCE($,'50.80','Seguretat i antiintrusi\X2\00F3\X0\',#166,$,$);
#322=IFCCLASSIFICATIONREFERENCE($,'50.80.10','Equips de seguretat i antiintrusi\X2\00F3\X0\',#321,$,$);
#323=IFCCLASSIFICATIONREFERENCE($,'50.80.10.10','Racks per seguretat i antiintrusi\X2\00F3\X0\',#322,$,$);
#324=IFCCLASSIFICATIONREFERENCE($,'50.80.10.20','Centraletes de seguretat',#322,$,$);
#325=IFCCLASSIFICATIONREFERENCE($,'50.80.10.30','Telefonia',#322,$,$);
#326=IFCCLASSIFICATIONREFERENCE($,'50.80.20','Sistemes anti-intrusi\X2\00F3\X0\',#321,$,$);
#327=IFCCLASSIFICATIONREFERENCE($,'50.80.20.10','Detectors anti-intrusi\X2\00F3\X0\',#326,$,$);
#328=IFCCLASSIFICATIONREFERENCE($,'50.80.20.20','Circuits de TV',#326,$,$);
#329=IFCCLASSIFICATIONREFERENCE($,'50.80.20.30','Sensors anti-intrusi\X2\00F3\X0\',#326,$,$);
#330=IFCCLASSIFICATIONREFERENCE($,'50.80.30','Elements de control de persones',#321,$,$);
#331=IFCCLASSIFICATIONREFERENCE($,'50.80.30.10','Control de accessos',#330,$,$);
#332=IFCCLASSIFICATIONREFERENCE($,'50.80.40','Elements de control de vehicles',#321,$,$);
#333=IFCCLASSIFICATIONREFERENCE($,'50.80.40.10','Gesti\X2\00F3\X0\ de tr\X2\00E0\X0\nsit',#332,$,$);
#334=IFCCLASSIFICATIONREFERENCE($,'50.80.50','Elements d''av\X2\00ED\X0\s i alarma',#321,$,$);
#335=IFCCLASSIFICATIONREFERENCE($,'50.80.50.10','Sirenes',#334,$,$);
#336=IFCCLASSIFICATIONREFERENCE($,'50.90','Instal\X2\00B7\X0\lacions especials',#166,$,$);
#337=IFCCLASSIFICATIONREFERENCE($,'50.90.10','Equips principals d''instal\X2\00B7\X0\lacions especials',#336,$,$);
#338=IFCCLASSIFICATIONREFERENCE($,'50.90.10.10','Equips de mesura, regulaci\X2\00F3\X0\ i control especials',#337,$,$);
#339=IFCCLASSIFICATIONREFERENCE($,'50.90.10.20','Dip\X2\00F2\X0\sits d''instal\X2\00B7\X0\lacions especials',#337,$,$);
#340=IFCCLASSIFICATIONREFERENCE($,'50.90.10.30','Grups de pressi\X2\00F3\X0\ d''instal\X2\00B7\X0\lacions especials',#337,$,$);
#341=IFCCLASSIFICATIONREFERENCE($,'50.90.20','Equips secundaris d''instal\X2\00B7\X0\lacions especials',#336,$,$);
#342=IFCCLASSIFICATIONREFERENCE($,'50.90.20.10','V\X2\00E0\X0\lvules i instruments de mesura i control de fluxe especials',#341,$,$);
#343=IFCCLASSIFICATIONREFERENCE($,'50.90.20.20','Dispositius especials',#341,$,$);
#344=IFCCLASSIFICATIONREFERENCE($,'50.90.30','Xarxa de distribuci\X2\00F3\X0\ d''instal\X2\00B7\X0\lacions especials',#336,$,$);
#345=IFCCLASSIFICATIONREFERENCE($,'50.90.30.10','Canalitzacions especials',#344,$,$);
#346=IFCCLASSIFICATIONREFERENCE($,'50.90.30.20','Arquetes i pous d''instal\X2\00B7\X0\lacions especials',#344,$,$);
#347=IFCCLASSIFICATIONREFERENCE($,'50.90.40','Terminals d''instal\X2\00B7\X0\lacions especials',#336,$,$);
#348=IFCCLASSIFICATIONREFERENCE($,'50.90.40.10','Aixetes per a instal\X2\00B7\X0\lacions especials',#347,$,$);
#349=IFCCLASSIFICATIONREFERENCE($,'50.90.40.20','Altres terminals especials',#347,$,$);
#350=IFCCLASSIFICATIONREFERENCE($,'50.90.50','Dispositius de maniobra i control',#336,$,$);
#351=IFCCLASSIFICATIONREFERENCE($,'50.90.50.10','Comandaments',#350,$,$);
#352=IFCCLASSIFICATIONREFERENCE($,'50.90.50.20','Detectors especials',#350,$,$);
#353=IFCCLASSIFICATIONREFERENCE($,'50.90.50.30','Sensors especials',#350,$,$);
#354=IFCCLASSIFICATIONREFERENCE($,'50.90.50.40','Altres dispositius de maniobra i control especials',#350,$,$);
#355=IFCCLASSIFICATIONREFERENCE($,'50.100','Altres elements d''instal\X2\00B7\X0\lacions',#166,$,$);
#356=IFCCLASSIFICATIONREFERENCE($,'50.100.10','Elements comuns d''instal\X2\00B7\X0\lacions',#355,$,$);
#357=IFCCLASSIFICATIONREFERENCE($,'50.100.10.10','Elements de suport',#356,$,$);
#358=IFCCLASSIFICATIONREFERENCE($,'50.100.10.20','Passareles i escales d''acces per a manteniment',#356,$,$);
#359=IFCCLASSIFICATIONREFERENCE($,'50.100.10.30','Canalitzacions i arquetes comuns d''instal\X2\00B7\X0\lacions',#356,$,$);
#360=IFCCLASSIFICATIONREFERENCE($,'60','Equipaments i mobiliari',#2,$,$);
#361=IFCCLASSIFICATIONREFERENCE($,'60.10','Equipaments',#360,$,$);
#362=IFCCLASSIFICATIONREFERENCE($,'60.10.10','Cambres humides / sanitaris',#361,$,$);
#363=IFCCLASSIFICATIONREFERENCE($,'60.10.10.10','Inodors',#362,$,$);
#364=IFCCLASSIFICATIONREFERENCE($,'60.10.10.20','Urinaris',#362,$,$);
#365=IFCCLASSIFICATIONREFERENCE($,'60.10.10.30','Bidets',#362,$,$);
#366=IFCCLASSIFICATIONREFERENCE($,'60.10.10.40','Plats de dutxa',#362,$,$);
#367=IFCCLASSIFICATIONREFERENCE($,'60.10.10.50','Banyeres',#362,$,$);
#368=IFCCLASSIFICATIONREFERENCE($,'60.10.10.60','Rentamans',#362,$,$);
#369=IFCCLASSIFICATIONREFERENCE($,'60.10.10.70','Piques',#362,$,$);
#370=IFCCLASSIFICATIONREFERENCE($,'60.10.10.80','Accessoris per a cambres humides',#362,$,$);
#371=IFCCLASSIFICATIONREFERENCE($,'60.10.10.90','Safareigs',#362,$,$);
#372=IFCCLASSIFICATIONREFERENCE($,'60.10.10.100','Abocador',#362,$,$);
#373=IFCCLASSIFICATIONREFERENCE($,'60.10.20','Altres equipaments',#361,$,$);
#374=IFCCLASSIFICATIONREFERENCE($,'60.10.20.10','Equipaments per a circulaci\X2\00F3\X0\ de vehicles',#373,$,$);
#375=IFCCLASSIFICATIONREFERENCE($,'60.10.20.20','Equipaments comercials',#373,$,$);
#376=IFCCLASSIFICATIONREFERENCE($,'60.10.20.30','Equipaments institucionals',#373,$,$);
#377=IFCCLASSIFICATIONREFERENCE($,'60.10.20.40','Equipaments recreatius',#373,$,$);
#378=IFCCLASSIFICATIONREFERENCE($,'60.10.20.50','Equipaments assistencials',#373,$,$);
#379=IFCCLASSIFICATIONREFERENCE($,'60.10.20.60','Electrodom\X2\00E8\X0\stics',#373,$,$);
#380=IFCCLASSIFICATIONREFERENCE($,'60.10.20.70','Aparells inform\X2\00E0\X0\tics',#373,$,$);
#381=IFCCLASSIFICATIONREFERENCE($,'60.20','Mobiliari',#360,$,$);
#382=IFCCLASSIFICATIONREFERENCE($,'60.20.10','Mobiliari fixe',#381,$,$);
#383=IFCCLASSIFICATIONREFERENCE($,'60.20.10.10','Taulells',#382,$,$);
#384=IFCCLASSIFICATIONREFERENCE($,'60.20.10.20','Estants',#382,$,$);
#385=IFCCLASSIFICATIONREFERENCE($,'60.20.10.30','Miralls',#382,$,$);
#386=IFCCLASSIFICATIONREFERENCE($,'60.20.10.40','Mostradors',#382,$,$);
#387=IFCCLASSIFICATIONREFERENCE($,'60.20.10.50','Mobles d''obra',#382,$,$);
#388=IFCCLASSIFICATIONREFERENCE($,'60.20.10.60','Armaris encastats',#382,$,$);
#389=IFCCLASSIFICATIONREFERENCE($,'60.20.10.70','Bancades',#382,$,$);
#390=IFCCLASSIFICATIONREFERENCE($,'60.20.10.80','Altres mobiliaris fixes',#382,$,$);
#391=IFCCLASSIFICATIONREFERENCE($,'60.20.30','Mobiliari m\X2\00F2\X0\bil',#381,$,$);
#392=IFCCLASSIFICATIONREFERENCE($,'60.20.30.10','Taules',#391,$,$);
#393=IFCCLASSIFICATIONREFERENCE($,'60.20.30.20','Cadires i sof\X2\00E0\X0\s',#391,$,$);
#394=IFCCLASSIFICATIONREFERENCE($,'60.20.30.30','Taburets',#391,$,$);
#395=IFCCLASSIFICATIONREFERENCE($,'60.20.30.40','Bancs',#391,$,$);
#396=IFCCLASSIFICATIONREFERENCE($,'60.20.30.50','Llits',#391,$,$);
#397=IFCCLASSIFICATIONREFERENCE($,'60.20.30.60','Armaris, calaixeres i arxivadors',#391,$,$);
#398=IFCCLASSIFICATIONREFERENCE($,'60.20.30.70','Altres mobiliaris m\X2\00F2\X0\bils',#391,$,$);
#399=IFCCLASSIFICATIONREFERENCE($,'60.30','Sistemes de transport',#360,$,$);
#400=IFCCLASSIFICATIONREFERENCE($,'60.30.10','Transport vertical',#399,$,$);
#401=IFCCLASSIFICATIONREFERENCE($,'60.30.10.10','Ascensors',#400,$,$);
#402=IFCCLASSIFICATIONREFERENCE($,'60.30.10.20','Muntarc\X2\00E0\X0\rregues',#400,$,$);
#403=IFCCLASSIFICATIONREFERENCE($,'60.30.10.30','Escales mec\X2\00E0\X0\niques',#400,$,$);
#404=IFCCLASSIFICATIONREFERENCE($,'60.30.20','Transport horitzontal',#399,$,$);
#405=IFCCLASSIFICATIONREFERENCE($,'60.30.20.10','Passarel\X2\00B7\X0\les transportadores',#404,$,$);
#406=IFCCLASSIFICATIONREFERENCE($,'60.30.20.20','Altres sistemes de transport',#404,$,$);
#407=IFCCLASSIFICATIONREFERENCE($,'60.30.30','Manipulaci\X2\00F3\X0\ d''elements',#399,$,$);
#408=IFCCLASSIFICATIONREFERENCE($,'60.30.30.10','Grues',#407,$,$);
#409=IFCCLASSIFICATIONREFERENCE($,'60.30.30.20','Polipast',#407,$,$);
#410=IFCCLASSIFICATIONREFERENCE($,'60.30.30.30','Cintes transportadores',#407,$,$);
#411=IFCCLASSIFICATIONREFERENCE($,'60.30.30.40','Sistemes pneum\X2\00E0\X0\tics',#407,$,$);
#412=IFCCLASSIFICATIONREFERENCE($,'60.30.30.50','Altres sistemes de manipulaci\X2\00F3\X0\',#407,$,$);
#413=IFCCLASSIFICATIONREFERENCE($,'70','Urbanitzaci\X2\00F3\X0\ dels espais exteriors',#2,$,$);
#414=IFCCLASSIFICATIONREFERENCE($,'70.10','Elements de fonamentaci\X2\00F3\X0\, contenci\X2\00F3\X0\ de terres i elements estructurals',#413,$,$);
#415=IFCCLASSIFICATIONREFERENCE($,'70.10.10','Fonaments per a elements d''urbanitzaci\X2\00F3\X0\',#414,$,$);
#416=IFCCLASSIFICATIONREFERENCE($,'70.10.10.10','Sabates per a elements d''urbanitzaci\X2\00F3\X0\',#415,$,$);
#417=IFCCLASSIFICATIONREFERENCE($,'70.10.10.20','Fonamentaci\X2\00F3\X0\ especial per a elements d''urbanitzaci\X2\00F3\X0\',#415,$,$);
#418=IFCCLASSIFICATIONREFERENCE($,'70.10.20','Murs d''urbanitzaci\X2\00F3\X0\',#414,$,$);
#419=IFCCLASSIFICATIONREFERENCE($,'70.10.20.10','Murs in-situ d''urbanitzaci\X2\00F3\X0\',#418,$,$);
#420=IFCCLASSIFICATIONREFERENCE($,'70.10.20.20','Murs prefabricats d''urbanitzaci\X2\00F3\X0\',#418,$,$);
#421=IFCCLASSIFICATIONREFERENCE($,'70.10.20.30','Murs de gravetat',#418,$,$);
#422=IFCCLASSIFICATIONREFERENCE($,'70.10.20.40','Mur terra armada',#418,$,$);
#423=IFCCLASSIFICATIONREFERENCE($,'70.10.20.50','Mur de gabions',#418,$,$);
#424=IFCCLASSIFICATIONREFERENCE($,'70.10.30','Altres elements estructurals d''urbanitzaci\X2\00F3\X0\',#414,$,$);
#425=IFCCLASSIFICATIONREFERENCE($,'70.20','Elements de tancaments i protecci\X2\00F3\X0\ d''urbanitzaci\X2\00F3\X0\',#413,$,$);
#426=IFCCLASSIFICATIONREFERENCE($,'70.20.10','Tancaments de parcel\X2\00B7\X0\la',#425,$,$);
#427=IFCCLASSIFICATIONREFERENCE($,'70.20.20','Barreres m\X2\00F2\X0\bils',#425,$,$);
#428=IFCCLASSIFICATIONREFERENCE($,'70.20.30','Pilones',#425,$,$);
#429=IFCCLASSIFICATIONREFERENCE($,'70.30','Ferms i paviments',#413,$,$);
#430=IFCCLASSIFICATIONREFERENCE($,'70.30.10','Bases i subbases',#429,$,$);
#431=IFCCLASSIFICATIONREFERENCE($,'70.30.20','Paviments peatonals',#429,$,$);
#432=IFCCLASSIFICATIONREFERENCE($,'70.30.30','Paviments per a tr\X2\00E0\X0\nsit rodat',#429,$,$);
#433=IFCCLASSIFICATIONREFERENCE($,'70.30.40','Esglaonaments d''urbanitzaci\X2\00F3\X0\',#429,$,$);
#434=IFCCLASSIFICATIONREFERENCE($,'70.30.50','Rampes d''urbanitzaci\X2\00F3\X0\',#429,$,$);
#435=IFCCLASSIFICATIONREFERENCE($,'70.40','Instal\X2\00B7\X0\lacions i serveis',#413,$,$);
#436=IFCCLASSIFICATIONREFERENCE($,'70.40.10','Enllumenat',#435,$,$);
#437=IFCCLASSIFICATIONREFERENCE($,'70.40.10.10','Llumin\X2\00E0\X0\ries i b\X2\00E0\X0\culs',#436,$,$);
#438=IFCCLASSIFICATIONREFERENCE($,'70.40.10.20','Elements d''abalisament',#436,$,$);
#439=IFCCLASSIFICATIONREFERENCE($,'70.40.10.30','Elements de la xarxa i control',#436,$,$);
#440=IFCCLASSIFICATIONREFERENCE($,'70.40.20','Reg i abastament de font',#435,$,$);
#441=IFCCLASSIFICATIONREFERENCE($,'70.40.20.10','Canalitzacions de reg',#440,$,$);
#442=IFCCLASSIFICATIONREFERENCE($,'70.40.20.20','Accesoris de reg',#440,$,$);
#443=IFCCLASSIFICATIONREFERENCE($,'70.40.20.30','Arquetes de reg',#440,$,$);
#444=IFCCLASSIFICATIONREFERENCE($,'70.40.30','Drenatge',#435,$,$);
#445=IFCCLASSIFICATIONREFERENCE($,'70.40.30.10','Canalitzacions de drenatge',#444,$,$);
#446=IFCCLASSIFICATIONREFERENCE($,'70.40.30.20','Reixes i buneras',#444,$,$);
#447=IFCCLASSIFICATIONREFERENCE($,'70.40.30.30','Arquetes i pous de drenatge',#444,$,$);
#448=IFCCLASSIFICATIONREFERENCE($,'70.50','Jardineria',#413,$,$);
#449=IFCCLASSIFICATIONREFERENCE($,'70.50.10','Plantacions',#448,$,$);
#450=IFCCLASSIFICATIONREFERENCE($,'70.50.10.10','Arbrats',#449,$,$);
#451=IFCCLASSIFICATIONREFERENCE($,'70.50.10.20','Gespa',#449,$,$);
#452=IFCCLASSIFICATIONREFERENCE($,'70.50.10.30','Arbustives',#449,$,$);
#453=IFCCLASSIFICATIONREFERENCE($,'70.50.20','Parterres',#448,$,$);
#454=IFCCLASSIFICATIONREFERENCE($,'70.50.20.10','Parterres fixos',#453,$,$);
#455=IFCCLASSIFICATIONREFERENCE($,'70.50.20.20','Parterres m\X2\00F2\X0\bils',#453,$,$);
#456=IFCCLASSIFICATIONREFERENCE($,'70.60','Mobiliari urb\X2\00E0\X0\ i elements de senyalitzaci\X2\00F3\X0\',#413,$,$);
#457=IFCCLASSIFICATIONREFERENCE($,'70.60.10','Mobiliari exterior',#456,$,$);
#458=IFCCLASSIFICATIONREFERENCE($,'70.60.20','Jocs infantils',#456,$,$);
#459=IFCCLASSIFICATIONREFERENCE($,'70.60.30','Mobiliari exterior especial',#456,$,$);
#460=IFCCLASSIFICATIONREFERENCE($,'70.60.40','Senyalitzaci\X2\00F3\X0\ horitzontal',#456,$,$);
#461=IFCCLASSIFICATIONREFERENCE($,'70.60.50','Senyalitzaci\X2\00F3\X0\ vertical',#456,$,$);
#462=IFCCLASSIFICATIONREFERENCE($,'80','Construccions i instal\X2\00B7\X0\lacions temporals',#2,$,$);
#463=IFCCLASSIFICATIONREFERENCE($,'80.10','Implantacions d''obra',#462,$,$);
#464=IFCCLASSIFICATIONREFERENCE($,'80.10.10','Bastides',#463,$,$);
#465=IFCCLASSIFICATIONREFERENCE($,'80.10.10.10','Pont volant',#464,$,$);
#466=IFCCLASSIFICATIONREFERENCE($,'80.10.10.20','Bastida fixa',#464,$,$);
#467=IFCCLASSIFICATIONREFERENCE($,'80.10.10.30','Cavallet',#464,$,$);
#468=IFCCLASSIFICATIONREFERENCE($,'80.10.10.40','Bastida movil',#464,$,$);
#469=IFCCLASSIFICATIONREFERENCE($,'80.10.10.50','Marquesines',#464,$,$);
#470=IFCCLASSIFICATIONREFERENCE($,'80.10.10.60','Lones',#464,$,$);
#471=IFCCLASSIFICATIONREFERENCE($,'80.10.20','Grues',#463,$,$);
#472=IFCCLASSIFICATIONREFERENCE($,'80.10.20.10','Grua torre',#471,$,$);
#473=IFCCLASSIFICATIONREFERENCE($,'80.10.20.20','Grueta',#471,$,$);
#474=IFCCLASSIFICATIONREFERENCE($,'80.10.20.30','Muntac\X2\00E0\X0\rregues d''obra',#471,$,$);
#475=IFCCLASSIFICATIONREFERENCE($,'80.10.20.40','Corrioles i polipasts',#471,$,$);
#476=IFCCLASSIFICATIONREFERENCE($,'80.10.30','Casetes',#463,$,$);
#477=IFCCLASSIFICATIONREFERENCE($,'80.10.30.10','Casetes d''obra',#476,$,$);
#478=IFCCLASSIFICATIONREFERENCE($,'80.10.30.20','Lavabos port\X2\00E0\X0\tils',#476,$,$);
#479=IFCCLASSIFICATIONREFERENCE($,'80.10.30.30','Casetes d''enmagatzematge',#476,$,$);
#480=IFCCLASSIFICATIONREFERENCE($,'80.10.30.40','Altres m\X2\00F2\X0\duls',#476,$,$);
#481=IFCCLASSIFICATIONREFERENCE($,'80.10.40','Tancaments i senyalitzaci\X2\00F3\X0\',#463,$,$);
#482=IFCCLASSIFICATIONREFERENCE($,'80.10.40.10','Tancaments perimetrals',#481,$,$);
#483=IFCCLASSIFICATIONREFERENCE($,'80.10.40.20','Portes d''acc\X2\00E9\X0\s',#481,$,$);
#484=IFCCLASSIFICATIONREFERENCE($,'80.10.40.30','R\X2\00E8\X0\tols',#481,$,$);
#485=IFCCLASSIFICATIONREFERENCE($,'80.10.40.40','Balises de senyalitzaci\X2\00F3\X0\',#481,$,$);
#486=IFCCLASSIFICATIONREFERENCE($,'80.10.50','Aplecs',#463,$,$);
#487=IFCCLASSIFICATIONREFERENCE($,'80.10.50.10','Aplec de terres i \X2\00E0\X0\rids',#486,$,$);
#488=IFCCLASSIFICATIONREFERENCE($,'80.10.50.20','Aplec de productes',#486,$,$);
#489=IFCCLASSIFICATIONREFERENCE($,'80.10.50.30','Palets',#486,$,$);
#490=IFCCLASSIFICATIONREFERENCE($,'80.10.60','Altres elements d''implantaci\X2\00F3\X0\ d''obra',#463,$,$);
#491=IFCCLASSIFICATIONREFERENCE($,'80.10.60.10','Sitja',#490,$,$);
#492=IFCCLASSIFICATIONREFERENCE($,'80.10.60.20','Dip\X2\00F2\X0\sits d''obra',#490,$,$);
#493=IFCCLASSIFICATIONREFERENCE($,'80.10.70','Gesti\X2\00F3\X0\ de residus',#463,$,$);
#494=IFCCLASSIFICATIONREFERENCE($,'80.10.70.10','Saca de runa',#493,$,$);
#495=IFCCLASSIFICATIONREFERENCE($,'80.10.70.20','Contenidor de runa',#493,$,$);
#496=IFCCLASSIFICATIONREFERENCE($,'80.10.70.30','Runa',#493,$,$);
#497=IFCCLASSIFICATIONREFERENCE($,'80.10.70.40','Residus especials',#493,$,$);
#498=IFCCLASSIFICATIONREFERENCE($,'80.10.70.50','Ferralla',#493,$,$);
#499=IFCCLASSIFICATIONREFERENCE($,'80.10.70.60','Tub de desc\X2\00E0\X0\rrega de runa',#493,$,$);
#500=IFCCLASSIFICATIONREFERENCE($,'80.10.70.70','Tremuja',#493,$,$);
#501=IFCCLASSIFICATIONREFERENCE($,'80.20','Construccions temporals',#462,$,$);
#502=IFCCLASSIFICATIONREFERENCE($,'80.20.10','Estructures auxiliars i estintolaments',#501,$,$);
#503=IFCCLASSIFICATIONREFERENCE($,'80.20.10.10','Fonamentacions auxiliars',#502,$,$);
#504=IFCCLASSIFICATIONREFERENCE($,'80.20.10.20','Estintolament de fa\X2\00E7\X0\anes',#502,$,$);
#505=IFCCLASSIFICATIONREFERENCE($,'80.20.10.30','Estintolament de serveis',#502,$,$);
#506=IFCCLASSIFICATIONREFERENCE($,'80.20.10.40','Encofrats auxiliars',#502,$,$);
#507=IFCCLASSIFICATIONREFERENCE($,'80.20.20','Instal\X2\00B7\X0\lacions provisionals',#501,$,$);
#508=IFCCLASSIFICATIONREFERENCE($,'80.20.20.10','Instal\X2\00B7\X0\laci\X2\00F3\X0\ provisional el\X2\00E8\X0\ctrica',#507,$,$);
#509=IFCCLASSIFICATIONREFERENCE($,'80.20.20.20','Instal\X2\00B7\X0\laci\X2\00F3\X0\ provisional d''aigua',#507,$,$);
#510=IFCCLASSIFICATIONREFERENCE($,'80.20.20.30','Instal\X2\00B7\X0\laci\X2\00F3\X0\ provisional de sanejament',#507,$,$);
#511=IFCCLASSIFICATIONREFERENCE($,'80.20.20.40','Altres instal\X2\00B7\X0\lacions provisionals',#507,$,$);
#512=IFCCLASSIFICATIONREFERENCE($,'80.20.30','Altres construccions temporals',#501,$,$);
#513=IFCCLASSIFICATIONREFERENCE($,'80.20.30.10','Altres construccions temporals',#512,$,$);
#514=IFCCLASSIFICATIONREFERENCE($,'80.30','Equips i eines',#462,$,$);
#515=IFCCLASSIFICATIONREFERENCE($,'80.30.10','Maquin\X2\00E0\X0\ria',#514,$,$);
#516=IFCCLASSIFICATIONREFERENCE($,'80.30.10.10','Maquin\X2\00E0\X0\ria d''excavaci\X2\00F3\X0\ i fonamentaci\X2\00F3\X0\',#515,$,$);
#517=IFCCLASSIFICATIONREFERENCE($,'80.30.10.20','Maquin\X2\00E0\X0\ria per a enderrocs',#515,$,$);
#518=IFCCLASSIFICATIONREFERENCE($,'80.30.10.30','Maquin\X2\00E0\X0\ria d''elevaci\X2\00F3\X0\',#515,$,$);
#519=IFCCLASSIFICATIONREFERENCE($,'80.30.10.40','Maquin\X2\00E0\X0\ria d''transport',#515,$,$);
#520=IFCCLASSIFICATIONREFERENCE($,'80.30.10.50','Maquin\X2\00E0\X0\r\X2\00EC\X0\a de tractament de materials',#515,$,$);
#521=IFCCLASSIFICATIONREFERENCE($,'80.30.10.60','Altres tipus de maquin\X2\00E0\X0\ria',#515,$,$);
#522=IFCCLASSIFICATIONREFERENCE($,'80.30.20','Eines',#514,$,$);
#523=IFCCLASSIFICATIONREFERENCE($,'80.30.20.10','Eines manuals',#522,$,$);
#524=IFCCLASSIFICATIONREFERENCE($,'80.30.20.20','Eines no manuals',#522,$,$);
#525=IFCCLASSIFICATIONREFERENCE($,'80.40','Seguretat i salut',#462,$,$);
#526=IFCCLASSIFICATIONREFERENCE($,'80.40.10','Proteccions individuals i colectives',#525,$,$);
#527=IFCCLASSIFICATIONREFERENCE($,'80.40.10.10','Equips de protecci\X2\00F3\X0\ individual',#526,$,$);
#528=IFCCLASSIFICATIONREFERENCE($,'80.40.10.20','Tanques de protecci\X2\00F3\X0\ caigudes',#526,$,$);
#529=IFCCLASSIFICATIONREFERENCE($,'80.40.10.30','Xarxes de protecci\X2\00F3\X0\ ',#526,$,$);
#530=IFCCLASSIFICATIONREFERENCE($,'80.40.10.40','L\X2\00ED\X0\nies de vida',#526,$,$);
#531=IFCCLASSIFICATIONREFERENCE($,'80.40.10.50','Altres mitjans de protecci\X2\00F3\X0\ col\X2\00B7\X0\lectiva',#526,$,$);
#532=IFCCLASSIFICATIONREFERENCE($,'80.40.20','Equips de mesura preventiva',#525,$,$);
#533=IFCCLASSIFICATIONREFERENCE($,'80.40.20.10','Equips de mesura i detecci\X2\00F3\X0\ de seguretat i salut',#532,$,$);
#534=IFCCLASSIFICATIONREFERENCE($,'80.40.30','Delimitacions de zones de seguretat',#525,$,$);
#535=IFCCLASSIFICATIONREFERENCE($,'80.40.30.10','Zones de tr\X2\00E0\X0\nsit rodat i maquin\X2\00E0\X0\ria',#534,$,$);
ENDSEC;
END-ISO-10303-21;
@@ -0,0 +1,544 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
FILE_NAME('','2020-04-23T18:09:31',(),(),'IfcOpenShell 0.6.0b0','IfcOpenShell 0.6.0b0','');
FILE_SCHEMA(('IFC4'));
ENDSEC;
DATA;
#1=IFCPROJECTLIBRARY($,$,'GuBIMclass ES',$,$,$,$,$,$);
#2=IFCCLASSIFICATION('GuBIMClass','1.2','2017-07-21','GuBIMclass ES','Sistema de clasificaci\X2\00F3\X0\n de elementos de construcci\X2\00F3\X0\n de acuerdo a su funci\X2\00F3\X0\n principal dentro de un entorno BIM.','http://www.gubimclass.org',('.'));
#3=IFCRELASSOCIATESCLASSIFICATION('3qr_UkXnz58grz5A2yaRzR',$,$,$,(#1),#2);
#4=IFCCLASSIFICATIONREFERENCE($,'00','Trabajos previos y replanteo general',#2,$,$);
#5=IFCCLASSIFICATIONREFERENCE($,'00.10','Elementos auxiliares de replanteo del modelo',#4,$,$);
#6=IFCCLASSIFICATIONREFERENCE($,'00.10.10','Origen de coordenadas',#5,$,$);
#7=IFCCLASSIFICATIONREFERENCE($,'00.10.20','Elementos de alineaci\X2\00F3\X0\n de modelo',#5,$,$);
#8=IFCCLASSIFICATIONREFERENCE($,'00.10.30','Ejes',#5,$,$);
#9=IFCCLASSIFICATIONREFERENCE($,'00.10.40','Niveles',#5,$,$);
#10=IFCCLASSIFICATIONREFERENCE($,'00.20','Preexistencias',#4,$,$);
#11=IFCCLASSIFICATIONREFERENCE($,'00.20.10','Edificaciones colindantes preexistentes',#10,$,$);
#12=IFCCLASSIFICATIONREFERENCE($,'00.20.20','Elementos de entorno urbano preexistente',#10,$,$);
#13=IFCCLASSIFICATIONREFERENCE($,'00.20.30','Servicios urbanos preexistentes',#10,$,$);
#14=IFCCLASSIFICATIONREFERENCE($,'00.30','Ensayos previos',#4,$,$);
#15=IFCCLASSIFICATIONREFERENCE($,'00.30.10','Ensayo en el terreno',#14,$,$);
#16=IFCCLASSIFICATIONREFERENCE($,'00.30.10.10','Sondeo',#15,$,$);
#17=IFCCLASSIFICATIONREFERENCE($,'00.30.10.20','Penetr\X2\00F3\X0\metro',#15,$,$);
#18=IFCCLASSIFICATIONREFERENCE($,'00.30.10.30','Piez\X2\00F3\X0\metro',#15,$,$);
#19=IFCCLASSIFICATIONREFERENCE($,'00.30.20','Ensayo en elementos estructurales',#14,$,$);
#20=IFCCLASSIFICATIONREFERENCE($,'00.30.20.10','Ensayo sobre elemento de hormig\X2\00F3\X0\n',#19,$,$);
#21=IFCCLASSIFICATIONREFERENCE($,'00.30.20.20','Ensayo sobre estructura acero',#19,$,$);
#22=IFCCLASSIFICATIONREFERENCE($,'00.30.20.30','Ensayo sobre estructura f\X2\00E1\X0\brica',#19,$,$);
#23=IFCCLASSIFICATIONREFERENCE($,'10','Adecuaci\X2\00F3\X0\n del terreno y sustentaci\X2\00F3\X0\n del edificio',#2,$,$);
#24=IFCCLASSIFICATIONREFERENCE($,'10.10','Actuaciones para reducir y controlar las afectaciones a edificios vecinos, servicios y otros elementos',#23,$,$);
#25=IFCCLASSIFICATIONREFERENCE($,'10.10.10','Apuntalamientos y arriostramientos',#24,$,$);
#26=IFCCLASSIFICATIONREFERENCE($,'10.10.10.10','Puntales met\X2\00E1\X0\licos',#25,$,$);
#27=IFCCLASSIFICATIONREFERENCE($,'10.10.10.20','Anclajes temporales',#25,$,$);
#28=IFCCLASSIFICATIONREFERENCE($,'10.10.20','Otras actuaciones para controlar afectaciones',#24,$,$);
#29=IFCCLASSIFICATIONREFERENCE($,'10.20','Movimiento de tierras',#23,$,$);
#30=IFCCLASSIFICATIONREFERENCE($,'10.20.10','Topograf\X2\00ED\X0\a',#29,$,$);
#31=IFCCLASSIFICATIONREFERENCE($,'10.20.20','Excavaciones',#29,$,$);
#32=IFCCLASSIFICATIONREFERENCE($,'10.20.20.10','Excavaci\X2\00F3\X0\n general',#31,$,$);
#33=IFCCLASSIFICATIONREFERENCE($,'10.20.20.20','Excavaci\X2\00F3\X0\n de cimentaci\X2\00F3\X0\n',#31,$,$);
#34=IFCCLASSIFICATIONREFERENCE($,'10.20.30','Rellenos',#29,$,$);
#35=IFCCLASSIFICATIONREFERENCE($,'10.20.30.10','Terraplenado',#34,$,$);
#36=IFCCLASSIFICATIONREFERENCE($,'10.20.30.20','Mejora del terreno',#34,$,$);
#37=IFCCLASSIFICATIONREFERENCE($,'10.20.30.30','Relleno trasd\X2\00F3\X0\s del muro',#34,$,$);
#38=IFCCLASSIFICATIONREFERENCE($,'10.30','Rebaje del nivel fre\X2\00E1\X0\tico',#23,$,$);
#39=IFCCLASSIFICATIONREFERENCE($,'10.30.10','Elementos generales de agotamiento del nivel fre\X2\00E1\X0\tico',#38,$,$);
#40=IFCCLASSIFICATIONREFERENCE($,'10.30.10.10','Decantador',#39,$,$);
#41=IFCCLASSIFICATIONREFERENCE($,'10.30.10.20','Tuber\X2\00ED\X0\a para agotamientos',#39,$,$);
#42=IFCCLASSIFICATIONREFERENCE($,'10.30.10.30','Contador para agotamientos',#39,$,$);
#43=IFCCLASSIFICATIONREFERENCE($,'10.30.20','Agotamiento con sistema de bombeo',#38,$,$);
#44=IFCCLASSIFICATIONREFERENCE($,'10.30.20.10','Pozo de bombeo',#43,$,$);
#45=IFCCLASSIFICATIONREFERENCE($,'10.30.30','Agotamiento con sistema Wellpoint',#38,$,$);
#46=IFCCLASSIFICATIONREFERENCE($,'10.30.30.10','Lanza de succi\X2\00F3\X0\n',#45,$,$);
#47=IFCCLASSIFICATIONREFERENCE($,'20','Sistema estructural',#2,$,$);
#48=IFCCLASSIFICATIONREFERENCE($,'20.10','Cimientos y contenci\X2\00F3\X0\n de tierras',#47,$,$);
#49=IFCCLASSIFICATIONREFERENCE($,'20.10.10','Elementos superficiales',#48,$,$);
#50=IFCCLASSIFICATIONREFERENCE($,'20.10.10.10','Vigas riostra',#49,$,$);
#51=IFCCLASSIFICATIONREFERENCE($,'20.10.10.20','Zapatas',#49,$,$);
#52=IFCCLASSIFICATIONREFERENCE($,'20.10.10.30','Encepados',#49,$,$);
#53=IFCCLASSIFICATIONREFERENCE($,'20.10.10.40','Losas de cimentaci\X2\00F3\X0\n',#49,$,$);
#54=IFCCLASSIFICATIONREFERENCE($,'20.10.10.50','Hormig\X2\00F3\X0\n de limpieza',#49,$,$);
#55=IFCCLASSIFICATIONREFERENCE($,'20.10.10.60','Pozos de cimentaci\X2\00F3\X0\n',#49,$,$);
#56=IFCCLASSIFICATIONREFERENCE($,'20.10.20','Elementos profundos',#48,$,$);
#57=IFCCLASSIFICATIONREFERENCE($,'20.10.20.20','Pantallas de cimentaci\X2\00F3\X0\n',#56,$,$);
#58=IFCCLASSIFICATIONREFERENCE($,'20.10.20.30','Pilotes de cimentaci\X2\00F3\X0\n',#56,$,$);
#59=IFCCLASSIFICATIONREFERENCE($,'20.10.20.40','Micropilotes',#56,$,$);
#60=IFCCLASSIFICATIONREFERENCE($,'20.10.20.50','Jet-grouting',#56,$,$);
#61=IFCCLASSIFICATIONREFERENCE($,'20.10.30','Elementos de contenci\X2\00F3\X0\n',#48,$,$);
#62=IFCCLASSIFICATIONREFERENCE($,'20.10.30.10','Muros de contenci\X2\00F3\X0\n',#61,$,$);
#63=IFCCLASSIFICATIONREFERENCE($,'20.10.30.15','Muro gunitado',#61,$,$);
#64=IFCCLASSIFICATIONREFERENCE($,'20.10.30.20','Pantallas de contenci\X2\00F3\X0\n',#61,$,$);
#65=IFCCLASSIFICATIONREFERENCE($,'20.10.30.30','Pilones de contenci\X2\00F3\X0\n',#61,$,$);
#66=IFCCLASSIFICATIONREFERENCE($,'20.10.30.40','Muros de micropilotes',#61,$,$);
#67=IFCCLASSIFICATIONREFERENCE($,'20.10.30.50','Muros de jet-grouting',#61,$,$);
#68=IFCCLASSIFICATIONREFERENCE($,'20.10.30.60','Muros de tablestacas',#61,$,$);
#69=IFCCLASSIFICATIONREFERENCE($,'20.10.30.70','Sistemas de anclaje y apuntalamiento de elementos de contenci\X2\00F3\X0\n definitivos',#61,$,$);
#70=IFCCLASSIFICATIONREFERENCE($,'20.10.40','Bases',#48,$,$);
#71=IFCCLASSIFICATIONREFERENCE($,'20.10.40.10','Soleras',#70,$,$);
#72=IFCCLASSIFICATIONREFERENCE($,'20.10.40.20','Rampas',#70,$,$);
#73=IFCCLASSIFICATIONREFERENCE($,'20.10.40.30','Subbases',#70,$,$);
#74=IFCCLASSIFICATIONREFERENCE($,'20.20','Estructura',#47,$,$);
#75=IFCCLASSIFICATIONREFERENCE($,'20.20.10','Estructura vertical',#74,$,$);
#76=IFCCLASSIFICATIONREFERENCE($,'20.20.10.10','Pilares',#75,$,$);
#77=IFCCLASSIFICATIONREFERENCE($,'20.20.10.20','M\X2\00E9\X0\nsulas',#75,$,$);
#78=IFCCLASSIFICATIONREFERENCE($,'20.20.10.30','Muros estructurales',#75,$,$);
#79=IFCCLASSIFICATIONREFERENCE($,'20.20.10.40','Escaleras de estructura',#75,$,$);
#80=IFCCLASSIFICATIONREFERENCE($,'20.20.10.50','Rampas de estructura',#75,$,$);
#81=IFCCLASSIFICATIONREFERENCE($,'20.20.10.60','Tensores verticales',#75,$,$);
#82=IFCCLASSIFICATIONREFERENCE($,'20.20.20','Estructura horizontal',#74,$,$);
#83=IFCCLASSIFICATIONREFERENCE($,'20.20.20.10','Forjados',#82,$,$);
#84=IFCCLASSIFICATIONREFERENCE($,'20.20.20.20','J\X2\00E1\X0\cenas',#82,$,$);
#85=IFCCLASSIFICATIONREFERENCE($,'20.20.20.30','Cerchas',#82,$,$);
#86=IFCCLASSIFICATIONREFERENCE($,'20.20.20.40','Viguetas',#82,$,$);
#87=IFCCLASSIFICATIONREFERENCE($,'20.20.20.50','Tensores horizontales',#82,$,$);
#88=IFCCLASSIFICATIONREFERENCE($,'20.20.30','Estructura tridimensional',#74,$,$);
#89=IFCCLASSIFICATIONREFERENCE($,'20.20.30.10','B\X2\00F3\X0\veda',#88,$,$);
#90=IFCCLASSIFICATIONREFERENCE($,'20.20.30.20','Arco',#88,$,$);
#91=IFCCLASSIFICATIONREFERENCE($,'20.20.30.30','C\X2\00FA\X0\pula',#88,$,$);
#92=IFCCLASSIFICATIONREFERENCE($,'20.20.30.40','Malla espacial',#88,$,$);
#93=IFCCLASSIFICATIONREFERENCE($,'30','Sistemas de envolvente y de acabados exteriores',#2,$,$);
#94=IFCCLASSIFICATIONREFERENCE($,'30.10','Envolvente vertical',#93,$,$);
#95=IFCCLASSIFICATIONREFERENCE($,'30.10.10','Fachadas',#94,$,$);
#96=IFCCLASSIFICATIONREFERENCE($,'30.10.10.10','Fachadas in situ',#95,$,$);
#97=IFCCLASSIFICATIONREFERENCE($,'30.10.10.20','Fachadas prefabricadas',#95,$,$);
#98=IFCCLASSIFICATIONREFERENCE($,'30.10.10.30','Sistemas especiales de fachadas',#95,$,$);
#99=IFCCLASSIFICATIONREFERENCE($,'30.10.10.40','Acabados de fachadas',#95,$,$);
#100=IFCCLASSIFICATIONREFERENCE($,'30.10.10.50','Remates de fachadas',#95,$,$);
#101=IFCCLASSIFICATIONREFERENCE($,'30.10.20','Carpinter\X2\00ED\X0\a de fachada',#94,$,$);
#102=IFCCLASSIFICATIONREFERENCE($,'30.10.20.10','Ventanas de fachadas',#101,$,$);
#103=IFCCLASSIFICATIONREFERENCE($,'30.10.20.20','Puertas de fachadas',#101,$,$);
#104=IFCCLASSIFICATIONREFERENCE($,'30.10.20.30','Protecciones solares de fachadas',#101,$,$);
#105=IFCCLASSIFICATIONREFERENCE($,'30.10.20.40','Protecciones de seguridad de fachadas',#101,$,$);
#106=IFCCLASSIFICATIONREFERENCE($,'30.20','Envolvente horizontal superior',#93,$,$);
#107=IFCCLASSIFICATIONREFERENCE($,'30.20.10','Cubiertas',#106,$,$);
#108=IFCCLASSIFICATIONREFERENCE($,'30.20.10.10','Cubiertas in-situ',#107,$,$);
#109=IFCCLASSIFICATIONREFERENCE($,'30.20.10.20','Cubiertas prefabricadas',#107,$,$);
#110=IFCCLASSIFICATIONREFERENCE($,'30.20.10.30','Sistemas especiales de cubiertas',#107,$,$);
#111=IFCCLASSIFICATIONREFERENCE($,'30.20.10.40','Acabados de cubiertas',#107,$,$);
#112=IFCCLASSIFICATIONREFERENCE($,'30.20.10.50','Remates de cubiertas',#107,$,$);
#113=IFCCLASSIFICATIONREFERENCE($,'30.20.20','Carpinter\X2\00ED\X0\a de cubiertas',#106,$,$);
#114=IFCCLASSIFICATIONREFERENCE($,'30.20.20.10','Ventanas de cubiertas',#113,$,$);
#115=IFCCLASSIFICATIONREFERENCE($,'30.20.20.20','Puertas de cubiertas',#113,$,$);
#116=IFCCLASSIFICATIONREFERENCE($,'30.20.20.30','Protecciones solares de cubiertas',#113,$,$);
#117=IFCCLASSIFICATIONREFERENCE($,'30.20.20.40','Protecciones seguridad de cubiertas',#113,$,$);
#118=IFCCLASSIFICATIONREFERENCE($,'30.30','Envolvente horizontal inferior',#93,$,$);
#119=IFCCLASSIFICATIONREFERENCE($,'30.30.10','Compartimentaci\X2\00F3\X0\n exterior horizontal',#118,$,$);
#120=IFCCLASSIFICATIONREFERENCE($,'30.30.10.10','Falsos techos exteriores',#119,$,$);
#121=IFCCLASSIFICATIONREFERENCE($,'30.30.10.20','Remates compartimentaci\X2\00F3\X0\n exterior horizontal',#119,$,$);
#122=IFCCLASSIFICATIONREFERENCE($,'30.30.20','Acabados envolvente horizontal inferior',#118,$,$);
#123=IFCCLASSIFICATIONREFERENCE($,'30.30.20.10','Revestimientos continuos de envolvente inferior',#122,$,$);
#124=IFCCLASSIFICATIONREFERENCE($,'30.30.20.20','Remates envolvente inferior',#122,$,$);
#125=IFCCLASSIFICATIONREFERENCE($,'30.40','Escaleras y rampas exteriores',#93,$,$);
#126=IFCCLASSIFICATIONREFERENCE($,'30.40.10','Escalonado exterior',#125,$,$);
#127=IFCCLASSIFICATIONREFERENCE($,'30.40.10.10','Escalones exteriores',#126,$,$);
#128=IFCCLASSIFICATIONREFERENCE($,'30.40.10.20','Recrecido de escalones exteriores',#126,$,$);
#129=IFCCLASSIFICATIONREFERENCE($,'30.40.20','Acabados de escalonado y rampas exteriores',#125,$,$);
#130=IFCCLASSIFICATIONREFERENCE($,'30.40.20.10','Acabado tramo exterior',#129,$,$);
#131=IFCCLASSIFICATIONREFERENCE($,'30.40.20.20','Acabado rellano exterior',#129,$,$);
#132=IFCCLASSIFICATIONREFERENCE($,'40','Sistemas de compartimentaci\X2\00F3\X0\n y de acabados interiores',#2,$,$);
#133=IFCCLASSIFICATIONREFERENCE($,'40.10','Compartimentaci\X2\00F3\X0\n y acabados interiores verticales',#132,$,$);
#134=IFCCLASSIFICATIONREFERENCE($,'40.10.10','Compartimentaci\X2\00F3\X0\n interior vertical',#133,$,$);
#135=IFCCLASSIFICATIONREFERENCE($,'40.10.10.10','Tabiques',#134,$,$);
#136=IFCCLASSIFICATIONREFERENCE($,'40.10.10.20','Mamparas',#134,$,$);
#137=IFCCLASSIFICATIONREFERENCE($,'40.10.10.30','Trasdosados',#134,$,$);
#138=IFCCLASSIFICATIONREFERENCE($,'40.10.10.40','Carpinter\X2\00ED\X0\a interior',#134,$,$);
#139=IFCCLASSIFICATIONREFERENCE($,'40.10.10.50','Protecciones interiores',#134,$,$);
#140=IFCCLASSIFICATIONREFERENCE($,'40.10.20','Acabados interiores verticales',#133,$,$);
#141=IFCCLASSIFICATIONREFERENCE($,'40.10.20.10','Revestimientos discontinuos',#140,$,$);
#142=IFCCLASSIFICATIONREFERENCE($,'40.10.20.20','Revestimientos continuos',#140,$,$);
#143=IFCCLASSIFICATIONREFERENCE($,'40.10.20.30','Remates interiores',#140,$,$);
#144=IFCCLASSIFICATIONREFERENCE($,'40.10.20.40','Pinturas y vinilos',#140,$,$);
#145=IFCCLASSIFICATIONREFERENCE($,'40.20','Sistemas de compartimentaci\X2\00F3\X0\n y de acabados interiores',#132,$,$);
#146=IFCCLASSIFICATIONREFERENCE($,'40.20.10','Compartimentaci\X2\00F3\X0\n interior horizontal',#145,$,$);
#147=IFCCLASSIFICATIONREFERENCE($,'40.20.10.10','Falsos techos interiores',#146,$,$);
#148=IFCCLASSIFICATIONREFERENCE($,'40.20.10.20','Suelos t\X2\00E9\X0\cnicos',#146,$,$);
#149=IFCCLASSIFICATIONREFERENCE($,'40.20.10.30','Recrecidos',#146,$,$);
#150=IFCCLASSIFICATIONREFERENCE($,'40.20.20','Acabados interiores horizontales',#145,$,$);
#151=IFCCLASSIFICATIONREFERENCE($,'40.20.20.10','Revestimientos techos',#150,$,$);
#152=IFCCLASSIFICATIONREFERENCE($,'40.20.20.20','Pavimentos',#150,$,$);
#153=IFCCLASSIFICATIONREFERENCE($,'40.30','Escaleras y rampas interiores',#132,$,$);
#154=IFCCLASSIFICATIONREFERENCE($,'40.30.10','Escalonado interior',#153,$,$);
#155=IFCCLASSIFICATIONREFERENCE($,'40.30.10.10','Escalones interiores',#154,$,$);
#156=IFCCLASSIFICATIONREFERENCE($,'40.30.10.20','Recrecido de escalones interiores',#154,$,$);
#157=IFCCLASSIFICATIONREFERENCE($,'40.30.20','Acabados de escalonado y rampas interiores',#153,$,$);
#158=IFCCLASSIFICATIONREFERENCE($,'40.30.20.10','Acabado tramo interior',#157,$,$);
#159=IFCCLASSIFICATIONREFERENCE($,'40.30.20.20','Acabado rellano interior',#157,$,$);
#160=IFCCLASSIFICATIONREFERENCE($,'40.40','Elementos especiales de acabados interiores',#132,$,$);
#161=IFCCLASSIFICATIONREFERENCE($,'40.40.10','Elementos de se\X2\00F1\X0\alizaci\X2\00F3\X0\n',#160,$,$);
#162=IFCCLASSIFICATIONREFERENCE($,'40.40.10.10','Se\X2\00F1\X0\alizaci\X2\00F3\X0\n de techo',#161,$,$);
#163=IFCCLASSIFICATIONREFERENCE($,'40.40.10.20','Se\X2\00F1\X0\alizaci\X2\00F3\X0\n mural',#161,$,$);
#164=IFCCLASSIFICATIONREFERENCE($,'40.40.10.30','Se\X2\00F1\X0\alizaci\X2\00F3\X0\n de suelos',#161,$,$);
#165=IFCCLASSIFICATIONREFERENCE($,'40.40.20','Otros elementos especiales de acabados interiores',#160,$,$);
#166=IFCCLASSIFICATIONREFERENCE($,'50','Sistemas de acondicionamiento, instalaciones y servicios',#2,$,$);
#167=IFCCLASSIFICATIONREFERENCE($,'50.10','Fontaner\X2\00ED\X0\a',#166,$,$);
#168=IFCCLASSIFICATIONREFERENCE($,'50.10.10','Equipos principales de fontaner\X2\00ED\X0\a',#167,$,$);
#169=IFCCLASSIFICATIONREFERENCE($,'50.10.10.10','Equipos de medida y control de fontaner\X2\00ED\X0\a',#168,$,$);
#170=IFCCLASSIFICATIONREFERENCE($,'50.10.10.20','Grupos de presi\X2\00F3\X0\n de fontaner\X2\00ED\X0\a',#168,$,$);
#171=IFCCLASSIFICATIONREFERENCE($,'50.10.10.30','Dep\X2\00F3\X0\sitos, acumuladores y calentadores',#168,$,$);
#172=IFCCLASSIFICATIONREFERENCE($,'50.10.20','Red de distribuci\X2\00F3\X0\n de fontaner\X2\00ED\X0\a',#167,$,$);
#173=IFCCLASSIFICATIONREFERENCE($,'50.10.20.10','V\X2\00E1\X0\lvulas e instrumentos de medida y control de flujo de fontaner\X2\00ED\X0\a',#172,$,$);
#174=IFCCLASSIFICATIONREFERENCE($,'50.10.20.20','Dispositivos de fontaner\X2\00ED\X0\a',#172,$,$);
#175=IFCCLASSIFICATIONREFERENCE($,'50.10.20.30','Canalizaciones de agua sanitaria',#172,$,$);
#176=IFCCLASSIFICATIONREFERENCE($,'50.10.20.40','Canalizaciones de agua tratada',#172,$,$);
#177=IFCCLASSIFICATIONREFERENCE($,'50.10.20.50','Arquetas y pozos de fontaner\X2\00ED\X0\a',#172,$,$);
#178=IFCCLASSIFICATIONREFERENCE($,'50.10.20.60','Terminales de fontaner\X2\00ED\X0\a',#172,$,$);
#179=IFCCLASSIFICATIONREFERENCE($,'50.20','Evacuaci\X2\00F3\X0\n de aguas',#166,$,$);
#180=IFCCLASSIFICATIONREFERENCE($,'50.20.10','Equipos principales de evacuaci\X2\00F3\X0\n de aguas',#179,$,$);
#181=IFCCLASSIFICATIONREFERENCE($,'50.20.10.10','Equipos de medida y control de evacuaci\X2\00F3\X0\n de aguas',#180,$,$);
#182=IFCCLASSIFICATIONREFERENCE($,'50.20.10.20','Grupos de presi\X2\00F3\X0\n de evacuaci\X2\00F3\X0\n de aguas',#180,$,$);
#183=IFCCLASSIFICATIONREFERENCE($,'50.20.10.30','Dep\X2\00F3\X0\sitos de evacuaci\X2\00F3\X0\n de aguas',#180,$,$);
#184=IFCCLASSIFICATIONREFERENCE($,'50.20.10.40','Dispositivos de evacuaci\X2\00F3\X0\n de aguas',#180,$,$);
#185=IFCCLASSIFICATIONREFERENCE($,'50.20.20','Red de recogida',#179,$,$);
#186=IFCCLASSIFICATIONREFERENCE($,'50.20.20.10','Canalizaciones de aguas pluviales',#185,$,$);
#187=IFCCLASSIFICATIONREFERENCE($,'50.20.20.20','Canalizaciones de aguas residuales',#185,$,$);
#188=IFCCLASSIFICATIONREFERENCE($,'50.20.20.30','Canalizaciones de aguas grises',#185,$,$);
#189=IFCCLASSIFICATIONREFERENCE($,'50.20.20.40','Canalizaciones para ventilaci\X2\00F3\X0\n saneamiento',#185,$,$);
#190=IFCCLASSIFICATIONREFERENCE($,'50.20.20.50','Arquetas y pozos de evacuaci\X2\00F3\X0\n de aguas',#185,$,$);
#191=IFCCLASSIFICATIONREFERENCE($,'50.20.20.60','Terminales de drenaje',#185,$,$);
#192=IFCCLASSIFICATIONREFERENCE($,'50.30','Instalaciones t\X2\00E9\X0\rmicas y de ventilaci\X2\00F3\X0\n',#166,$,$);
#193=IFCCLASSIFICATIONREFERENCE($,'50.30.10','Equipos de producci\X2\00F3\X0\n de instalaciones t\X2\00E9\X0\rmicas',#192,$,$);
#194=IFCCLASSIFICATIONREFERENCE($,'50.30.10.10','Torres de refrigeraci\X2\00F3\X0\n',#193,$,$);
#195=IFCCLASSIFICATIONREFERENCE($,'50.30.10.20','Unidades exteriores de instalaciones t\X2\00E9\X0\rmicas',#193,$,$);
#196=IFCCLASSIFICATIONREFERENCE($,'50.30.10.30','Unidades interiores de instalaciones t\X2\00E9\X0\rmicas',#193,$,$);
#197=IFCCLASSIFICATIONREFERENCE($,'50.30.10.40','Calderas',#193,$,$);
#198=IFCCLASSIFICATIONREFERENCE($,'50.30.10.50','Termoacumuladores',#193,$,$);
#199=IFCCLASSIFICATIONREFERENCE($,'50.30.10.60','Geotermia',#193,$,$);
#200=IFCCLASSIFICATIONREFERENCE($,'50.30.10.70','Captadores solares t\X2\00E9\X0\rmicos',#193,$,$);
#201=IFCCLASSIFICATIONREFERENCE($,'50.30.10.80','Ventiladores',#193,$,$);
#202=IFCCLASSIFICATIONREFERENCE($,'50.30.10.90','Recuperadores',#193,$,$);
#203=IFCCLASSIFICATIONREFERENCE($,'50.30.20','Equipos secundarios de instalaciones t\X2\00E9\X0\rmicas',#192,$,$);
#204=IFCCLASSIFICATIONREFERENCE($,'50.30.20.10','Equipos de bombeo de instalaciones t\X2\00E9\X0\rmicas',#203,$,$);
#205=IFCCLASSIFICATIONREFERENCE($,'50.30.20.20','Silenciadores',#203,$,$);
#206=IFCCLASSIFICATIONREFERENCE($,'50.30.20.30','Compuertas',#203,$,$);
#207=IFCCLASSIFICATIONREFERENCE($,'50.30.20.40','Reguladores',#203,$,$);
#208=IFCCLASSIFICATIONREFERENCE($,'50.30.20.50','Condensadores',#203,$,$);
#209=IFCCLASSIFICATIONREFERENCE($,'50.30.20.60','V\X2\00E1\X0\lvulas e instrumentos de medida y control de flujo de climatizaci\X2\00F3\X0\n',#203,$,$);
#210=IFCCLASSIFICATIONREFERENCE($,'50.30.30','Circuitos de distribuci\X2\00F3\X0\n de fluidos fr\X2\00ED\X0\o / calor',#192,$,$);
#211=IFCCLASSIFICATIONREFERENCE($,'50.30.30.10','L\X2\00ED\X0\neas frigor\X2\00ED\X0\ficas',#210,$,$);
#212=IFCCLASSIFICATIONREFERENCE($,'50.30.30.20','L\X2\00ED\X0\neas hidr\X2\00E1\X0\ulicas',#210,$,$);
#213=IFCCLASSIFICATIONREFERENCE($,'50.30.40','Conductos de distribuci\X2\00F3\X0\n de aire',#192,$,$);
#214=IFCCLASSIFICATIONREFERENCE($,'50.30.40.10','Aportaci\X2\00F3\X0\n de aire primario',#213,$,$);
#215=IFCCLASSIFICATIONREFERENCE($,'50.30.40.20','Extracci\X2\00F3\X0\n de aire primario',#213,$,$);
#216=IFCCLASSIFICATIONREFERENCE($,'50.30.40.30','Impulsi\X2\00F3\X0\n de aire tratado',#213,$,$);
#217=IFCCLASSIFICATIONREFERENCE($,'50.30.40.40','Retorno de aire tratado',#213,$,$);
#218=IFCCLASSIFICATIONREFERENCE($,'50.30.40.50','Extracci\X2\00F3\X0\n de humos',#213,$,$);
#219=IFCCLASSIFICATIONREFERENCE($,'50.30.50','Terminales y difusores',#192,$,$);
#220=IFCCLASSIFICATIONREFERENCE($,'50.30.50.10','Radiadores',#219,$,$);
#221=IFCCLASSIFICATIONREFERENCE($,'50.30.50.20','Difusores',#219,$,$);
#222=IFCCLASSIFICATIONREFERENCE($,'50.30.50.30','Suelo radiante',#219,$,$);
#223=IFCCLASSIFICATIONREFERENCE($,'50.30.50.40','Forjados radiantes',#219,$,$);
#224=IFCCLASSIFICATIONREFERENCE($,'50.30.50.50','Rejillas',#219,$,$);
#225=IFCCLASSIFICATIONREFERENCE($,'50.30.60','Dispositivos de maniobra y control',#192,$,$);
#226=IFCCLASSIFICATIONREFERENCE($,'50.30.60.10','Cableado / BUS de climatizaci\X2\00F3\X0\n',#225,$,$);
#227=IFCCLASSIFICATIONREFERENCE($,'50.30.60.20','Detectores de CO2',#225,$,$);
#228=IFCCLASSIFICATIONREFERENCE($,'50.40','Suministro de combustibles',#166,$,$);
#229=IFCCLASSIFICATIONREFERENCE($,'50.40.10','Equipos principales de suministro de combustibles',#228,$,$);
#230=IFCCLASSIFICATIONREFERENCE($,'50.40.10.10','Equipos de medida, regulaci\X2\00F3\X0\n y control de combustibles',#229,$,$);
#231=IFCCLASSIFICATIONREFERENCE($,'50.40.10.20','Dep\X2\00F3\X0\sitos de combustible',#229,$,$);
#232=IFCCLASSIFICATIONREFERENCE($,'50.40.10.30','Grupos de presi\X2\00F3\X0\n de combustible',#229,$,$);
#233=IFCCLASSIFICATIONREFERENCE($,'50.40.20','Equipos secundarios de suministro de combustibles',#228,$,$);
#234=IFCCLASSIFICATIONREFERENCE($,'50.40.20.10','V\X2\00E1\X0\lvulas e instrumentos de medida y control de flujo de combustibles',#233,$,$);
#235=IFCCLASSIFICATIONREFERENCE($,'50.40.20.20','Dispositivos de suministro de combustibles',#233,$,$);
#236=IFCCLASSIFICATIONREFERENCE($,'50.40.30','Red de distribuci\X2\00F3\X0\n de suministro de combustibles',#228,$,$);
#237=IFCCLASSIFICATIONREFERENCE($,'50.40.30.10','Canalizaciones de suministro de combustibles',#236,$,$);
#238=IFCCLASSIFICATIONREFERENCE($,'50.40.30.20','Arquetas y pozos de suministro de combustibles',#236,$,$);
#239=IFCCLASSIFICATIONREFERENCE($,'50.40.40','Terminales de suministro de combustibles',#228,$,$);
#240=IFCCLASSIFICATIONREFERENCE($,'50.40.40.10','Grifos de suministro de combustibles',#239,$,$);
#241=IFCCLASSIFICATIONREFERENCE($,'50.40.40.20','Quemadores',#239,$,$);
#242=IFCCLASSIFICATIONREFERENCE($,'50.40.50','Dispositivos de maniobra y control',#228,$,$);
#243=IFCCLASSIFICATIONREFERENCE($,'50.40.50.10','Cableado / BUS para suministro de combustibles',#242,$,$);
#244=IFCCLASSIFICATIONREFERENCE($,'50.40.50.20','Detector de gases',#242,$,$);
#245=IFCCLASSIFICATIONREFERENCE($,'50.50','Protecci\X2\00F3\X0\n contra incendios',#166,$,$);
#246=IFCCLASSIFICATIONREFERENCE($,'50.50.10','Extinci\X2\00F3\X0\n de incendios',#245,$,$);
#247=IFCCLASSIFICATIONREFERENCE($,'50.50.10.10','Dep\X2\00F3\X0\sitos de extinci\X2\00F3\X0\n de incendios',#246,$,$);
#248=IFCCLASSIFICATIONREFERENCE($,'50.50.10.20','Grupos de presi\X2\00F3\X0\n de extinci\X2\00F3\X0\n de incendios',#246,$,$);
#249=IFCCLASSIFICATIONREFERENCE($,'50.50.10.30','V\X2\00E1\X0\lvulas e instrumentos de medida y control de flujo de extinci\X2\00F3\X0\n de incendios',#246,$,$);
#250=IFCCLASSIFICATIONREFERENCE($,'50.50.10.40','Dispositivos de extinci\X2\00F3\X0\n de incendios',#246,$,$);
#251=IFCCLASSIFICATIONREFERENCE($,'50.50.10.50','Canalizaciones de extinci\X2\00F3\X0\n de incendios',#246,$,$);
#252=IFCCLASSIFICATIONREFERENCE($,'50.50.10.60','Rociadores',#246,$,$);
#253=IFCCLASSIFICATIONREFERENCE($,'50.50.10.70','BIES',#246,$,$);
#254=IFCCLASSIFICATIONREFERENCE($,'50.50.10.80','Extintores',#246,$,$);
#255=IFCCLASSIFICATIONREFERENCE($,'50.50.20','Detecci\X2\00F3\X0\n de incendios',#245,$,$);
#256=IFCCLASSIFICATIONREFERENCE($,'50.50.20.10','Centralitas y racks de detecci\X2\00F3\X0\n de incendios',#255,$,$);
#257=IFCCLASSIFICATIONREFERENCE($,'50.50.20.20','Equipos especiales de detecci\X2\00F3\X0\n de incendios',#255,$,$);
#258=IFCCLASSIFICATIONREFERENCE($,'50.50.20.30','Canalizaciones de detecci\X2\00F3\X0\n de incendios',#255,$,$);
#259=IFCCLASSIFICATIONREFERENCE($,'50.50.20.40','Cajas de distribuci\X2\00F3\X0\n de detecci\X2\00F3\X0\n de incendios',#255,$,$);
#260=IFCCLASSIFICATIONREFERENCE($,'50.50.30','Dispositivos de maniobra y control',#245,$,$);
#261=IFCCLASSIFICATIONREFERENCE($,'50.50.30.10','Pulsadores',#260,$,$);
#262=IFCCLASSIFICATIONREFERENCE($,'50.50.30.20','Cuadros de mando para contra incendios',#260,$,$);
#263=IFCCLASSIFICATIONREFERENCE($,'50.50.30.30','Detectores de incendios',#260,$,$);
#264=IFCCLASSIFICATIONREFERENCE($,'50.50.30.40','Mecanismos de extinci\X2\00F3\X0\n y detecci\X2\00F3\X0\n de incendios',#260,$,$);
#265=IFCCLASSIFICATIONREFERENCE($,'50.50.30.50','Cableado / BUS de contra incendios',#260,$,$);
#266=IFCCLASSIFICATIONREFERENCE($,'50.60','Instalaciones el\X2\00E9\X0\ctricas',#166,$,$);
#267=IFCCLASSIFICATIONREFERENCE($,'50.60.10','Equipos el\X2\00E9\X0\ctricos principales',#266,$,$);
#268=IFCCLASSIFICATIONREFERENCE($,'50.60.10.10','Cuadros el\X2\00E9\X0\ctricos',#267,$,$);
#269=IFCCLASSIFICATIONREFERENCE($,'50.60.10.20','Grupos electr\X2\00F3\X0\genos',#267,$,$);
#270=IFCCLASSIFICATIONREFERENCE($,'50.60.10.30','Acometidas el\X2\00E9\X0\ctricas',#267,$,$);
#271=IFCCLASSIFICATIONREFERENCE($,'50.60.10.40','Transformadores',#267,$,$);
#272=IFCCLASSIFICATIONREFERENCE($,'50.60.20','Equipos el\X2\00E9\X0\ctricos secundarios',#266,$,$);
#273=IFCCLASSIFICATIONREFERENCE($,'50.60.20.10','Bater\X2\00ED\X0\as y SAI',#272,$,$);
#274=IFCCLASSIFICATIONREFERENCE($,'50.60.20.20','Cuadros de mando el\X2\00E9\X0\ctrico',#272,$,$);
#275=IFCCLASSIFICATIONREFERENCE($,'50.60.20.30','Bater\X2\00ED\X0\as de condensadores',#272,$,$);
#276=IFCCLASSIFICATIONREFERENCE($,'50.60.20.40','Embarrados y transformadores',#272,$,$);
#277=IFCCLASSIFICATIONREFERENCE($,'50.60.30','Canalizaciones de distribuci\X2\00F3\X0\n el\X2\00E9\X0\ctricas',#266,$,$);
#278=IFCCLASSIFICATIONREFERENCE($,'50.60.30.10','Bandejas de distribuci\X2\00F3\X0\n el\X2\00E9\X0\ctrica',#277,$,$);
#279=IFCCLASSIFICATIONREFERENCE($,'50.60.30.20','Canales de superficie de distribuci\X2\00F3\X0\n el\X2\00E9\X0\ctrica',#277,$,$);
#280=IFCCLASSIFICATIONREFERENCE($,'50.60.30.30','Cajas de distribuci\X2\00F3\X0\n el\X2\00E9\X0\ctrica',#277,$,$);
#281=IFCCLASSIFICATIONREFERENCE($,'50.60.30.40','Mangueras y tubos de distribuci\X2\00F3\X0\n el\X2\00E9\X0\ctrica',#277,$,$);
#282=IFCCLASSIFICATIONREFERENCE($,'50.60.30.50','Arquetas y pozos de distribuci\X2\00F3\X0\n el\X2\00E9\X0\ctrica',#277,$,$);
#283=IFCCLASSIFICATIONREFERENCE($,'50.60.30.60','Cableado el\X2\00E9\X0\ctrico',#277,$,$);
#284=IFCCLASSIFICATIONREFERENCE($,'50.60.40','Dispositivos de maniobra y control',#266,$,$);
#285=IFCCLASSIFICATIONREFERENCE($,'50.60.40.10','Mecanismos',#284,$,$);
#286=IFCCLASSIFICATIONREFERENCE($,'50.60.40.20','Tomas',#284,$,$);
#287=IFCCLASSIFICATIONREFERENCE($,'50.60.50','Iluminaci\X2\00F3\X0\n',#266,$,$);
#288=IFCCLASSIFICATIONREFERENCE($,'50.60.50.10','Iluminaci\X2\00F3\X0\n exterior',#287,$,$);
#289=IFCCLASSIFICATIONREFERENCE($,'50.60.50.20','Iluminaci\X2\00F3\X0\n interior',#287,$,$);
#290=IFCCLASSIFICATIONREFERENCE($,'50.60.50.30','Iluminaci\X2\00F3\X0\n de emergencia',#287,$,$);
#291=IFCCLASSIFICATIONREFERENCE($,'50.60.60','Red de tierras',#266,$,$);
#292=IFCCLASSIFICATIONREFERENCE($,'50.60.60.10','Pararrayos',#291,$,$);
#293=IFCCLASSIFICATIONREFERENCE($,'50.60.60.20','Piquetes y arquetas',#291,$,$);
#294=IFCCLASSIFICATIONREFERENCE($,'50.60.60.30','Mecanismos de la red de tierras',#291,$,$);
#295=IFCCLASSIFICATIONREFERENCE($,'50.70','Telecomunicaciones y audiovisuales',#166,$,$);
#296=IFCCLASSIFICATIONREFERENCE($,'50.70.10','Equipos principales de telecomunicaciones',#295,$,$);
#297=IFCCLASSIFICATIONREFERENCE($,'50.70.10.10','Antenas',#296,$,$);
#298=IFCCLASSIFICATIONREFERENCE($,'50.70.10.20','Acometidas de telecomunicaciones',#296,$,$);
#299=IFCCLASSIFICATIONREFERENCE($,'50.70.10.30','Armarios RACK',#296,$,$);
#300=IFCCLASSIFICATIONREFERENCE($,'50.70.10.40','Servidores',#296,$,$);
#301=IFCCLASSIFICATIONREFERENCE($,'50.70.20','Equipos secundarios de telecomunicaciones',#295,$,$);
#302=IFCCLASSIFICATIONREFERENCE($,'50.70.20.10','Conversores',#301,$,$);
#303=IFCCLASSIFICATIONREFERENCE($,'50.70.20.20','Amplificadores',#301,$,$);
#304=IFCCLASSIFICATIONREFERENCE($,'50.70.20.30','Altavoces',#301,$,$);
#305=IFCCLASSIFICATIONREFERENCE($,'50.70.20.40','Centralitas',#301,$,$);
#306=IFCCLASSIFICATIONREFERENCE($,'50.70.20.50','Routers',#301,$,$);
#307=IFCCLASSIFICATIONREFERENCE($,'50.70.20.60','Monitores',#301,$,$);
#308=IFCCLASSIFICATIONREFERENCE($,'50.70.30','Canalizaciones de distribuci\X2\00F3\X0\n para se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#295,$,$);
#309=IFCCLASSIFICATIONREFERENCE($,'50.70.30.10','Bandejas de distribuci\X2\00F3\X0\n para se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#308,$,$);
#310=IFCCLASSIFICATIONREFERENCE($,'50.70.30.20','Canales de superficie para se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#308,$,$);
#311=IFCCLASSIFICATIONREFERENCE($,'50.70.30.30','Cajas de distribuci\X2\00F3\X0\n para se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#308,$,$);
#312=IFCCLASSIFICATIONREFERENCE($,'50.70.30.40','Cableado de se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#308,$,$);
#313=IFCCLASSIFICATIONREFERENCE($,'50.70.30.50','Mangueras y tubos de distribuci\X2\00F3\X0\n para se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#308,$,$);
#314=IFCCLASSIFICATIONREFERENCE($,'50.70.30.60','Arquetas y pozos para se\X2\00F1\X0\ales d\X2\00E9\X0\biles',#308,$,$);
#315=IFCCLASSIFICATIONREFERENCE($,'50.70.40','Dispositivos de maniobra y control de telecomunicaciones',#295,$,$);
#316=IFCCLASSIFICATIONREFERENCE($,'50.70.40.10','Tomas de telecomunicaciones',#315,$,$);
#317=IFCCLASSIFICATIONREFERENCE($,'50.70.40.20','Cuadros de mando de telecomunicaciones',#315,$,$);
#318=IFCCLASSIFICATIONREFERENCE($,'50.70.50','Terminales de telecomunicaciones',#295,$,$);
#319=IFCCLASSIFICATIONREFERENCE($,'50.70.50.10','Equipos de telecomunicaciones',#318,$,$);
#320=IFCCLASSIFICATIONREFERENCE($,'50.70.50.20','Emisores de telecomunicaciones',#318,$,$);
#321=IFCCLASSIFICATIONREFERENCE($,'50.80','Seguridad y anti-intrusi\X2\00F3\X0\n',#166,$,$);
#322=IFCCLASSIFICATIONREFERENCE($,'50.80.10','Equipos de seguridad y anti-intrusi\X2\00F3\X0\n',#321,$,$);
#323=IFCCLASSIFICATIONREFERENCE($,'50.80.10.10','Racks para seguridad y anti-intrusi\X2\00F3\X0\n',#322,$,$);
#324=IFCCLASSIFICATIONREFERENCE($,'50.80.10.20','Centralitas de seguridad',#322,$,$);
#325=IFCCLASSIFICATIONREFERENCE($,'50.80.10.30','Telefon\X2\00ED\X0\a',#322,$,$);
#326=IFCCLASSIFICATIONREFERENCE($,'50.80.20','Sistemas anti-intrusi\X2\00F3\X0\n',#321,$,$);
#327=IFCCLASSIFICATIONREFERENCE($,'50.80.20.10','Detectores anti-intrusi\X2\00F3\X0\n',#326,$,$);
#328=IFCCLASSIFICATIONREFERENCE($,'50.80.20.20','Circuitos de TV',#326,$,$);
#329=IFCCLASSIFICATIONREFERENCE($,'50.80.20.30','Sensores antiintrusi\X2\00F3\X0\n',#326,$,$);
#330=IFCCLASSIFICATIONREFERENCE($,'50.80.30','Elementos de control de personas',#321,$,$);
#331=IFCCLASSIFICATIONREFERENCE($,'50.80.30.10','Control de accesos',#330,$,$);
#332=IFCCLASSIFICATIONREFERENCE($,'50.80.40','Elementos de control de veh\X2\00ED\X0\culos',#321,$,$);
#333=IFCCLASSIFICATIONREFERENCE($,'50.80.40.10','Gesti\X2\00F3\X0\n de tr\X2\00E1\X0\fico',#332,$,$);
#334=IFCCLASSIFICATIONREFERENCE($,'50.80.50','Elementos de aviso y alarma',#321,$,$);
#335=IFCCLASSIFICATIONREFERENCE($,'50.80.50.10','Sirenas',#334,$,$);
#336=IFCCLASSIFICATIONREFERENCE($,'50.90','Instalaciones especiales',#166,$,$);
#337=IFCCLASSIFICATIONREFERENCE($,'50.90.10','Equipos principales de instalaciones especiales',#336,$,$);
#338=IFCCLASSIFICATIONREFERENCE($,'50.90.10.10','Equipos de medida, regulaci\X2\00F3\X0\n y control especiales',#337,$,$);
#339=IFCCLASSIFICATIONREFERENCE($,'50.90.10.20','Dep\X2\00F3\X0\sitos de instalaciones especiales',#337,$,$);
#340=IFCCLASSIFICATIONREFERENCE($,'50.90.10.30','Grupos de presi\X2\00F3\X0\n de instalaciones especiales',#337,$,$);
#341=IFCCLASSIFICATIONREFERENCE($,'50.90.20','Equipos secundarios de instalaciones especiales',#336,$,$);
#342=IFCCLASSIFICATIONREFERENCE($,'50.90.20.10','V\X2\00E1\X0\lvulas e instrumentos de medida y control de flujo especiales',#341,$,$);
#343=IFCCLASSIFICATIONREFERENCE($,'50.90.20.20','Dispositivos especiales',#341,$,$);
#344=IFCCLASSIFICATIONREFERENCE($,'50.90.30','Red de distribuci\X2\00F3\X0\n de instalaciones especiales',#336,$,$);
#345=IFCCLASSIFICATIONREFERENCE($,'50.90.30.10','Canalizaciones especiales',#344,$,$);
#346=IFCCLASSIFICATIONREFERENCE($,'50.90.30.20','Arquetas y pozos de instalaciones especiales',#344,$,$);
#347=IFCCLASSIFICATIONREFERENCE($,'50.90.40','Terminales de instalaciones especiales',#336,$,$);
#348=IFCCLASSIFICATIONREFERENCE($,'50.90.40.10','Grifer\X2\00ED\X0\a para instalaciones especiales',#347,$,$);
#349=IFCCLASSIFICATIONREFERENCE($,'50.90.40.20','Otros terminales especiales',#347,$,$);
#350=IFCCLASSIFICATIONREFERENCE($,'50.90.50','Dispositivos de maniobra y control',#336,$,$);
#351=IFCCLASSIFICATIONREFERENCE($,'50.90.50.10','Mandos',#350,$,$);
#352=IFCCLASSIFICATIONREFERENCE($,'50.90.50.20','Detectores especiales',#350,$,$);
#353=IFCCLASSIFICATIONREFERENCE($,'50.90.50.30','Sensores especiales',#350,$,$);
#354=IFCCLASSIFICATIONREFERENCE($,'50.90.50.40','Otros dispositivos de maniobra y control especiales',#350,$,$);
#355=IFCCLASSIFICATIONREFERENCE($,'50.100','Otros elementos de instalaciones',#166,$,$);
#356=IFCCLASSIFICATIONREFERENCE($,'50.100.10','Elementos comunes de instalaciones',#355,$,$);
#357=IFCCLASSIFICATIONREFERENCE($,'50.100.10.10','Elementos de apoyo',#356,$,$);
#358=IFCCLASSIFICATIONREFERENCE($,'50.100.10.20','Pasarelas y escaleras de acceso para mantenimiento',#356,$,$);
#359=IFCCLASSIFICATIONREFERENCE($,'50.100.10.30','Canalizaciones y arquetas comunes de instalaciones',#356,$,$);
#360=IFCCLASSIFICATIONREFERENCE($,'60','Equipamientos y mobiliario',#2,$,$);
#361=IFCCLASSIFICATIONREFERENCE($,'60.10','Equipamientos',#360,$,$);
#362=IFCCLASSIFICATIONREFERENCE($,'60.10.10','Cuartos h\X2\00FA\X0\medos / sanitarios',#361,$,$);
#363=IFCCLASSIFICATIONREFERENCE($,'60.10.10.10','Inodoros',#362,$,$);
#364=IFCCLASSIFICATIONREFERENCE($,'60.10.10.20','Urinarios',#362,$,$);
#365=IFCCLASSIFICATIONREFERENCE($,'60.10.10.30','Bid\X2\00E9\X0\s',#362,$,$);
#366=IFCCLASSIFICATIONREFERENCE($,'60.10.10.40','Platos de ducha',#362,$,$);
#367=IFCCLASSIFICATIONREFERENCE($,'60.10.10.50','Ba\X2\00F1\X0\eras',#362,$,$);
#368=IFCCLASSIFICATIONREFERENCE($,'60.10.10.60','Lavamanos',#362,$,$);
#369=IFCCLASSIFICATIONREFERENCE($,'60.10.10.70','Fregaderos',#362,$,$);
#370=IFCCLASSIFICATIONREFERENCE($,'60.10.10.80','Accesorios para cuartos h\X2\00FA\X0\medos',#362,$,$);
#371=IFCCLASSIFICATIONREFERENCE($,'60.10.10.90','Lavaderos',#362,$,$);
#372=IFCCLASSIFICATIONREFERENCE($,'60.10.10.100','Vertedero',#362,$,$);
#373=IFCCLASSIFICATIONREFERENCE($,'60.10.20','Otros equipamientos',#361,$,$);
#374=IFCCLASSIFICATIONREFERENCE($,'60.10.20.10','Equipamientos para circulaci\X2\00F3\X0\n de veh\X2\00ED\X0\culos',#373,$,$);
#375=IFCCLASSIFICATIONREFERENCE($,'60.10.20.20','Equipamientos comerciales',#373,$,$);
#376=IFCCLASSIFICATIONREFERENCE($,'60.10.20.30','Equipamientos institucionales',#373,$,$);
#377=IFCCLASSIFICATIONREFERENCE($,'60.10.20.40','Equipamientos recreativos',#373,$,$);
#378=IFCCLASSIFICATIONREFERENCE($,'60.10.20.50','Equipamientos asistenciales',#373,$,$);
#379=IFCCLASSIFICATIONREFERENCE($,'60.10.20.60','Electrodom\X2\00E9\X0\sticos',#373,$,$);
#380=IFCCLASSIFICATIONREFERENCE($,'60.10.20.70','Aparatos inform\X2\00E1\X0\ticos',#373,$,$);
#381=IFCCLASSIFICATIONREFERENCE($,'60.20','Mobiliario',#360,$,$);
#382=IFCCLASSIFICATIONREFERENCE($,'60.20.10','Mobiliario fijo',#381,$,$);
#383=IFCCLASSIFICATIONREFERENCE($,'60.20.10.10','Encimeras',#382,$,$);
#384=IFCCLASSIFICATIONREFERENCE($,'60.20.10.20','Estantes',#382,$,$);
#385=IFCCLASSIFICATIONREFERENCE($,'60.20.10.30','Espejos',#382,$,$);
#386=IFCCLASSIFICATIONREFERENCE($,'60.20.10.40','Mostradores',#382,$,$);
#387=IFCCLASSIFICATIONREFERENCE($,'60.20.10.50','Muebles de obra',#382,$,$);
#388=IFCCLASSIFICATIONREFERENCE($,'60.20.10.60','Armarios empotrados',#382,$,$);
#389=IFCCLASSIFICATIONREFERENCE($,'60.20.10.70','Bancadas',#382,$,$);
#390=IFCCLASSIFICATIONREFERENCE($,'60.20.10.80','Otros mobiliarios fijos',#382,$,$);
#391=IFCCLASSIFICATIONREFERENCE($,'60.20.30','Mobiliario m\X2\00F3\X0\vil',#381,$,$);
#392=IFCCLASSIFICATIONREFERENCE($,'60.20.30.10','Mesas',#391,$,$);
#393=IFCCLASSIFICATIONREFERENCE($,'60.20.30.20','Sillas y sof\X2\00E1\X0\s',#391,$,$);
#394=IFCCLASSIFICATIONREFERENCE($,'60.20.30.30','Taburetes',#391,$,$);
#395=IFCCLASSIFICATIONREFERENCE($,'60.20.30.40','Bancos',#391,$,$);
#396=IFCCLASSIFICATIONREFERENCE($,'60.20.30.50','Camas',#391,$,$);
#397=IFCCLASSIFICATIONREFERENCE($,'60.20.30.60','Armarios, cajoneras y archivadores',#391,$,$);
#398=IFCCLASSIFICATIONREFERENCE($,'60.20.30.70','Otros mobiliarios m\X2\00F3\X0\viles',#391,$,$);
#399=IFCCLASSIFICATIONREFERENCE($,'60.30','Sistemas de transporte',#360,$,$);
#400=IFCCLASSIFICATIONREFERENCE($,'60.30.10','Transporte vertical',#399,$,$);
#401=IFCCLASSIFICATIONREFERENCE($,'60.30.10.10','Ascensores',#400,$,$);
#402=IFCCLASSIFICATIONREFERENCE($,'60.30.10.20','Montacargas',#400,$,$);
#403=IFCCLASSIFICATIONREFERENCE($,'60.30.10.30','Escaleras mec\X2\00E1\X0\nicas',#400,$,$);
#404=IFCCLASSIFICATIONREFERENCE($,'60.30.20','Transporte horizontal',#399,$,$);
#405=IFCCLASSIFICATIONREFERENCE($,'60.30.20.10','Pasarelas transportadoras',#404,$,$);
#406=IFCCLASSIFICATIONREFERENCE($,'60.30.20.20','Otros sistemas de transporte',#404,$,$);
#407=IFCCLASSIFICATIONREFERENCE($,'60.30.30','Manipulaci\X2\00F3\X0\n de elementos',#399,$,$);
#408=IFCCLASSIFICATIONREFERENCE($,'60.30.30.10','Gr\X2\00FA\X0\as',#407,$,$);
#409=IFCCLASSIFICATIONREFERENCE($,'60.30.30.20','Polipasto',#407,$,$);
#410=IFCCLASSIFICATIONREFERENCE($,'60.30.30.30','Cintas transportadoras',#407,$,$);
#411=IFCCLASSIFICATIONREFERENCE($,'60.30.30.40','Sistemas neum\X2\00E1\X0\ticos',#407,$,$);
#412=IFCCLASSIFICATIONREFERENCE($,'60.30.30.50','Otros sistemas de manipulaci\X2\00F3\X0\n',#407,$,$);
#413=IFCCLASSIFICATIONREFERENCE($,'70','Urbanizaci\X2\00F3\X0\n de los espacios exteriores',#2,$,$);
#414=IFCCLASSIFICATIONREFERENCE($,'70.10','Elementos de cimentaci\X2\00F3\X0\n, contenci\X2\00F3\X0\n de tierras y elementos estructurales',#413,$,$);
#415=IFCCLASSIFICATIONREFERENCE($,'70.10.10','Cimientos para elementos de urbanizaci\X2\00F3\X0\n',#414,$,$);
#416=IFCCLASSIFICATIONREFERENCE($,'70.10.10.10','Zapatas para elementos de urbanizaci\X2\00F3\X0\n',#415,$,$);
#417=IFCCLASSIFICATIONREFERENCE($,'70.10.10.20','Cimentaci\X2\00F3\X0\n especial para elementos de urbanizaci\X2\00F3\X0\n',#415,$,$);
#418=IFCCLASSIFICATIONREFERENCE($,'70.10.20','Muros de urbanizaci\X2\00F3\X0\n',#414,$,$);
#419=IFCCLASSIFICATIONREFERENCE($,'70.10.20.10','Muros in-situ de urbanizaci\X2\00F3\X0\n',#418,$,$);
#420=IFCCLASSIFICATIONREFERENCE($,'70.10.20.20','Muros prefabricados de urbanizaci\X2\00F3\X0\n',#418,$,$);
#421=IFCCLASSIFICATIONREFERENCE($,'70.10.20.30','Muros de gravedad',#418,$,$);
#422=IFCCLASSIFICATIONREFERENCE($,'70.10.20.40','Muro tierra armada',#418,$,$);
#423=IFCCLASSIFICATIONREFERENCE($,'70.10.20.50','Muro de gaviones',#418,$,$);
#424=IFCCLASSIFICATIONREFERENCE($,'70.10.30','Otros elementos estructurales de urbanizaci\X2\00F3\X0\n',#414,$,$);
#425=IFCCLASSIFICATIONREFERENCE($,'70.20','Elementos de cierres y protecci\X2\00F3\X0\n de urbanizaci\X2\00F3\X0\n',#413,$,$);
#426=IFCCLASSIFICATIONREFERENCE($,'70.20.10','Cierres de parcela',#425,$,$);
#427=IFCCLASSIFICATIONREFERENCE($,'70.20.20','Barreras m\X2\00F3\X0\viles',#425,$,$);
#428=IFCCLASSIFICATIONREFERENCE($,'70.20.30','Pilonas',#425,$,$);
#429=IFCCLASSIFICATIONREFERENCE($,'70.30','Firmes y pavimentos',#413,$,$);
#430=IFCCLASSIFICATIONREFERENCE($,'70.30.10','Bases y subbases',#429,$,$);
#431=IFCCLASSIFICATIONREFERENCE($,'70.30.20','Pavimentos peatonales',#429,$,$);
#432=IFCCLASSIFICATIONREFERENCE($,'70.30.30','Pavimentos para tr\X2\00E1\X0\fico rodado',#429,$,$);
#433=IFCCLASSIFICATIONREFERENCE($,'70.30.40','Escalonamientos de urbanizaci\X2\00F3\X0\n',#429,$,$);
#434=IFCCLASSIFICATIONREFERENCE($,'70.30.50','Rampas de urbanizaci\X2\00F3\X0\n',#429,$,$);
#435=IFCCLASSIFICATIONREFERENCE($,'70.40','Instalaciones y servicios',#413,$,$);
#436=IFCCLASSIFICATIONREFERENCE($,'70.40.10','Alumbrado',#435,$,$);
#437=IFCCLASSIFICATIONREFERENCE($,'70.40.10.10','Luminarias y b\X2\00E1\X0\culos',#436,$,$);
#438=IFCCLASSIFICATIONREFERENCE($,'70.40.10.20','Elementos de balizamiento',#436,$,$);
#439=IFCCLASSIFICATIONREFERENCE($,'70.40.10.30','Elementos de la red y control',#436,$,$);
#440=IFCCLASSIFICATIONREFERENCE($,'70.40.20','Riego y abastecimiento de fuente',#435,$,$);
#441=IFCCLASSIFICATIONREFERENCE($,'70.40.20.10','Canalizaciones de riego',#440,$,$);
#442=IFCCLASSIFICATIONREFERENCE($,'70.40.20.20','Accesorios de riego',#440,$,$);
#443=IFCCLASSIFICATIONREFERENCE($,'70.40.20.30','Arquetas de riego',#440,$,$);
#444=IFCCLASSIFICATIONREFERENCE($,'70.40.30','Drenaje',#435,$,$);
#445=IFCCLASSIFICATIONREFERENCE($,'70.40.30.10','Canalizaciones de drenaje',#444,$,$);
#446=IFCCLASSIFICATIONREFERENCE($,'70.40.30.20','Rejas y buneras',#444,$,$);
#447=IFCCLASSIFICATIONREFERENCE($,'70.40.30.30','Arquetas y pozos de drenaje',#444,$,$);
#448=IFCCLASSIFICATIONREFERENCE($,'70.50','Jardiner\X2\00ED\X0\a',#413,$,$);
#449=IFCCLASSIFICATIONREFERENCE($,'70.50.10','Plantaciones',#448,$,$);
#450=IFCCLASSIFICATIONREFERENCE($,'70.50.10.10','Arbolados',#449,$,$);
#451=IFCCLASSIFICATIONREFERENCE($,'70.50.10.20','C\X2\00E9\X0\sped',#449,$,$);
#452=IFCCLASSIFICATIONREFERENCE($,'70.50.10.30','Arbustivas',#449,$,$);
#453=IFCCLASSIFICATIONREFERENCE($,'70.50.20','Parterres',#448,$,$);
#454=IFCCLASSIFICATIONREFERENCE($,'70.50.20.10','Parterres fijos',#453,$,$);
#455=IFCCLASSIFICATIONREFERENCE($,'70.50.20.20','Parterres m\X2\00F3\X0\viles',#453,$,$);
#456=IFCCLASSIFICATIONREFERENCE($,'70.60','Mobiliario urbano y elementos de se\X2\00F1\X0\alizaci\X2\00F3\X0\n',#413,$,$);
#457=IFCCLASSIFICATIONREFERENCE($,'70.60.10','Mobiliario exterior',#456,$,$);
#458=IFCCLASSIFICATIONREFERENCE($,'70.60.20','Juegos infantiles',#456,$,$);
#459=IFCCLASSIFICATIONREFERENCE($,'70.60.30','Mobiliario exterior especial',#456,$,$);
#460=IFCCLASSIFICATIONREFERENCE($,'70.60.40','Se\X2\00F1\X0\alizaci\X2\00F3\X0\n horizontal',#456,$,$);
#461=IFCCLASSIFICATIONREFERENCE($,'70.60.50','Se\X2\00F1\X0\alizaci\X2\00F3\X0\n vertical',#456,$,$);
#462=IFCCLASSIFICATIONREFERENCE($,'80','Construcciones e instalaciones temporales',#2,$,$);
#463=IFCCLASSIFICATIONREFERENCE($,'80.10','Implantaciones de obra',#462,$,$);
#464=IFCCLASSIFICATIONREFERENCE($,'80.10.10','Andamios',#463,$,$);
#465=IFCCLASSIFICATIONREFERENCE($,'80.10.10.10','Puente volante',#464,$,$);
#466=IFCCLASSIFICATIONREFERENCE($,'80.10.10.20','Bastida fija',#464,$,$);
#467=IFCCLASSIFICATIONREFERENCE($,'80.10.10.30','Caballete',#464,$,$);
#468=IFCCLASSIFICATIONREFERENCE($,'80.10.10.40','Andamio m\X2\00F3\X0\vil',#464,$,$);
#469=IFCCLASSIFICATIONREFERENCE($,'80.10.10.50','Marquesinas',#464,$,$);
#470=IFCCLASSIFICATIONREFERENCE($,'80.10.10.60','Lonas',#464,$,$);
#471=IFCCLASSIFICATIONREFERENCE($,'80.10.20','Gr\X2\00FA\X0\as',#463,$,$);
#472=IFCCLASSIFICATIONREFERENCE($,'80.10.20.10','Gr\X2\00FA\X0\a torre',#471,$,$);
#473=IFCCLASSIFICATIONREFERENCE($,'80.10.20.20','Grueta',#471,$,$);
#474=IFCCLASSIFICATIONREFERENCE($,'80.10.20.30','Montacargas de obra',#471,$,$);
#475=IFCCLASSIFICATIONREFERENCE($,'80.10.20.40','Poleas y polipastos',#471,$,$);
#476=IFCCLASSIFICATIONREFERENCE($,'80.10.30','Casetas',#463,$,$);
#477=IFCCLASSIFICATIONREFERENCE($,'80.10.30.10','Casetas de obra',#476,$,$);
#478=IFCCLASSIFICATIONREFERENCE($,'80.10.30.20','Aseos port\X2\00E1\X0\tiles',#476,$,$);
#479=IFCCLASSIFICATIONREFERENCE($,'80.10.30.30','Casetas de almacenamiento',#476,$,$);
#480=IFCCLASSIFICATIONREFERENCE($,'80.10.30.40','Otros m\X2\00F3\X0\dulos',#476,$,$);
#481=IFCCLASSIFICATIONREFERENCE($,'80.10.40','Cierres y se\X2\00F1\X0\alizaci\X2\00F3\X0\n',#463,$,$);
#482=IFCCLASSIFICATIONREFERENCE($,'80.10.40.10','Cierres perimetrales',#481,$,$);
#483=IFCCLASSIFICATIONREFERENCE($,'80.10.40.20','Puertas de acceso',#481,$,$);
#484=IFCCLASSIFICATIONREFERENCE($,'80.10.40.30','R\X2\00F3\X0\tulos',#481,$,$);
#485=IFCCLASSIFICATIONREFERENCE($,'80.10.40.40','Balizas de se\X2\00F1\X0\alizaci\X2\00F3\X0\n',#481,$,$);
#486=IFCCLASSIFICATIONREFERENCE($,'80.10.50','Acopio',#463,$,$);
#487=IFCCLASSIFICATIONREFERENCE($,'80.10.50.10','Acopio de tierras y \X2\00E1\X0\ridos',#486,$,$);
#488=IFCCLASSIFICATIONREFERENCE($,'80.10.50.20','Acopio de productos',#486,$,$);
#489=IFCCLASSIFICATIONREFERENCE($,'80.10.50.30','Palets',#486,$,$);
#490=IFCCLASSIFICATIONREFERENCE($,'80.10.60','Otros elementos de implantaci\X2\00F3\X0\n de obra',#463,$,$);
#491=IFCCLASSIFICATIONREFERENCE($,'80.10.60.10','Silo',#490,$,$);
#492=IFCCLASSIFICATIONREFERENCE($,'80.10.60.20','Dep\X2\00F3\X0\sitos de obra',#490,$,$);
#493=IFCCLASSIFICATIONREFERENCE($,'80.10.70','Gesti\X2\00F3\X0\n de residuos',#463,$,$);
#494=IFCCLASSIFICATIONREFERENCE($,'80.10.70.10','Saca de escombros',#493,$,$);
#495=IFCCLASSIFICATIONREFERENCE($,'80.10.70.20','Contenedor de escombros',#493,$,$);
#496=IFCCLASSIFICATIONREFERENCE($,'80.10.70.30','Escombros',#493,$,$);
#497=IFCCLASSIFICATIONREFERENCE($,'80.10.70.40','Residuos especiales',#493,$,$);
#498=IFCCLASSIFICATIONREFERENCE($,'80.10.70.50','Chatarra',#493,$,$);
#499=IFCCLASSIFICATIONREFERENCE($,'80.10.70.60','Tubo de descarga de escombros',#493,$,$);
#500=IFCCLASSIFICATIONREFERENCE($,'80.10.70.70','Tolva',#493,$,$);
#501=IFCCLASSIFICATIONREFERENCE($,'80.20','Construcciones temporales',#462,$,$);
#502=IFCCLASSIFICATIONREFERENCE($,'80.20.10','Estructuras auxiliares y apeos',#501,$,$);
#503=IFCCLASSIFICATIONREFERENCE($,'80.20.10.10','Cimentaciones auxiliares',#502,$,$);
#504=IFCCLASSIFICATIONREFERENCE($,'80.20.10.20','Apuntalamiento de fachadas',#502,$,$);
#505=IFCCLASSIFICATIONREFERENCE($,'80.20.10.30','Apeo de servicios',#502,$,$);
#506=IFCCLASSIFICATIONREFERENCE($,'80.20.10.40','Encofrados auxiliares',#502,$,$);
#507=IFCCLASSIFICATIONREFERENCE($,'80.20.20','Instalaciones provisionales',#501,$,$);
#508=IFCCLASSIFICATIONREFERENCE($,'80.20.20.10','Instalaci\X2\00F3\X0\n provisional el\X2\00E9\X0\ctrica',#507,$,$);
#509=IFCCLASSIFICATIONREFERENCE($,'80.20.20.20','Instalaci\X2\00F3\X0\n provisional de agua',#507,$,$);
#510=IFCCLASSIFICATIONREFERENCE($,'80.20.20.30','Instalaci\X2\00F3\X0\n provisional de saneamiento',#507,$,$);
#511=IFCCLASSIFICATIONREFERENCE($,'80.20.20.40','Otras instalaciones provisionales',#507,$,$);
#512=IFCCLASSIFICATIONREFERENCE($,'80.20.30','Otras construcciones temporales',#501,$,$);
#513=IFCCLASSIFICATIONREFERENCE($,'80.20.30.10','Otras construcciones temporales',#512,$,$);
#514=IFCCLASSIFICATIONREFERENCE($,'80.30','Equipos y herramientas',#462,$,$);
#515=IFCCLASSIFICATIONREFERENCE($,'80.30.10','Maquinaria',#514,$,$);
#516=IFCCLASSIFICATIONREFERENCE($,'80.30.10.10','Maquinaria de excavaci\X2\00F3\X0\n y cimentaci\X2\00F3\X0\n',#515,$,$);
#517=IFCCLASSIFICATIONREFERENCE($,'80.30.10.20','Maquinaria para escombros',#515,$,$);
#518=IFCCLASSIFICATIONREFERENCE($,'80.30.10.30','Maquinaria de elevaci\X2\00F3\X0\n',#515,$,$);
#519=IFCCLASSIFICATIONREFERENCE($,'80.30.10.40','Maquinaria de transporte',#515,$,$);
#520=IFCCLASSIFICATIONREFERENCE($,'80.30.10.50','M\X2\00E1\X0\quina de tratamiento de materiales',#515,$,$);
#521=IFCCLASSIFICATIONREFERENCE($,'80.30.10.60','Otros tipos de maquinaria',#515,$,$);
#522=IFCCLASSIFICATIONREFERENCE($,'80.30.20','Herramientas',#514,$,$);
#523=IFCCLASSIFICATIONREFERENCE($,'80.30.20.10','Herramientas manuales',#522,$,$);
#524=IFCCLASSIFICATIONREFERENCE($,'80.30.20.20','Herramientas no manuales',#522,$,$);
#525=IFCCLASSIFICATIONREFERENCE($,'80.40','Seguridad y salud',#462,$,$);
#526=IFCCLASSIFICATIONREFERENCE($,'80.40.10','Protecciones individuales y colectivas',#525,$,$);
#527=IFCCLASSIFICATIONREFERENCE($,'80.40.10.10','Equipos de protecci\X2\00F3\X0\n individual',#526,$,$);
#528=IFCCLASSIFICATIONREFERENCE($,'80.40.10.20','Vallas de protecci\X2\00F3\X0\n ca\X2\00ED\X0\das',#526,$,$);
#529=IFCCLASSIFICATIONREFERENCE($,'80.40.10.30','Redes de protecci\X2\00F3\X0\n',#526,$,$);
#530=IFCCLASSIFICATIONREFERENCE($,'80.40.10.40','L\X2\00ED\X0\neas de vida',#526,$,$);
#531=IFCCLASSIFICATIONREFERENCE($,'80.40.10.50','Otros medios de protecci\X2\00F3\X0\n colectiva',#526,$,$);
#532=IFCCLASSIFICATIONREFERENCE($,'80.40.20','Equipos de medida preventiva',#525,$,$);
#533=IFCCLASSIFICATIONREFERENCE($,'80.40.20.10','Equipos de medida y detecci\X2\00F3\X0\n de seguridad y salud',#532,$,$);
#534=IFCCLASSIFICATIONREFERENCE($,'80.40.30','Delimitaciones de zonas de seguridad',#525,$,$);
#535=IFCCLASSIFICATIONREFERENCE($,'80.40.30.10','Zonas de tr\X2\00E1\X0\fico rodado y maquinaria',#534,$,$);
ENDSEC;
END-ISO-10303-21;

Some files were not shown because too many files have changed in this diff Show More