Free cookie consent management tool by TermsFeed

3D Viewer

On This Page
The capabilities described on this page are included in Appian's advanced and premium capability tiers. Usage limits may apply.

This page describes 3D Viewer, which is an Advanced Plug-in developed, managed, and maintained by Appian.

What is 3D Viewer?

3D Viewer is a component plug-in that renders 3D models stored as Appian documents in a full-featured interactive viewer. Users can rotate, zoom, toggle mesh visibility, inspect part properties, explode, and export models. Developers can control which model is displayed, filter which parts are visible, react to user selections, and customize the viewer's appearance.

explode_highres_30pct_faster

The plug-in consists of two components:

  • Appian 3D Viewer: The component plug-in (the visible viewer UI).
  • Appian 3D Viewer Helper: A server-side plug-in bundled with the component providing a client API for retrieving 3D files, the threedviewershowedges() function, and the threedviewerhidetoolbaroptions() function.

Supported file formats

The viewer supports the following 3D file formats:

Format Extension Notes
Rhino .3dm  
3D Studio .3ds Supports texture files.
3D Manufacturing Format .3mf  
Additive Manufacturing .amf  
BIM .bim  
Boundary Representation .brep  
COLLADA .dae  
Filmbox .fbx  
FreeCAD .fcstd  
glTF / GLB .gltf, .glb  
Industry Foundation Classes .ifc  
IGES .iges, .igs  
STEP .step, .stp  
Stereolithography .stl Binary and ASCII.
Wavefront OBJ .obj Supports .mtl material files.
Object File Format .off  
Polygon File Format .ply  
VRML .wrl  

Not all file formats load at the same speed. Formats that store pre-tessellated mesh geometry load near-instantly because the viewer can send vertices directly to the GPU. Formats that encode CAD boundary representation (BREP) or parametric geometry require an in-browser conversion step before anything can render, which adds latency proportional to model complexity.

Tier Format Notes
Fast glTF / GLB (.gltf, .glb) Preferred. Binary GLB is a single self-contained file; text glTF may reference external textures. Loads near-instantly regardless of model size.
Fast BIM (.bim) JSON-based, pre-tessellated. Typically very fast.
Fast STL (.stl) Pure triangle mesh. Binary STL is faster than ASCII. No hierarchy or material data.
Fast OBJ (.obj) Pre-tessellated. Fast, but requires a separate .mtl file for materials.
Fast PLY (.ply) Pre-tessellated. Binary PLY is faster than ASCII.
Fast OFF (.off) Simple triangle mesh. Fast but no material support.
Moderate FBX (.fbx) Pre-tessellated with full hierarchy, materials, and animations. Larger file sizes may increase parse time.
Moderate COLLADA / DAE (.dae) XML-based. Hierarchy and materials preserved but parse overhead increases with file size.
Moderate 3DS (.3ds) Older binary format. Pre-tessellated but limited material support.
Moderate 3MF (.3mf) ZIP-based XML. Pre-tessellated. Moderate parse time.
Moderate IFC (.ifc) Plain-text STEP-like encoding. Large IFC files can be slow due to file size and in-browser tessellation.
Slower STEP / STP (.step, .stp) Parametric BREP. Requires in-browser tessellation.Load time scales with model complexity and part count.
Slower IGES / IGS (.iges, .igs) Older parametric BREP. Similar overhead to STEP.
Slower BREP (.brep) Raw OpenCASCADE boundary representation. Requires full tessellation before rendering.
Slower Rhino (.3dm) Can contain both mesh and NURBS geometry. NURBS surfaces require tessellation.
Slower FreeCAD (.fcstd) ZIP archive containing parametric geometry. Parse and tessellation overhead can be significant.
Slower AMF (.amf) XML-based, may contain curved triangles that require additional processing.
Slower VRML (.wrl) Text-based with potential scene graph complexity.

If your CAD source files are in a slower-loading format (STEP, IGES, BREP, Rhino, FreeCAD), export and save a copy in GLB format before uploading to Appian.

The viewer can export loaded models to Wavefront, Stereolithography Text, Stereolithography Binary, Polygon File Format Text, Polygon File Format Binary, glTF Text, glTF Binary, Object File Format Text, Rhinoceros 3D, and Dotbim. However, because the slower file format must be loaded in the viewer before conversion, it is recommended that 3D conversion occurs before the file is loaded into Appian.

Most CAD tools and converters support GLB export. Store the GLB as your viewer document to give end users the fastest possible load times, and retain the original source file separately for editing.

Installation

Cloud customers: Advanced and Premium tier Cloud customers can download this plug-in directly from the Plug-ins section of the Admin Console.

Self-managed customers: Advanced and Premium tier Self-Managed customers can download this plug-in from the Downloads section of MyAppian.

Requirements

  • Your environment must be running Appian 26.4 or later.

Granting document access

The component loads 3D files of documents managed by Appian. Depending on how those documents are managed, the user viewing the interface must have the following permissions:

  • Documents managed by record types: At least Viewer permissions to the record type managing the documents.
  • Documents managed by folders: At least Viewer permissions to the document and its parent Knowledge Center.

threeDViewerDisplayField component

Parameters

Parameter Type Description
theme Text Theme for the viewer. Valid values: "LIGHT" (default), "DARK".
documentId Integer The Appian document ID of the 3D file to load. When set, the viewer fetches and renders the file automatically. When cleared, the viewer returns to the home screen.
onSelectedMesh Variant (Map) Fires when a user clicks a mesh in the viewport or selects one in the navigator panel. Returns a map of the selected mesh's properties.
meshFilter Text or List of Text One or more mesh path values. When set, only meshes whose path matches are shown; all others are hidden and the navigator eye icons update to reflect this. Accepts a single path or a list. If null or empty, all meshes are shown. If no path matches (for example, if the file changed), all meshes are shown as a fallback. If the underlying document changes, the path may change. Only use this feature when the document is expected to remain unaltered.
backgroundColor Text Background color as a hex string. Changes are applied immediately and reflected in the Settings sidebar color picker.
showEdges Variant (Dictionary) Enables edge line rendering. Must be configured using the threedviewershowedges() function provided by the Helper plug-in. Passing a value turns edges on and applies the specified color and threshold. Changes are applied immediately and reflected in the Settings sidebar.

onSelectedMesh event fields

When a user selects a mesh, the onSelectedMesh event returns a map with the following fields:

Field Type Description
path Text Stable identifier for the mesh within this file. Use with meshFilter to show only this mesh when the component loads.
name Text Display name of the mesh or assembly node. For human readability only; not guaranteed unique. Do not use as an identifier.
vertexCount Integer Number of vertices.
triangleCount Integer Number of triangles.
lineCount Integer Number of line segments.
boundingBox Map Bounding box dimensions: { sizeX, sizeY, sizeZ }.
unit Text Unit of measurement (for example, "mm", "m"). Present only if the file format provides one.
properties List of Map Custom property groups from the file (for example, IFC property sets, BIM attributes, FreeCAD properties). Each entry has { name: Text, properties: List of { name: Text, value: Any } }. Present only if the file contains custom properties.

Examples

Load a document by ID:

1
2
3
threeDViewerDisplayField(
  documentId: ri!documentId
)

Capture the selected mesh path:

1
2
3
4
threeDViewerDisplayField(
  documentId: ri!documentId,
  onSelectedMesh: a!save(ri!savedMeshPath, save!value.path)
)

Filter to show one saved part on load:

1
2
3
4
threeDViewerDisplayField(
  documentId: ri!documentId,
  meshFilter: ri!savedMeshPath
)

Filter to show multiple parts simultaneously:

1
2
3
4
threeDViewerDisplayField(
  documentId: ri!documentId,
  meshFilter: { ri!path1, ri!path2, ri!path3 }
)

Full configuration—select a part and reload filtered:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a!localVariables(
  local!selectedMeshPath: "mesh_path",
  local!selectedMesh: null,
  threeDViewerDisplayField(
    theme: "LIGHT",
    documentId: cons!MY_3D_DOCUMENT,
    backgroundColor: "#f5f5f5",
    showEdges: threedviewershowedges(
      edgeColor: "#333333",
      edgeThreshold: 20
    ),
    meshFilter: local!selectedMeshPath,
    onSelectedMesh: local!selectedMesh
  )
)

Auxiliary configuration functions

The following functions are provided by the Appian 3D Viewer Helper plug-in and is available in Appian's expression editor under the 3D Viewer function category.

threedviewerhidetoolbaroptions()

Returns a dictionary of toolbar visibility flags for the 3D Viewer component. Each parameter accepts a boolean (default false = shown, true = hidden) controlling whether a corresponding toolbar button is hidden in the viewer.

Returns: Any Type

Parameter Type Description
openFromDevice Boolean When true, hides the Open from your device button. Defaults to false (shown).
fitToWindow Boolean When true, hides the Fit model to window button. Defaults to false (shown).
setYAxisUpVector Boolean When true, hides the Set Y axis as up vector button. Defaults to false (shown).
setZAxisUpVector Boolean When true, hides the Set Z axis as up vector button. Defaults to false (shown).
flipUpVector Boolean When true, hides the Flip up vector button. Defaults to false (shown).
navigationMode Boolean When true, hides the navigation mode toggle (Fixed up vector / Free orbit). Defaults to false (shown).
projectionMode Boolean When true, hides the projection mode toggle (Perspective camera / Orthographic camera). Defaults to false (shown).
measure Boolean When true, hides the Measure tool button. Defaults to false (shown).
explode Boolean When true, hides the Explode View tool button. Defaults to false (shown).
download Boolean When true, hides the Download button. Defaults to false (shown).
export Boolean When true, hides the Export button. Defaults to false (shown).
snapshot Boolean When true, hides the Create snapshot button. Defaults to false (shown).
themeToggle Boolean When true, hides the Dark mode / Light mode theme toggle. Defaults to false (shown).

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
threedviewerhidetoolbaroptions(
  openFromDevice: true,
  fitToWindow: true,
  setYAxisUpVector: true,
  setZAxisUpVector: true,
  flipUpVector: true,
  navigationMode: true,
  projectionMode: true,
  measure: true,
  explode: true,
  download: true,
  export: true,
  snapshot: true,
  themeToggle: true
)

threedviewershowedges()

Returns a validated dictionary of edge display settings for use with the showEdges component parameter.

Parameter Type Required Description
edgeColor Text No Hex color for rendered edges. Defaults to "#080304" if not provided.
edgeThreshold Integer No Edge angle threshold in degrees (0–90). Edges between faces whose dihedral angle exceeds this value are drawn. Lower values show more edges; higher values show only sharp creases. Defaults to 0.

Throws an error if edgeColor is not a valid hex string, or if edgeThreshold is outside the 0–90 range.

Returns a Dictionary with keys edgeColor (Text) and edgeThreshold (Integer).

Examples:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* Black edges, show all edges */
threedviewershowedges(
  edgeColor: "#000000",
  edgeThreshold: 0
)

/* Dark grey edges, show only sharp creases */
threedviewershowedges(
  edgeColor: "#333333",
  edgeThreshold: 30
)

/* Use defaults */
threedviewershowedges()

Understanding mesh paths

The path field in onSelectedMesh and the meshFilter parameter use the same path format, generated at runtime when a user clicks a mesh. Understanding how paths are built is important for knowing when they are stable and when they may change.

How paths are built

The path is computed by walking up the node hierarchy of the clicked mesh from child to root, building a slash-separated string. Each node segment includes the node name and a same-name sibling index (how many prior siblings at the same level share the same name):

1
ParentNodeName[siblingIndex]/ChildNodeName[siblingIndex]:meshPositionInNode
  • NodeName[0]: first (or only) node with that name at that level.
  • NodeName[1]: second node with the same name at the same level.
  • :0: the mesh's 0-based position within its node's mesh list (almost always :0).

Path format by file type

Hierarchical formats

Hierarchical formats include glTF/GLB, FBX, DAE/Collada, STEP, IGES, BREP, FCStd, and 3DS.

The path reflects the full assembly tree. The name and position of each ancestor node contribute to the path:

Scenario Example path
Single part "Engine" under root Engine[0]:0
Third node named "Bolt" inside "SubAssembly" SubAssembly[0]/Bolt[2]:0
Unnamed intermediate node, then "Wheel" [0]/Wheel[0]:0
STEP top-level part named "as1" as1[0]:0
FreeCAD body labelled "Body" Body[0]:0

Flat formats

Flat formats include IFC, OBJ, STL, PLY, OFF, 3DM.

These formats place all meshes directly under the root node with no hierarchy. The path is the 0-based position of the mesh in the root's mesh list:

Scenario Example path
First element 0
Fifteenth element 14
Only mesh in an STL file 0

Path stability

The path is stable across geometry-only changes (editing vertex positions, changing materials, refining mesh resolution). Use this property only for files that are not expected to be edited, restructured, or re-exported in ways that change the model hierarchy.

The path changes when:

  • A node is renamed in the source CAD tool and the file is re-exported.
  • A node is inserted or deleted before the target node at the same hierarchy level (shifts sibling indices).
  • A node is moved to a different position in the assembly tree.
  • For flat formats, any element is added or removed before the target element in the file.

User interface

Viewport interactions

The viewport enables users to interact with the model in the following ways:

  • Rotate: Drag while left-clicking anywhere in the viewport.
  • Zoom in / Zoom out: Scroll while the cursor is in the viewport.
  • Pan: Hold the shift key and drag while left-clicking anywhere in the viewport.

Toolbar

The toolbar provides the following controls:

  • Fit to window: Resets the camera to frame the entire model.
  • Up direction: Sets the world up axis (X, Y, or Z).
  • Perspective / Orthographic toggle: Switches between simulating three-dimensional perspective in the image (Perspective) and displaying the image in parallel, perpendicular views from the front, top, and side (Orthographic).
  • Explode Model slider: Explodes all meshes outward for enhanced visibility.

The navigator panel on the left lists all meshes and assembly nodes in the model. Users can:

  • Click a mesh item to select and highlight it in the viewport (also fires onSelectedMesh).
  • Toggle the eye icon to show or hide individual meshes.
  • Switch between Flat list and Tree view for hierarchical models.
  • Expand or collapse the assembly tree.
  • Click Fit to window for a single node.

Settings sidebar

The Settings panel on the right exposes model display options:

  • Background color picker: This setting is overridden at load by the backgroundColor parameter.
  • Edge display toggle, edge color picker, and angle threshold slider: These settings are overridden at load by the showEdges parameter.

Changes made in the sidebar update the viewer in real time and do not conflict with parameter-driven settings unless the user manually toggles an option (for example, turning edges off after showEdges has been applied).

Export

Users can export the currently loaded model from the toolbar. Supported export formats are:

  • Wavefront.
  • Stereolithography Text.
  • Stereolithography Binary.
  • Polygon File Format Text.
  • Polygon File Format Binary.
  • glTF Text.
  • glTF Binary.
  • Object File Format Text.
  • Rhinoceros 3D.
  • Dotbim.

Export happens client-side; server-side conversion is not currently supported.

Home screen

When no documentId is set, the viewer displays an intro screen with example files demonstrating each supported format. Users can click an example to load it directly in the viewer. When documentId is set, the intro screen is bypassed automatically.

Known limitations

  • Material support is file-format dependent. Certain files may contain material definitions, colors, textures, or surface properties that are not fully supported by the viewer, which can cause visual differences from the original model.
  • Not supported for Firefox and Safari browsers.

Feedback