staad-view — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited staad-view (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
All view operations go through view = staad.View.
view.SetInterfaceMode(0) # 0=Modeling, 5=Post-processing, 6=Foundation, 9=Adv Concrete
# Set page within a mode
view.SetModeSectionPage(interfaceMode, sectionNumber, pageNumber)view.ShowIsometric()
view.ShowPlan() # top
view.ShowFront()
view.ShowBack()
view.ShowLeft()
view.ShowRight()
view.ShowBottom()
view.ZoomExtentsMainView()
view.ZoomAll()
view.RefreshView()view.SpinLeft(degrees)
view.SpinRight(degrees)
view.RotateUp(degrees)
view.RotateDown(degrees)
view.RotateLeft(degrees)
view.RotateRight(degrees)view.ShowAllMembers()
view.HideAllMembers()
view.ShowMember(memberNo)
view.HideMember(memberNo)
view.HidePlate(plateNo)
view.HideSolid(solidNo)
view.ShowMembers(NMembers, NaMemberNos)
view.HideMembers(NMembers, NaMemberNos)view.SelectMembersParallelTo("Y") # all vertical members
view.SelectGroup("ALL") # by group name
view.SelectInverse(entityType) # 0=node, 1=beam, 2=plate, 3=solid
view.SelectByItemList(entityType, nItems, itemList)
view.SelectEntitiesConnectedToNode(entityType, nodeNo)
view.SelectByMissingAttribute(attributeCode) # e.g. 4=missing supportsCommon which values (full table in the Reference section — VIEW_CODES.md):
| which | Label |
|---|---|
| 0 | Node number |
| 1 | Member number |
| 4 | Support |
| 8 | Load value |
view.SetLabel(which, True) # show
view.SetLabel(which, False) # hideCommon which values (full table in the Reference section — VIEW_CODES.md):
| which | Diagram |
|---|---|
| 0 | Load |
| 1 | Displacement |
| 2 | MY |
| 3 | MZ |
| 4 | FY |
| 5 | FZ |
| 6 | Axial (AX) |
| 7 | Torsion (TR) |
view.SetDiagramMode(which, show=True, refresh=True)view.SetNodeAnnotationMode(dFlag=True, refreshFlag=True)
view.SetReactionAnnotationMode(dFlag=True, refreshFlag=True)
view.SetBeamAnnotationMode(Type, DWFlags, RefreshFlag)
# Design results overlay
view.SetDesignResults(
utilization=1, # 0=None, 1=Actual Ratio, 2=Normalised
color=True,
showValues=True
)view.SetSectionView(plane, minVal, maxVal) # plane: 0=XY, 1=YZ, 2=XZ# Copy to clipboard
x, y = view.CopyPicture()ExportView saves the current view as an image file. It takes a directory and a filename as separate arguments. The combined path is validated by the sandbox.
# ExportView(directory, filename, formatCode, flag)
# Export to PNG
view.ExportView("C:\\exports", "front_view.png", 3, 0)
# Export to JPG
view.ExportView("C:\\exports", "iso_view.jpg", 2, 0)
# Export to BMP
view.ExportView("C:\\exports", "plan_view.bmp", 1, 0)
# Export to EMF (vector)
view.ExportView("C:\\exports", "detail.emf", 4, 0)Path rules (enforced on the combined directory\filename — violations raise an error):
.png, .jpg, .jpeg, .bmp, .emf, or .wmf\\\\server\\share\\...) are blockedWindows, Program Files, ProgramData) are blocked..) in either directory or filename is blockedsize = view.GetApplicationDesktopSize()
view.SetWindowPosition(xTop, yTop, xWindow, yWindow)
count = view.GetWindowCount()
title = view.GetWindowTitle(id) # IDs from 1
view.SetActiveWindow(id)
view.CreateNewViewForSelections()
view.CloseActiveWindow()view.SaveView("MyView", overWrite=True)
view.OpenView("MyView", windowOptions=True) # True=current window
view.RenameView("NewName")See [VIEW_CODES.md — Scale Type IDs](./assets/VIEW_CODES.md) for the full scaleTypeId → enum name → unit table.
scales = view.GetScaleValues()
view.SetScaleValues(scales)
view.SetScaleValueByType(scaleTypeId, value)
# After changing scale, toggle diagram off/on to force redraw:
view.SetDiagramMode(diagramId, False, True)
view.SetScaleValueByType(scaleTypeId, value)
view.SetDiagramMode(diagramId, True, True)
view.RefreshView()Scale is INVERSE:visual_displacement = actual / scaleSmaller value → more exaggerated deformed shape. To target a specific visual size:scale = max_actual_disp / target_visual_dispe.g. for max_disp=0.06 in and target visual=94 in:scale = 0.06 / 94 ≈ 0.00064
# uType: 0=Dimension, 1=Displacement, 5=Force, 6=Moment, 14=Stress
view.SetUnits(uType, strUnit) # e.g. SetUnits(5, "kN")SetInterfaceMode(5)) before showing result diagrams; always call staad.ShowApplication() firstSetInterfaceMode applies correctlyview.SelectByItemList should be avoided for geometry — use geo.SelectMultipleBeams insteadExportView(directory, filename, ...) takes a directory and filename as separate arguments; the combined path must be absolute, end with a supported image extension (.png, .jpg, .jpeg, .bmp, .emf, .wmf), and not target a protected OS directory; UNC paths and .. traversal are rejected~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.