Constraints, Relationships, and Parameters

My last few posts have mostly just offered my opinion. This time, I’m really hoping to get responses from you, the reader!

 

One of the hot topics when we talk about BIM  is “parametric design.” I hear people talk about constraints and relationships and parameters as though they all mean the same thing, so I wanted to clarify a bit and offer my own opinions.

 

To me, each of the three terms means something slightly different, but all three are used to capture what the designer has in mind when creating the model. That’s the whole point of any kind of adding them to a program: to capture the designer’s intent and to help make changes to the model more quickly.

 

A constraint ties two overlapping elements together. A simple example is the edge of a ceiling that coincides with the face of a wall. Constraining them together will mean that moving the wall will move the edge of the ceiling as well.

 

Even at this basic point, there is a question of behavior: If you try to move the ceiling edge, what of the following should happen?

·         The wall moves with the ceiling automatically, without any notification from the software

·         The wall moves with the ceiling automatically, and the wall is highlighted to tell you that the it moved as well

·         The software tells you that doing so would move the wall as well, then offer you the choice to move it or not (and if not, remove the constraint)

·         The software gives you an error message and gives you the options to undo your change or remove the constraint (like one popular software does….)

·         Some other option?

 

All of these possibilities point to this: should there be a hierarchy of constraints, so that one element can move the other, but not vice versa? Or should all elements in a relationship be treated as equals?

 

Moving on, relationships are constraints with an angle or distance assigned to them. For example, two corridor walls that have their faces set to be 6’-0” apart, so that moving one wall moves both of them, retaining the distance between them. Another option is two grid lines set to be 60 degrees apart. Rotating one line would move them both, but moving one of them would not move the other (since the angle would not be changing).

 

For relationships, what would you want to see?

·         The second element moves/rotates automatically with no notification

·         The second element moves/rotates automatically, highlighting the other elements that moved

·         The software informs you that there are related elements and offers you a choice to move them or break the relationship

·         Some other option?

 

Parameters are the most complex and usually involve some form of mathematical calculation. For example, three windows along a wall that are evenly spaced or mullions in a curtain wall that are 4’-0” on center for the entire length of the curtain wall. If the wall’s length is changed, the windows will re-space themselves. If the curtain wall is made longer, then more mullions are added. A more complex example would be a bow-string truss that has a parameter for the radius of its curve, and changing that radius requires all the elements in the truss to change their length.

 

Once again, there are several ways to handle this. I’ll propose what I would like to see the program do:

1.       Show me the proposed new element locations on-screen.

2.        If more than one option is viable, such as spacing the mullions 4’-0” from the start of the wall or centering the mullions so they have equal space on each end, show me both of them and let me choose between them.

3.       Have an option to remove the parametric relationship and let me move the windows/mullions myself.

 

I want the software to take a guess and, if the guess is wrong, let me discard the guess and manually make the changes. I always want the software to protect my work that I’ve already done. If I spend 2 hours working out a mullion pattern, I really don’t want the software to discard all my work just because I made the wall 1’-0” longer.

 

Lastly, I want to be able to change the nature of a parametric relationship on the fly. Maybe I decide that 4’-0” isn’t the right spacing and, just for design options, I want to make 6 equal-sized glazing panels instead. That should be a quick change and not require me to delete everything and start over.

 

I’ve asked a lot of questions in this post and proposed how I would like to see parametric relationships work. If you agree, disagree, or have some other alternative altogether, please comment!

 

 

Parents
  • Scenario 1 - Constraining an object to another object by origin

    A wall and a ceiling are constrained together.

    They should have either an active relationship (in this scenario if the slab moves the wall moves with it and vice versa).

    They have a passive relationship (the first element selected will move the second but the second element will not move the first).

    The objects do not have to be physically connected just their origins relative to each other are constrained together.

    This is similar to current behaviour with graphic groups and active and passive relationships

    In these terms you are effectively inserting a "Field" element property into the Origin Coordinates of one or both object.

    Wall Origin.X = Slab Origin.X

    Wall Origin.Y = Slab Origin.Y

    Wall Origin.Z = Slab Origin.Z-300

    Depending on the relationship (Passive or Active) Slab Origin XYZ may be defined as the reverse of this.

    -----------------------------------------------------------------------

    Scenario 2 - Constraining a Dimension of the object

    The Height Dimension of the wall is constrained by the Z Height of the slab

    If the slab moves the height of the wall adjusts to match the height of the ceiling.

    This may have a formula or parameter added into the dimension

    e.g. Wall Height Dimension = "Constraining Object Z Height" - 150

    I see this working in a similar fashion to inserting a field of an element property.

    Edit the dimension...insert element property, click on slab and choose the Z origin and it inserts it as a value into the dimension as a "field"

    additional fomulas can then be added ... it would also be useful when you click on the "field" in the dimension that it hilights the element it is the property of...

    For more complex scenarios a Dimension Element itself can be constrained by start and end points linked to other objects and by size formulas.

    ---------------------------------------------------------------------

    Given the potential complex relationships I do not want warnings asking me if another element should move on a fully parametric building I would be there all day saying yes.... I, am adding the constraints, so I don't need to be asked afterwards if it should happen.

    In terms of warnings, if I am constraining an object, then the only warnings I want are that it is over constrained and their is a clash, or to hilight objects that have changed as a result of an element manipulation, perhaps in a hierachical tree dependency diagram (similar to the projectwise file dependency diagram but for elements).

    In terms of seeing where the constraints are I want to to be able to right click on an object and to "show 1st level constraining object" which will hi-lite the slab if the wall is clicked. Then to have an option to show the dependency heirachy in a tree diagram to show the multiple levels of dependencies and to be able to hi-lite them by clicking in the tree diagram.

    ----------------------------------------------------------------

    Finally Parameters

    I just need a set of variables like those in GC where you create a variable and have it is as slider or a fixed value or as a formula based on other variables.

    Just some Friday night thoughts to add into the melting pot...

    Regards

    Stephen

Comment
  • Scenario 1 - Constraining an object to another object by origin

    A wall and a ceiling are constrained together.

    They should have either an active relationship (in this scenario if the slab moves the wall moves with it and vice versa).

    They have a passive relationship (the first element selected will move the second but the second element will not move the first).

    The objects do not have to be physically connected just their origins relative to each other are constrained together.

    This is similar to current behaviour with graphic groups and active and passive relationships

    In these terms you are effectively inserting a "Field" element property into the Origin Coordinates of one or both object.

    Wall Origin.X = Slab Origin.X

    Wall Origin.Y = Slab Origin.Y

    Wall Origin.Z = Slab Origin.Z-300

    Depending on the relationship (Passive or Active) Slab Origin XYZ may be defined as the reverse of this.

    -----------------------------------------------------------------------

    Scenario 2 - Constraining a Dimension of the object

    The Height Dimension of the wall is constrained by the Z Height of the slab

    If the slab moves the height of the wall adjusts to match the height of the ceiling.

    This may have a formula or parameter added into the dimension

    e.g. Wall Height Dimension = "Constraining Object Z Height" - 150

    I see this working in a similar fashion to inserting a field of an element property.

    Edit the dimension...insert element property, click on slab and choose the Z origin and it inserts it as a value into the dimension as a "field"

    additional fomulas can then be added ... it would also be useful when you click on the "field" in the dimension that it hilights the element it is the property of...

    For more complex scenarios a Dimension Element itself can be constrained by start and end points linked to other objects and by size formulas.

    ---------------------------------------------------------------------

    Given the potential complex relationships I do not want warnings asking me if another element should move on a fully parametric building I would be there all day saying yes.... I, am adding the constraints, so I don't need to be asked afterwards if it should happen.

    In terms of warnings, if I am constraining an object, then the only warnings I want are that it is over constrained and their is a clash, or to hilight objects that have changed as a result of an element manipulation, perhaps in a hierachical tree dependency diagram (similar to the projectwise file dependency diagram but for elements).

    In terms of seeing where the constraints are I want to to be able to right click on an object and to "show 1st level constraining object" which will hi-lite the slab if the wall is clicked. Then to have an option to show the dependency heirachy in a tree diagram to show the multiple levels of dependencies and to be able to hi-lite them by clicking in the tree diagram.

    ----------------------------------------------------------------

    Finally Parameters

    I just need a set of variables like those in GC where you create a variable and have it is as slider or a fixed value or as a formula based on other variables.

    Just some Friday night thoughts to add into the melting pot...

    Regards

    Stephen

Children
No Data