2025-10-22 06:02 AM - edited 2025-10-22 07:09 AM
We do most of our layouts using A1 sized sheets, but for day to day use (in-house checking, discussions etc), these are typically printed off in A3 hardcopy size.
We have been manually typing the A3 equivalent drawing scales to the A1 drawing scales in our title blocks - but this requires the user to know in advance or keep coming back to manually check all the drawings at different scales that will ever be placed on that layout.
It should be a very simple process to automate this - for A1 printed out at A3 size, you just take the figure from autotext result for the <drawingscale> property and double it.
How do people automate their drawing scale figures in layout title blocks to include the drawing scales applying when printing our at other sheet sizes?
Surely this has been successfully addressed somewhere by now?
Without exception, all practices I freelance to have this requirement, so have some confidence that this is not an 'edge case' that GS can safely ignore.
Operating system used: Windows 11 25 H2
2025-10-22
06:56 AM
- last edited on
2025-10-22
03:11 PM
by
Laszlo Nagy
Yes! A1(for issue) to A3 (print) is a common workflow for us too. I've been exploring different ways to automate this in our office, but haven’t yet found the best solution—mainly because GDL has limitations when it comes to editing auto text. (I was hoping to read the master layout name and use that to control paper sizes, but that hasn’t worked out so far.)
As an alternative, I’ve been using the drawing title to control the scale. I’ve set it up so the drawing title reads the live drawing scale (e.g., A1) and then displays the “A3 equivalent drawing scale.” It’s not perfect, but since most of our drawings are created in A1 and printed in A3, it gets the job done.
It would be great if I could find a way to access master layout details directly—then the solution could work across any paper size!
2025-10-22 07:12 AM - edited 2025-10-22 07:47 AM
A messy problem with any manual system like that is when you have several drawings on one layout, all to different scales.
I guess you could have a 'small' scale conversion table included on your master layout title block, listing all the likely scales in the project relating each native A1 scale to the A3 equivalent scale - but this is very unwieldy!
2025-10-22 11:18 AM
Maybe you could add something to the publisher scheme and make two publisher sets (A1 and A3). I've added custom fields to the publishing scheme for filenames. I'm not sure you could reference them as autotext on your title block though.
That would only fix sheet size though, I'm not sure if you can re-calculate drawing scale based off your printing scale.
Sunday - last edited Sunday
I spent an embarrassing number of hours fiddling with this over the weekend, with help from the free CoPilot/ GPT 5.1 instance living in Windows 11, and after very many false starts have managed to clumsily alter an opensource drawing title maker (object #1590) from Central Innovation (ex CadImage) to display both the default full size output scale, and reduce size output scale, based on any user selection of original sheet size vs alternative output sheet size (ranging between A0-A5)
Very fiddly because GDL in a drawing title marker object cannot seem to directly use the contents of the AC_DrawingScale global variable in any way directly, even though it can read it, because the data is not recognized as being of a valid data type for either numeric calculation directly, or string conversion to a number directly.
But what it turns out GDL could do (after lots of trial and error) was read the content of AC_DrawingScale individual digit by individual digit, then reassemble the digits into an actual number representing the placed drawing scale, and from there it can use the respective sheet sizes geometry to determine the resulting output scale to display
! Extract denominator from AC_DrawingScale (e.g. "1:200")
drawingDenom = 0
scaleFound = 0
displayStr = AC_DrawingScale
colonPos = strstr(displayStr, ":")
if colonPos > 0 then
denomStr = strsub(displayStr, colonPos + 1, strlen(displayStr) - colonPos)
drawingDenom = 0
for j = 1 to strlen(denomStr)
ch = strsub(denomStr, j, 1)
if ch >= "0" and ch <= "9" then
! Convert digit character to number (no asc(), no parser issues)
if ch = "0" then digit = 0
if ch = "1" then digit = 1
if ch = "2" then digit = 2
if ch = "3" then digit = 3
if ch = "4" then digit = 4
if ch = "5" then digit = 5
if ch = "6" then digit = 6
if ch = "7" then digit = 7
if ch = "8" then digit = 8
if ch = "9" then digit = 9
drawingDenom = drawingDenom * 10 + digit
scaleFound = 1
endif
next j
endif
if scaleFound = 0 then
drawingDenom = 100 ! fallback default
endif
Sunday - last edited yesterday
Hi Paul
The "Split" function is used to turn text to numbers.
so the following will work,
text2 0,0, "Scale\t1:"+Str(num2,1,0)+"\t@A1 \t1:"+Str(num2*2,1,0)+"\t@A3"
Note: \t is a tab position
I hope this helps.
P.S. the command from the PDF Manual
SPLIT
SPLIT (string, format, variable1 [, variable2, ..., variablen])
Splits the string parameter according to the format in one or more numeric or string parts. The split process stops when the first non-matching
part is encountered. Returns the number of successfully read values (integer).
string: the string to be split.
format: any combination of constant strings, %s, %n and %^n -s. Parts in the string must fit the constant strings, %s denotes any string
value delimited by spaces or tabs, while %n or %^n denotes any numeric value. If the '^' flag is present, current system settings for decimal
separator and digit grouping characters are taken into consideration when matching the actual numerical value.
variablei: names of the variables to store the split string parts.
Example:
ss = "3 pieces 2x5 beam"
n = SPLIT (ss, "%n pieces %nx%n %s", num, ss1, size1, ss2, size2, name)
IF n = 6 THEN
PRINT num, ss1, size1, ss2, size2, name ! 3 pieces 2 x 5 beam
ELSE
PRINT "ERROR"
ENDIF
P.P.S.
Hi Erwin Edel,
for layout sizes you can use
AC_DrawingRect to give the drawing frame
and
AC_LayoutRect to give the usable layout rectangle relative to the drawing
so you can produce a table to determine the standard sheet sizes available area(less the margins) to automatically say the sheet size.
i.e.
sheetsizename = "A4"
SheetSize50percent = "A6"
usableLayoutSheetWidth = AC_LayoutRect[3] - AC_LayoutRect[1]
usableLayoutSheetHeight = AC_LayoutRect[4] - AC_LayoutRect[2]
if ( (usableLayoutSheetHeight) > 0.275 and (usableLayoutSheetHeight) < 0.298 ) and\
( (usableLayoutSheetWidth) > 0.380 and (usableLayoutSheetWidth < 0.422) ) then
sheetsizename = "A3"
SheetSize50percent = "A5"
endif
if ( (usableLayoutSheetHeight) > 0.380 and (usableLayoutSheetHeight) < 0.422 ) and\
( (usableLayoutSheetWidth) > 0.550 and (usableLayoutSheetWidth) < 0.596 ) then
sheetsizename = "A2"
SheetSize50percent = "A4"
endif
if ( (usableLayoutSheetHeight) > 0.550 and (usableLayoutSheetHeight) < 0.596 ) and\
( (usableLayoutSheetWidth) > 0.800 and (usableLayoutSheetWidth) < 0.843 ) then
sheetsizename = "A1"
SheetSize50percent = "A3"
endif
if ( (usableLayoutSheetHeight) > 0.800 and (usableLayoutSheetHeight) < 0.843) and\
( (usableLayoutSheetWidth) > 1.140 and (usableLayoutSheetWidth) < 1.192) then
sheetsizename = "A0"
SheetSize50percent = "A2"
endif
!!!Option for output
text2 0.1,0,sheetsizename
!!!Option for output
!!!this bit to show you the values, not needed in final script
text2 0.2,0, usableLayoutSheetHeight
text2 0.3,0, usableLayoutSheetWidth
for j = 1 to 5
text2 0,0.01*j, AC_DrawingRect[j]
text2 0.1,0.01*j, AC_LayoutRect[j]
next j
!!!!!!!!!!!!!!!!
and combining the first answer to paul, you get:
text2 0,0, "Scale\t1:"+Str(num2,1,0)+"\t@"+sheetsizename+"\t1:"+Str(num2*2,1,0)+"\t@"+SheetSize50percent
Note: if you change the layout size, the AC_LayoutRect will only update after you update the drawing
I hope that helps too.
yesterday - last edited yesterday
Thanks @AllenP
A good tip with detecting the source layout size - one less user input required. User would still need to select a preferred alternative output/printing sheet size manually, since the same layout is printed to different page sizes for different purposes (A3 being most typical)
Had no luck with the split function to extract the placed drawing scale denominator - I can even copy and display it, but the data in that variable kept triggering wrong data type errors wherever/however it was otherwise used, whether treated as a number or text.
The looping digit by digit approach I ended up using not very elegant but does seem to work though.
yesterday
Thanks for the hard work. Currently our title blocks are just worksheets (saved as view and placed on the masterlayout) with simple 2D line work and autotext, so I don't think adding a library part to the worksheet would allow it to pick up the dimensions for us, so it would require an overhaul of things.
16 hours ago
Hi @Erwin Edel
The context for that GDL is with individual placed drawing title objects within the layout - not the overall layout title block
13 hours ago
Thanks for clarifying Paul, that doesn't sound all that different from our current method of using an autotext field from the individual layouts in terms of actions needed to sort out a new layout. We use this field to show sheet size for our index as well.