HowTo: Obtaining Identity Data from Project Information and Sheets (For a PDF Renaming workflow)

revit
archi-lab
dynamo

#1

Good Morning All,

I currently have a WIP PDF Renaming workflow that is correctly obtaining many of the required files to correctly name PDFs to BS 1192 Naming Convention. However, there are a few parameters that i’m struggling to obtain.

Below i have attached a snapshot of the current workflow.

The “List.Count” retrieves an input from another short workflow (View Sets, Get Views From View Set, Get built in parameter (with code block input as sheet_number).

The problematic “parts of the puzzle” are;

  1. the “project number” which i may need to get from “project information” category?
  2. the drawing type, i’ve set it as “DR” by default though it could be “SK” etc. Currently when i try to obtain “Type” it returns “sheet”. When i add a “watch” field it seems there are multiple “type” fields so maybe the easiest way forward for me is to change the name of the drawing “Type” parameter to “Drawing Type” so that it is easily identifiable.
  3. Suitability status. This i think may be the hardest information to retrieve as it’s based on a set of tick-box visibility parameters. See screenshot in following post.

On the far right of the main picture below, you can see within the “watch” box that the results are simplified into a list. I’m trying to stick with this same approach if possible as it’ll mean the rest of the workflow should still work :slight_smile:

Many thanks in advance for any help!!!
Jack.


#2

This is the suitability status tickboxes mentioned in the main post. These settings control the visibility of text within the sheet. I need to obtain ONLY the suitability status from this, NOT the suitability description.

ie. if “D2 Suitable for tender” is ticked, then i need to obtain “D2” for the renaming workflow.

example 3

Thanks, Jack.


#3

Hi Jack,

Yes this is correct, here is a recent post on the forum that demonstrates what you are aiming to do with Project Information for sheets: Help:Naming Sheet From 2 Parameter Category

I’m not 100% certain what you mean by this part but I believe you are saying you have a project parameter called “Type” and it is conflicting with the Revit “Type” parameter, so yes I would recommend changing it to “Drawing Type” to get the parameter values you are after.

Here is one possible way, but you would want to move your Suitability Status parameters into a Parameter Group by themselves for the “Filter Parameters by Parameter Group” part to work, but there are other potential ways you can filter for them (i.e. give the parameter names a prefix)

Hope this helps!


#4

Amy,

Massive thanks for your response. Very clear!

Yes this is correct, here is a recent post on the forum that demonstrates what you are aiming to do with Project Information for sheets: Help:Naming Sheet From 2 Parameter Category

Looks exactly like the workflow i need to imitate, thanks!

I’m not 100% certain what you mean by this part but I believe you are saying you have a project parameter called “Type” and it is conflicting with the Revit “Type” parameter, so yes I would recommend changing it to “Drawing Type” to get the parameter values you are after.

Yes, within the titleblock there are a few text parameter placeholders for the document name. Volume, Level, Type etc. which would be something like 00-01-DR for (All Volumes, Level 01 and Dr is Drawing) as part of the document name. However the dynamo returns “type” parameter as “Sheet” rather than “DR”.

I’ll try adding a new shared parameter to the sheet called “Drawing Type” to replace the current “Type” parameter as i do think it’s just picking the wrong one, we’ll see!!

Here is one possible way, but you would want to move your Suitability Status parameters into a Parameter Group by themselves for the “Filter Parameters by Parameter Group” part to work, but there are other potential ways you can filter for them (i.e. give the parameter names a prefix)

These YesNo parameters are currently stored as Identity Data under the Title Block instance (s). Would i therefore need to change the first part of your suggested workflow with “Title block” rather than “Sheets” or can i still relate it to the sheets / sheet numbers.

When you say filter by parameter group, would that just be moving these parameters to their own group in the Title block family. ei. Not under “identity Data” but something else?

I’ll be back in work tomorrow (…later today, it’s late here!). I’ll start looking further into your comments and will see what i come out with.

Thanks again,
Jack :slight_smile:


#5

I have, with your help, now obtained the project code as required.

The next part i’ve been looking at is the suitability status of the drawings.

I have definitely made some progress but really need some more magical advice :slight_smile:

Please see the workflow attached below, i have cleared it out for clarity so now the workflow just lists the sheet numbers and suitability status.

Currently it seems that the final “watch” node is listing the sheet values for item 0 (ie. 0210) and the suitability status for item 1 (ie. S0).

However, it’s not currently linking these two items together as i’d like.

Edit: I’ve just realised the code block (X ==1;) isn’t actually linked to the “mask” input for the ‘List.FilterByBoolMask’ node…

I needed to add the ‘String.Contains’ node to refine the list (to get rid of a couple parameters in the parameter group). By doing that I’ve ended up with 2 conditions (the code block for x ==1 and the string.contains node) and i can only link 1 of these to the mask input of the ‘List.FilterByBoolMask’ node.

Is there another way around this?

I’m not sure if a solution to the issue above will fix the entire workflow, but;

The “watch” node should read;

0 List
Item 0: 0210
Item 1: S0

1 List
Item 0: 2000
Item 1: S1

2 List
Item 0: 2002
Item 1: S3

(S0, S1 and S3 are the suitability status codes ive used for those specific 3 drawings)

This is almost the last piece of the puzzle! Next on the list is changing the shared parameter name of the drawing type but i’m hoping this will be straight forward :slight_smile:

Many Thanks + Merry Christmas!

Jack


#6

Hello All,

I have progressed slightly, to the point where i have now managed to obtain all drawing suitability status codes from the title sheet instances in the project.

The last task is to filter out, by sheet number, drawings that are not in the selected view set. To avoid “re-writing” the end part of the dynamo workflow i’m hoping it’s possible to filter the list/sequence near the start of the workflow.

As the “sheet number” is a parameter in the element.parameters node is it possible to filter the element.parameters node results to remove any list (entire list) that contains a “sheet number” value that is not in the Viewset watch box.

See Picture attached for further information.

ie. In this case i’d like the workflow to see that the Sheet Number listed in “0 List” is NOT in the ViewSet ‘watch’ box, therefore the entire “0 List” should not be carried forward to the next part of the dynamo workflow.

Many Thanks!


#7

Hi again Jack! Glad to see you’ve got it almost all sorted :slight_smile:

Apologies for having overlooked that your suitability status parameters were being pulled from the Titleblocks :see_no_evil: Your graph doesn’t show how you are getting the Sheet Numbers from your ViewSet sheets, but a couple of custom package nodes could help your graph to be more streamlined (pictured below Archi-lab and Beaker nodes)

Let me know if this works. There are alternatives if you don’t wish to add more packages to your library (these two packages are very good to have though :slightly_smiling_face: )


#8

Hi Amy,

I’ve just remade the workflow above and it seems only to obtain the suitability status from one of the sheets in my viewset, not both. Frustratingly close :smiley:

I need to leave work now but i’ll look at this again when i get home!

Thanks for your help, i’ll update this thread later/tomorrow if im still unable to get it working :stuck_out_tongue:
Jack.


#9

looks like @awilliams has got you sorted, but you sent me a mail asking how to isolate items items in one list based on another… so anyway hope this helps


#10

@adam_bear1 @awilliams

Good Morning :slight_smile:

Thanks for those examples Adam, i’m sure those filtering processes will come in handy!

I’ve remade Amy’s workflow, as attached, but i’m still unable to obtain more than one of the suitability statuses.

I think the problem lays in the “Filter Parameters by String Contains” node group.

I’ve tried to understand, with my limited knowledge whats going wrong but tried many things this morning and not getting anywhere :frowning: Have also tried the List.Filter and List.FilterByBoolMask methods above to take only the list items that contain certain text but no luck.

FYI below is the full output from ‘Element.Name’;
[0] [0] Sheet Issue Date
[0] [1] D4 SUITABLE FOR MANUFACTURE / PROCUREMENT
[0] [2] Drawn By
[0] [3] S3 SUITABLE FOR REVIEW AND COMMENT
[0] [4] B PARTIAL SIGN OFF - APPROVED FOR CONSTRUCTION WITH MINOR COMMENTS
[0] [5] D3 SUITABLE FOR CONTRACTOR DESIGN
[0] [6] D2 SUITABLE FOR TENDER
[0] [7] A APPROVED FOR CONSTRUCTION
[0] [8] CR CONSTRUCTION RECORD
[0] [9] D1 SUITABLE FOR COSTING
[0] [10] Approved By
[0] [11] Designed By
[0] [12] Checked By
[0] [13] Sheet Name
[0] [14] Type Name
[0] [15] CONSTRUCTION
[0] [16] S2 SUITABLE FOR INFORMATION
[0] [17] S1 SUITABLE FOR COORDINATION
[0] [18] Design Option
[0] [19] S0 INITIAL / WORK IN PROGRESS
[0] [20] Sheet Height
[0] [21] Sheet Number
[0] [22] S4 SUITABLE FOR CONSTRUCTION APPROVAL
[0] [23] Date/Time Stamp
[0] [24] PRELIMINARY
[0] [25] Sheet Width
[1] [0] Designed By
[1] [1] S3 SUITABLE FOR REVIEW AND COMMENT
[1] [2] Sheet Issue Date
[1] [3] Sheet Name
[1] [4] CR CONSTRUCTION RECORD
[1] [5] S1 SUITABLE FOR COORDINATION
[1] [6] D2 SUITABLE FOR TENDER
[1] [7] S0 INITIAL / WORK IN PROGRESS
[1] [8] Sheet Height
[1] [9] Checked By
[1] [10] D1 SUITABLE FOR COSTING
[1] [11] D3 SUITABLE FOR CONTRACTOR DESIGN
[1] [12] PRELIMINARY
[1] [13] Type Name
[1] [14] Design Option
[1] [15] CONSTRUCTION
[1] [16] Approved By
[1] [17] Sheet Width
[1] [18] D4 SUITABLE FOR MANUFACTURE / PROCUREMENT
[1] [19] S4 SUITABLE FOR CONSTRUCTION APPROVAL
[1] [20] A APPROVED FOR CONSTRUCTION
[1] [21] S2 SUITABLE FOR INFORMATION
[1] [22] Drawn By
[1] [23] Date/Time Stamp
[1] [24] B PARTIAL SIGN OFF - APPROVED FOR CONSTRUCTION WITH MINOR COMMENTS
[1] [25] Sheet Number

FYI below is the full output from ‘String.Contains’;
[0] [0] False
[0] [1] False
[0] [2] False
[0] [3] False
[0] [4] False
[0] [5] False
[0] [6] False
[0] [7] False
[0] [8] False
[0] [9] False
[0] [10] False
[0] [11] False
[0] [12] False
[0] [13] False
[0] [14] False
[0] [15] False
[0] [16] False
[0] [17] False
[0] [18] False
[0] [19] True
[0] [20] False
[0] [21] False
[0] [22] False
[0] [23] False
[0] [24] False
[0] [25] False
[1] [0] False
[1] [1] True
[1] [2] False
[1] [3] False
[1] [4] False
[1] [5] True
[1] [6] True
[1] [7] False
[1] [8] False
[1] [9] False
[1] [10] True
[1] [11] True
[1] [12] False
[1] [13] False
[1] [14] False
[1] [15] False
[1] [16] False
[1] [17] False
[1] [18] True
[1] [19] True
[1] [20] False
[1] [21] True
[1] [22] False
[1] [23] False
[1] [24] False
[1] [25] False

FYI below is the full output from ‘List.FilterByBoolMask’;
[0] [0] S0 INITIAL / WORK IN PROGRESS
[1] [0] S3 SUITABLE FOR REVIEW AND COMMENT
[1] [1] S1 SUITABLE FOR COORDINATION
[1] [2] D2 SUITABLE FOR TENDER
[1] [3] D1 SUITABLE FOR COSTING
[1] [4] D3 SUITABLE FOR CONTRACTOR DESIGN
[1] [5] D4 SUITABLE FOR MANUFACTURE / PROCUREMENT
[1] [6] S4 SUITABLE FOR CONSTRUCTION APPROVAL
[1] [7] S2 SUITABLE FOR INFORMATION

Current Workflow Below;


#11

@adam_bear1 @awilliams

Just as a little background info, this is the properties box of the 2 drawings in the ViewSet of my workflow above;

Note that in the workflow i’ve included the search code block for {“INITIAL”,“SUITABLE”,“A APPROVED”,“PARTIAL”,“RECORD”}; so that the list doesn’t look at the other two ‘YesNo’ Identity Data Parameters (PRELIMINARY and CONSTRUCTION).

As stated in the previous post;
I’m hoping to return a final output of;

List

0 List

0 2001
1 S2

1 List

0 2003
1 S4

Very excited to see this all working. It’s closer than ever now thanks so to you too :slight_smile:

Kind Regards,
Jack.

Revit Properties Box for Drawings in ViewSet:


#12

@awilliams @adam_bear1

Think I’ve cracked it! See attached.
I will set this as the ‘Solution’ but If you wouldn’t mind having a quick look over my method that would be perfect. :stuck_out_tongue:

Again, many thanks.

:christmas_tree::christmas_tree::christmas_tree: Merry Christmas + Happy New Year :christmas_tree::christmas_tree::christmas_tree:

Jack.


#13

happy to help :christmas_tree: :gift: you inspired me to check that my titleblock keyplans only highlighted a single building block, as below

I didn’t use the parameter groups method you went for, instead going straight for the parameters that I knew I wanted to find the values for


#14

Great to hear!!

I spent about 30minutes looking over the workflow you sent over just to see if i’ve now got enough knowledge to understand exactly what’s going on.

By the looks of it, your workflow;

  1. Produces a list of Sheet Numbers on each title block.

  2. Looks at all items in the ‘Code Block’ you’ve create, found on each title block, and creates a True/False list for the boxes you have (or don’t have) ticked that match the items in the ‘Code block’.

3a) Uses ‘List.FilterByBoolMask’ to create a list of ‘Key plan boxes ticked’ (if ticked) and if none are ticked then it just returns an “empty list”

3b) Runs a count of the number of boxes ticked on each title sheet for the key plans. If any sheets have more than 1 box ticked then it lists the indices that are affected, then returns the specific sheet numbers affected (from the indices listed) as well as each box that has been ticked. This is perfect for a quick visual, very clear.

I still struggle to understand how the List.FilterByBoolMask contains 2600 items yet reduces down to 400 when sent to the List.AddItemToFront node.

I understand why there are 400 items in that node as there are 200 titleblocks and a 200 key plan names (1 for each titleblock, though i’m unsure why there aren’t 402 as 2 of the titleblocks have 2 boxes ticked?)

I also know that the 2600 count is because there are 200 title blocks and 13 parameter names for each = 2600. But the List.FilterByBoolMask seems to do everything within the first Sub-list, why does it need to duplicate this information another 12 times?

Either way, this is great, i may well update my workflow to include this count check, though we rarely have 200 drawings and so it should be obvious enough by looking at the pdf names since there wouldn’t be too many to check. Also not sure exactly how my workflow would handle having 2 of the boxes ticked, will give it a go. Should never happen in reality though and would be extremely obvious on the title block!

Thanks for sharing Adam.


#15

it because I have a couple of titleblocks that dont have any of those Yes/No parameters ticked, see index 1 and 3 in the above screen shot

thats not the way I understand it at least, List.OfRepeatedItem creates 200 lists of 13 items ie 2600 items, that is then filtered by the mask from the conditional test. There are 2600 parameter values, a mask of 2600 conditional test bool results, so there needs to be a list of 2600 items so that the mask can be correspondingly applied to the list.

:christmas_tree:


#16

I’ll have to try and simplify your workflow down to a few items in the code block and only 2-3 titleblocks.

It’ll be easier for me to understand how the filter is managing the data then :slight_smile:

Jack.


#17

Another Update!

After using this workflow on a larger “test” project, it become obvious that the “Remove Irrelevant Identity Data” Group (shown in post 12 of this thread) was correctly removing the unwanted data BUT was also deleting duplicates of values i did want to keep.

In simple terms…

List A (Full list)
1
1
2
3
1

List B (Items to remove)
2
3

Final List
1
(only 1 “1”, not 3)

In my original test i used 2 drawings and both had different suitability statuses (‘S2’ and ‘S4’) so i didnt run into this problem as it kept them both anyway.

To get around this issue i used the following approach (replacing the SetDifference node);

Just wanted to put this out there for anyone that may use this!

Thanks to @Jeff_Shaver for this idea (Source: List difference with Python)

Jack.