Vis Automations · Reference

Traps

Every trap found while automating Vis 2606, in one place. Each was hit in a real run on 2026-10-29 unless the row says DERIVED. Most of them are calls that succeed and do nothing, which is why every check on this site reads the result back.

AreaTrap
RenderingA fresh open renders nothingStraight after OpenDocument, NumVisibleNodes is 0 and CaptureImage writes a valid ~4.5 KB PNG: white, with only the axis triad. It passes PNG-magic and file-size checks. Call AllNodesOn() before FitAll(), and verify a capture by counting pixels unlike the background (blank control 0.0, engine 0.12). A model opened from the GUI shows the same until AllNodesOn().
RenderingNumLoadedNodes is not a load signal67 on the first launch, then 0 for a full 60 s on later launches while the same model rendered correctly. Never wait or gate on it.
Node treeNode lists are NumNodes + Node(i)Zero-based, as in the shipped FindExample.py. .Count and .Item raise AttributeError.
FindFind takes the metadata key without the :: suffixGetProperty shows "I-DEAS Part Number::"; Find wants "I-DEAS Part Number". Name, Name:: and PrintableName returned 0 for a part that exists, so a zero from Find proves nothing alone: pair it with a property you know matches.
SectionsA new section does not cutCreateSection leaves Clipping at 0 and only the plane outline changes the render. Set Clipping = 1 (near) or 2 (far); both read back. The names CS_CLIP_NONE / NEAR / FAR / BOTH are documented but ENUMS.INC gives no values (0 to 3 is DERIVED).
ExportSTEP from a tessellated-only JT writes nothing and raises nothingThe engine example gave no file and no exception; the B-rep XTBlock.jt gave a 104 KB ISO-10303-21 file. Always check the file exists and read its header.
DispatchOut-parameter methods work under plain dynamic dispatchGetPhysicalProperties() returns (area, volume, centroid), GetCameraPosition() returns (up, lookAt, eye), GetProperty(i) returns (name, value). Corrected the same day: an earlier note said typed gencache.EnsureDispatch was required. It is not; makepy refuses VFFrame (no type info).
DispatchGetActiveObject fails, Dispatch attachesVis is not in the running-object table, so GetActiveObject("VFFrame.Application") fails. Dispatch("VFFrame.Application") reaches the running session (same VisView_NG pid before and after) rather than starting a new one.
DispatchA headless script can hijack the user’s open VisBecause Dispatch attaches, a probe run loaded a model into a session someone had open, and its Quit() raised “save session before closing?”. vis_smoke, vis_validate, vis_census and the Fastener Stacks test now refuse to run while VisView or VisView_NG is running (control: both refused with Vis open).
ProcessVisView.exe is a launcher that exitsThe GUI session runs as VisView_NG.exe. Count and watch that process, not VisView.exe.
SelectionSelecting a body raises a blocking modalSelection, visibility and color must target the instance (a body’s Parent). Selecting a body raises a modal “Selection/Visibility Error” that blocks every later COM call.
SelectionNode.Selected = True replaces the selectionBuild a multi-node selection with AppendNode on an empty SelectedNodes list.
ColorGroup.Material reads back right but renders wrongAcross families, a blue group drew magenta and a bolt inside a green stack drew blue. Color each instance’s BasicMaterial instead (about 0.1 s each).
RenderingWhole-assembly views do not draw sub-pixel partsRivets 1 to 2 px across over a 122 in flap render as nothing, so a fastener-only whole-model capture looks blank. Check colors zoomed per stack.
GeometryGlobalTransformation is row-majorThe translation is in elements 12 to 14.
PerformanceWalking every body is slowVisiting bodies cost about 29k COM calls and 288 s on a 3,615-body wing flap. Walking instances from the root brought it to 134 s.
ProcessOpenDocument fails once right after a force-ended VisRetry after a few seconds.
Automation ScriptsUse New Script, not LoadThe Manage Scripts root right-click menu is Load / Save / New Group / New Script / Expand All / Delete all. Load expects a profile XML; pointing it at a .py gives “Error in loading script profile file”.
Automation ScriptsNever press Enter while driving the Manage Scripts dialogWith no profile known, OK raises a Save As for the profile XML. It opened invisibly behind another window and left Vis disabled until the process was ended.
Automation ScriptsThe registry registration does not loadA FileLocation key under HKCU, in both the VisView and VisView_Retained roots, with Vis restarted, left the menu showing only Manage Scripts... . The mechanism was DERIVED from strings in VisLinkList.dll; as written it is disproven. HKLM is untested. Adding through the dialog does work and persists across restarts.
Environmentpython -I cannot import win32comWhen pywin32 lives in user site-packages, isolated mode hides it.
EnvironmentShowState has no enum in ENUMS.INCThe smoke script assumes Win32 SW_SHOWMINNOACTIVE = 7. The capture still renders with it set; whether the window actually minimized was not observed.
EnvironmentThe HTML / VBScript samples are deadThey need IE11, which Windows 11 does not run. Use the Python samples or .NET.

Sources: tc-vis-automation README.md and commits 05447c0, 684255a, 9f1b0af; inapp/fastener_stacks.py; the tc-visualization-headless skill in tc-automation-skills.