# SpaceDesign Calculations

**SpaceDesign Calculations** are used to preset or calculate vales for attributes.

Examples:

- Set an attribute equal to a standard size - e.g. the X-width of a component.

e.g: %w% - (See**Substitutions below)** - Set an attribute to a constant value - to be used in other calculations or for display.

e.g. 3.14159, or: File.basename(Sketchup.active_model.path)) - Calculate an attribute based on the value of other attributes.

e.g. %length% * %cost_per_foot% / 12.0

## Substitutions

In the fields marked for substitution (*Substitutions* = *y*), you can enter values which will be replaced by the size of the component. This is done by using special codes, such as **%w%** in the description.

### Substitution codes

**%w%**is replaced by the width of the component,**%d%**is replaced by the depth of the component,**%h%**is replaced by the height of the component**%z%**is replaced by the minimum z-height of the component**%a%**is replaced the area of a face in the component. See: Area .**%cl%**is replaced the length or curves or edge lines in the component. See: Curve Length .**%v%**is replaced the volume for closed solids or by the product of width, depth and height for objects which are not closed solids.**%n%**is replaced by the name of the instance or component

### Metric calculations

%w%, %d% and %h% return values in inches even if you are using a different unit for your model.

- %w-m% will return a value in meters, %w-cm% in centimeters, and $w-f% in feet.
- Use %d-m%, %d-cm% and %d-f% for depth.
- Use %h-m%, %h-cm% and %h-f% for height.
*%v-m%*will calculate the volume in cubic meters, %v-cm% will calculate the volume in cubic centimeters, and %v-f% will calculate the volume in cubic feet.

*%v-m% is the same as %v%/61023.744095. (We use the SketchUp calculation VOLUME/(1.0m * 1.0m * 1.0m) to convert from cubic inches to cubic meters.)*

*%a-m%*will calculate the area in square meters, %a-cm% will calculate the area in square centimeters, and %v-f% will calculate the area in square feet. We use the area of a face in the component. See: Area

*%cl-m%*will calculate the length in meters, %a-cm% will calculate the length in centimeters, and %v-f% will calculate the length in feet. We use the length of a curve or edge line in the component. See: Curve Length

Note: The string which receives the substitutions is the value stored on the component.

### Samples

**String Fields**

This lets you use a generic description for several components, which will be modified by the actual size of the component.

e.g.: "**%w% x %d% table**" will appear on reports as: **36" x 48 1/2" table**

For width, depth, or height substitutions, you can also add an amount, in inches, which you would like to add or subtract from the actual size. e.g. %w" - 3.0 will subtract 3" from the width.

*Numeric Fields'*

You can use %w% or other values to set or calculate a numeric.

- %w% - will be replaced by the width of the component
- %w% - 3.0 wil be replace by the width less 3.0"

## Calculations

Fields may be calculates based on values in other fields.

- Use
**%field%**to represent the value from another field.

### Ruby Code

Calculations are executed using Ruby's eval() command. You may use any phrases which are available in Ruby.

- Floating point numbers must be preceded by a 0. For example, if you want to calculate a 17.5% tax, use a calculation like:
**%Base Price% * 0.175**

### Testing Calculations

There is a "Test" button for calculations on the edit attribute definition wizard.

The output shows the substitutions it makes to perform the calculation, the final ruby command, and the value after using it.

The '0's on each line are a level - for instance if a calculations uses another calculated field, it will show how that field is calculated as well.

If you select a component or group, before loading the attribute editor, it will perform the calculations on that item. Otherwise it uses the first component or group found in the model.

### Conditional Expressions

Ruby has a format, using ? and : to base a calculation on whether an expression is true of false.

**%length% > 180 ? 0.35 : 0.25**

A conditional expression returns the value of either the expression before or the expression after the colon, depending on whether the logical expression before the question mark evaluates to true or false. In this case, if the length is greater than three, the expression returns 0.35. For shorter items, it returns 0.25.

## Default Values

If the calculation string starts with "DEF:", then the value will only be applied the first time, or if the current value is blank. Examples:

- DEF:Enter Description - will cause the value
**Enter Description**to be placed in the field if not other values has been entered. - DEF:%n% - will cause the component name to be entered into the field if not other values has been entered.

## Extended prices and costs

To include extended prices or costs in your report:

- Add an additional field, e.g. '
*Extended Cost*. - Set the new field to total
- Set the original cost field not to total.
- Define
**extend_from**for the extended cost field.

## Extending length values

- Define a field equal to the length, e.g.
**length**with the substitution value %w% - Define a second field, to extend by length, e.g.
**cost_per_foot** - Define a third field, to be the extended cost, e.g.
**cost**, with the calculation value: %length% * %cost_per_foot%

You can also do this without creating the **length** attribute if you donot need to show it:

- Define a field, to extend by length, e.g.
**cost_per_foot** - Define a second field, to be the extended cost, e.g.
**cost**, with the calculation value: w% * %cost_per_foot%

## Debugging

You can display the calculations - before and after %xxx% substitutions - on the ruby console to help debug them.

## Advanced Techniques

- setting attribute values based on size of components, or other attributes.**Calculations****Area**- report on the area of a face in a component.**Length**- report on the length or curves or edge lines in a component.**Hyperlink Attributes**- attributes containing a WEB URL which will link to that URL from the PDF**Number Formatting**- Database and Currency formatting**List Attributes**- creating a list of attributes and settings.**Filtering**- filtering which attributes to include in report.**Select Entities by Attribute**- search for words, phrases or patterns in attributes.**Auto Generate Attributes**- define and edit attributes in an excel spread sheet.

## See also

**SpaceDesign:**