XPresso Parametrics


Evening Talkers. I am working on converting some objects that I have originally created in ArchiCAD to Cinema. In ArchiCAD these parts are parametric, and I would like to keep them that way in Cinema. In ArchiCAD I could actually use formulas to define a points position on a mesh. I am just wondering the best way to attack this project in Cinema. Do I need to move the points individually, or is it possible to move selection sets? Any help would be greatly appericiated. :thumbsup:


Could you be more specific of what archicad does or post an image. Maybe I can help.


What I am looking to accomplish is to be able to change the height of an object, without distorting the object. So just plain scaling the object wont work. For eample, these shutters.

They are the same object, but have 2 different heights. The frame the makes up the outline of the shutters are the same on both. This is what I would like to be able to do.
In ArchiCAD I can do this by defining a variable (say Hght) for the height. Then I can program the coordinates of the object by defining the top of the shutter to be at Hght and the inner frame of the top of the shutter to be at say Hght - 1".

I am trying to replicate something similar to this with XPresso. Would I need to acces the points indivdually in XPresso and move them, or is there a way to move the points say base on a selection tag.

Hope this clears up any confusion.


This is not to hard to make. I did dozens of these. If you want I can offer my services

Try to do it with primitives they are easier then polys


The shutter is just an example. It would be simple if everything were just simple cubes, but I also need it to work for more complex geometry.

In this example, the vertical piece would be moved as a whole (not by points), and I need the horizontal to stretch to fill inbetween. There are also going to be conditions where I will need to stretch both horizontal and vertically.


Hey, I don’t know if this will help. It’s an xpresso that I recently modified. It might be a bit of a mess, but I think it could be adapted to what you want to do. The main parameters are ‘blocks across’ and 'blocks up" the imput is in the xpresso tag.
Hope it helps you!




Thanks Kico82. I’ll take a look at it.


I have jumped in, and am having so-so results with moving points via XPresso. One problem though. I would like the X and Y value to remain the original value, and only the z to change. Is there anyway to feed the original X and Y values plus the new Z into a real2vector and input that back to the original point position? I can make the Z work, but the X and Y both change their value to 0.

Also, would this be something that would be more suited to COFFEE instead of XPresso?


You could use selection sets to quickly pick the relevant points to move but I think setting it up with expresso would be tricky simply because Cinema does not have clusters which is what I really think you would need here. A cluster is a group of points or polys that has its own axis and can be manipulated as if it were a separate object. It would easy to set up an expresso that would move clusters, but again, no clusters in Cinema.



I had tried to use selection sets, but yeah, no go there. I can’t get anything usefull out of them. This is starting to look like it will be a lot of work to set up.


Here’s an expression for moving point selection sets on each axis. User Data are on the XPresso tag.

     This expression has link fields for four selection tags but the capacity for more can be wired into the expression.

In the case of overlapping selection sets, shared points will be controlled by the set furthest to the right. If a selection set is removed or changed while its points are offset, the omitted points will of course remain in their altered positions. They can be restored by simply adding them to a new linked selection set and resetting the values.


Thanks Darter. This looks like it will help quite a bit.


Glad to have been able to help.

I’ve posted an updated file with the tag link fields removed as the expression had evolved beyond the need for them.

The tags are numbered 1 to 4 in the OM from left to right. Changing the position of a tag will change the set of User Data values to which it belongs.


Looking at the selection sets XPresso helped, but for some reason I just can’t get this to work. I now am trying to get certain points (the selection set) to aling to a symmetry objects Y position. Actually I can get that to work, It is keeping the points original X and Z locations that isn’t. Attached is what I have. There is a frame object that XPresso is working on and one where the points are in there original place. I would like to be able to do this whitout using a proxy object.

Nevermind now. I used a proxy object in setting up the exprission and then switched back to the original object. For some reason this works.


New Problem now. I cannot get the exclusion on the tag node to work. I have made 2 point selection sets, yet when I add one of the selections to the exclusion It is still acted upon by the XPresso setup.

Figured it out. Problem had to do with selections and proxy objects.


Adding a tag to the exclusion list is the same as deleting it - its points will remain offset. If you want their positions to be reset, do this before excluding the tag or add them to a new tag and set all values to zero.

Also, when a tag is deleted or excluded, any tags to its right will move up the User Data list. For example, if the 1st tag in the OM is excluded, the 2nd tag will become User Data Tag 1, the 3rd will become Tag 2 etc.

For this reason, if you're going to exclude tags it's better to do this before setting any offsets for the remaining tags.

The proxy object gives XPresso the starting positions of the selection set points relative to the object axis. The number and sequence of points should be the same as for the main object. It should be created and linked once you’ve finished adding geometry, then left alone.


This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.