Skip to content

Property Actuator

Asketyll edited this page Aug 24, 2026 · 1 revision

Property Actuator

Writes a graphic attribute — Color or Level — from a custom property's value: the reverse of every other ARES property engine (which all read an attribute into a property). If Property Calculation keeps a value up to date across a group, Property Actuator reflects that value back onto the elements' own appearance.

Property Actuator is a pure reaction: it never scans a group and never attaches anything itself (attaching is Custom Properties' job). It only reads its own pilot property and, if different, writes its own Color or Level attribute.

Pilot properties — fixed, not configurable

Unlike every other ARES engine, there is nothing to pick or name here. Property Actuator always reads exactly two reserved properties:

  • ARES_Color → drives the element's own Color attribute.
  • ARES_Lvl → drives the element's own Level attribute.

Both must be authored as ItemTypes in the ARES DGNLib (via OpenPropertyLibrary) like any other custom property, and are otherwise ordinary properties: they must be attached (Custom Properties) before Property Actuator does anything with them, and they need a value, which normally comes from a Property Calculation rule.

Setting it up

Three things, in order:

  1. Attach the pilot property, through an existing (or new) tagging rule using the | multi-property grammar — for example, add ARES_Color to a rule that already attaches something else:

    Lvl[WALLS]=Commune|ARES_Color
    
  2. Give it a value, with a calculation rule in ARES_Calc_Rules. The Prop[...] wrapper is mandatory — a common mistake is writing the target bare, copying the look of a tagging condition:

    Prop[ARES_Color]=CellColor[TRIG*]
    

    Any Property Calculation source that yields a plausible color index or level name works — a matching cell's own color (CellColor[pattern]), a matching level's own color (LvlColor[pattern], when the group's authority is a plain geometry on a named level rather than a named cell), a fixed Value[...], and so on.

  3. Turn the switch onARES_Actuate_Color and/or ARES_Actuate_Level, both off by default.

From then on, whenever an element carrying ARES_Color/ARES_Lvl gets a fresh value — directly, or pushed to it as a group member by Property Calculation — its own Color/Level attribute follows, compare-before-write (no rewrite when it already matches).

Safety rules

  • Never paints its own source. An element that is itself the authority a rule reads from (a trigger cell for CellColor[pattern], or a trigger element for LvlColor[pattern]) is never painted by the value it produces — painting it would make the source chase its own output. Likewise, a pilot property whose calculation rule reads the very attribute being actuated (Prop[ARES_Color]=Color on the same element) is refused.
  • Never touches a locked or reference-owned element.
  • On a cell, only the sub-elements that still matched the header's own attribute right before the write are repainted — a sub-element already holding a deliberately different color is left alone.
  • A repeated write failure (locked file, rights) disables actuation for the rest of the session rather than retrying every pass or spamming the status bar.

Commands

Property Actuator shares its options panel with Property Rendering — there is no separate command. Open it via:

macro vba run [ARES]EditPropertyRenderingOptions

The two "Actuate" checkboxes (Color, Level) sit under their own section of that panel.

Configuration variables

Variable Default Purpose
ARES_Actuate_Color False Master switch: reflect ARES_Color onto the element's own Color attribute.
ARES_Actuate_Level False Master switch: reflect ARES_Lvl onto the element's own Level attribute.

Clone this wiki locally