Libraries & objects
About Archicad and BIMcloud libraries, their management and migration, objects and other library parts, etc.

Modification to Zone Stamp

fuzzytnth3
Booster
I've created a new Zone Stamp based on one of ArchiCAD's Zone Stamps to add in a lot of Room Data Sheet fields as this seemed the best way to create Room Data Sheets without having to model the contents of each room.

My problem is that I want the Zone Stamp not to display the "Calculated Area" but to display the "Measured area" and while I have managed to tweak it to do that what I can't seem to get to work is that the Stamp displays the area to up to 5 decimal places when it should be displaying just 2 as set in the MVO (Model View Option).

Anyone able to suss out where I need to tweak the script to make it show what is required by the MVO
AC versions 3.41 to 25 (UKI Full 5005).
Using AC25 5005 UKI FULL
Mac OSX 10.15.7 (19G2021) Mac Pro-2013 32gbRam AMD FirePro D500 3072 MB graphics
3 REPLIES 3
fuzzytnth3
Booster
Here's the script and I've highlight my changes in purple

!TLOTT 03:10:13
!Modified Area displayed to show Measured Area
!not the Calaculated Area as this suits the
!project


define style "idestyle" AC_TextFont_1 , ROOM_LSIZE , 1, 1
mul2 PAPER_TO_MODEL, PAPER_TO_MODEL
style idestyle

rrr = request("Height_of_style", "idestyle", shight)
catname = ""
catcode = ""
rrr = request("Zone_category", "", catname, catcode)

Zname = ROOM_NAME
if cn_zn then Zname = catname ! Display Category Name as Zone name
!!if catcode = "0 BGF" then Zname = "Gross Area" ! Prints "BGF" to the stamp

if ROOM_POLY_STATUS = 0 then Temp_CalcArea = ROOM_CALC_AREA ! Method 1 and 2
if ROOM_POLY_STATUS = 1 then Temp_CalcArea = ROOM_NET_AREA ! Method 3/Net !ROOM_CALC_AREA TLOTT
if ROOM_POLY_STATUS = 2 then Temp_CalcArea = ROOM_AREA ! Method 3/Gross

area_form = "" ! Format as set in the Preferences
rrr = request("Area_dimension", "", area_form )
room_area = str(area_form, Temp_CalcArea )

lin_form = ""
rrr = request("Calc_length_unit", "", lin_form)
room_height = str(lin_form , ROOM_HEIGHT)
room_perim = str(lin_form , ROOM_PERIM)

unit = ""
area_unit = ""
lin_unit = ""
form = ""

form = lin_form ! Unit strings
gosub 1001
lin_unit = unit

form = area_form
gosub 1002
area_unit = unit

room_area = "A: " + room_area + area_unit ! Composite strings
room_height = "H: " + room_height + lin_unit
room_perim = "P: " + room_perim + lin_unit

w_roona = (stw(Zname)) * name ! Width of the strings - 0 if not displayed
w_roonu = (stw(ROOM_NUMBER)+3) * num
w_floor = (stw(floor_f)+3) * floor
w_rooar = (stw(room_area)+3) * area
w_peri = (stw(room_perim)+3) * peri
w_roohe = (stw(room_height)+3) * ceil_s

max_len = max (w_roona, w_roonu, w_peri, w_rooar, w_roohe, w_floor) !*** width of the stamp
max_h = - (name + num + floor + area + peri + ceil_s) * shight !*** height of the stamp

vlen = -shight
if not(name) then
add2 0,shight
else
add2 0,0
endif

rot2 w
add2 -max_len/2, vlen - max_h/2

if name then
text2 0,-vlen, Zname
endif
n = 0
if num then
n=n+1
vlen =vlen + shight
text2 2,-vlen, ROOM_NUMBER
endif
if floor then
n=n+1
vlen =vlen + shight
text2 2,-vlen, floor_f
endif
if area then
n=n+1
vlen =vlen + shight
text2 2, -vlen, room_net_area !room_area TLOTT
endif
if peri then
n=n+1
vlen =vlen + shight
text2 2,-vlen, room_perim
endif
if ceil_s then
n=n+1
vlen =vlen + shight
text2 2,-vlen, room_height
endif

vlen = vlen + shight

YY = 0
if not(name) then
YY = shight
endif

hotspot2 0, shight-YY
hotspot2 max_len, shight-YY
hotspot2 0, max_h + shight-YY
hotspot2 max_len, max_h + shight-YY
hotspot2 max_len/2, max_h/2 + shight-YY

if max_h < -eps then
fill gs_fill_type
poly2_B{2} 5,2,gs_Fill_Pen, gs_Back_Pen,
0, 0, 0,
0, max_h + shight-YY, 1,
0, shight-YY, 1,
max_len,shight-YY, 1,
max_len,max_h + shight-YY, 1,
0, max_h + shight-YY, 1
endif

if hspots then
hotspot2 max_len/2, shight-YY
hotspot2 max_len/2, max_h + shight-YY
hotspot2 0, max_h/2 + shight-YY
hotspot2 max_len, max_h/2 + shight-YY
endif

if box_y and n then
pen Pen_Box
line2 0 , 0, 0, -vlen
line2 max_len , 0, max_len , -vlen
for i=0 to n
line2 0,-i*shight, max_len, -i*shight
next i
endif

! ==============================================================================
end
! ==============================================================================

1001: ! Linear unit strings
if strstr(form, "m") then unit = " m"
if strstr(form, "cm") then unit = " cm"
if strstr(form, "mm") then unit = " mm"
if strstr(form, "i") | strstr (form, "f") then unit = ""
return

1002: ! Area unit strings
if strstr(form, "sqm") then unit = " m2"
if strstr(form, "sqcm") then unit = " cm2"
if strstr(form, "sqmm") then unit = " mm2"
if strstr(form, "sqmm") then unit = " mm2"
if strstr(form, "sqf") then unit = " sq ft"
if strstr(form, "sqi") then unit = " sq inch"
return

return
AC versions 3.41 to 25 (UKI Full 5005).
Using AC25 5005 UKI FULL
Mac OSX 10.15.7 (19G2021) Mac Pro-2013 32gbRam AMD FirePro D500 3072 MB graphics
Laszlo Nagy
Community Admin
Community Admin
The script reads the area format set in Project Preferences for area in this line:

rrr = request("Area_dimension", "", area_form )

So it will display the area according to your settings set for areas in the Dimension page of Project Preferences.
Loving Archicad since 1995 - Find Archicad Tips at x.com/laszlonagy
AMD Ryzen9 5900X CPU, 64 GB RAM 3600 MHz, Nvidia GTX 1060 6GB, 500 GB NVMe SSD
2x28" (2560x1440), Windows 10 PRO ENG, Ac20-Ac28
fuzzytnth3
Booster
Thanks for that Laszlo.

As it turned out the facilities in the Zone object in ArchiCAD 17 are much more flexible than the Zone object I was using that I decided to "upgrade" to the AC17 version which resolved my issue
AC versions 3.41 to 25 (UKI Full 5005).
Using AC25 5005 UKI FULL
Mac OSX 10.15.7 (19G2021) Mac Pro-2013 32gbRam AMD FirePro D500 3072 MB graphics