Looking for someone to make a script for blocks

Hi I am looking for someone to create a script that will take every single block in my model and produce 1 of each block in a specific orientation (or not) on 0,0,0.

If I have 30 blocks in my model and there are 10 copies of 3 blocks, this script should produce 3 blocks on 0,0,0.

Further, I would like to have another, similar script. That will take 1 block with many blocks inside of it, and produce the same thing. OR, maybe the first script is capable of doing this as well.

Please direct message or respond to this thread if interested.

Thank you!


Hello - Insert, typing in ‘W0’ as the insertion point, should get you that if I understand - is that the result you want but all at once?


I want a command that will take all of my blocks that I select and reproduce new copies of JUST ONE OF EACH (if there are duplicates) to the origin (or wherever) in a SPECIFIC orientation (or not)

in this image I have 3 block definitions:
2 copies of 1, 3 copies of 2, 4 copies of 3
9 blocks total

I want this command to take one copy of each one and put it somewhere.

preferably I would like to assign the orientation of a specific FACE to the z axis, if that makes sense? so it looks something roughly like this

Setting a usertext for rotation to the an object in the block enables this grasshopper definition. If that’s an option – requires elefront.

hi @zale_orcid,

You can try this script - it should do all mentioned above, depending on what settings you choose:
BlockDefinitions_Layout.rvb (5.7 KB)
(save on your HD, drag-and-drop into Rhino, then BlockDefinitions_Layout alias should autocomplete and run the script)



I will try this out asap and provide feedback, thank you so much

I really like where this is going but I can’t get the orientation to end up how I want it.

If I have a block that’s rotated, I can’t seem to get the face I want to land perfectly flat on one side

2 things here:

  1. I want to be able to explode the subassemblies from the starting block and place each object in the sub assembly - If I can’t do that, that’s fine I’ll just explode the toplevel assm first. But that will mean that everything inside of my block needs to be individual blocks. But If this can work on normal polysurfaces that’s fine too. maybe it doesn’t need to be blocks. But that’s where I want to start.

  2. I want to kind of assign the FACE I CHOOSE of the object to the ground plane. Is this possible?

  3. When it’s multiple objects inside of an object it doesn’t distribute the blocks out (explode) —

  4. but when I explode and have separate blocks, it orients them weirdly and I can’t figure it out
    appears to be on the insertion point but I want to be able to “flatten the objects” to see them from top view if that makes sense…

So that I don’t have to individually orient them

I can’t offer any assistance on the scripting, but if an MPlane was assigned to the desired face (marked with the ‘x’) on creation of each part, could that plane be used to orient all objects to the World xy plane correctly?

Alternatively, if each object is created at World 0,0 and then made into a Block before being moved into place, subsequently inserting an instance of each block name would provide what’s desired, like Pascal says? That would need a lot of discipline from whoever’s drawing the parts though.

so I don’t know what an M plane is (sorry it’s probably super basic) - my bad.

I also somewhat understand Pascal’s idea – and yes, agreed would require more discipline than I have…

mplane feels correct. would this mess with any kind of cplanes I have. Is there a way to remove them from all objects. what are they for? can it exist in the block, outside of the block. If I put one on a polysurface and then later add that object to a block, does the mplane carry with it?