بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ
In the name of Allah, the Compassionate, the Merciful
ISO 10303-21 STEP Clear Text Encoding (AP214 / AP242) CAD/CAE language package (.step, .stp, .p21) for ModelScript. Features a native WebAssembly GLR parser, StepWorkspaceIndex cross-file external reference resolver, B-Rep solid tessellation, assembly hierarchy & PMI/GD&T tolerance extraction (extractStepAssembly), automated Modelica MultiBody kinematic joint synthesis (mapStepToMultiBody), FEA/CFD mesh & study generation actions, step-mcp server tools, and 5 polyglot TGG rules.
- ISO 10303-21 STEP Clear Text Encoding Parser (
.step,.stp,.p21): Native WebAssembly GLR incremental parser (parser.wasm) generated by@modelscript/dsl(buildParser) coveringHEADER(FILE_DESCRIPTION,FILE_NAME,FILE_SCHEMA) andDATAsections, entity instances (#10 = PRODUCT(...)), nested typed parameters, enumerations, and entity references. StepWorkspaceIndexCross-File External Reference Resolver: ImplementsIWorkspaceIndexto index STEP products, shapes, and assembly trees across multi-file CAD workspaces, resolving external file references (DOCUMENT_FILE,APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT,NEXT_ASSEMBLY_USAGE_OCCURRENCE) and caching OpenCascade (occt-import-js) tessellated 3D WebGL meshes.- AP214 / AP242 Assembly, Kinematic Joint & PMI/GD&T Extractor (
extractStepAssembly): Extracts rich physical and geometric metadata intoStepAssemblyModel:- Parts & Assembly Hierarchy:
PRODUCT,PRODUCT_DEFINITION,MANIFOLD_SOLID_BREP,ADVANCED_BREP_SHAPE_REPRESENTATION, and parent-childNEXT_ASSEMBLY_USAGE_OCCURRENCEedges with 3DAXIS2_PLACEMENT_3Dcoordinate transforms (StepPlacement). - Kinematic Joints:
REVOLUTE_PAIR,PRISMATIC_PAIR,CYLINDRICAL_PAIR,SPHERICAL_PAIR,PLANAR_PAIR, andFIXED_PAIRjoint axes, origins, and travel limits (StepKinematicJoint). - Physical Mass & Inertia Properties: Volume, surface area, mass, center of mass ($\mathbf{r}{\text{CM}}$), and 3D inertia tensor ($I{11}, I_{22}, I_{33}, I_{21}, I_{31}, I_{32}$).
- 3D PMI & GD&T Tolerances: AP242 geometric tolerances (
FLATNESS_TOLERANCE,CYLINDRICITY_TOLERANCE,POSITION_TOLERANCE,PERPENDICULARITY_TOLERANCE,PARALLELISM_TOLERANCE,CONCENTRICITY_TOLERANCE,RUNOUT_TOLERANCE), datum features (DATUM), and datum reference frames (DATUM_SYSTEM).
- Parts & Assembly Hierarchy:
- Modelica MultiBody Kinematic Synthesis (
mapStepToMultiBody): Maps extractedStepAssemblyModelparts, mass/inertia tensors, coordinate frame offsets, and kinematic pairs directly intoMultiBodyAssemblydescriptors (Parts.BodyShape,Joints.Revolute,Joints.Prismatic,Joints.Cylindrical,Joints.Spherical,Joints.Planar,Parts.FixedTranslation) for@modelscript/modelica'sgenerateMultiBodyModelica. - Interactive CAD Viewer & FEA/CFD Mesh/Study Generation Actions:
open_cad_viewer: Opens the 3D WebGL assembly and solid B-Rep geometry viewer.generate_multibody: Translates the STEP assembly into a runnable ModelicaMultiBodymodel.generate_fea_mesh&create_fea_setup: Discretizes 3D CAD solids into CalculiX.inptetrahedral/hexahedral mesh decks and scaffolds.fea.mostructural verification studies.generate_cfd_mesh&create_cfd_setup: Generates aerodynamic.su2/.cfgcomputational meshes and scaffolds.cfd.mosteady-state CFD studies.
- Model Context Protocol (
step-mcp) Server: Exposesstep_extract_entitiesandstep_to_multibodytools to AI engineering agents. - 5 Bidirectional Polyglot TGG Rules: Synchronizes STEP products, properties, 3D placements, and kinematic joints with SysML v2 parts/ports and Modelica
MultiBodyjoints.
| Path | Description |
|---|---|
src/index.ts |
Public exports (stepLanguage, extractStepAssembly, StepWorkspaceIndex, physical-data, schema) |
src/language.ts |
ISO 10303-21 grammar, writeback handler, 6 CAE/MultiBody actions, step-mcp server, LSP handlers, and 5 TGG rules |
src/assembly-extractor.ts |
extractStepAssembly parser for AP214/AP242 parts, placements, kinematic pairs, mass properties, and PMI/GD&T |
src/workspace-index.ts |
StepWorkspaceIndex multi-file symbol indexer, external reference resolver, and OpenCascade B-Rep mesh cache |
src/physical-data.ts |
Data structures for StepAssemblyModel, StepPart, StepKinematicJoint, StepMassProperties, and StepGeometricTolerance |
src/schema.ts |
STEP AP214/AP242 entity schema definitions and attribute descriptors |
step-multibody-mapper.ts |
mapStepToMultiBody converter from StepAssemblyModel to Modelica MultiBodyAssembly |
build.js |
Compiles src/language.ts into dist/parser.wasm and src-gen/bindings.js |
@modelscript/step defines 5 bidirectional TGG rules in stepLanguage.polyglot.rules:
| Rule Name | Source (step) |
Target (sysml2 / modelica) |
|---|---|---|
StepProductToSysML2Part |
ProductDefinition(name: prodName) |
sysml2: PartDefinition(declaredName: prodName) |
StepPropertyToSysML2Attribute |
PropertyDefinition(name: propName, value: val) |
sysml2: AttributeUsage(declaredName: propName, defaultValue: val) |
StepPlacementToSysML2Port |
Axis2Placement3D(name: frameName) |
sysml2: PortUsage(declaredName: frameName) |
StepRevoluteJointToModelicaRevolute |
KinematicPair(name: jointName, pairType: "revolute") |
modelica: ComponentClause(name: jointName, typeSpecifier: "Modelica.Mechanics.MultiBody.Joints.Revolute") |
StepPrismaticJointToModelicaPrismatic |
KinematicPair(name: jointName, pairType: "prismatic") |
modelica: ComponentClause(name: jointName, typeSpecifier: "Modelica.Mechanics.MultiBody.Joints.Prismatic") |
import { extractStepAssembly, StepWorkspaceIndex } from "@modelscript/step";
import { mapStepToMultiBody } from "@modelscript/step/mapper";
import { createWasmParser } from "@modelscript/step/parser";
// 1. Initialize WASM GLR parser for ISO 10303-21 STEP files
const wasmPath = require.resolve("@modelscript/step/parser.wasm");
const { parser } = await createWasmParser(wasmPath);
const tree = parser.parse(stepSourceText);
// 2. Extract AP214/AP242 assembly hierarchy, kinematic joints, mass properties & PMI/GD&T
const assembly = extractStepAssembly(stepSourceText);
console.log(assembly.parts.size, assembly.joints, assembly.tolerances);
// 3. Map STEP assembly to a Modelica MultiBody descriptor
const multiBody = mapStepToMultiBody("RoboticArm", assembly);
// 4. Index multi-file STEP assemblies in StepWorkspaceIndex
const index = new StepWorkspaceIndex();
index.indexFile("file:///workspace/RoboticArm.step", stepSourceText);