2021-11-24 10:05 PM - last edited on 2022-09-28 06:44 PM by Oleksandra Vakariuk
When displaying information in a schedule it is possible to show the classification as a headline.
However, depending on the complexity/levels of the classification system the actual classification of the element can be too specific for grouping when perhaps level 1, or 2 would be more suitable.
As an example, we are using the CBI classification system.
Without documenting it fully here I'll use "Timber "Framing" as an example as well as sanitaryware, so you can see where they sit within the 4 levels (4 digits).
1 - General
2 - Site
3 - Structure
---38 - Timber
------382 - Timber Framing
----------3822 - Solid timber wall framing
4 - Enclosure
5. Interior
6 - Finish
7 - Services
---71 - Liquid Supply
------715 - Sanitaryware, tapware and accessories
---------7151 Sanitaryware
8 - External
As you can image in a schedule, seeing the 4th level of the classification would be too much, where as level 1 or level 2 would be clearer.
At the moment I have an expression that returns the first character of the classification number (for the examples above that would be 3 and 7).
Then an IFS expression that marries up that 1st digit with the 8 (level 1) classification numbers above, (screenshot attached).
The problem is, to go any further would require huge expressions with IFS entries.
Can anyone suggest another method?
2021-11-26 03:47 AM
I assume you just want to display the upper levels of the classification tree. There isn't any way a expression could accomplish this since it does not have access to the classification tree. However, this is a easy (short) Python script assuming you could just display (schedule) the result in a custom property.
In the Python script;
Extract the element guid.
use - GetClasificationsofElements to get your element classification level then extract the level number in front.
Use. GetAllClassificationsInSystem to get the class tree.
Get the upper level name by using:
return class[your top level number].classificationItem.id +'. '+ return class[your top level]classification.name
For lower levels use: the children attribute
2021-11-28 07:42 PM
Thanks Gerry
I haven't actually used scripts before, so I'll do a bit of learning on that first.
Sounds quite useful.
Once leant I'll try your suggestion above and reply how I got on.
2021-11-29 05:00 AM
To get you started. i made a short video to demo the process.
Classification levels in schedules
Also, I'll attach the Python scrip. You will have to alter the particulars for your Objects.
Any problems or confusion, leave a comment.
2022-04-14 03:51 AM - edited 2022-04-14 03:58 AM
I've come up with a little workaround that involves expressions but no python.
Involves a Project Info Field which contains the data for each branch.
For example
11 - Contract conditions|
12 - General requirements|
21 - Demolition|
22 - Preparation and groundwork|
23 - Foundations|
24 - Minor demolition and alterations|
31 - Concrete|
32 - Earth|
33 - Masonry|
34 - Steel|
35 - Stainless steel|
36 - Aluminium|
37 - Other metals|
38 - Timber|
39 - Plastics|
41 - Tanking and pre-cladding|
42 - Wall cladding|
43 - Roofing and decking|
Then a series of expressions, using FIND, MID, SPLITLEFT.
A property extracts the first two digits from the elements classification, then compares against the Project Info, returning the text position, then displays a set number of characters from that position (say 30), then splits from the "|" character to the left.
Hope that makes sense, can do a screen recording sometime.
Does involve the manual step at the template stage of adding the level two info to the Project Info, but seems to work well from there.