Choose your top Archicad wishes!

Read more
About Archicad's design tools, element connections, modeling concepts, etc.

Material Takeoff Tutorial, by Karl Ottenstein

Posted: Thu Nov 27, 2003 3:01 am Post subject: Re: Virtual Building - Material List

muttlieb wrote:
Ok, here is a more specific question that gets to the point of what I want to do:

How would you use ArchiCad to calculate the number of studs in a wall, including plates, blocking, etc.? I would also like to include header info. I do not need a stud layout.

This will introduce you to what you'll need to learn.

Start a blank project and set your wall tool to create 2x6 exterior wall. (In fact, you can use any wall...more on that later.) Draw a short wall.

In the Calculate menu, under List Components, choose Basic. Unless some other settings have been made, you will probably get a Warning error that the "Listing is empty.' Click OK and close the (empty) listing window.

In order to generate components for the listing, we have to associate a property script with the wall. This script will determine what materials are required to build the wall.

Select the wall. Now, open the wall settings dialog (ctrl-T) . Under Listing and Labeling, on the right side under Link Properties, check the box for "Individually" for this example. A popup list appears for you to choose from. With either "All loaded libraries" or "Accessories.apx" selected, scroll down and find "WD Ext 2x6 Wall" [US libraries - names different elsewhere]. Click the Link button. Click OK in the wall settings to accept. [Alternatively, you can do this via the info box if it is stretched big enough.]

OK. Now, let's go back to the Calculate menu, under List Components, and choose Basic again. This time, because there is a property script associated with the wall, ArchiCAD can compute some materials. The screen shot below shows the list computed for a single wall that is 9'-6" high and 20' long.

You'll notice some strange things going on: it has building paper, siding, sheetrock and all kinds of stuff in there that you may not have wanted. Also, the numbers don't really make sense - this is a 20' long wall, but there is only 6 feet of treated plate (assumed to be on concrete - possibly not what is desired) - and only 12 feet each of top plate and blocking ... typical US frame walls would show 20' of bottom plate and 40' of top plate. Finally, it shows clear mahogany baseboard - and only 6' of that - and I'll bet your clients aren't going to use mahogany!

OK. Where did all of this come from and how can you make it your own?

Lesson 1 - Get familiar with the property object/script

Select the wall in plan. Now under the Calculate menu, choose the Edit Properties command to open the property script associated with the selected object.

Let's not figure out how the numbers are computed yet, let's first see what parameters this script gives us. Click the Parameters button on the left side of the (GDL editor) window. You'll see some flyout options for the base moulding (baseboard) and the siding for example. At the far right of the base moulding line, click the triangle and choose some other value such as 'beveled clear oak'. For sheetrock finish, change 'Firetape finish' to 'smooth texture' and for sheetrock type, change 5/8 in to 1/2 in.

We've just modified a built-in library component that is read-only. We need to do a save-as into our own company library folder to have an editable copy of what we just did to apply the changes and to edit for future changes. Under the File menu, choose Save As and change the name to something like "My Wood Ext 2x6 Wall". Now, close the editor dialog.

Finally, we have to change the wall to use our own (modified) version of the property object rather than the delivered one. Just as we linked above, go to the Link Properties dialog and with 'all loaded libraries' selected, you'll see your new property script listed (perhaps at the top). Select it and click Link. Click OK out of the wall settings dialog generate a basic component list again.

Voila! It now shows oak for the baseboard, 1/2" sheetrock, and gives square footages for the smooth texture. (The square footages and all other units are wrong because of problems in the script as delivered ... but that's below.)

Lesson 2 - Look at the Script that Computes Things

Select the wall in plan once again if it isn't still selected. again, under the Calculate menu, choose the Edit Properties command to open the property script associated with the selected object.

This time click on the "Property Script" button on the left side of the editor window. Resize the window so that you can easily read the content.

This may either scare you away for good, or intrigue you.

The GDL Basic-like code shown here is what computed the components that you saw on the basic component list. It is too much to explain in this already too long post - but as you skim the code, realize that there are certain variable names that are special global names that return information specific to the object that the script is attached to. For example, the variable WALL_LENGTH_A returns the length of one side of the wall if, as in our case, the script is associated with a wall. That number can be used in subsequent arithmetic to compute things.

The lines beginning with "COMPONENT" are what generate the entries that show up in the basic component list that we saw. (They also link to more information in a database - but we won't go there now.)

Lesson 3 - Fix the Script (or make it your own)

Debug the property script. The script we're looking at is wrong. The values that are being returned for the length of base plate and baseboard are in meters, not feet! Ditto the area amounts, etc. It's not that ArchiCAD is wrong ... it's just that whoever wrote this script blew it and I guess none of us tested it before to let GS know that it needed fixing.

The fix isn't bad (and what I do below isn't complete, but good enough for now). ArchiCAD stores values internally in meters. WALL_LENGTH_A returns a value in meters (a little over 6 for our 20' wall - the bad value seen in the attached screen shot.) The first line of the script defines FTM the conversion factor from meters to feet...which we do not need. The author forgot to define a conversion from meters to feet - and then to use it in the calculations.

To make life easy, just insert the line:
MTF = 1 / FTM as the second line of the script - defining 'meters to feet' as the inverse of 'feet to meters'.

Now, replace the lines that read:
!! : 

with the following:
!! : 
M2TF2 = MTF * MTF 

(The variable M2TF2 is intended to represent the "square meters to square feet" conversion.)

Also, change the descriptions as desired - for example, the studs are hard-coded as 'No 2 2x6x8ft stud" - but we want 10' studs for the sample wall (in fact - the script should modify the description based on the actual height of the wall ... but that is more programming than belongs in this 'short' post!).

Close and save the script window, and regenerate the list and you'll see the more reasonable looking numbers that appear in the bottom half of the attached image.


The script approach gives great power, since all kinds of components can be generated from the size information of a wall, for example, as you saw here...or any ArchiCAD object (in the general case). It has great danger as well since you could obviously associate a 12" CMU block wall script with a wall that is drawn on plan as a 2x4 stud wall. It still requires thought and checking. And, as we've seen, the script itself may have bugs preventing the proper numbers from being generated.

IMHO the power exceeds the limitations ... compared with other software that generates a BOM for you using the manufacturer's rules, not your own. On the other hand, GS could certainly have delivered property scripts for the common components in each country so that everyone would get somewhat close material takeoffs 'out of the box' for standard construction projects.

As an example of using your own rules, consider a waterproofing membrane on a foundation wall. Suppose the manufacturer requires a 1' overlap... you can easily take that into account in the square footage calcs so that the required amount of material is more accurately estimated. By knowing the width of a roll of material, you would also know if the strip left after triming a rolled-out length was wide enough to use for anything, and if not, would include that amount also in your square footage. If you knew how many strips were applied to a wall and what size bead of sealant material was required per overlap, you could estimate tubes of sealant. The volume of concrete in yards for the wall is easy; the rebar amount would come from customized script based on the structural engineer's reinforcement schedule. And on it goes...


PS See the PDF file for the GDL reference manual for more information on Properties scripts and the GDL programming language.

Karl Ottenstein - Archispectives LLC
AC 8.1 R1, Art*lantis 4.5, Photoshop CS, C4D XL7, Piranesi 3
Win XP Pro, 3GHz P4, 1.5GB RAM, 128MB Radeon 9700 Pro w/ twin 19" LCD, Wacom Intuos 2

Last edited by Karl Ottenstein on Thu Nov 27, 2003 8:18 am; edited 1 time in total


ArchiCAD since 4.55 ... 1995
HP Omen