PDA

View Full Version : 2016 Scheduling filled regions in elevation - suggested alternatives?



-luisa-
2016-10-11, 08:38 AM
Hi all,
As part of a massive conservation project we need to cleverly mark up elevations of the existing building to show parts that need different types of treatment. Filled regions would be the ideal tool for this - except that I need to keynote AND schedule the areas of those 'patches'.
Essentially, I need to be able to schedule the total amount of area of the elevation that needs treating, what type of treatment, etc, at the same time ensure consistency by using keynoting in those elements.
A detailed component would help with keynoting but doesn't provide the area of the 'patch'.
Any ideas?

damon.sidel
2016-10-11, 12:51 PM
A detailed component would help with keynoting but doesn't provide the area of the 'patch'.

The only way I can think to do this off the top of my head is with an adaptive component of generic model category. It could have one adaptive point and you just place it on a vertical work plane and adjust some size parameters, or it could have four adaptive points and you could place all four corners (or more corners if there are irregular areas).

The other way I can imagine doing it is with a generic model in the shape of a rectangular solid with height and width parameters. It could be very thin. It could float in front of the elevation.

Both of these could get you there, but I'm sure that them being objects (rather than 2d annotations) could cause some headaches.

Final idea, you could draw the fill region AND place a detail item. You would have to manually input the area from the fill region into a parameter of the detail component, but then could tag and schedule the detail items.

-luisa-
2016-10-11, 03:10 PM
Thanks for this Damon,

I am keen on testing your last suggestion. I am reluctant to add more 3d geometry to an already complex model. I am thinking I could just use a User Keynote which picks up the wall behind the filled region to avoid adding a detail component to deal with the keynoting. Then adding a 'Manual Area' parameter right next to the 'Area' system parameter would make it easy and quick to detect if it needed updating, and I could then use another parameter to filter the filled region types.

That was very useful - thanks!

damon.sidel
2016-10-11, 05:01 PM
Glad it was helpful!

One last thought on your "I am reluctant to add more 3d geometry..." comment. When there is 3d geometry that I am using for quirky purposes like this, I like to take advantage of tricks to "hide" it. The most simple way would be placing all of it on a Workset that is off by default in all views. The other way I've done when that is unsavory is create a Design Option Set with two options. The first is the primary and it is empty. The second option has the offending 3d geometry in it. That way I can switch to that design option in just the views I want to see that geometry.

Just some additional thoughts if the Manual Area becomes unmanageable.

david_peterson
2016-10-11, 05:41 PM
there's a sweet script in Dynamo that allows you to Tag (so I would assume schdule) areas of filled regions. Is that what you're looking to do?

-luisa-
2016-10-12, 08:04 AM
Yes david_peterson, that would be ideal, I assume it could extract the areas as well? Where can I find this?

irneb
2016-10-12, 08:11 AM
An alternative (if the facade is a solid wall and not a curtain wall) is to use the Split Face tool. Effectively you'd be drawing the same borders as your filled regions - but direct onto the 3d object's faces. This would even allow you to do so on curved surfaces - which would be very problematic using filled regions.

Then you can "paint" the various faces using any material of your choice (allows for varying surface hatches as well as render/realistic view appearance). Which then allows you to both tag & keynote those, as well as schedule them.

- - - Updated - - -


Yes david_peterson, that would be ideal, I assume it could extract the areas as well? Where can I find this?

I think david was referring to something like this: https://www.youtube.com/watch?v=kd53-ofHCgY

-luisa-
2016-10-12, 10:47 AM
irneb,
Split face could work but this is a historic building with complex elevations, wall sweeps, and other features - I believe some of the walls are already using split face to show different materials so this would get tricky.
On paper a filled region is all I need as this will only be shown on a particular set of technical elevations, but the ability to schedule and tag is missing.
I might venture into Dynamo for this but suspect the team may prefer to do a bit of manual work instead!
Thanks all.

david_peterson
2016-10-12, 12:55 PM
Here's a you tube video
https://www.youtube.com/watch?v=kd53-ofHCgY
Here's a tagging method
http://therevitkid.blogspot.com/2015/09/revit-tutorial-show-area-of-filled.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+TheRevitKid+%28The+Revit+Kid.com%21%29
There's a ton more out there.
Hope this helps.

sdarali
2016-10-20, 07:56 PM
I always advise to keep as much as possible the use of Revit tools for their intended use (e.g. use a wall command to make walls and nothing else). So if the "Filled Region" command lacks a scheduling functionality, instead of finding alternative command we can extend the functionality of Revit using .Net programming or a Revit Script. For your particular use, the below script is sufficient to produce the schedule. If you need help plugging it in into Revit, I can provide instructions. Currently the script will create a schedule for the Active View (currently open view) listing each Region Type and its Area, but it can be extended to run through all elevations.


public void ScheduleFilledRegions()
{
var uidoc = ActiveUIDocument;
var doc = uidoc.Document;
var collectorFilledRegions = new FilteredElementCollector(doc, uidoc.ActiveView.Id).OfType<FilledRegion>();

string data = "";

foreach (var e in collectorFilledRegions) {
var regionArea = e.GetParameters("Area")[0].AsDouble() * 0.092903;
var regionType = doc.GetElement(e.GetTypeId()).Name;
data += regionType + "," + regionArea.ToString("#.###") + Environment.NewLine;
}

TaskDialog.Show("Filled Regions Schedule", data);
}

Revitaoist
2016-10-20, 09:59 PM
I would definitely find an intelligent way to do this that is not so "manual autocad drafting" style. If it is a "treatment" finish i might try a material with a material takeoff for area.

-luisa-
2016-10-21, 04:15 PM
If you need help plugging it in into Revit, I can provide instructions.

Wow thank you, yes please! Though we would likely need this for the whole model rather than a single elation (though admittedly this would be a great start!)

sdarali
2016-11-02, 04:51 AM
I've updated the code to search for Filled Regions in all Elevation Views automatically without having to open them. You can follow the below instructions to install the Macro in Revit. Note that you have to install only once on each PC. There are better and faster ways to distribute across a network, but it is more complex to setup, so we'll just stick to the manual way. I have tested this on a sample project assuming that the Family Type of the Filled Region will be named according to the type of treatment on the elevation.

INSTRUCTIONS:
- Go to "Manage" Tab in Revit
- Far right, click on the "Macro Manager" icon
- Click on the "Application" tab in the "Macro Manager"
- If your Macro list is empty, then you need to Create a "Module" using the menu from the right menu and call it something like "MyMacros"
- The SharpDevelop Editor should now open. If not, then click on the "Edit" button from the right menu.
- Scroll to the buttom where you see the line "#endregion"
- Copy and paste the new Code given below immediately after the "#endregion" and before the "}" bracket. Add empty lines if needed.
- We can draw a table to populate it with data then place it on a sheet, or export data to an Excel file, but this will take longer and complex programming. So instead we will just copy the data into the Clipboard and the user will paste it into Excel/Word/Whatever. Revit macro cannot access the Clipboard by default so we need to add a reference in the next step.
- Right-click on the "References" on the left "Projects" window, and the choose "Add Reference".
- While in "GAC" tab, type "system.windows.forms" in the search field and click "Search".
- Select the "system.windows.forms" in the results windows and click "OK". The reference is now added.
- Press Ctrl-S and then F8 in order to "Save" and "Build" the solution/macros. You should not get any errors, otherwise make sure you followed the above steps correctly.
- Switch to Revit and open the "Macro Manager" again if not already open, and you should see the Macro "ScheduleFilledRegions" under the "MyMacros" module.
- Select it and click run. The data is now copied to the Clipboard.
- Open Excel and paste the data there
- Done

You don't need to setup every time. Next time just run the macro from the "Macro Manager" directly. The data will look like this:
104334

COPY THE CODE IN BLUE BELOW:
public void ScheduleFilledRegions()
{
var uidoc = ActiveUIDocument;
var doc = uidoc.Document;
var collectorElevationViews = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).Cast<View>();
string data = "View\tRegion Type\tArea (m2)\n";

foreach (var elevationView in collectorElevationViews) {
if (elevationView.GetTypeId().IntegerValue != -1) {
var collectorFilledRegions = new FilteredElementCollector(doc, elevationView.Id).OfType<FilledRegion>();

foreach (var e in collectorFilledRegions) {
string elevationName = elevationView.Name;
var regionArea = e.GetParameters("Area")[0].AsDouble() * 0.092903;
var regionType = doc.GetElement(e.GetTypeId()).Name;
data += elevationName + "\t" + regionType + "\t" + regionArea.ToString("#.000") + Environment.NewLine;
}
}
}

System.Windows.Forms.Clipboard.SetText(data);

TaskDialog.Show("Info", "Data is copied to clipboard");
}

-luisa-
2016-11-16, 09:29 AM
sdarali
I've been forgetting to say a huge THANK YOU for this, I am using it now and it does the job brilliantly!

david_peterson
2016-11-16, 02:34 PM
They just covered the Dynamo Method on yesterday's live AU class.
All of the data sets should be available online in about 3 weeks or so.

sdarali
2016-11-17, 01:30 AM
They just covered the Dynamo Method on yesterday's live AU class.
All of the data sets should be available online in about 3 weeks or so.

Yes, I recently met new guys who use Dynamo at work and they can achieve alot without learning how to code. It has access to Revit parameters similar to the API. I highly recommend it. I'm gonna learn it myself.

Purvi.G.Irwin
2017-04-27, 02:00 PM
You can create a detail component with a filled region with shared parameters for the height and width. Then create another shared parameter that gets the area by multiplying those two shared parameters. You can then make a tag that would include that SF parameter and even the type mark if you want. These can then be scheduled (detail item). You would have to do some creative filtering, but that's not too hard to figure out. I just did this for a customer who does a lot of preservation work (I also have an extensive background in HP and have used Revit very creatively if you have any other questions about Revit for HP)105100105101

bgoldman
2018-04-24, 07:40 PM
How did you end up addressing this issue?

- - - Updated - - -

How did end up addressing this issue?

david_peterson
2018-04-24, 07:46 PM
Here's one method.
https://www.youtube.com/watch?v=kd53-ofHCgY

Although we've taking that a bit further and are now using masses to generate a lot of our square footage numbers. We then take those and dump them into Power BI and start to play around with things.

hjaff1
2019-09-08, 08:27 PM
Hi I wounder if anyone can help me!

2 things!
I wonder if you can help. I have a schedule of all of my elements in the model, and I want to put my name to all of those element that I have modeled in Revit. how can I do that in Revit with a macro?
I normally export the schedule to Excel and fill everything and re-Import it back to the schedule.


the next one, is a little different, I have to put "0001 to however many element that I have in that shcedule" sometimes I have 50+ element, again, I normally export the schedule and fill in the numbering and re-import back to Revit!
so,
1-under the title "Designer" I need to put "My Name"
2- Under the title "Item Number" put a sequence number starting from "0001" to as many elements that I have in the schedule.!

is this possible at all?
I tried everything that i can but i didnt have any luck, but I dont have the programming brain! :)

Please help if you can!
sorry to take up your time and thanks in advance!

david_peterson
2019-09-16, 04:35 PM
Create a shared parameter for Owner and apply it to all categories in your model. Then fill it out with your name.

For numbering you can use an excel link tool. There's several available. I'm partial to the CTC Project suite and Spreadsheet link tool. Create the schedule with those items you want to schedule and you can use the tool and Excel functions to number from 001 to 999 or what ever. You could also write a dynamo graph to number things with a N+1 function, but you'd need to sort the list first, with is just easier to do in an excel link tool.

NewDesgin
2020-05-27, 03:29 AM
I always advise to keep as much as possible the use of Revit tools for their intended use (e.g. use a wall command to make walls and nothing else). So if the "Filled Region" command lacks a scheduling functionality, instead of finding alternative command we can extend the functionality of Revit using .Net programming or a Revit Script. For your particular use, the below script is sufficient to produce the schedule. If you need help plugging it in into Revit, I can provide instructions. Currently the script will create a schedule for the Active View (currently open view) listing each Region Type and its Area, but it can be extended to run through all elevations.


public void ScheduleFilledRegions()
{
var uidoc = ActiveUIDocument;
var doc = uidoc.Document;
var collectorFilledRegions = new FilteredElementCollector(doc, uidoc.ActiveView.Id).OfType<FilledRegion>();

string data = "";

foreach (var e in collectorFilledRegions) {
var regionArea = e.GetParameters("Area")[0].AsDouble() * 0.092903;
var regionType = doc.GetElement(e.GetTypeId()).Name;
data += regionType + "," + regionArea.ToString("#.###") + Environment.NewLine;
}

TaskDialog.Show("Filled Regions Schedule", data);
}

Hi Sdarali, Can you please send me the instruction to plug-in this script into Revit 2020?