I'm trying to use Archicad objects as 2D symbols, that is, when I modify one instance of it, the changes will propagate to all other instances (same as blocks in autocad or symbols in vectorworks).
The problem I'm having is as soon as I modify the object in a way its overall encompassing shape (bounding box) gets bigger or smaller, the updated instances keep the previous overall shape and the object gets distorted on its proportions.
Is there a way to avoid that? Perhaps on the GDL editing dialogue? I've played with the parameters but it didn't really work.
I have not tried this an I might be wrong but here is what I think:
When you place an instance of a GDL Object, it will have an A and B size, length and width, respectively. If you now change the definition of the GDL Object and modify the A and B sizes in the definition, that will not change the A and B size of the place instances and this is what causes the distortion.
You can try opening the GDL Object for editing, and on the Details page click the Compatibility Options button. There the first pair of radio buttons control this behaviour. You can try switching to the legacy method and see if that helps.
If that doesn't solve it, maybe you can try creating the geometry of the object in such a way that its dimensions are independent of the A and B values. I would try to do this by scripting the geometry (not using the 2D Symbol of the object). and adding you own 2D hotspots to the object.
I hope this explanation makes some sense.
.................................................................................................... Get Archicad Tips at https://twitter.com/laszlonagy AMD Ryzen 1700X CPU, 48 GB RAM, Nvidia GTX 1060 6GB, 500 GB NVMe SSD 2x28" (2560x1440), WIN10 PRO ENG, AC20-AC26 Loving Archicad since 1995
What Laszlo has suggested may work but it sounds to me that you really want to place a Hotlinked Module rather than trying to adjust the GDL scripts.
When ever you update the original source module all the Hotlinked instances will update as well.
Your elements can be 'saved as' MOD (module) files and these can be opened and edited in a separate Archicad if need be.
You can then hotlink them into any other file.
Modules can be 2D and/or 3D elements.
One of the forum moderators. Versions 6.5 to 26 Dell XPS- i7-6700 @ 3.4Ghz, 16GB ram, GeForce GTX 960 (2GB), Windows 10 Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11
If you are drawing the content in the 2D symbol and there is nothing in the 2D script then:
it will scale to the A and B values.(Width and Length, Dimension 1 and Dimension 2 Values)
If you add FRAGMENT2 ALL,0 to the empty 2d script, then it will be just the size of your original drawing (it will ignore the bounding box and place your object at its original size.
if you only want specific layers shown(out of the 16 layers available in the 2D symbol) have a FRAGMENT2 command for each layer rather than all,
FRAGMENT2 1,0 to show layer 1
FRAGMENT2 4,0 to show layer 4
FRAGMENT2 5,0 to show layer 5
the internal layers of the 2D symbol is just a way to store 16 different drawings in the same object, Archicad does not use them in the project.
if you want something scale sensitive then...
different drawing shown for different scales:
if GLOB_SCALE >= 100 then FRAGMENT2 1,0
if GLOB_SCALE >= 50 and GLOB_SCALE < 100 then FRAGMENT2 2,0
if GLOB_SCALE < 50 then FRAGMENT2 3,0
or more information shown when the scale increases
if GLOB_SCALE < 100 then FRAGMENT2 2,0
if GLOB_SCALE < 50 then FRAGMENT2 3,0
you can move the 2d elements in the 2d symbol to the different layers the same way you normally do in archicad, using the the layer drop down in the info box.(the default layer you draw on is layer 1) the above example uses layer 1 for drawings 1:100 or higher, layer 2 for 1:50 and layer 3 for 1:20 scale drawings. GLOB_SCALE is the built in variable that tells GDL the scale of the current view, as an integer i.e. at 1:100 GLOB_SCALE is 100.
If there is script in the 2D Script area then:
if there is a Mul2 A/1.50000, B/2.500000 in the 2D script, then this will also re-scale your object to the bounding box.(the numbers dividing the A and B will be the original size of the object) delete the Mul2 line from the code to fix this.
There are many other things that might affect the scaling of the library part as listed by Lasz and Barry.
Using modules is a good idea, however, an object sometimes is more suitable (for example for a simple symbol), so I am glad I finally got the answer to how to not scale my objects when I re-save them. Thanks.