cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 
Documentation
About Archicad's documenting tools, views, model filtering, layouts, publishing, etc.

Automatically displaying drawing scales for alternative layout sheet sizes

Paul King
Mentor

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

PAUL KING | https://www.prime.net.nz
ArchiCAD 8-29 | Twinmotion 2025
Windoze 11 PC | Intel Core Ultra 9 285K | Nvidia Gforce RTX 5090 | 64 GB | 2x4K monitor extended desktop
10 REPLIES 10
Kevin Lee
Advocate

@Paul King 

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!

 

KevinLee_0-1761108230249.png

 

Kevin Lee | Director of Technology | BIM
TZG Architects
ARCHICAD 27 | GDL | Rhino.GH | Solibri | Twinmotion
Certified Graphisoft BIM Manger (2024)

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!

PAUL KING | https://www.prime.net.nz
ArchiCAD 8-29 | Twinmotion 2025
Windoze 11 PC | Intel Core Ultra 9 285K | Nvidia Gforce RTX 5090 | 64 GB | 2x4K monitor extended desktop
Erwin Edel
Rockstar

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.

Erwin Edel, Project Lead, Leloup Architecten
www.leloup.nl

ArchiCAD 9-29NED FULL
Windows 11 Pro for Workstations
Adobe Design Premium CS5

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)

 

PaulKing_0-1765104446852.png

 

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

 

 

PAUL KING | https://www.prime.net.nz
ArchiCAD 8-29 | Twinmotion 2025
Windoze 11 PC | Intel Core Ultra 9 285K | Nvidia Gforce RTX 5090 | 64 GB | 2x4K monitor extended desktop

Hi Paul

The "Split" function is used to turn text to numbers.

ss = AC_DrawingScale                                    !Assign scale (say 1:50 is the scale) to temp value SS
n = SPLIT (ss, "%n:%n", num1, ss1,num2)      !assign number "1" to num1, assign string ":" to ss1, assign number "50" to num2
                                                                          !in the split function %n represents a number, %s represents a string for assigning variables.
if n > 2 then
   text2 0,0,num1                                               !output the number 1
   text2 0,0.01,ss1                                              !output the character ":"
   text2 0,0.02, num2                                       !output the number 50
   text2 0,0.03, num2*2                                   !output the number 100
endif
 

so the following will work, 

ss = AC_DrawingScale    
n = SPLIT (ss, "%n:%n", num1, ss1,num2)

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

 

AllanP_0-1765149907138.png

AllanP_5-1765151934089.png

 

 

 

 

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:

ss = AC_DrawingScale    
n = SPLIT (ss, "%n:%n", num1, ss1,num2)

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.

I have been using ArchiCAD continually since ArchiCAD 4.5
Member of Architalk since 2003, but missed the migration from Architalk to Graphisoft Communities. Melbourne, Australia

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.

 

 

PAUL KING | https://www.prime.net.nz
ArchiCAD 8-29 | Twinmotion 2025
Windoze 11 PC | Intel Core Ultra 9 285K | Nvidia Gforce RTX 5090 | 64 GB | 2x4K monitor extended desktop

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.

Erwin Edel, Project Lead, Leloup Architecten
www.leloup.nl

ArchiCAD 9-29NED FULL
Windows 11 Pro for Workstations
Adobe Design Premium CS5

Hi @Erwin Edel  

The context for that GDL is with individual placed drawing title objects within the layout - not the overall layout title block

 

 

 

PAUL KING | https://www.prime.net.nz
ArchiCAD 8-29 | Twinmotion 2025
Windoze 11 PC | Intel Core Ultra 9 285K | Nvidia Gforce RTX 5090 | 64 GB | 2x4K monitor extended desktop
Erwin Edel
Rockstar

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.

Erwin Edel, Project Lead, Leloup Architecten
www.leloup.nl

ArchiCAD 9-29NED FULL
Windows 11 Pro for Workstations
Adobe Design Premium CS5

Setup info provided by author