Adding annotation balloons to page with block items

I am making a script that does this:

anyone interested to test and give feedback?

Last version of the tool can be found here:


with table lines:


I would be up for testing and feedback :slight_smile:

thanks @lando.schumpich

it’s still quite simple in its current state though, it’s more a concept. But anyway here it is: (4.4 KB)
One of the ideas for next steps would be not generate the parts list directly, but rather recording it.
The list that is generated includes item count that updates automatically when adding more of the same blocks.

Hi @Gijs,

Cool idea!

I’m not exactly sure what to do, when I’m asked to modify the start value (or press enter)? When I simply press enter, the following error appears:


I’ve tested the script in Rhino for Mac 5.5.3 in Perspective view.

Yes it doesn’t work in Rhino 5 (tested here on Windows)

Strange, that method should be available according to

Anyhow, I’ll see if I can work around that making my own polyline as I did before here:

Yes I think the underlying rhinocommon methods are there but not the rhinoscriptsyntax wrapper function.

I tried adding it in by hardcoding

import rhinoscript.utility as rhutil 

    # curve = rs.GetPolyline(min=2, max = 3)
    points = [(0,0,0),(20,0,0)]
    points = rhutil.coerce3dpointlist(points, True)
    curve = Rhino.Geometry.Curve.CreateControlPointCurve(points)

Which seems to work … still testing … Am I missing something with the automatic numbering?

Ah, yes that’s another thing. But I don’t think I can fix that, because that functionality is not in Rhino 5 (Mac nor windows)

Btw: the idea is to start numbering at 1 and in layout. This will add the table to the lower left corner of the sheet. This I want to change later as mentioned by recording the steps where there will be a function to generate the table after the fact.
If I do that I can probably also work around the numbering issue

For this I need to change a few more things, namely recording the selected block item into the balloon properties. Then I can collect the balloons after the fact to retrieve the block information

A couple of other thoughts:

  • Is the scale hard-coded, i.e. assumes a specific combination of units and object sizes?
  • It doesn’t reset the number on undo (on Rhino5 at least) - this would need a custom undo event.

It’s designed to work in layout space (mm) but you can change the size of the balloons. Minimum radius is 3
This means if your pages are inches, they will be huge :grimacing:

Is this possible, and if so how?

Yes - here it is!

I have used this successfully here

1 Like

this version should work both in Rhino 5 and 6. Nice thing is that I added some code that checks your Rhino version, so it gracefully degrades to a static number if you’re using version 5. This will change later when I change the code as described. I now use GetPoints instead of GetPolyline. Works just as well.
No custom undo yet… and I might not even need it when I rewrite the code. (5.0 KB)

1 Like

Nice work, @Gijs! I hereby confirm that it works on Rhino for Mac 5.5.3.
Why is the legend table organised from top to bottom, starting with the last created block, and not the first one?

Good to hear :slight_smile:

No real reason for that to be honest. I’m going to change it completely anyways because I want to make the table updatable. But for that I need to improve my coding skills :wink:

1 Like

I’ve now made a version that no longer asks for a number:
instead it automatically keeps track of the numbers and seeks a ‘free slot’

Unfortunatly I cannot yet make this work in Rhino 5, so if anyone has a solution for this issue I might be able to make it work in v5 as well:

furthermore, it no longer generates a table, but makes the table only after the fact on request. The table is ‘recorded’ and can be updated at any time by running the script again.

When deleting balloons, these will be removed from the list after rebuilding.
in action:


Just got reply from Dale that there is no group user data in Rhino 5. Guess that means no dice for Rhino 5 unless someone has another workaround.
I can’t rely on group names either because even when they are deleted they still remain in the group table and are not flagged as deleted. See this thread.

Hi. Do i have to make polysurfaces into blocks before using this script, or is there a way to use it directly on polysurfaces?

@leg3 It works on blocks only. The script is open source so feel free to make any adjustments. You can also consult me if you need specific things added.