Nominal sizes – Automatic dimensioning

Example door object for this post can be downloaded here.

When it comes to documentation, ARCHICAD offers a function called Automatic Dimensioning, with an extra function for wall opening objects (doors and windows) to choose the representing size.
See the menu option: Document/Document Extras/Automatic Dimensioning.
autoDim_UI
A very similar option is available in Interactive Schedule to put dimensions on the door and window preview drawings (just highlight a door in the schedule and look for option in the settings dialog).

This feature helps you to display dimensions fast and easy, but only if the opening objects are prepared for the task.
To make an object collaborate with ARCHICAD, a few conditions have to be met:

  • the standard, nominal size related fix named parameters need to be used in the object, with correct calculations
  • an option to assign any of the used sizes as nominal size must be present: the chosen size will be assigned to size A and size B
  • a pair of hotspots (2D and 3D) must be placed to mark the extension of these dimensions in 2D and 3D space

Current nominal size parameters

ARCHICAD recognizes the following nominal size parameters:

  • A / B
  • ac_wallhole_width / ac_wallhole_height
  • ac_unit_width / ac_unit_height
  • ac_reveal_width / ac_reveal_height
  • ac_egress_width / ac_egress_height (doors only)
  • ac_leaf_width / ac_leaf_height (doors only)

The horizontal sizes (width) can be calculated using the following additional dimensions:
autoDim_addSizes

The same logic applies to the vertical (height) sizes as well.

Wallhole Sizes: ac_wallhole_width / ac_wallhole_height

These sizes should contain the dimensions of the wall opening itself, including the reveal, the tolerance and the object:
autoDim_wallhole
Note: the oversize parameters set in the Compatibility option page of the object should not be calculated into this nominal size.

Unit Sizes: ac_unit_width / ac_unit_height

These sizes mean the door/window itself, the extension of the product you buy at the store:
autoDim_unit
Connection to the Wallhole Size (using the same tolerance value all around):

ac_unit_width = ac_wallhole_width - 2 * tolerance
ac_unit_height = ac_wallhole_height - 2 * tolerance

Reveal Sizes: ac_reveal_width / ac_reveal_height

Meaning the free opening sizes (vertically and horizontally) between the innermost reveal edges. The value depends on the reveal geometry:
autoDim_reveal
It is connected to the Wallhole Size:

ac_reveal_width = ac_wallhole_width - 2 * bReveal * revealSize
ac_reveal_height = ac_wallhole_height - bReveal * revealSize

Egress Sizes: ac_egress_width / ac_egress_height

These sizes mean the distance between the innermost points of the frame. Do not mistake it with the free opening size (although they are the same in a lot of cases).
It is recognized in doors only:
autoDim_egress
It is connected to the Unit Sizes:

ac_egress_width = ac_unit_width - 2 * gs_frame_width
ac_egress_height = ac_unit_height - gs_frame_width

Leaf Sizes: ac_leaf_width / ac_leaf_height

These sizes represent the extension of the door leaf, therefor is recognized in doors only:
autoDim_leaf
Relations to the Unit Sizes and Egress Sizes:

ac_leaf_width = ac_unit_width - 2 * (gs_frame_width - gs_rebate_width)
ac_leaf_height = ac_unit_height - (gs_frame_width - gs_rebate_width)

ac_leaf_width = ac_egress_width + 2 * gs_rebate_width
ac_leaf_height = ac_egress_height + gs_rebate_width

Note: the connection of the nominal sizes can vary depending on the type of the door/window (external sliding, pocket, etc.).

Setting the Nominal Sizes

Only one size pair can be assigned to the parameters A and B at a given time. This size-pair will represent the object every time the Nominal Size option is chosen in the Automatic Dimensioning setup.
The user should be able to decide which size is needed as Nominal Size. Make sure the chosen size is assigned to the A-B parameters, in the parameter script.
Changing A and B should create a chain reaction of calculations: modify all related sizes according to parameters assigned to A and B.
autoDim_nomSizeChange

Every change must be handled:

! ==============================================================================
! Check if recalculation needed
! ==============================================================================

_bRecalculateW = GLOB_MODPAR_NAME = "gs_frame_width" | \
				GLOB_MODPAR_NAME = "tolerance" | \
				GLOB_MODPAR_NAME = "revealSize" | \
				GLOB_MODPAR_NAME = "A" | \
				GLOB_MODPAR_NAME = "bReveal"
! ==============================================================================
! Width settings
! ==============================================================================

if GLOB_MODPAR_NAME = "ac_wallhole_width" | (_bRecalculateW & iNominalSize = SIZE_WALLHOLE) then
	if GLOB_MODPAR_NAME = "A" then
		ac_wallhole_width = A
		parameters ac_wallhole_width = ac_wallhole_width
	endif

	ac_unit_width = ac_wallhole_width - 2 * tolerance
	ac_reveal_width = ac_wallhole_width - 2 * bReveal * revealSize
	ac_egress_width = ac_unit_width - 2 * gs_frame_width
	A = ac_wallhole_width

	parameters	ac_unit_width = ac_unit_width,
				ac_reveal_width = ac_reveal_width,
				ac_egress_width = ac_egress_width,
				A = A
endif

This logic has to be implemented regarding the other sizes as well.
See the example object for more.

Assigning hotspots to sizes

To let ARCHICAD be able to put dimensions on sizes automatically, a pair of hotspots needs to be implemented into the object in 2D (for floor plan) and 3D (for section/elevation purposes) with the exact distance of the represented size between the hotspots.
ARCHICAD will automatically lock on the size using the hotspots.
It is convenient to display the size hotspots only when they are useful: for example, do not display egress hotspots on a plan of 1:200 scale, because nobody is going to need them.
The example object uses small colorful spheres to represent the hotspots in 3D and circles for 2D.
autoDim_spheres

Note: ARCHICAD puts additional hotspots to the bounding box regardless of the existence of scripted hotspots.