ConstructiVision User Manual — v11 (TB11-01x32)¶
Note
This manual documents ConstructiVision v11 as it actually exists in the
src/x32/TB11-01x32/ source tree. Every section is derived from the
annotated .lsp and .dcl source file headers — not from the v7.0-era
patent or the v10.x PDF manual.
For the original v7.0/patent-era manual, see v7.0/csv-manual-v7.
Key differences from v7.0:
Registration/SOTM credit system removed (no pcms.arx)
Error handler removed (no work recovery on crash)
progcont routing broken in source mode (Bug 18 — all menu items show same dialog)
Several DCL dialogs reconstructed March 2026 from VLX screenshots
Multiple bug fixes applied (Bugs 18, 31, 35, 47, 48, 49, 63, 73)
Weld Connections and Window/Door dialogs extended to multi-page
Batch Utilities rewritten in pure AutoLISP (no external cvplst.exe)
System Overview¶
Technology Stack¶
Component |
Value |
|---|---|
Platform |
AutoCAD 2000 (32-bit) |
Language |
AutoLISP with DCL (Dialog Control Language) |
Source mode |
126 |
Compiled mode |
|
Entry point |
|
Menu |
|
Per-document loader |
|
Module count |
93 modules in |
Startup Chain¶
AutoCAD opens drawing
→ acaddoc.lsp runs (per-document, installed in ACAD2000\Support\)
→ Guard: (not c:csv) — safe to re-run, no-op if already loaded
→ sets csv_silent_load = T [Bug 31 fix: suppresses csvmenu modal alert]
→ attempts (load "csv.vlx") [Bug 35 fix: uses load, not arxload; handles .vlx/.lsp/.fas]
→ if VLX missing: (load "csv.lsp")
→ csv.lsp loads csvmenu.lsp (menu installation)
→ csv.lsp loads 93 modules via csvlst foreach
→ csv.lsp defines c:csv command
→ csv.lsp sets lispinit=0 (preserves namespace across drawings)
→ sets csv_silent_load = nil [Bug 31: re-enables alerts after load]
Bug 31 detail: When AutoCAD reopens a drawing, acaddoc.lsp runs again.
Without csv_silent_load, reloading csvmenu.lsp raised a modal alert.
The flag suppresses this alert during programmatic reload.
Bug 35 detail: arxload is for ObjectARX (compiled C++) modules, not
AutoLISP. Using (load) instead correctly handles .vlx, .lsp, and .fas
files without an error dialog.
A — Program Options¶
Dialog: progopts.dcl
Handler: progopts.lsp
Note
TB11-ONLY — progopts.lsp is the source replacement for the compiled VLX
“Program Options” dialog. Not present in PB11.
Application-level settings dialog. 14 buttons in 7 rows:
Button key |
Action |
|---|---|
|
Open new drawing |
|
Edit existing drawing |
|
Create new project |
|
Batch utilities (btch_dlg) |
|
View all panel layers |
|
Print all panel layers |
|
View selected layers |
|
Print selected layers |
|
Change 3D viewpoint |
|
Print materials list |
|
Configure support file search path |
|
Print revision history |
When no project drawing is loaded (olddwg is nil), 7 buttons are grayed: viewall, printlay, viewsel, printsel, 3dview, matlist, revhist. Help topic: "Program_Options" in csv.hlp.
Source: progopts.lsp, progopts.dcl¶
B — Create New Project¶
Dialog: project.dcl → new.dcl → projdet.dcl
Handlers: project.lsp, new.lsp, projdet.lsp
Project Selection (project.dcl)¶
Presents choice: Open Existing (“old”), Create New (“new”), or Cancel.
Note
TB11-ONLY — project.lsp does not exist in PB11. In VLX mode, project
routine was compiled inside csv.vlx. Known issues: getfiled for “old” path
requires typing a dummy filename with .tmp extension; dirchk loops only
while curdir = acaddir (exits on other bad choices); dcl_id28 leaks to global.
New Project (new.dcl)¶
Prompts for project name and directory. Validates via chrchk (character filter) and dirchk (path validation). Creates project folder tree via shell command.
Project Details (projdet.dcl)¶
Comprehensive form: measurement system (Imperial/Metric), concrete specifications, contractor info. Stores values and calls new() to create project directory structure.
Golden reference: VM 102 test 04.
Source: project.lsp, new.lsp, projdet.lsp¶
C — Create New Drawing / D — Edit Existing Drawing¶
Dialogs: dwg.dcl (new), dwgold.lsp (edit existing)
Handlers: dwgnew.lsp, dwgold.lsp
Edit Existing (dwgold.lsp)¶
“Edit this drawing or select another?” dialog. Validation logic:
If user clicks “Edit This”: checks
panel_listdictionary to verify CV formatIf user clicks “Select Another”:
getfiledpicker (preventsacaddirselection)panel_listdictsearch is the format validation gate
Source: dwgnew.lsp, dwgold.lsp¶
E — Batch Utilities¶
Dialog: btch_dlg.dcl
Handler: btch_dlg.lsp
progcont: 262177
Note
TB11 rewrite (March 2026). PB11/VLX called compiled cvplst.exe for
file enumeration (never shipped with source). TB11 replaces this with pure
AutoLISP: vl-directory-files + vl-file-systime. DCL reconstructed to
match golden VLX layout (VM 102 test 07).
Layout: Operations checkboxes, Sort radios, Panel list_box, named layer toggles.
Operations¶
Operation |
Description |
|---|---|
Print Panel Book |
Print to default AutoCAD printer (zoomed/centered to scale) |
Print Materials List |
Generate materials count (concrete, forms, anchors, chamfer, features, picks, braces, embeds) |
Print Revision History |
Output revision log per selected panel |
Update Drawings |
Regenerate panel drawings from stored data |
Panel Selection¶
Multi-select list box of all panels in current project
Sort by: Name, Date Modified
Globals:
flst(sorted panel number strings),dlst(unique date strings),pnl_dateinfo(panel → date alist),pnl_listdata(formatted display strings)
File Enumeration (TB11 rewrite detail)¶
PB11/VLX called external cvplst.exe binary (never shipped in source). TB11 replaces it with:
(vl-directory-files curdir (strcat pnlname "*.dwg") 1) ; enumerate panels
(vl-file-systime (strcat curdir fname)) ; get modification date
Date formatted as MM/DD/YYYY HH:MM from vl-file-systime list: (yr mo _ dy hr mn ...).
Batch Engine: btch.lsp¶
The batch engine drives sequential panel processing via a self-recursive script chain:
btch_dlg runs → calls (btch)
→ writes btch.scr:
(command "open" next-panel "y")
(setvar "cmdecho" 0)
if not batch-plot: (panel)
else: (plt)(btch)
→ executes btch.scr via AutoCAD SCRIPT command
→ AutoCAD opens next panel drawing
→ panel runs → finpan runs → calls (btch) again
→ next btch.scr opens the following panel
→ (repeat until pnllst exhausted)
Callers of btch: btch_dlg.lsp, finpan.lsp, engimp.lsp, drread.lsp, mbread.lsp, wsbread.lsp.
Known issues:
Self-recursive via script file — hard to debug or interrupt mid-batch
btch#incremented after script execution — context may be staleNo error handling if
findfilefails for next panel drawingContains commented-out
btchcan_dlgwith 2-second CDATE busy-wait timer (dead code)
Source: btch_dlg.lsp, btch_dlg.dcl, btch.lsp¶
Panel Options (md_dlg)¶
Dialog: md_dlg.dcl
Handler: md_dlg.lsp
Hub dialog for panel workflow. Presents view/print/create/edit actions for current panel drawing. Routes user to drawpan (draw), oldpan (edit), or validation paths.
Warning
Bug 18: In VLX mode, md_dlg.dcl is “Program Options” with numeric button
keys (powers of 2) that map to progcont bitmasks. In source mode, md_dlg.dcl
is “Panel Options” with string keys ("new", "old", "val", etc.) — a
completely different dialog. These are NOT the same dialog.
Key button routing:
"su"button → callssite_dlgworkflow"pbt"button → callsbtch_dlg"new"→drawpan(create new panel geometry)"old"→oldpan(edit existing panel)
License check: The license validation in md_dlg.lsp is stubbed — ok is hardcoded to "t". No SOTM/pcms.arx check occurs.
Layer patterns for view/print paths are hard-coded in cond branches, not driven by layer dialog.
Source: md_dlg.lsp, md_dlg.dcl¶
Main Panel Details (mp_dlg)¶
Dialog: mp_dlg.dcl
Handler: mp_dlg.lsp
Primary panel configuration dialog. This is the central hub for all panel feature details — 21 feature categories accessed via sub-dialog buttons.
Note
Bug 73 — DCL reconstruction (March 2026). The VLX version had features
the old source lacked: casting face radios, distances-from radios, printing
layouts, shaded view mode, building name field, Z offset, expansion gap.
TB11 mp_dlg.dcl was rebuilt to match the VLX golden screenshots.
Data Storage: panelvar¶
All panel data is stored in panelvar, an association list with 21 sections:
Section |
Feature |
Dialog |
|---|---|---|
mpvar |
Main panel dimensions |
mp_dlg |
bpvar |
Brace points |
bp_dlg |
ppvar |
Pick points |
pp_dlg |
chvar |
Chamfer |
ch_dlg |
dlvar |
Dock leveler |
dl_dlg |
drvar |
Man door |
dr_dlg |
fhvar |
Horizontal feature strip |
fh_dlg |
fvvar |
Vertical feature strip |
fv_dlg |
fsvar |
Footing step |
fs_dlg |
tsvar |
Top step |
ts_dlg |
llvar |
Lintel |
ll_dlg |
lbvar |
Ledger bar |
lb_dlg |
plvar |
Pilaster |
pl_dlg |
rovar |
Rough opening |
ro_dlg |
rbvar |
Round blockout |
rb_dlg |
sbvar |
Square blockout |
sb_dlg |
sdvar |
Slab dowels |
sd_dlg |
ssvar |
Spandrel seat |
ss_dlg |
tpvar |
Top plate |
tp_dlg |
wdvar |
Window/door opening |
wd_dlg |
wcvar |
Weld connections |
wc_dlg |
Dictionary Persistence¶
Panel data is written to the drawing’s Named Object Dictionary as an XRecord under "panel_list". DXF group codes: 1 (section name), 2 (variable name), 3 (value). Read back by panatt.lsp to populate runtime globals.
Master Toggle Convention¶
Each sub-dialog has a master toggle in mp_dlg (e.g., mpro, mpsb, mpdr, mpdl, mppl, mpll, etc.). When the sub-dialog’s feature count is 0, the master toggle is cleared. The master toggle controls whether that feature category is drawn.
Source: mp_dlg.lsp, mp_dlg.dcl, panatt.lsp, convert.lsp, updvar.lsp¶
Standard Opening (ro_dlg)¶
Dialog: ro_dlg.dcl
Handler: ro_dlg.lsp
panelvar section: rovar
Configures rough openings within the panel. Each opening has: toggle, elevation, height, distance, width. Dimensions are clamped to panel bounds (p1–p4) via rangchck.
Key behaviors¶
Iterates
rovarsectionCounts enabled openings → updates
mpromaster toggle+syntax for adjacent placement,cfor centeringSnap-to-Edge: useful for Footing Steps, Top Steps, Rough Openings, Loading Docks, Spandrel Seats
Source: ro_dlg.lsp, ro_dlg.dcl¶
Recess / Blockout — Square (sb_dlg)¶
Dialog: sb_dlg.dcl
Handler: sb_dlg.lsp
panelvar section: sbvar
Square/rectangular blockout openings. Iterates sbvar section, counts enabled, updates mpsb master toggle. Uses sbenable (special enable logic) rather than the standard enable function.
Source: sb_dlg.lsp, sb_dlg.dcl, sbenable.lsp¶
Recess / Blockout — Round (rb_dlg)¶
Dialog: rb_dlg.dcl
Handler: rb_dlg.lsp
panelvar section: rbvar (inferred from naming convention)
Circular blockout openings. Type codes: t=toggle, q=quadrant (L/R), d=distance from edge, e=elevation, w=width. Spinner tiles (_s suffix) wired to slide().
Source: rb_dlg.lsp, rb_dlg.dcl¶
Named Blockout (nb_dlg)¶
Dialog: nb_dlg.dcl
Handler: nb_dlg.lsp
panelvar section: nbvar
Up to 2 named blockout instances (nbvar, up to 2 rows). Uses nbenable for special enable logic.
Tile Key Types (nb_dlg)¶
Type char (3rd) |
Meaning |
Notes |
|---|---|---|
|
Toggle (enable/disable) |
Wires |
|
Type (C/A/T) |
Circular / Arched / Trapezoidal |
|
Mode (L/E) |
Linear / Elevation-based |
|
Side (L/R) |
|
|
Distance from edge |
|
|
Lower elevation |
|
|
Upper elevation |
|
|
Width |
|
|
Height |
|
|
Chamfer |
|
|
Extension 1 |
|
|
Extension 2 |
|
|
Direction |
|
Tile prefix: nb. DCL dialog ID: dcl_id14.
Source: nb_dlg.lsp, nb_dlg.dcl, nbenable.lsp¶
Man Door (dr_dlg)¶
Dialog: dr_dlg.dcl
Handler: dr_dlg.lsp
panelvar section: drvar
Personnel door configurations. Iterates drvar section, updates mpdr master toggle.
Tile Key Types (dr_dlg)¶
Type char (3rd) |
Meaning |
Notes |
|---|---|---|
|
Toggle (enable/disable) |
Wires |
|
Quadrant (L/R) |
|
|
Distance from edge |
Clamped to |
|
Elevation |
Bounds checked; focus → w |
|
Width |
Bounds; focus → h |
|
Height |
Bounds; focus → x |
|
Swing side (L/R) |
Enables/disables based on |
|
Mode toggle |
Enables/disables |
Focus chain: d → e → w → h → x → s → next toggle (t)
Source: dr_dlg.lsp, dr_dlg.dcl¶
Dock Leveler (dl_dlg)¶
Dialog: dl_dlg.dcl
Handler: dl_dlg.lsp
panelvar section: dlvar
Dock leveler openings with extra blockout at bottom for hydraulic leveler pit. Iterates dlvar section, counts enabled, updates mpdl master toggle.
Tile Key Types (dl_dlg)¶
Type char (3rd) |
Meaning |
Notes |
|---|---|---|
|
Toggle (enable/disable) |
Wires |
|
Quadrant (L/R) |
|
|
Distance from edge |
Clamped: |
|
Elevation |
Bounds checked; focus → w |
|
Width |
Focus → h |
|
Height |
Focus → x |
|
X-offset (recess depth) |
Clamped: |
|
Y-offset |
Focus → |
|
Advance focus |
Moves focus to next item’s toggle tile |
Focus chain: d → e → w → h → x → y → p → next t
Source: dl_dlg.lsp, dl_dlg.dcl¶
Pilaster (pl_dlg)¶
Dialog: pl_dlg.dcl
Handler: pl_dlg.lsp
panelvar section: plvar
Warning
Naming collision: pl_dlg = Pilaster, NOT Print Layout.
The print/plot dialog is plt_dlg. Bug 47 (fixed March 2026): progcont
262657 incorrectly called pl_dlg when it should have called the layer
preset + plt for the site “psl” path.
Vertical column extending from the “UP” face. Iterates plvar section, counts enabled, updates mppl master toggle.
Source: pl_dlg.lsp, pl_dlg.dcl¶
Lintel (ll_dlg)¶
Dialog: ll_dlg.dcl
Handler: ll_dlg.lsp
panelvar section: llvar
Lintel (Corbel) — horizontally oriented projection from the “UP” face, typically above/below openings. Iterates llvar section, counts enabled, updates mpll master toggle.
Source: ll_dlg.lsp, ll_dlg.dcl¶
Ledger Bar (lb_dlg)¶
Dialog: lb_dlg.dcl
Handler: lb_dlg.lsp
panelvar section: lbvar
Up to 4 ledger bar rows. Per row: elevations, depth, width, brace/lumber size, bolt diameter/length, orientation, spacing, offset, inset. Nested defun lbmode() enables/disables row controls. “Calc” button invokes calc_dlg.
Source: lb_dlg.lsp, lb_dlg.dcl, calc_dlg.lsp¶
Top Plate (tp_dlg)¶
Dialog: tp_dlg.dcl
Handler: tp_dlg.lsp
panelvar section: tpvar
Up to 4 top plate features. Per plate: bolt size combo, bolt spacing (NxM format), thread length, direction, height, offset, overhang, inset. Nested defun tpmode(). “Calc” button invokes calc_dlg.
Source: tp_dlg.lsp, tp_dlg.dcl, calc_dlg.lsp¶
Chamfer (ch_dlg)¶
Dialog: ch_dlg.dcl
Handler: ch_dlg.lsp
panelvar section: chvar
Edge chamfer settings. Iterates chvar section, sets/clears master chamfer flag mpch post-dialog. Applied to either/both surfaces of main panel and/or selected features.
Tile Key Types (ch_dlg)¶
Type char (3rd) |
Tile pattern |
Meaning |
|---|---|---|
|
|
Toggle (enable/disable) |
|
|
Direction: |
|
|
Size: |
Note: Size radio key mapping is non-obvious: "1/2" uses tile "2", "3/4" uses "4", "1" uses "1".
No spinner/numeric tiles — chamfer uses radio selection only. Master flag mpch set via post-dialog toggle scan.
Source: ch_dlg.lsp, ch_dlg.dcl, chamfer.lsp¶
Feature Strip — Horizontal (fh_dlg)¶
Dialog: fh_dlg.dcl
Handler: fh_dlg.lsp
panelvar section: fhvar
Horizontal cosmetic feature strips on panel surface. Loads via fpage (page navigation helper). Sets mpfh master flag.
fh_dlg/fv_dlg tile key types (via fpage.lsp):
Type char (3rd) |
Meaning |
|---|---|
|
Toggle — wires |
|
Quadrant (L/R) — |
|
Distance from edge — clamped to panel width |
|
Elevation — clamped to panel bottom |
|
Height — clamp to panel top; slide + y focus |
|
Left offset — clamp to bounds |
|
Right offset — clamp to bounds |
|
Width — clamped vs |
|
Angle — wired to slide only |
|
Y-position — slide + x focus on change |
|
Catalog combo — populated from |
|
Feature select combo — filtered from |
|
Checkbox — wires |
|
Orientation (U/D) — up/down radio tiles |
|
Side (L/R) — left/right radio tiles |
|
Installed (Y/N) — yes/no radio tiles |
Known issue: foreach rebinds n to (car n) — shadows loop variable (same PB11-style pattern).
Source: fh_dlg.lsp, fh_dlg.dcl, fpage.lsp, fenable.lsp¶
Feature Strip — Vertical (fv_dlg)¶
Dialog: fv_dlg.dcl
Handler: fv_dlg.lsp
panelvar section: fvvar
Vertical cosmetic feature strips. Sibling of fh_dlg (identical pattern — same fpage initializer, same tile key convention). Sets mpfv master flag.
Source: fv_dlg.lsp, fv_dlg.dcl, fpage.lsp, fenable.lsp¶
Footing Step (fs_dlg)¶
Dialog: fs_dlg.dcl
Handler: fs_dlg.lsp
panelvar section: fsvar
Footing step details. Nearly identical to ts_dlg (top step). Type codes: t=toggle, s=side (L/R), h=height, w=width.
Tile Key Types (fs_dlg / ts_dlg)¶
Type char (3rd) |
Meaning |
Notes |
|---|---|---|
|
Toggle (enable/disable) |
Wires |
|
Side (L/R) |
|
|
Height from floor |
|
|
Width |
|
Difference from ts_dlg: fs_dlg focus-after-enter uses (= $reason 1) without distof check.
ts_dlg uses (and (distof $value) (= $reason 1)). Also ts_dlg has radio cross-link:
l1↔r2, r1↔l2 (mirror sides) — selecting step 1 left auto-selects step 2 right.
Source: fs_dlg.lsp, fs_dlg.dcl¶
Top Step (ts_dlg)¶
Dialog: ts_dlg.dcl
Handler: ts_dlg.lsp
panelvar section: tsvar
Parapet step details. Radio cross-link: l1↔r2, r1↔l2 (mirror sides) — selecting left side on step 1 automatically selects right side on step 2.
Source: ts_dlg.lsp, ts_dlg.dcl¶
Spandrel Seat (ss_dlg)¶
Dialog: ss_dlg.dcl
Handler: ss_dlg.lsp
panelvar section: ssvar
Up to 2 spandrel seats. Per seat: toggle, L/R side, elevation, width, height fields with linked edit+slider pairs.
Source: ss_dlg.lsp, ss_dlg.dcl¶
Slab Dowels (sd_dlg)¶
Dialog: sd_dlg.dcl
Handler: sd_dlg.lsp
panelvar section: sdvar
J-shaped rebar connections to slab. Type codes: t=toggle, e=elevation, a=angle, o=offset, i=inset.
Source: sd_dlg.lsp, sd_dlg.dcl¶
Window/Door Opening (wd_dlg)¶
Dialog: wd_dlg.dcl
Handler: wd_dlg.lsp
panelvar section: wdvar
Note
TB11 vs PB11: TB11 adds multi-page navigation (pg2), local och
variable, and no exit-on-fail logic. PB11 was single-dialog.
Scans wdvar toggles post-dialog, sets/clears mpwd master toggle. Uses wdenable for special enable logic, wdpage for page navigation.
Source: wd_dlg.lsp, wd_dlg.dcl, wdenable.lsp, wdpage.lsp¶
Weld Connections (wc_dlg)¶
Dialog: wc_dlg.dcl
Handler: wc_dlg.lsp
panelvar section: wcvar
Note
TB11 vs PB11: TB11 has 5-page navigation (pg1–pg5) with updvar
saves between pages. PB11 was single-dialog.
Scans wcvar toggles, sets/clears mpwc master toggle. Uses wcenable for enable logic. Manages wcl (window cutout list) file persistence via updvar.
Site-level weld: weld.lsp is a stub — shows “not available” alert. This feature was never implemented in source mode.
Source: wc_dlg.lsp, wc_dlg.dcl, wcenable.lsp, wc_edit.dcl, weld.lsp¶
Pick Points (pp_dlg)¶
Dialog: pp_dlg.dcl
Handler: pp_dlg.lsp
panelvar section: ppvar
Up to 8 auto-placed pick points. 23-item ppvar section: ppa (auto-place toggle), ppc (columns radio “0”–“4”), ppr (rows radio “0”–“8”), then per column/row tiles.
Tile Keys¶
Columns (1–4): ppt1–ppt4 (toggle), ppq1–ppq4 (direction L/R), ppd1–ppd4 (distance).
Rows (5–8): ppt5–ppt8 (toggle), ppe5–ppe8 (elevation).
Slider scaling: slider_value = distance_inches × 8 (range 0–4800 = 0–50 ft).
Tab-advance: d1→d2→d3→d4 (end); e5→e6→e7→e8 (end).
Note
Bug 76 (open): VLX-era imported panels may have 44-item ppvar (ppt9–ppt16).
Those tiles don’t exist in pp_dlg.dcl — silently ignored. Source ppvar
is 23 items; divergence documented in makepan.LSP.
Auto-placement via ppauto.lsp (obstruction avoidance, points.lsp engine).
Centroid-based placement via ppcent.lsp.
Source: pp_dlg.lsp, pp_dlg.dcl, ppauto.lsp, ppcent.lsp, points.lsp, pdisable.lsp¶
Brace Points (bp_dlg)¶
Dialog: bp_dlg.dcl
Handler: bp_dlg.lsp
panelvar section: bpvar
Up to 4 manual brace points (distance + elevation) or auto-placement via bpa toggle. Depends on: pdisable, enable, slide, updvar, calc_dlg. “Calc” button invokes calculation popup.
Source: bp_dlg.lsp, bp_dlg.dcl, bpauto.lsp, brace.lsp, pdisable.lsp, calc_dlg.lsp¶
Revision History¶
Dialog: revision.dcl
Handler: revision.lsp
progcont: 264193
Note
Bug 49 fix: revision.lsp crashed when rev/revdate were nil
(e.g., when opened via au3 raw (command "open") without drawpan running).
Guard clause added: first empty row pre-filled with rev+1 and current date.
csv.lsp now reads UPDATE block attributes inline for progcont 264193.
10 revision slots. Per row: revision # (r1–r10), date (d1–d10), description (t1–t10). Reads from UPDATE block attributes (REV, REVDATE, R1–R10, D1–D10, T1–T10). Calls donerev on OK → updates title block revision table.
donerev.lsp — Accept Handler¶
Scans rows
r11→r1downward to find highest non-empty slotIncrements
revcounter; formatsrevdatefrom(getvar "CDATE")Copies tile text
t1–t10into globalsrt1–rt10Auto-stamps
rr(rev number) andrd(date) for rows with text but no prior stampDate format:
M/D/YYYY HH:MM(no zero-padding, from CDATE)
Source: revision.lsp, revision.dcl, donerev.lsp, drawpan.lsp¶
Site Drawing Options (site_dlg)¶
Dialog: site_dlg.dcl
Handler: site_dlg.lsp
Hub for site workflow. 14 button routes:
Button |
Action |
|---|---|
|
New site drawing (getfiled template or blank) |
|
Edit existing site (getfiled or dwgold if already open) |
|
Detach Panels (xref detach) |
|
Insert Panels → |
|
Tilt-Up → |
|
Layout Panels → |
|
Materials List → |
|
Save Layout → |
|
View All Layers (on/regen) |
|
Print All Layers (on/regen/plt) |
|
View Select Layers (readtile filter helper) |
|
Print Select Layouts (layer preset/regen/plt) |
|
Set Viewpoint (viewpt sub-dialog) |
|
Rename — displays “not available” alert |
All buttons except "new" / "old" are disabled via mode_tile when drawing name does not contain *site*.
Note
Bug 63 fix: VLX writes "site" dictionary key; source writes "site_list".
All reads now check both via (or). dictadd writes remain "site_list" for source-mode.
Print Select Layouts ("psl") layer preset:
Turns ON: solid, footing, slab dims, connection layers.
Turns OFF: *_dim, *perimeter, *hardware, dimensions, xy, walline, slabline.
Then calls (plt) for plotter.
Source: site_dlg.lsp, site_dlg.dcl¶
Site Drawing (sdwg_dlg)¶
Dialog: sdwg_dlg.dcl
Handler: sdwg_dlg.lsp
Hub for all site editing sub-dialogs. Rebuilds sitevar from "site_list" XRecord if present (same DXF group 1/2/3 parsing pattern as panel_list). Calls (convert "site") if site data version ≠ "V2.25". Routes to:
Button key |
Calls |
Status |
|---|---|---|
|
|
Functional |
|
|
Functional |
|
|
Functional |
|
footing |
UI disabled at startup ( |
|
column |
UI disabled at startup |
|
weld |
UI disabled at startup |
Note
Footing, Column, and Weld buttons are silently disabled in the DCL — they do
not call stub functions; they simply cannot be clicked. The footing/column/weld
stubs (which show “not available” alerts) are invoked from site_dlg, not here.
walline (defined in wall_dlg.lsp): helper called after wall edits and by inspanel during recovery. Erases all WALLINE entities then regenerates LINE entities from sitevar wlvar data. Each LINE carries XData application "CSV" with a space-delimited panel number string (1000 . " 1 2 3 ..."). Axis direction globals yx/xx are derived from gdv3/gdh3 site variables.
Source: sdwg_dlg.lsp, sdwg_dlg.dcl¶
Materials List (matl_dlg)¶
Dialog: matl_dlg.dcl
Handler: matl_dlg.lsp
progcont: 263169
Reads wcl.txt from project directory, searches for panel blocks (ssget "x" INSERT on layer 0), counts materials: concrete yardage, form material, anchor bolts, chamfer, feature strips, pick points, brace points, braces, extensions, embeds. Counts reveals by type (F1/F2/F3), blockouts, named materials.
wcl.txt format: LISP lists with integer index, e.g. (0 "name" 0.0 0.0 ...). wcxn = highest index. Loaded from curdir via load call.
Note
Bug 48 fix: matl_dlg failed when called via progcont without prior
panel workflow (panelvar nil). csv.lsp now calls panatt before
matl_dlg when panelvar is nil.
Source: matl_dlg.lsp, matl_dlg.dcl, panatt.lsp¶
Layer Options (lyr_dlg)¶
Dialog: lyr_dlg.dcl
Handler: lyr_dlg.lsp
Note
TB11-ONLY — not present in PB11. Layer visibility toggle dialog with two modes.
Two independent modes, both showing toggle checkboxes per layer:
Panel mode (plyr_dlg) — 14 panel layers:
Key |
Layer |
|---|---|
|
connections |
|
connections_dim |
|
points |
|
points_dim |
|
feature |
|
feature_dim |
|
greenplate |
|
greenplate_dim |
|
custom |
|
custom_dim |
|
solid_dim |
|
perimeter_dim |
|
hardware |
|
perimeter |
Site mode (slyr_dlg) — 17 site layers (s0, sd, sp, sf, sg, sh, sl, sc, scd, su, sud, sx, sxd, ss, ssd, st, std).
Base layers 0, Defpoints, Ashade, solid are always visible (never toggled).
While-loop re-shows dialog until Cancel. lyrpos global records result.
Source: lyr_dlg.lsp, lyr_dlg.dcl¶
Print / Plot (plt_dlg)¶
Dialog: plt_dlg.dcl
Handler: plt_dlg.lsp
Print/plot configuration. Not to be confused with pl_dlg (Pilaster).
Source: plt_dlg.lsp, plt_dlg.dcl¶
Slope Calculator¶
progcont: 8193
Handler: slope_dlg.lsp
Dialog: slope_dlg.dcl
Slope calculation utility accessed from the L menu item.
Source: slope_dlg.lsp, slope_dlg.dcl¶
Registration Manager¶
progcont: (compiled)
Handler: csvreg (compiled into VLX — no source)
Warning
Non-functional in source mode. The csvreg function exists only inside
the compiled VLX. In TB11 source mode, calling Registration Manager does
nothing. The SOTM credit system (Patent 1) was removed in v7.0 and
remains absent in v11.
Source: none (compiled-only)¶
Framework Modules¶
These shared modules provide the infrastructure that all dialogs depend on.
Universal Dialog Helpers¶
Module |
Purpose |
|---|---|
|
Central OK/Cancel/Help handler for 42+ dialogs. Maps 2-char codes (mp, ch, rv, wc…) to help topics. TB11-ONLY — VLX had this routing compiled in. |
|
Universal tile enable/disable for row-based dialogs. Two modes: list (bulk init entire var section) and string (single action_tile callback via |
|
Universal edit_box ↔ slider sync. Two branches: key ending |
|
DCL edit_box range validation. Handles tapered panels via linear height interpolation. Reads globals |
|
Range check error display. Restores previous value ( |
|
Universal dialog-to-variable writeback. ok= |
|
Edit box feet-and-inches validator. Called by |
|
Input validator for panel numbers and folder paths. Mode 1 ( |
|
Checks |
|
Directory safety check — prevents saving project files into AutoCAD system directories. Checks: exact match on |
|
Save-changes dialog (called by |
|
Configures ~55 AutoCAD sysvars to deterministic state. Called by 4 importers ( |
|
Opens drawing via |
|
Descending O(n²) selection sort + dedup. Clobbers global |
|
Simple single-value input dialog. Prompt label |
Panel Feature Sub-Dialog Pages¶
All panel feature detail dialogs share a standard page-initialization + enable/disable pattern.
Page initializers — load dialog tiles from panelvar, set och, wire action_tile callbacks, and call start_dialog:
Module |
|
Type codes (3rd char of variable name) |
Enable helper |
TB11 = PB11 |
|---|---|---|---|---|
|
|
t/q/d/e/w/h/a/i/p/x/o |
|
Different — Bug: double |
|
|
t/s/q/i/d/e/x/z/o/p |
|
Different — TB11 adds |
Enable/disable helpers — called on init (k="ok") and from action_tile callbacks during live editing:
Module |
Target dialog |
Key cascade rules |
TB11 = PB11 |
|---|---|---|---|
|
|
Toggle |
Different |
|
|
16-tile enable block per weld item. L/R side flag → disable f/g/d/ds. T/B side flag → disable e/es. T flag absent → disable y/n (inset). Mode calc: |
Identical |
|
|
Circle → disable r/w/c. Arc → compute min radius `h_min = w / (2 * |
cos(angle) |
|
|
T/B active → enable |
Identical |
Weld connection item editor (wc_edit.lsp): Three entry modes keyed by 3rd char of tile key k:
Mode char |
Behavior |
|---|---|
|
Catalog list selection — loads full |
|
Store from parent tiles — reads current tile values directly (no sub-dialog) |
|
Quick-select — auto-populates parent tiles from catalog defaults without opening sub-dialog |
After editing, if ok="1": calls wcmod to write changes to wcl catalog, then refreshes page (wcpage or combo tiles). TB11 = PB11 (byte-identical).
Construction Calculator (calc_dlg.lsp)¶
A standalone 3-input construction calculator dialog:
Input Set |
Computations |
|---|---|
A alone |
|
A + B |
sum, difference, |
A + B + C |
board feet, |
Constants: 46656 = 36³ (in³/yd³), 3.922 = concrete density (tons/yd³), 144 = in²/ft², 1200 = in/100ft (granularity for spinner very-large-dimension units).
Each dimension has an architectural string field + 3 spinners (100-ft units, inches, sixteenths).
Contains 3 nested defuns (settile, cvscalc, clear) — these become global functions (not localized).
Called by: okcanhlp.lsp (when och="ca"). Persistent globals: ca, cb, cc.
Data Management¶
Module |
Purpose |
|---|---|
|
Reads panel data from Named Object Dictionary → populates |
|
Master default value initialization. Single source of truth for all dialog variable defaults. Called when no stored dictionary exists, or when version mismatch detected. Builds 21 panel feature categories + 5 site categories with hard-coded defaults; loop expansion for multi-instance features (sb 1–6, wd 1–12, fh/fv/wc 1–18); merges with existing panelvar so stored values win. Callers: |
|
Extracts project name from directory path ( |
Drawing & Geometry¶
Module |
Purpose |
|---|---|
|
Draw panel geometry: calculates corner points |
|
Panel layout on site plan. Two code paths: (1) first-time — rotates panel inserts +1.5708 rad (OCS→WCS), prompts for gap via |
|
Miter cut wedge drawing. Called by |
|
3D rectangular void generator for 8 section types: rovar, tsvar, fsvar, ssvar, wdvar, drvar, dlvar, sbvar. Pipeline: compute corners → draw PLINE on |
|
Circular blockout geometry. Draws two semicircular 180° arc plines, moves to blockout center, extrudes to width |
|
Thickened panel sections (plates/lintels). Two branches: |
|
Weld connection 3D block creation and placement. Nested |
|
Pick point block placement. Builds solid-hatched triangle pline, defines block |
|
Tilt-up panel transformation. Reads |
|
Regenerates WALLINE layer LINE entities from |
|
Post-processing after drawpan: computes pick/brace points via |
|
Saves panelvar to Named Object Dictionary, invokes |
|
Panel center of gravity, area, volume, weight, perimeter. Parses |
|
Master dimension annotation engine (1800+ lines, 3 nested defuns). Multi-item mode: collects X/Y coordinates from 18 feature types into accumulator tiers x0lst–x8lst and y1lst/y2lst, then calls |
|
Global-variable wrapper around drawdim’s multi-item routing. Reads from |
|
Standalone |
|
Standalone |
|
Panel corner chamfer engine. Applies AutoCAD CHAMFER to panel corners and feature corners. Routing: |
|
3D feature (opening) geometry generator. Draws hollow rectangular or cylindrical openings via extrusion and Boolean subtraction. |
|
3D greenplate and J-bolt geometry. Creates greenplate surfaces and bolt arrays for top plate ( |
|
Slab dowel cylinder placement. Places 0.3125”-radius cylinders at gap-aware positions around openings. Intersects |
|
J-bolt insertion engine. TB11-ONLY (not in PB11). Inserts J-bolt and weld connection blocks along greenplate surfaces. Two code paths: |
|
Attaches panel drawings as xrefs to site. Reads WALLINE layer, sorts panels by proximity, computes spacing from H/W/E attributes. Writes |
|
Auto-placement engine for brace/pick points with obstruction avoidance. |
Tile Key Convention¶
All dialog tile keys follow a consistent naming pattern:
[2-char prefix][field type][index]
Char 3 (field type) |
Meaning |
|---|---|
t |
toggle (enable/disable) |
d |
distance from edge |
e |
elevation |
w |
width |
h |
height |
s |
side (L/R radio) or slider |
q |
quadrant |
a |
angle |
o |
offset |
i |
inset |
Example: bpd1 = brace point distance 1, rot3 = rough opening toggle 3.
Engineering Integration¶
Import / Export¶
Module |
Purpose |
|---|---|
|
Engineering data export dispatcher. Extracts panel geometry from panelvar/NOD into standardised engineering primitives ( |
|
|
|
Dayton-Richmond |
|
Dayton/Richmond |
|
TB11-ONLY (compiled into |
|
TB11-ONLY (compiled into |
|
TB11-ONLY (compiled into |
|
WSB |
Approval Bypass Pattern¶
All four importers (engimp, drread, mbread, wsbread) contain the same hardcoded approval bypass:
;; Insert decryption algorithym here...
(set 'xxxapprv "TCA DEMO")
(set 'xxxdt "...")
(set 'xxxby "...")
Real licence key decryption was never implemented in any importer’s source code.
TB11-Only Files¶
The following files are present in TB11-01x32 but do NOT exist in PB11-00x32:
File |
Purpose |
Notes |
|---|---|---|
|
Standalone horizontal dimension row engine |
464-line body IDENTICAL to nested |
|
J-bolt block insertion engine |
518 lines; 2 code paths (lbvar vs tpvar); known fragile UCS manipulation |
|
Dayton/Richmond .pdx exporter |
TB11 adds this exporter format |
|
Standalone |
Extracted from nested defun in drawdim.lsp |
|
Global-variable dim routing via |
ORPHANED — zero callers; tech debt |
|
Edit box feet-and-inches validator |
Used only by |
|
Diagnostic dump command |
Created Mar 11 2026 for Bug 63 investigation |
|
Platform-safe help wrapper |
Win10 compatibility (hh.exe for CHM); created 2026/03/06 |
|
AutoCAD version detection functions |
|
|
Tech Support issue submission |
Opens GitHub issue form via |
|
Development source loader ( |
Unloads ARX, loads full |
|
Layer visibility toggle dialog |
Two modes: |
|
|
Bugs 75 (fixed), 76 (open: variable list divergence), 77 (open: V3.60 version check rejects TB11 panels) |
|
Universal OK/Cancel/Help callback router |
Routes 42+ dialogs via 2-char codes; TB11 externalises VLX-compiled routing |
|
Project Selection dialog |
TB11 source replacement for VLX-compiled project routing. Known issues: getfiled dummy-filename workaround, dcl_id28 global leak. |
|
Program Options dialog (14 buttons) |
TB11 source replacement for VLX md_dlg “Program Options”. Context-sensitive: 7 buttons grayed when no project open. |
|
Debug hatch script for jlst obstruction boxes |
TB11-ONLY. Not a defun — executes on load. No callers found. Debug artifact. |
|
Panel Credit System (pcms.arx) test harness |
TB11-ONLY. Loads pcms.arx/pcms2.arx, loops DecrementPanelCredit. Not in any production path. |
|
Weld connection editor list validation |
TB11-ONLY. Part of wc_edit subsystem. Validates new/mod/del, duplicate check, confirms delete via warning dialog. |
|
Weld connection modify/commit |
TB11-ONLY. Commits del/mod/sto/new operations to |
|
Meadow-Burke |
TB11-ONLY (compiled into csv.vlx in PB11). Entity type map P/R/C/A/T/L. Nested |
|
Meadow-Burke |
TB11-ONLY (compiled into csv.vlx in PB11). Fixed-width field parser, same TCA DEMO approval bypass as |
|
WSB Engineering |
TB11-ONLY (compiled into csv.vlx in PB11). Pipe-delimited raw inches. Dead M/G cond branches, |
csvcompat.lsp — Version Detection API¶
Function |
Threshold |
Purpose |
|---|---|---|
|
— |
Returns |
|
≥ 16.2 |
AC2006+ (CUI replaced MNU menus) |
|
≥ 18.0 |
AC2010+ (Ribbon UI, need MENUBAR=1) |
ACADVER reference table (15.x = 2000/2000i/2002 … 25.x = 2025-2026).
Known Issues & Gaps (v11 vs v7)¶
Bugs Fixed in TB11¶
Bug |
Summary |
Fix |
|---|---|---|
16 |
|
Open — re-layout after file reload fails |
17 |
|
Fixed in TB11 |
18 |
progcont routing broken in source mode |
Documented; requires md_dlg rewrite |
31 |
Modal alert on VLX reload |
|
35 |
VLX loading via wrong function |
|
47 |
pl_dlg routing error |
csv.lsp progcont 262657 fixed |
48 |
matl_dlg fails without panelvar |
csv.lsp calls panatt first |
49 |
revision.lsp crashes on nil rev |
Guard clause + inline UPDATE block read |
63 |
Site dictionary key mismatch |
All reads check both “site” and “site_list” |
73 |
mp_dlg.dcl missing VLX features |
DCL reconstructed March 2026 |
75 |
makepan.LSP |
Fixed in TB11 |
76 |
makepan.LSP hardcoded variable lists diverge from convert.lsp |
Open — nbvar/rbvar + bpvar/ppvar divergence |
77 |
makepan.LSP V3.60 version check rejects TB11-created panels |
Open — TB11 stamps |
81 |
convert.lsp static defaults miss VLX-added keys |
Known tech debt — no fix yet |
Stubs (Not Implemented)¶
Feature |
File |
Status |
|---|---|---|
Footings (site) |
|
“Not available in this release” alert; clears |
Column Pads (site) |
|
“Not available in this release” alert; clears |
Weld (site) |
|
“Not available” alert; TB11 difference vs PB11: TB11 returns |
Registration |
|
Compiled-only, non-functional in source mode |
Features Present in v7 VLX but Not in TB11 Source¶
progcont-based routing — VLX md_dlg reads progcont bitmask; source md_dlg ignores it
Registration/SOTM credit system — removed since v7.0
Error handler with work recovery — removed since v7.0
System variable preservation — 40+ sysvars hardcoded, no restore on exit
Known Code Quality Issues¶
Duplicate code:
basedim.lspbody is identical to nested defun indrawdim.lsp— bug fixes must be applied to bothDead code:
drawdimlst.lsp(zero callers), commented-outbtchcan_dlginbtch.lsp, dead parameterainbrace.lspandpick.lspGlobal pollution: virtually all local variables in all dialogs use
(set 'var ...)instead of(/ var)locals — massive global namespace pollutionHardcoded TCA DEMO approval: all 4 engineering importers bypass licence decryption
Orphaned drawdimlst.lsp: not in PB11, zero callers in TB11 — candidate for deletion
File Inventory Summary¶
Category |
Count |
|---|---|
|
126 |
|
49 |
Panel feature dialogs |
21 (bp, pp, ch, dl, dr, fh, fv, fs, ts, lb, ll, pl, ro, rb, sb, sd, ss, tp, nb, wd, wc) |
Site feature dialogs |
4 (grid, wall, slab, slope) |
Core routing dialogs |
4 (md, mp, site, sdwg) |
Framework helpers |
15+ (enable, slide, rangchck, err, updvar, okcanhlp, panatt, convert, pj_name, editbx, chrchk, dbchk, dirchk…) |
Drawing/geometry |
15+ (drawpan, finpan, panel, inspanel, points, brace, feature, chamfer, green, bolt, dowels, centgrav, drawdim, basedim, drwbas…) |
Engineering I/O |
8 (engexp, engimp, dreng, drread, mbeng, mbread, wsbeng, wsbread) |
Stubs |
3 (footing, column, weld) |
TB11-only additions |
23 (basedim, bolt, dreng, drwbas, drawdimlst, editbx, csv_diag, csv_help, csvcompat, csvtech, j, lyr_dlg, makepan, mbeng, mbread, okcanhlp, project, progopts, pointmap, test, wcedlst, wcmod, wsbeng) |
Dev-only (TB11) |
2 (j.lsp, test.lsp) |
About ConstructiVision¶
Version: 11.nn (TB11-01x32)
Source: src/x32/TB11-01x32/
ConstructiVision, Inc.
17010 9th Avenue SE
Mill Creek, WA 98012
USA