Hello CATIA Team,
I would like to propose an enhancement for CATIA Drafting in both CATIA V5 and 3DEXPERIENCE CATIA.
The current annotation positioning tools are useful for alignment and equal spacing, but on dense assembly drawings there is another practical problem:
Balloons can be perfectly aligned while their Leader Lines still cross each other.
The reason is that equal spacing alone does not necessarily produce a good Balloon order relative to the geometry of the Leader attachment points.
I have implemented and tested an alternative geometry-aware placement strategy as working CATScript prototypes.
The goal is not only:
equal spacing → annotation placement
but:
Leader geometry → Balloon ordering → annotation placement
1. SmartAlignBalloons v0.9
The first CATScript aligns selected Balloons along a user-defined line.
The user selects DrawingText objects with Leaders and defines the alignment line directly with two mouse clicks.
For N selected Balloons, the line is divided into N + 1 equal intervals.
However, the Balloon order is not calculated only once in advance.
For every target position, the algorithm evaluates all remaining Balloons again using the geometry between:
Current Target Point → Leader Anchor Point
and the alignment direction.
Then one Balloon is selected, moved to the current target position, removed from the candidate set, and the remaining geometry is recalculated again.
The process is therefore:
N → select one Balloon → move
N-1 → recalculate remaining Balloons → select next
N-2 → recalculate again
...
1
This iterative approach can significantly reduce Leader crossings in many practical drawing situations.
2. SmartAlignBalloons Perimeter v0.1
I also implemented a second mode for drawings where many Balloons need to be distributed around the complete perimeter of an assembly or isometric view.
The user specifies only three points:
P1 → P2 → P3
The fourth point is calculated automatically:
P4 = P1 + (P3 - P2)
The command creates a temporary parallelogram and two diagonals.
The diagonals divide the area into four triangular regions.
Each Balloon is classified according to the Anchor Point of its first Leader and assigned to one of the four perimeter sides.
Each side group is then processed independently using the same iterative SmartAlign algorithm:
N → N-1 → N-2 → ... → 1
This makes it possible to automatically distribute a large number of Balloons around all four sides of a drawing view.
Why I think this could be useful in CATIA Drafting
This approach does not require an explicit geometric intersection test between every pair of Leader Lines.
Instead, it improves the Balloon order by taking the Leader Anchor Point geometry into account before placing each annotation.
In practical use this can provide:
- fewer crossing Leader Lines;
- less manual rearrangement of Balloons;
- faster preparation of assembly drawings;
- more predictable annotation placement on dense views;
- a more useful automatic positioning strategy than equal spacing alone.
Working prototypes
Source code:
https://github.com/ivashinpavel07/CATIA-V5-VBA-Align-Balloons
Video demonstration of both CATScript tools:
https://youtu.be/9SV4Cotpmvs
The video also shows how the CATScript macros can be added to a CATIA V5 Toolbar and used almost like native Drafting commands.
The original VBA implementation of the algorithm is also available here:
https://youtu.be/UVtbpVKDkvY
My proposal
I am not proposing the CATScript itself as the final implementation.
The main proposal is the placement strategy:
Leader geometry
→ iterative Balloon selection
→ annotation placement
instead of defining the Balloon order only once before distribution.
Could the CATIA Drafting / Mechanical Design Product Management or R&D team evaluate this approach as a possible enhancement for:
- CATIA V5 Drafting;
- 3DEXPERIENCE CATIA Drafting / annotation positioning;
- future automatic annotation placement functionality?
I would be happy to provide additional test drawings, GIF demonstrations, examples with large numbers of Balloons, or a more detailed description of the algorithm if this would be useful.
Thank you for considering this enhancement.
Best regards,
Pavel Ivashin
