Package Exports
- vtk-unstructured-viewer
- vtk-unstructured-viewer/dist/bundle.es.min.js
- vtk-unstructured-viewer/dist/bundle.min.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (vtk-unstructured-viewer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
VTK Unstructured Viewer JavaScript – VTU Parser & Unstructured Grid Toolkit
Pure‑JS toolkit for parsing, filtering, and exporting VTK Unstructured Grid (
.vtu) data in Browser & Node.js.
✨ Features
- VTU parsing via
vtkXMLUnstructuredGridReader(ASCII, binary, appended) - VTK‑style classes for data processing:
vtkThreshold,vtkImplicitCut,vtkClipByScalar,vtkCellDataToPointData - Geometry extraction:
extractBoundary(grid)→ minimal polydata for WebGL - Export:
vtkUnstructuredGridToVTPfor one‑call round‑trip back to ParaView - Debugger utilities:
VTKDebugger.analyzeUnstructuredGrid(grid),VTKDebugger.analyzePolyData(polydata) - Serialization:
serializeUnstructuredGrid/deserializeUnstructuredGridand polydata equivalents - Zero runtime deps (~12 kB gzip core + helpers)
📦 Installation
npm install vtk-unstructured-viewerRequires Node.js 14+ or any evergreen browser (Chrome 60+, Firefox 55+, Safari 11+, Edge 79+).
🚀 Quick Start
1. Parse a VTU from an ArrayBuffer
import vtkXMLUnstructuredGridReader from 'vtk-unstructured-viewer/vtkUnstructuredGridReader.js';
// 1. Instantiate reader
const reader = new vtkXMLUnstructuredGridReader();
// 2. Load VTU file as ArrayBuffer
const buffer = await fetch('/data/mesh.vtu').then(r => r.arrayBuffer());
// 3. Parse binary content
await reader.parseAsArrayBuffer(buffer);
// 4. Access the unstructured grid
const grid = reader.grid;
console.log('Points:', grid.getPoints().getData().length / grid.getPoints().getNumberOfComponents());
console.log('Cells :', grid.getConnectivity().length);Alternatively, you can fetch text and call await reader.parseAsText(xmlString) or await reader.setUrl(url) (fetch+parse).
🛠️ API Reference
vtkXMLUnstructuredGridReader
| Method | Description |
|---|---|
new vtkXMLUnstructuredGridReader() |
Create reader instance |
await reader.parseAsArrayBuffer(buf) |
Parse binary/appended VTU content |
await reader.parseAsText(text) |
Parse ASCII VTU XML |
await reader.setUrl(url, opts) |
Fetch & parse VTU from URL |
reader.grid |
Instance of vtkUnstructuredGrid |
reader.setDataAccessHelper(helper) |
Use custom fetch helper |
vtkUnstructuredGrid
| Method | Description |
|---|---|
new vtkUnstructuredGrid() |
Create empty grid |
setPoints({values,numberOfComponents,getData,getNumberOfComponents}) |
Set vertex coordinates |
getPoints() |
DataArray-like object (getData(), getNumberOfComponents()) |
setConnectivity(Uint32Array) |
Cell‑to‑point connectivity |
getConnectivity() |
Pair with getOffsets() and getTypes() |
setOffsets(Uint32Array) |
Cell offsets |
getOffsets() |
― |
setTypes(Uint8Array) |
VTK cell type codes |
getTypes() |
― |
setFacesConnectivity(Uint32Array) |
Polyhedron face connectivity |
getFacesConnectivity() |
― |
setFacesOffsets(Uint32Array) |
Face offsets |
getFacesOffsets() |
― |
setPolyhedronToFaces(Int32Array) |
Map polyhedron→face IDs |
setPolyhedronOffsets(Uint32Array) |
Polyhedron offsets |
getBounds(): [xmin,xmax,ymin,ymax,zmin,zmax] |
Axis‑aligned bounding box |
toVTPString() |
Serialize entire grid → VTP XML string |
Data Filters
vtkThreshold
const f = new vtkThreshold();
f.setScalarArrayName('pressure');
f.setLowerThreshold(0.0);
f.setUpperThreshold(1.0);
f.setInvert(false);
const filteredGrid = f.execute(grid);vtkImplicitCut
const cutter = new vtkImplicitCut();
cutter.setScalarArrayName('velocity');
cutter.setCutFunction((x,y,z) => x+y-z);
cutter.setCutValue(0.5);
const slicePoly = cutter.execute(grid);vtkClipByScalar
const clipper = new vtkClipByScalar();
clipper.setScalarArrayName('temperature');
clipper.setClipValue(300);
clipper.setInsideOut(true);
const isoPoly = clipper.execute(grid, { perfect: true });vtkCellDataToPointData
const c2p = new vtkCellDataToPointData();
c2p.setInputArrayName('velocity');
c2p.setOutputArrayName('velocity_pt');
const gridWithPoints = c2p.execute(grid);Geometry & Export
import { extractBoundary } from 'vtk-unstructured-viewer/vtkGeometryFilter.js';
import vtkUnstructuredGridToVTP from 'vtk-unstructured-viewer/vtkUnstructuredGridToVTP.js';
// Extract exterior faces
const polyData = extractBoundary(grid);
// Serialize / save VTP
const writer = new vtkUnstructuredGridToVTP();
writer.setExtractBoundaryCells(true);
writer.setPassPointData(true);
writer.setPassCellData(false);
const surfacePoly = writer.execute(grid);
const xml = writer.getVTPString(surfacePoly);
writer.saveVTP('output.vtp');Debugging & Serialization
import VTKDebugger from 'vtk-unstructured-viewer/vtkDebugger.js';
import { serializeUnstructuredGrid, deserializeUnstructuredGrid } from 'vtk-unstructured-viewer/utils.js';
VTKDebugger.analyzeUnstructuredGrid(grid);
VTKDebugger.analyzePolyData(polyData);
const json = serializeUnstructuredGrid(grid);
const restoredGrid = deserializeUnstructuredGrid(json);🔬 Example Workflow
async function processVtu(url) {
const reader = new vtkXMLUnstructuredGridReader();
const buffer = await fetch(url).then(r => r.arrayBuffer());
await reader.parseAsArrayBuffer(buffer);
let grid = reader.grid;
// Threshold
const thresh = new vtkThreshold();
thresh.setScalarArrayName('alpha.water');
thresh.setLowerThreshold(0.2);
thresh.setUpperThreshold(1.0);
grid = thresh.execute(grid);
// Interpolate to points
const c2p = new vtkCellDataToPointData();
c2p.setInputArrayName('alpha.water');
grid = c2p.execute(grid);
// Clip
const clipper = new vtkClipByScalar();
clipper.setScalarArrayName('alpha.water');
clipper.setClipValue(0.5);
const surfacePoly = clipper.execute(grid);
// Export
const writer = new vtkUnstructuredGridToVTP();
writer.setPassPointData(true);
writer.saveVTP('phase.vtp');
}📐 Supported VTK Cell Types
Supports all standard and higher‑order VTK cell types: triangles, quads, tets, hexes, wedges, pyramids, voxels, polygons, polyhedra, and their quadratic/Lagrange variants.
🚀 Performance
- Streaming XML parser – 1 M+ cells on mid‑range machines
- Typed arrays – zero‑copy math, GPU‑friendly layout
- 32/64‑bit floats – precision choice per dataset
🤝 Compatibility
| Environment | Requirement |
|---|---|
| Chrome | ≥ 60 |
| Firefox | ≥ 55 |
| Safari | ≥ 11 |
| Edge (Chromium) | ≥ 79 |
| Node.js | ≥ 14 (ESM) |
🛡️ Error Handling Example
try {
const reader = new vtkXMLUnstructuredGridReader();
const buf = await fetch('bad.vtu').then(r => r.arrayBuffer());
await reader.parseAsArrayBuffer(buf);
} catch (err) {
console.error('VTU parse error:', err.message);
}© License & Support
This package is proprietary. See LICENSE.
- Docs & issues → https://github.com/sridhar-mani/vtk-unstructured-viewer
- Email support → support@example.com
🔎 SEO Keywords
VTK • VTU • unstructured grid • vtk.js • CFD • FEA • WebGL • JavaScript • mesh processing • iso‑surface • threshold filter • geometry filter • browser visualization • Node.js