# PA-1 Parametric documentation

## Knowledge in IFC

Designers and product manufacturers frequently “engineer to order” products based on customer requirements. Examples include bulk materials, mechanical equipment and prefabricated buildings.

Some desire to publish **c**onfigurators where the requirements are specified later. Whilst this may require special interface to allow this to occur or a mapping to an application language, IFC can be extended to define the configuration rules and interface, allowing others to implement this directly or indirectly.

Example: a material manufacturer may wish to convey how their product performs in context. An example might be brick in a cavity wall. To avoid having to publish endless combinations of brick, air, insulation, block work and plaster, a configurator can be published.

Example: an instant building provider may wish to convey how their product can be configured to the users’ requirements. An example might be a garage. To avoid having to publish endless combinations of sizes, a configurator can be published.

The schema allows the definition of the knowledge. An engine is required to execute (resolve) the knowledge.

## Frequently asked questions

### What documents are available?

The following draft specification and simple IFC file examples have been developed so far:

- IFC Parametric Schema extension (EXPRESS schema)
- Simple parametric example (IFC file)
- Small model example (IFC file)

### What language is used?

Equations can be defined as a hierarchy of formulae objects or as ‘user-defined’ equations. User defined equations use the names provided on the constants and bindings. The effect of this is that the input bindings associated to a formula create local variable names. User defined equations can use the defined functions and the four basic operations and simple brackets: it is up to the parametric engine to parse these user defined equations.

### What user interface is used?

No interface style is prescribed: The bindings allow the definition of name and description for variables: those bindings tagged with UserWrite set to true are those that should be offered to the user, those with UserRead set to true may additionally be shown to the user for information.

### What can parametric IFC do?

The arithmetic parametric objects allow the definition of public and private variables and the documentation of formulae that relate these to and from any attribute or property of any IFC object.

The geometric and dimensional constraints allow the capture of 2D and 3D relationships that should be maintained during re-configurations

** **

### Functionality enabled

- User input values with descriptions
- Constant values
- Operators
- Inbuilt operators and user defined equations
- Extensive numeric operators
- Extensive string operators
- Extensive logical operators
- Access to any IFC object attributes and array index.
- Peek to obtain value
- Poke to update value
- Object operators
- Replication and suppression of objects.
- Referencing of objects to get attribute values.
- Logical controls
- Conditional execution or suppression of formulae
- Conditional execution or suppression of bindings.

### Parametric engines

- AEC3 has developed _Resolve1.ifcxml.xsl which operates on parametric IFCXML objects
- AEC3 developed Query Function Resolve1.qex for the EPM model server.
- Peter Bonsma has developed an interactive parametric model viewer
- TUM have parametric IFC interfaces to Solidworks and other applications.

## Principles

** **

**Implementers agreement**: a configuration (ie an IFC model with parametric knowledge embedded) should be published with the objects in a resolved state.** **

This allows an application not able to resolve parametric knowledge to use the basic model, and those applications that can resolve parametric knowledge to confirm that their implementation is effective at least for this one set of inputs.

**Schema** **principal:** the addition of knowledge objects does not affect the rest of the schema.

### Parametric engines

A parametric engine implementation needs the following capabilities

- Read IFC and IFCXML
- Identify configured objects
- Enquire for user provided values
- Provide a trace of the objects’ attributes that are read and written (with error reporting)
- Bound Object not found
- Bound Attribute not found
- Bound Attribute type wrong
- Bound Array Index wrong

- Provide a trace of the formulae used (with error reporting)
- Unknown function or operator
- Incorrect number of arguments
- Arguments of wrong type

- Provide a trace of the execution (with error reporting)
- Domain errors
- Zero divide
- Negative root (? Or return negative root ?)
- Arcsin, arc cos, out of range
- Tan angle +/- 90
- Endless (>100) iteration

- Generate a resolved model (with or without knowledge entities being left in). It should validate or enforce the geometric and dimensional constraints.
- Write IFC and ifcXML

**Optional capabilities**

- GUI
- Form based value panel
- Visualisation of model pre and post resolution
- Tabbed windows for traces
- Ability to mass-generate frozen objects
- Other features
- Execution of user-defined formulae
- Tracking of unit dimensionality
- Tracking of sensitivity

### Parametric editor

A parametric editor implementation additionally needs the following capabilities

**Direct creation of **

o Constants

o Bindings

o Equation relationships

o Association of equations or bindings to objects.

**Wizards**

o Replace value X1 with formula k.X+c (ie 400mm = 0.5 * door_width – 50mm)

o Replace all coordinate axis values by bi-partitioning or tri-partitioning

**Graphic creation of**

o Geometric constraints

o Dimensional constraints

### Ifc parametric schema

- Parametric resource entities
- IfcParametricBinding: this provides a name and description and points to an object, an attribute and optionally an index (if the attribute is an array). It carries four flags to control if it can be read or written to by the user and if it can be read or written to from the model.
- IfcParametricConstant: this provides a name and description for a constant value.
- Parametric resource relationship entities
- IfcRelAssociatatesFormula allows formulae to be associated to an object,
- IfcParametricFormula carries a list of output bindings. It also carries a list of inputs which may include constants, bindings and other formulae. Its operator may be chosen form the defined list or a user-defined formulae may be given.
- Parametric Type definitions
- IfcParametricOperationEnumeration
- IfcParametricBindingSelect

### Ifc geometric and dimensional parametric schema

(to follow)

## Types

· Numeric

· Text

· Boolean

· Object reference list

## Operators

Operators take the listed input arguments and combine them

## Numeric Operators

Numeric operators take the arguments and calculate with them

USERDEFINED – uses given formula

MULTIPLY – multiplies all the terms given together

ADD – multiplies all the terms given together

EQUALS – uses first term given as outcome

MINIMUM – smallest returned as outcome

MAXIMUM – largest returned as outcome

AVERAGE – returns the sum of the terms divided by the count of the terms

DIVIDE – returns the first term divided by the rest

SUBTRACTION – returns the first term less the rest

INVERSE – returns 1 divided by the product of terms

NEGATION returns 0 minus sum of the terms

DISTANCE returns the sqrt of the sum of the squares of the terms

SINE, COSINE, TANGENT – degrees

ARCTAN, ARCCOS, ARCSIN – degrees

## Text Operators

Text operators that take the arguments (with numeric and logical operators converted to text) and concatenate them to make text

WORD - as found,

PHRASE – with intervening spaces.

LIST – with intervening commas.

SENTENCE – with intervening spaces and a final full stop.

PARAGRAPH – with intervening spaces and a final line feed.

## Boolean Operators

EQUALS … equals …

NOTEQUALS … does not equal …

GREATERTHAN … is greater than …

LESSTHAN … is less than …

GREATERTHANOREQUALTO … is greater than or equal …

LESSTHANOREQULATO … is less than or equal …

MATCHES … matches …

DIFFERS … differs from …

## Object Operators

REFERENCE(attribute_name,object_reference(s))