moonbit-ifc

    A zero-dependency IFC STEP parser and BIM extraction engine for MoonBit

    ifc
    bim
    step
    parser
    wasm
    Download zip
    Author
    Version
    0.1.3
    License
    Apache-2.0
    Last updated
    2 months ago
    Downloads
    40

    No dependencies

    #moonbit-ifc package notes

    The package-level API is documented in the repository README. The following snippet is intentionally mbt nocheck: it shows the public shape without making the package README depend on a particular fixture string.

    ///|
    let model = @ifc.parse(step_text)

    ///|
    let products = model.products()

    ///|
    let browser_payload = @ifc.model_to_json(model)

    See docs/architecture.md for the package boundaries and docs/scope.md for the supported IFC surface.

    EditError

    pub suberror EditError {
    DuplicateEntity(id~ : Int)
    MissingEntity(id~ : Int)
    InvalidAttribute(index~ : Int)
    EmptyPatch
    } derive(Eq,
    Debug
    )

    ParseError

    pub suberror ParseError {
    UnexpectedEnd(position~ : SourcePosition)
    UnexpectedCharacter(position~ : SourcePosition, character~ : Char)
    Expected(position~ : SourcePosition, token~ : String)
    InvalidNumber(position~ : SourcePosition, text~ : String)
    InvalidReference(position~ : SourcePosition, text~ : String)
    InvalidEntity(position~ : SourcePosition, text~ : String)
    InvalidHeader(position~ : SourcePosition, text~ : String)
    UnsupportedFile(text~ : String)
    } derive(
    Debug
    )

    AssetKind

    pub(all) enum AssetKind {
    Manifest
    Geometry
    Properties
    Spatial
    Product
    } derive(Eq,
    Debug
    )

    The kind of payload described by a WebBIM delivery manifest.

    AssetManifest

    pub(all) struct AssetManifest {
    schema : String
    model_hash : Int
    entries : Array[AssetManifestEntry]
    product_count : Int
    chunk_count : Int
    point_count : Int
    triangle_count : Int
    bounds : BoundingBox
    } derive(
    Debug
    )

    A complete delivery map for a parsed IFC model.

    AssetManifest::entries_of_kind

    fn AssetManifest::entries_of_kind(self : AssetManifest, kind : AssetKind) -> Array[AssetManifestEntry]

    AssetManifest::entry

    fn AssetManifest::entry(self : AssetManifest, path : String) -> AssetManifestEntry?

    AssetManifest::entry_count

    fn AssetManifest::entry_count(self : AssetManifest) -> Int

    AssetManifest::geometry_entries

    fn AssetManifest::geometry_entries(self : AssetManifest) -> Array[AssetManifestEntry]

    AssetManifest::headline

    fn AssetManifest::headline(self : AssetManifest) -> String

    AssetManifest::is_cacheable

    fn AssetManifest::is_cacheable(self : AssetManifest) -> Bool

    AssetManifest::paths

    fn AssetManifest::paths(self : AssetManifest) -> Array[String]

    AssetManifest::product_entries

    fn AssetManifest::product_entries(self : AssetManifest) -> Array[AssetManifestEntry]

    AssetManifest::spatial_entry

    fn AssetManifest::spatial_entry(self : AssetManifest) -> AssetManifestEntry?

    AssetManifest::to_csv

    fn AssetManifest::to_csv(self : AssetManifest) -> String

    AssetManifest::to_json

    fn AssetManifest::to_json(self : AssetManifest) -> String

    AssetManifest::to_markdown

    fn AssetManifest::to_markdown(self : AssetManifest) -> String

    AssetManifest::total_bytes

    fn AssetManifest::total_bytes(self : AssetManifest) -> Int

    AssetManifest::total_points

    fn AssetManifest::total_points(self : AssetManifest) -> Int

    AssetManifest::total_triangles

    fn AssetManifest::total_triangles(self : AssetManifest) -> Int

    AssetManifestEntry

    pub(all) struct AssetManifestEntry {
    path : String
    kind : AssetKind
    product_ids : Array[Int]
    byte_length : Int
    point_count : Int
    triangle_count : Int
    bounds : BoundingBox
    checksum : Int
    compressed : Bool
    } derive(
    Debug
    )

    One downloadable payload and the products it covers.

    AssetManifestOptions

    pub(all) struct AssetManifestOptions {
    base_uri : String
    chunk_size : Int
    include_properties : Bool
    include_spatial : Bool
    include_product_rows : Bool
    include_empty_chunks : Bool
    } derive(
    Debug
    )

    Options for producing a deterministic, cache-friendly asset manifest.

    AssetManifestOptions::including_empty_chunks

    fn AssetManifestOptions::including_empty_chunks(self : AssetManifestOptions, value : Bool) -> AssetManifestOptions

    AssetManifestOptions::including_product_rows

    fn AssetManifestOptions::including_product_rows(self : AssetManifestOptions, value : Bool) -> AssetManifestOptions

    AssetManifestOptions::including_properties

    fn AssetManifestOptions::including_properties(self : AssetManifestOptions, value : Bool) -> AssetManifestOptions

    AssetManifestOptions::including_spatial

    fn AssetManifestOptions::including_spatial(self : AssetManifestOptions, value : Bool) -> AssetManifestOptions

    AssetManifestOptions::with_base_uri

    fn AssetManifestOptions::with_base_uri(self : AssetManifestOptions, base_uri : String) -> AssetManifestOptions

    AssetManifestOptions::with_chunk_size

    fn AssetManifestOptions::with_chunk_size(self : AssetManifestOptions, chunk_size : Int) -> AssetManifestOptions

    BenchmarkCase

    pub(all) struct BenchmarkCase {
    name : String
    iterations : Int
    source_length : Int
    entity_count : Int
    } derive(
    Debug
    )

    A single repeatable benchmark measurement.

    BenchmarkReport

    pub(all) struct BenchmarkReport {
    toolchain : String
    cases : Array[BenchmarkResult]
    notes : Array[String]
    } derive(
    Debug
    )

    BenchmarkReport::headline

    fn BenchmarkReport::headline(self : BenchmarkReport) -> String

    BenchmarkReport::to_json

    fn BenchmarkReport::to_json(self : BenchmarkReport) -> String

    BenchmarkReport::to_markdown

    fn BenchmarkReport::to_markdown(self : BenchmarkReport) -> String

    BenchmarkResult

    pub(all) struct BenchmarkResult {
    name : String
    iterations : Int
    elapsed_millis : UInt64
    operations_per_second : Double
    source_length : Int
    entity_count : Int
    allocated_entities : Int
    } derive(
    Debug
    )

    BenchmarkResult::bytes_per_operation

    fn BenchmarkResult::bytes_per_operation(self : BenchmarkResult) -> Double

    BenchmarkResult::is_measured

    fn BenchmarkResult::is_measured(self : BenchmarkResult) -> Bool

    BimScene

    pub(all) struct BimScene {
    items : Array[SceneItem]
    roots : Array[SpatialNode]
    bounds : BoundingBox
    } derive(
    Debug
    )

    BimScene::find

    fn BimScene::find(self : BimScene, id : Int) -> SceneItem?

    BimScene::geometry_count

    fn BimScene::geometry_count(self : BimScene) -> Int

    BimScene::product_ids

    fn BimScene::product_ids(self : BimScene) -> Array[Int]

    BimScene::to_json

    fn BimScene::to_json(self : BimScene) -> String

    BoundingBox

    pub(all) struct BoundingBox {
    min : Point3
    max : Point3
    empty : Bool
    } derive(
    Debug
    )

    BoundingBox::center

    fn BoundingBox::center(self : BoundingBox) -> Point3

    BoundingBox::depth

    fn BoundingBox::depth(self : BoundingBox) -> Double

    BoundingBox::empty

    fn BoundingBox::empty() -> BoundingBox

    BoundingBox::from_points

    fn BoundingBox::from_points(points : Array[Point3]) -> BoundingBox

    BoundingBox::height

    fn BoundingBox::height(self : BoundingBox) -> Double

    BoundingBox::volume

    fn BoundingBox::volume(self : BoundingBox) -> Double

    BoundingBox::width

    fn BoundingBox::width(self : BoundingBox) -> Double

    BoxRelation

    pub(all) enum BoxRelation {
    Disjoint
    Touching
    Overlapping
    Contains
    Within
    Equal
    } derive(Eq,
    Debug
    )

    A relation between two axis-aligned boxes.

    CanonicalStepStats

    pub(all) struct CanonicalStepStats {
    source_length : Int
    canonical_length : Int
    entity_count : Int
    changed : Bool
    duplicate_id_count : Int
    line_count : Int
    } derive(
    Debug
    )

    Deterministic serialization metrics for a canonical STEP document.

    CanonicalStepStats::compression_ratio

    fn CanonicalStepStats::compression_ratio(self : CanonicalStepStats) -> Double

    CanonicalStepStats::has_duplicates

    fn CanonicalStepStats::has_duplicates(self : CanonicalStepStats) -> Bool

    CanonicalStepStats::headline

    fn CanonicalStepStats::headline(self : CanonicalStepStats) -> String

    CanonicalStepStats::to_json

    fn CanonicalStepStats::to_json(self : CanonicalStepStats) -> String

    CapabilityReport

    pub(all) struct CapabilityReport {
    schema : SchemaVersion
    has_products : Bool
    has_spatial_structure : Bool
    has_properties : Bool
    has_geometry : Bool
    has_units : Bool
    } derive(
    Debug
    )

    CatalogPage

    pub(all) struct CatalogPage {
    products : Array[Product]
    total_matches : Int
    offset : Int
    limit : Int
    has_next : Bool
    } derive(
    Debug
    )

    A page returned by a catalog query.

    CatalogQuery

    pub(all) struct CatalogQuery {
    kind : ProductKind?
    ifc_type : String?
    name_contains : String?
    property_contains : String?
    container : Int?
    sort_key : CatalogSortKey
    direction : SortDirection
    offset : Int
    limit : Int
    } derive(
    Debug
    )

    A composable query for indexed products.

    CatalogQuery::in_container

    fn CatalogQuery::in_container(self : CatalogQuery, container : Int) -> CatalogQuery

    CatalogQuery::named

    fn CatalogQuery::named(self : CatalogQuery, fragment : String) -> CatalogQuery

    CatalogQuery::new

    CatalogQuery::of_kind

    fn CatalogQuery::of_kind(self : CatalogQuery, kind : ProductKind) -> CatalogQuery

    CatalogQuery::of_type

    fn CatalogQuery::of_type(self : CatalogQuery, ifc_type : String) -> CatalogQuery

    CatalogQuery::page

    fn CatalogQuery::page(self : CatalogQuery, offset : Int, limit : Int) -> CatalogQuery

    CatalogQuery::sorted_by

    fn CatalogQuery::sorted_by(self : CatalogQuery, sort_key : CatalogSortKey, direction : SortDirection) -> CatalogQuery

    CatalogQuery::with_property

    fn CatalogQuery::with_property(self : CatalogQuery, fragment : String) -> CatalogQuery

    CatalogSortKey

    pub(all) enum CatalogSortKey {
    EntityId
    EntityType
    ProductName
    ProductKind
    PropertyValue
    } derive(Eq,
    Debug
    )

    ChangeKind

    pub(all) enum ChangeKind {
    Added
    Removed
    Modified
    } derive(Eq,
    Debug
    )

    ClashOptions

    pub(all) struct ClashOptions {
    tolerance : Double
    minimum_overlap_volume : Double
    include_touching : Bool
    include_same_container : Bool
    ignored_types : Array[String]
    maximum_pairs : Int
    } derive(
    Debug
    )

    Policy controlling which product pairs are reported as clashes.

    ClashOptions::ignoring_type

    fn ClashOptions::ignoring_type(self : ClashOptions, name : String) -> ClashOptions

    ClashOptions::including_same_container

    fn ClashOptions::including_same_container(self : ClashOptions, value : Bool) -> ClashOptions

    ClashOptions::including_touching

    fn ClashOptions::including_touching(self : ClashOptions, value : Bool) -> ClashOptions

    ClashOptions::with_maximum_pairs

    fn ClashOptions::with_maximum_pairs(self : ClashOptions, count : Int) -> ClashOptions

    ClashOptions::with_minimum_overlap

    fn ClashOptions::with_minimum_overlap(self : ClashOptions, volume : Double) -> ClashOptions

    ClashOptions::with_tolerance

    fn ClashOptions::with_tolerance(self : ClashOptions, tolerance : Double) -> ClashOptions

    ClashPair

    pub(all) struct ClashPair {
    left : SpatialEntry
    right : SpatialEntry
    relation : BoxRelation
    overlap : BoundingBox
    overlap_volume : Double
    clearance : Double
    } derive(
    Debug
    )

    A candidate pair found by broad-phase clash detection.

    ClashPair::has_volume

    fn ClashPair::has_volume(self : ClashPair) -> Bool

    ClashPair::headline

    fn ClashPair::headline(self : ClashPair) -> String

    ClashPair::intersection_center

    fn ClashPair::intersection_center(self : ClashPair) -> Point3

    ClashPair::is_touching

    fn ClashPair::is_touching(self : ClashPair) -> Bool

    ClashPair::minimum_separation

    fn ClashPair::minimum_separation(self : ClashPair) -> Double

    ClashPair::type_key

    fn ClashPair::type_key(self : ClashPair) -> String

    ClashReport

    pub(all) struct ClashReport {
    pairs : Array[ClashPair]
    candidate_count : Int
    ignored_count : Int
    overlap_volume : Double
    by_type : Map[String, Int]
    } derive(
    Debug
    )

    Aggregate result of a clash or clearance analysis.

    ClashReport::count

    fn ClashReport::count(self : ClashReport) -> Int

    ClashReport::headline

    fn ClashReport::headline(self : ClashReport) -> String

    ClashReport::highest_overlap

    fn ClashReport::highest_overlap(self : ClashReport) -> ClashPair?

    ClashReport::is_empty

    fn ClashReport::is_empty(self : ClashReport) -> Bool

    ClashReport::pairs_for_product

    fn ClashReport::pairs_for_product(self : ClashReport, product_id : Int) -> Array[ClashPair]

    ClashReport::pairs_for_type

    fn ClashReport::pairs_for_type(self : ClashReport, left_type : String, right_type : String) -> Array[ClashPair]

    ClashReport::product_ids

    fn ClashReport::product_ids(self : ClashReport) -> Array[Int]

    ClashReport::severity

    fn ClashReport::severity(self : ClashReport) -> String

    ClashReport::to_json

    fn ClashReport::to_json(self : ClashReport) -> String

    ClashReport::to_markdown

    fn ClashReport::to_markdown(self : ClashReport) -> String

    ClassificationReference

    pub(all) struct ClassificationReference {
    entity_id : Int
    source : String?
    identification : String?
    name : String?
    referenced_entity : Int
    } derive(
    Debug
    )

    A classification reference such as OmniClass, Uniclass or a local code.

    ClassificationReference::headline

    fn ClassificationReference::headline(self : ClassificationReference) -> String

    CoordinateFrame

    pub(all) struct CoordinateFrame {
    entity_id : Int
    name : String
    parent_id : Int?
    transform : Transform3
    depth : Int
    } derive(
    Debug
    )

    A named coordinate system discovered from IFC placement entities.

    CoordinateFrame::apply

    fn CoordinateFrame::apply(self : CoordinateFrame, point : Point3) -> Point3

    CoordinateFrame::headline

    fn CoordinateFrame::headline(self : CoordinateFrame) -> String

    CoordinateFrame::is_root

    fn CoordinateFrame::is_root(self : CoordinateFrame) -> Bool

    CoordinateFrame::origin

    fn CoordinateFrame::origin(self : CoordinateFrame) -> Point3

    CoordinateReport

    pub(all) struct CoordinateReport {
    frames : Array[CoordinateFrame]
    world_bounds : BoundingBox
    unit_scale : Double
    has_map_conversion : Bool
    warning_count : Int
    } derive(
    Debug
    )

    A model coordinate conversion summary.

    CoordinateReport::frame

    fn CoordinateReport::frame(self : CoordinateReport, id : Int) -> CoordinateFrame?

    CoordinateReport::headline

    fn CoordinateReport::headline(self : CoordinateReport) -> String

    CoordinateReport::is_consistent

    fn CoordinateReport::is_consistent(self : CoordinateReport) -> Bool

    CoordinateReport::max_depth

    fn CoordinateReport::max_depth(self : CoordinateReport) -> Int

    CoordinateReport::roots

    CoordinateReport::to_json

    fn CoordinateReport::to_json(self : CoordinateReport) -> String

    CoordinateReport::to_markdown

    fn CoordinateReport::to_markdown(self : CoordinateReport) -> String

    DeliveryAssetChange

    pub(all) struct DeliveryAssetChange {
    path : String
    change : DeliveryChange
    before_checksum : Int?
    after_checksum : Int?
    affected_products : Array[Int]
    byte_delta : Int
    } derive(
    Debug
    )

    One manifest path and the revision impact that applies to it.

    DeliveryChange

    pub(all) enum DeliveryChange {
    AddedAsset
    RemovedAsset
    InvalidatedAsset
    RetainedAsset
    } derive(Eq,
    Debug
    )

    Change class for a cache-aware WebBIM delivery.

    Diagnostic

    pub(all) struct Diagnostic {
    severity : DiagnosticSeverity
    code : String
    message : String
    entity_id : Int?
    } derive(
    Debug
    )

    DiagnosticSeverity

    pub(all) enum DiagnosticSeverity {
    Error
    Warning
    Note
    } derive(Eq,
    Debug
    )

    Entity

    pub(all) struct Entity {
    id : Int
    name : String
    arguments : Array[Value]
    } derive(
    Debug
    )

    A raw IFC entity. Unknown entity names and argument values are preserved.

    Entity::argument

    fn Entity::argument(self : Entity, index : Int) -> Value?

    Entity::new

    fn Entity::new(id~ : Int, name~ : String, arguments~ : Array[Value]) -> Entity

    EntityAttribute

    pub(all) struct EntityAttribute {
    index : Int
    value : Value
    } derive(
    Debug
    )

    EntityFieldChange

    pub(all) struct EntityFieldChange {
    entity_id : Int
    attribute : Int
    before : Value?
    after : Value?
    kind : ChangeKind
    } derive(
    Debug
    )

    A field-level change that is easier to review than a complete entity diff.

    EntityFieldChange::headline

    fn EntityFieldChange::headline(self : EntityFieldChange) -> String

    EntityFilter

    pub(all) enum EntityFilter {
    Name(String)
    Prefix(String)
    ProductOnly
    All
    } derive(
    Debug
    )

    EntityGraph

    pub(all) struct EntityGraph {
    nodes : Array[Int]
    edges : Array[GraphEdge]
    outgoing : Map[Int, Array[GraphEdge]]
    incoming : Map[Int, Array[GraphEdge]]
    } derive(
    Debug
    )

    Indexed directed graph over raw IFC entity references.

    EntityGraph::components

    fn EntityGraph::components(self : EntityGraph) -> Array[GraphComponent]

    EntityGraph::cycles

    fn EntityGraph::cycles(self : EntityGraph) -> Array[Array[Int]]

    EntityGraph::degree

    fn EntityGraph::degree(self : EntityGraph, id : Int) -> GraphDegree

    EntityGraph::degrees

    fn EntityGraph::degrees(self : EntityGraph) -> Array[GraphDegree]

    EntityGraph::dependents

    fn EntityGraph::dependents(self : EntityGraph, roots : Array[Int]) -> Array[Int]

    EntityGraph::direct_dependencies

    fn EntityGraph::direct_dependencies(self : EntityGraph, id : Int) -> Array[Int]

    EntityGraph::direct_dependents

    fn EntityGraph::direct_dependents(self : EntityGraph, id : Int) -> Array[Int]

    EntityGraph::edge_count

    fn EntityGraph::edge_count(self : EntityGraph) -> Int

    EntityGraph::edges

    fn EntityGraph::edges(self : EntityGraph) -> Array[GraphEdge]

    EntityGraph::edges_from

    fn EntityGraph::edges_from(self : EntityGraph, id : Int) -> Array[GraphEdge]

    EntityGraph::edges_to

    fn EntityGraph::edges_to(self : EntityGraph, id : Int) -> Array[GraphEdge]

    EntityGraph::has_node

    fn EntityGraph::has_node(self : EntityGraph, id : Int) -> Bool

    EntityGraph::incoming_ids

    fn EntityGraph::incoming_ids(self : EntityGraph, id : Int) -> Array[Int]

    EntityGraph::leaves

    fn EntityGraph::leaves(self : EntityGraph) -> Array[Int]

    EntityGraph::new

    fn EntityGraph::new(index : ModelIndex) -> EntityGraph

    EntityGraph::node_count

    fn EntityGraph::node_count(self : EntityGraph) -> Int

    EntityGraph::nodes

    fn EntityGraph::nodes(self : EntityGraph) -> Array[Int]

    EntityGraph::orphans

    fn EntityGraph::orphans(self : EntityGraph) -> Array[Int]

    EntityGraph::outgoing_ids

    fn EntityGraph::outgoing_ids(self : EntityGraph, id : Int) -> Array[Int]

    EntityGraph::reachable

    fn EntityGraph::reachable(self : EntityGraph, roots : Array[Int]) -> Array[Int]

    EntityGraph::roots

    fn EntityGraph::roots(self : EntityGraph) -> Array[Int]

    EntityGraph::shortest_path

    fn EntityGraph::shortest_path(self : EntityGraph, start : Int, goal : Int) -> GraphPath?

    Find a shortest reference path, useful for explaining why two IFC records are connected.

    EntityGraph::topological_order

    fn EntityGraph::topological_order(self : EntityGraph) -> Array[Int]

    Return a stable topological order; cyclic nodes are appended in source order.

    EntityPatch

    pub(all) enum EntityPatch {
    Add(Entity)
    Remove(Int)
    Replace(Entity)
    SetAttribute(id~ : Int, index~ : Int, value~ : Value)
    } derive(
    Debug
    )

    EntityPatch::description

    fn EntityPatch::description(self : EntityPatch) -> String

    EntityPatch::id

    fn EntityPatch::id(self : EntityPatch) -> Int

    EntityRange

    pub(all) struct EntityRange {
    first_id : Int
    last_id : Int
    entity_count : Int
    contiguous : Bool
    } derive(
    Debug
    )

    EntityRange::summary

    fn EntityRange::summary(self : EntityRange) -> String

    ExportBundle

    pub(all) struct ExportBundle {
    headline : String
    json : String
    products_csv : String
    properties_csv : String
    scene_json : String
    } derive(
    Debug
    )

    ExportBundle::file_names

    fn ExportBundle::file_names(self : ExportBundle) -> Array[String]

    ExportBundle::has_content

    fn ExportBundle::has_content(self : ExportBundle) -> Bool

    ExportBundle::payload

    fn ExportBundle::payload(self : ExportBundle) -> String

    ExportBundle::report

    fn ExportBundle::report(self : ExportBundle) -> String

    ExportFormat

    pub(all) enum ExportFormat {
    Obj
    Ply
    JsonLines
    WebBim
    } derive(Eq,
    Debug
    )

    ExportOptions

    pub(all) struct ExportOptions {
    format : ExportFormat
    include_empty_products : Bool
    include_normals : Bool
    include_properties : Bool
    precision : Int
    } derive(
    Debug
    )

    ExportOptions::including_empty

    fn ExportOptions::including_empty(self : ExportOptions, enabled : Bool) -> ExportOptions

    ExportOptions::including_normals

    fn ExportOptions::including_normals(self : ExportOptions, enabled : Bool) -> ExportOptions

    ExportOptions::including_properties

    fn ExportOptions::including_properties(self : ExportOptions, enabled : Bool) -> ExportOptions

    ExportOptions::with_format

    fn ExportOptions::with_format(self : ExportOptions, format : ExportFormat) -> ExportOptions

    ExportOptions::with_precision

    fn ExportOptions::with_precision(self : ExportOptions, precision : Int) -> ExportOptions

    ExportedAsset

    pub(all) struct ExportedAsset {
    format : ExportFormat
    file_name : String
    content : String
    product_count : Int
    point_count : Int
    triangle_count : Int
    } derive(
    Debug
    )

    ExportedAsset::headline

    fn ExportedAsset::headline(self : ExportedAsset) -> String

    ExportedAsset::is_non_empty

    fn ExportedAsset::is_non_empty(self : ExportedAsset) -> Bool

    ExportedAsset::line_count

    fn ExportedAsset::line_count(self : ExportedAsset) -> Int

    FormulaTakeoff

    pub(all) struct FormulaTakeoff {
    rows : Array[ProductTakeoff]
    notes : Array[QuantityNote]
    formulas : Array[QuantityFormula]
    product_count : Int
    missing_formula_count : Int
    } derive(
    Debug
    )

    A takeoff report produced from configurable property formulas.

    FormulaTakeoff::find

    fn FormulaTakeoff::find(self : FormulaTakeoff, product_id : Int) -> ProductTakeoff?

    FormulaTakeoff::formula_names

    fn FormulaTakeoff::formula_names(self : FormulaTakeoff) -> Array[String]

    FormulaTakeoff::headline

    fn FormulaTakeoff::headline(self : FormulaTakeoff) -> String

    FormulaTakeoff::note_count

    fn FormulaTakeoff::note_count(self : FormulaTakeoff) -> Int

    FormulaTakeoff::quantity

    fn FormulaTakeoff::quantity(self : FormulaTakeoff, product_id : Int, kind : QuantityKind) -> QuantityValue?

    FormulaTakeoff::row_count

    fn FormulaTakeoff::row_count(self : FormulaTakeoff) -> Int

    FormulaTakeoff::to_csv

    fn FormulaTakeoff::to_csv(self : FormulaTakeoff) -> String

    FormulaTakeoff::to_json

    fn FormulaTakeoff::to_json(self : FormulaTakeoff) -> String

    FormulaTakeoff::to_markdown

    fn FormulaTakeoff::to_markdown(self : FormulaTakeoff) -> String

    FormulaTakeoff::total

    fn FormulaTakeoff::total(self : FormulaTakeoff, kind : QuantityKind) -> Double

    FormulaTakeoff::warnings

    Geometry

    pub(all) struct Geometry {
    source_id : Int
    kind : GeometryKind
    points : Array[Point3]
    references : Array[Int]
    depth : Double?
    profile_width : Double?
    profile_height : Double?
    profile_radius : Double?
    face_count : Int
    triangle_count : Int
    } derive(
    Debug
    )

    GeometryInventory

    pub(all) struct GeometryInventory {
    products : Array[ProductGeometryReport]
    represented_product_count : Int
    empty_representation_count : Int
    invalid_mesh_count : Int
    total_surface_area : Double
    total_volume : Double
    } derive(
    Debug
    )

    Aggregate geometry coverage and quality metrics.

    GeometryInventory::by_product

    fn GeometryInventory::by_product(self : GeometryInventory, id : Int) -> ProductGeometryReport?

    GeometryInventory::headline

    fn GeometryInventory::headline(self : GeometryInventory) -> String

    GeometryInventory::largest_by_area

    GeometryInventory::largest_by_volume

    GeometryInventory::product_count

    fn GeometryInventory::product_count(self : GeometryInventory) -> Int

    GeometryInventory::represented_ratio

    fn GeometryInventory::represented_ratio(self : GeometryInventory) -> Double

    GeometryInventory::to_csv

    fn GeometryInventory::to_csv(self : GeometryInventory) -> String

    GeometryInventory::to_json

    fn GeometryInventory::to_json(self : GeometryInventory) -> String

    GeometryInventory::valid_ratio

    fn GeometryInventory::valid_ratio(self : GeometryInventory) -> Double

    GeometryKind

    pub(all) enum GeometryKind {
    Extrusion
    FacetedBrep
    TriangulatedMesh
    CsgSolid
    Profile
    Polyline
    PointCloud
    Unknown
    } derive(Eq, Hash,
    Debug
    )

    GraphAnalysis

    pub(all) struct GraphAnalysis {
    nodes : Int
    edges : Int
    roots : Array[Int]
    leaves : Array[Int]
    components : Array[GraphComponent]
    cycles : Array[Array[Int]]
    max_depth : Int
    orphan_ids : Array[Int]
    } derive(
    Debug
    )

    Rich graph metrics for impact analysis and model diagnostics.

    GraphAnalysis::component_count

    fn GraphAnalysis::component_count(self : GraphAnalysis) -> Int

    GraphAnalysis::cycle_count

    fn GraphAnalysis::cycle_count(self : GraphAnalysis) -> Int

    GraphAnalysis::headline

    fn GraphAnalysis::headline(self : GraphAnalysis) -> String

    GraphAnalysis::is_acyclic

    fn GraphAnalysis::is_acyclic(self : GraphAnalysis) -> Bool

    GraphAnalysis::largest_component

    fn GraphAnalysis::largest_component(self : GraphAnalysis) -> GraphComponent?

    GraphAnalysis::orphan_count

    fn GraphAnalysis::orphan_count(self : GraphAnalysis) -> Int

    GraphAnalysis::to_json

    fn GraphAnalysis::to_json(self : GraphAnalysis) -> String

    GraphAnalysis::to_markdown

    fn GraphAnalysis::to_markdown(self : GraphAnalysis) -> String

    GraphComponent

    pub(all) struct GraphComponent {
    root : Int
    entity_ids : Array[Int]
    edge_count : Int
    cyclic : Bool
    } derive(
    Debug
    )

    A connected component of the undirected entity graph.

    GraphComponent::headline

    fn GraphComponent::headline(self : GraphComponent) -> String

    GraphDegree

    pub(all) struct GraphDegree {
    id : Int
    incoming : Int
    outgoing : Int
    total : Int
    orphan : Bool
    } derive(
    Debug
    )

    Degree information for one graph node.

    GraphDegree::headline

    fn GraphDegree::headline(self : GraphDegree) -> String

    GraphEdge

    pub(all) struct GraphEdge {
    from : Int
    to : Int
    relation : String
    argument : Int
    } derive(Eq,
    Debug
    )

    One directed relationship in the entity dependency graph.

    GraphEdge::headline

    fn GraphEdge::headline(self : GraphEdge) -> String

    GraphPath

    pub(all) struct GraphPath {
    ids : Array[Int]
    edges : Array[GraphEdge]
    total_cost : Int
    } derive(
    Debug
    )

    A path through the entity dependency graph.

    GraphPath::headline

    fn GraphPath::headline(self : GraphPath) -> String

    GraphStats

    pub(all) struct GraphStats {
    entity_count : Int
    reference_count : Int
    distinct_targets : Int
    max_out_degree : Int
    orphan_reference_count : Int
    } derive(
    Debug
    )

    GuidReport

    pub(all) struct GuidReport {
    value : String
    valid : Bool
    decoded_bytes : Int
    normalized : String
    message : String
    } derive(
    Debug
    )

    IFC compressed GUID validation result.

    GuidReport::headline

    fn GuidReport::headline(self : GuidReport) -> String

    GuidReport::is_canonical

    fn GuidReport::is_canonical(self : GuidReport) -> Bool

    GuidReport::to_json

    fn GuidReport::to_json(self : GuidReport) -> String

    pub(all) struct Header {
    description : Array[String]
    file_name : String?
    time_stamp : String?
    authors : Array[String]
    organizations : Array[String]
    preprocessor_version : String?
    originating_system : String?
    authorization : String?
    schema_identifiers : Array[String]
    } derive(
    Debug
    )

    Inspection

    pub(all) struct Inspection {
    model : Model
    summary : ModelSummary
    metrics : ModelMetrics
    validation : ValidationReport
    capabilities : CapabilityReport
    } derive(
    Debug
    )

    Inspection::headline

    fn Inspection::headline(self : Inspection) -> String

    Inspection::is_valid

    fn Inspection::is_valid(self : Inspection) -> Bool

    Inspection::scene

    fn Inspection::scene(self : Inspection) -> BimScene

    Inspection::to_json

    fn Inspection::to_json(self : Inspection) -> String

    ManifestNode

    pub(all) struct ManifestNode {
    product_id : Int
    ifc_type : String
    name : String?
    kind : ProductKind
    property_names : Array[String]
    geometry_count : Int
    bounds : BoundingBox
    } derive(
    Debug
    )

    MaterialAssignment

    pub(all) struct MaterialAssignment {
    product_id : Int
    association_id : Int
    material_id : Int?
    material_name : String?
    layers : Array[MaterialLayer]
    constituents : Array[String]
    } derive(
    Debug
    )

    Material assignments attached to one product.

    MaterialAssignment::headline

    fn MaterialAssignment::headline(self : MaterialAssignment) -> String

    MaterialAssignment::material_names

    fn MaterialAssignment::material_names(self : MaterialAssignment) -> Array[String]

    MaterialInventory

    pub(all) struct MaterialInventory {
    assignments : Array[MaterialAssignment]
    distinct_materials : Array[String]
    layered_product_count : Int
    unassigned_product_count : Int
    } derive(
    Debug
    )

    Model-wide material inventory and coverage metrics.

    MaterialInventory::assignment_count

    fn MaterialInventory::assignment_count(self : MaterialInventory) -> Int

    MaterialInventory::headline

    fn MaterialInventory::headline(self : MaterialInventory) -> String

    MaterialInventory::material_count

    fn MaterialInventory::material_count(self : MaterialInventory) -> Int

    MaterialInventory::products_with_material

    fn MaterialInventory::products_with_material(self : MaterialInventory, name : String) -> Array[Int]

    MaterialInventory::thickness_for_product

    fn MaterialInventory::thickness_for_product(self : MaterialInventory, product_id : Int) -> Double

    MaterialInventory::to_csv

    fn MaterialInventory::to_csv(self : MaterialInventory) -> String

    MaterialInventory::to_json

    fn MaterialInventory::to_json(self : MaterialInventory) -> String

    MaterialLayer

    pub(all) struct MaterialLayer {
    entity_id : Int
    material_id : Int?
    material_name : String?
    thickness : Double?
    priority : Int?
    is_unbounded : Bool
    } derive(
    Debug
    )

    A material layer decoded from an IFC material profile.

    MaterialLayer::headline

    fn MaterialLayer::headline(self : MaterialLayer) -> String

    Mesh

    pub(all) struct Mesh {
    points : Array[Point3]
    triangles : Array[(Int, Int, Int)]
    } derive(
    Debug
    )

    MeshAnalysis

    pub(all) struct MeshAnalysis {
    mesh : Mesh
    stats : MeshStats
    bounds : BoundingBox
    normals : Array[Vector3]
    } derive(
    Debug
    )

    A mesh together with reusable diagnostics for downstream renderers.

    MeshAnalysis::from_mesh

    fn MeshAnalysis::from_mesh(mesh : Mesh) -> MeshAnalysis

    MeshAnalysis::is_valid

    fn MeshAnalysis::is_valid(self : MeshAnalysis) -> Bool

    MeshIssue

    pub(all) struct MeshIssue {
    code : String
    message : String
    point_index : Int?
    triangle_index : Int?
    } derive(
    Debug
    )

    One structural problem found by mesh validation.

    MeshIssue::headline

    fn MeshIssue::headline(self : MeshIssue) -> String

    MeshPipelineOptions

    pub(all) struct MeshPipelineOptions {
    weld_tolerance : Double
    degenerate_tolerance : Double
    maximum_triangles : Int
    recenter : Bool
    scale : Double
    flip_winding : Bool
    generate_normals : Bool
    compact_vertices : Bool
    } derive(
    Debug
    )

    Options controlling mesh cleanup and level-of-detail generation.

    MeshPipelineOptions::compacting

    fn MeshPipelineOptions::compacting(self : MeshPipelineOptions, value : Bool) -> MeshPipelineOptions

    MeshPipelineOptions::flipped

    fn MeshPipelineOptions::flipped(self : MeshPipelineOptions, value : Bool) -> MeshPipelineOptions

    MeshPipelineOptions::recentered

    fn MeshPipelineOptions::recentered(self : MeshPipelineOptions, value : Bool) -> MeshPipelineOptions

    MeshPipelineOptions::scaled

    fn MeshPipelineOptions::scaled(self : MeshPipelineOptions, value : Double) -> MeshPipelineOptions

    MeshPipelineOptions::with_degenerate_tolerance

    fn MeshPipelineOptions::with_degenerate_tolerance(self : MeshPipelineOptions, value : Double) -> MeshPipelineOptions

    MeshPipelineOptions::with_maximum_triangles

    fn MeshPipelineOptions::with_maximum_triangles(self : MeshPipelineOptions, value : Int) -> MeshPipelineOptions

    MeshPipelineOptions::with_normals

    fn MeshPipelineOptions::with_normals(self : MeshPipelineOptions, value : Bool) -> MeshPipelineOptions

    MeshPipelineOptions::with_weld_tolerance

    fn MeshPipelineOptions::with_weld_tolerance(self : MeshPipelineOptions, value : Double) -> MeshPipelineOptions

    MeshPipelineResult

    pub(all) struct MeshPipelineResult {
    mesh : Mesh
    normals : Array[Vector3]
    stats : MeshPipelineStats
    } derive(
    Debug
    )

    Processed mesh and optional normals for a renderer or exporter.

    MeshPipelineResult::bounds

    MeshPipelineResult::headline

    fn MeshPipelineResult::headline(self : MeshPipelineResult) -> String

    MeshPipelineResult::is_valid

    fn MeshPipelineResult::is_valid(self : MeshPipelineResult) -> Bool

    MeshPipelineResult::point_count

    fn MeshPipelineResult::point_count(self : MeshPipelineResult) -> Int

    MeshPipelineResult::to_json

    fn MeshPipelineResult::to_json(self : MeshPipelineResult) -> String

    MeshPipelineResult::to_obj

    fn MeshPipelineResult::to_obj(self : MeshPipelineResult) -> String

    MeshPipelineResult::triangle_count

    fn MeshPipelineResult::triangle_count(self : MeshPipelineResult) -> Int

    MeshPipelineStats

    pub(all) struct MeshPipelineStats {
    input_points : Int
    input_triangles : Int
    output_points : Int
    output_triangles : Int
    removed_points : Int
    removed_triangles : Int
    surface_area : Double
    volume : Double
    bounds : BoundingBox
    valid : Bool
    } derive(
    Debug
    )

    Quality counters emitted by a mesh processing pipeline.

    MeshPipelineStats::headline

    fn MeshPipelineStats::headline(self : MeshPipelineStats) -> String

    MeshStats

    pub(all) struct MeshStats {
    point_count : Int
    triangle_count : Int
    boundary_edge_count : Int
    non_manifold_edge_count : Int
    degenerate_triangle_count : Int
    connected_component_count : Int
    surface_area : Double
    signed_volume : Double
    } derive(
    Debug
    )

    Counts and quality signals calculated from a triangle mesh.

    MeshStats::headline

    fn MeshStats::headline(self : MeshStats) -> String

    MeshStats::is_closed

    fn MeshStats::is_closed(self : MeshStats) -> Bool

    MeshStats::is_manifold

    fn MeshStats::is_manifold(self : MeshStats) -> Bool

    MeshStats::volume

    fn MeshStats::volume(self : MeshStats) -> Double

    MeshValidation

    pub(all) struct MeshValidation {
    valid : Bool
    issues : Array[MeshIssue]
    referenced_point_count : Int
    unreferenced_point_count : Int
    degenerate_triangle_count : Int
    } derive(
    Debug
    )

    Validation summary for a mesh before it reaches a renderer.

    MeshValidation::headline

    fn MeshValidation::headline(self : MeshValidation) -> String

    Model

    pub(all) struct Model {
    header : Header
    entities : Array[Entity]
    } derive(
    Debug
    )

    Model::apply_patch

    fn Model::apply_patch(self : Model, patch : ModelPatch) -> Model raise EditError

    Model::entity_count

    fn Model::entity_count(self : Model) -> Int

    Model::entity_names

    fn Model::entity_names(self : Model) -> Array[String]

    Model::filter_entities

    fn Model::filter_entities(self : Model, filter : EntityFilter) -> Array[Entity]

    Model::index

    fn Model::index(self : Model) -> ModelIndex

    Model::new

    fn Model::new(header~ : Header, entities~ : Array[Entity]) -> Model

    Model::products

    fn Model::products(self : Model) -> Array[Product]

    Model::property_sets

    fn Model::property_sets(self : Model) -> Array[PropertySet] raise ParseError

    Model::schema

    fn Model::schema(self : Model) -> String

    Model::summary

    fn Model::summary(self : Model) -> ModelSummary

    Model::to_step

    fn Model::to_step(self : Model) -> String

    Serialize the generic model back to a valid ISO 10303-21 document.

    Model::validate

    fn Model::validate(self : Model) -> ValidationReport

    ModelCatalog

    pub(all) struct ModelCatalog {
    model : Model
    index : ModelIndex
    products : Array[Product]
    property_sets : Array[PropertySet]
    roots : Array[SpatialNode]
    metrics : ModelMetrics
    type_counts : Map[String, Int]
    } derive(
    Debug
    )

    A precomputed model view for applications that issue many queries.

    ModelCatalog::entity

    fn ModelCatalog::entity(self : ModelCatalog, id : Int) -> Entity?

    ModelCatalog::has_entity

    fn ModelCatalog::has_entity(self : ModelCatalog, id : Int) -> Bool

    ModelCatalog::new

    fn ModelCatalog::new(model : Model) -> ModelCatalog raise ParseError

    Build the indexes that are normally needed by an application session.

    The catalog deliberately keeps the original Model alongside its indexes. This makes it possible to move from an optimized query back to a lossless entity without reparsing the source text.

    ModelCatalog::products_named

    fn ModelCatalog::products_named(self : ModelCatalog, fragment : String) -> Array[Product]

    ModelCatalog::products_of_kind

    fn ModelCatalog::products_of_kind(self : ModelCatalog, kind : ProductKind) -> Array[Product]

    ModelCatalog::property

    fn ModelCatalog::property(self : ModelCatalog, product : Product, name : String) -> Property? raise ParseError

    ModelCatalog::property_sets_for

    fn ModelCatalog::property_sets_for(self : ModelCatalog, product : Product) -> Array[PropertySet] raise ParseError

    ModelCatalog::query

    fn ModelCatalog::query(self : ModelCatalog, query : CatalogQuery) -> CatalogPage raise ParseError

    Execute a filtered, stable, paginated query over the catalog.

    ModelCatalog::query_all

    fn ModelCatalog::query_all(self : ModelCatalog, query : CatalogQuery) -> Array[Product] raise ParseError

    ModelCatalog::schema

    fn ModelCatalog::schema(self : ModelCatalog) -> String

    ModelCatalog::spatial_root

    fn ModelCatalog::spatial_root(self : ModelCatalog) -> SpatialNode?

    ModelCatalog::summary

    fn ModelCatalog::summary(self : ModelCatalog) -> ModelSummary

    ModelCatalog::type_count

    fn ModelCatalog::type_count(self : ModelCatalog, name : String) -> Int

    ModelCatalog::type_histogram

    fn ModelCatalog::type_histogram(self : ModelCatalog) -> Map[String, Int]

    ModelChange

    pub(all) struct ModelChange {
    kind : ChangeKind
    entity_id : Int
    before : Entity?
    after : Entity?
    } derive(
    Debug
    )

    ModelDeliveryReport

    pub(all) struct ModelDeliveryReport {
    source_length : Int
    profile : ModelProfile
    quality : ModelQualityReport
    manifest : AssetManifest
    canonical : CanonicalStepStats
    } derive(
    Debug
    )

    One local report used to gate a model before it reaches a viewer or exporter.

    ModelDeliveryReport::asset_bytes

    fn ModelDeliveryReport::asset_bytes(self : ModelDeliveryReport, kind : AssetKind) -> Int

    ModelDeliveryReport::canonical_passed

    fn ModelDeliveryReport::canonical_passed(self : ModelDeliveryReport) -> Bool

    ModelDeliveryReport::gate_results

    fn ModelDeliveryReport::gate_results(self : ModelDeliveryReport) -> Map[String, Bool]

    ModelDeliveryReport::has_geometry

    fn ModelDeliveryReport::has_geometry(self : ModelDeliveryReport) -> Bool

    ModelDeliveryReport::headline

    fn ModelDeliveryReport::headline(self : ModelDeliveryReport) -> String

    ModelDeliveryReport::is_ready

    fn ModelDeliveryReport::is_ready(self : ModelDeliveryReport) -> Bool

    ModelDeliveryReport::quality_passed

    fn ModelDeliveryReport::quality_passed(self : ModelDeliveryReport) -> Bool

    ModelDeliveryReport::score

    fn ModelDeliveryReport::score(self : ModelDeliveryReport) -> Int

    ModelDeliveryReport::to_json

    fn ModelDeliveryReport::to_json(self : ModelDeliveryReport) -> String

    ModelDeliveryReport::to_markdown

    fn ModelDeliveryReport::to_markdown(self : ModelDeliveryReport) -> String

    ModelDiff

    pub(all) struct ModelDiff {
    changes : Array[ModelChange]
    added : Int
    removed : Int
    modified : Int
    } derive(
    Debug
    )

    ModelDiff::changed_ids

    fn ModelDiff::changed_ids(self : ModelDiff) -> Array[Int]

    ModelDiff::is_empty

    fn ModelDiff::is_empty(self : ModelDiff) -> Bool

    ModelDiff::summary

    fn ModelDiff::summary(self : ModelDiff) -> String

    ModelIndex

    pub(all) struct ModelIndex {
    entities : Array[Entity]
    by_id : Map[Int, Entity]
    by_name : Map[String, Array[Int]]
    } derive(
    Debug
    )

    ModelIndex::all

    fn ModelIndex::all(self : ModelIndex) -> Array[Entity]

    ModelIndex::entities_named

    fn ModelIndex::entities_named(self : ModelIndex, name : String) -> Array[Entity]

    ModelIndex::entity

    fn ModelIndex::entity(self : ModelIndex, id : Int) -> Entity?

    ModelIndex::has

    fn ModelIndex::has(self : ModelIndex, id : Int) -> Bool

    ModelIndex::ids_named

    fn ModelIndex::ids_named(self : ModelIndex, name : String) -> Array[Int]

    ModelIndex::require

    fn ModelIndex::require(self : ModelIndex, id : Int) -> Entity raise ParseError

    ModelMetrics

    pub(all) struct ModelMetrics {
    source_length : Int
    entity_count : Int
    product_count : Int
    relationship_count : Int
    geometry_count : Int
    property_count : Int
    spatial_depth : Int
    reference_count : Int
    } derive(
    Debug
    )

    ModelMetrics::headline

    fn ModelMetrics::headline(self : ModelMetrics) -> String

    ModelPatch

    pub(all) struct ModelPatch {
    operations : Array[EntityPatch]
    added : Int
    removed : Int
    replaced : Int
    changed_attributes : Int
    } derive(
    Debug
    )

    ModelPatch::add

    fn ModelPatch::add(self : ModelPatch, entity : Entity) -> Unit

    ModelPatch::is_empty

    fn ModelPatch::is_empty(self : ModelPatch) -> Bool

    ModelPatch::new

    fn ModelPatch::new() -> ModelPatch

    ModelPatch::operation_count

    fn ModelPatch::operation_count(self : ModelPatch) -> Int

    ModelPatch::push

    fn ModelPatch::push(self : ModelPatch, operation : EntityPatch) -> Unit

    ModelPatch::remove

    fn ModelPatch::remove(self : ModelPatch, id : Int) -> Unit

    ModelPatch::replace

    fn ModelPatch::replace(self : ModelPatch, entity : Entity) -> Unit

    ModelPatch::set_attribute

    fn ModelPatch::set_attribute(self : ModelPatch, id : Int, index : Int, value : Value) -> Unit

    ModelProfile

    pub(all) struct ModelProfile {
    schema : SchemaVersion
    entity_count : Int
    product_count : Int
    family_counts : Map[String, Int]
    type_counts : Map[String, Int]
    known_entity_count : Int
    unknown_entity_count : Int
    relationship_count : Int
    geometry_count : Int
    property_set_count : Int
    } derive(
    Debug
    )

    A model-level semantic profile used by import dashboards.

    ModelProfile::family_count

    fn ModelProfile::family_count(self : ModelProfile, family : String) -> Int

    ModelProfile::family_names

    fn ModelProfile::family_names(self : ModelProfile) -> Array[String]

    ModelProfile::headline

    fn ModelProfile::headline(self : ModelProfile) -> String

    ModelProfile::is_extension_heavy

    fn ModelProfile::is_extension_heavy(self : ModelProfile) -> Bool

    ModelProfile::known_ratio

    fn ModelProfile::known_ratio(self : ModelProfile) -> Double

    ModelProfile::to_json

    fn ModelProfile::to_json(self : ModelProfile) -> String

    ModelProfile::to_markdown

    fn ModelProfile::to_markdown(self : ModelProfile) -> String

    ModelProfile::top_types

    fn ModelProfile::top_types(self : ModelProfile, limit : Int) -> Array[(String, Int)]

    ModelProfile::type_count

    fn ModelProfile::type_count(self : ModelProfile, name : String) -> Int

    ModelQualityReport

    pub(all) struct ModelQualityReport {
    findings : Array[QualityFinding]
    score : Int
    entity_count : Int
    product_count : Int
    orphan_count : Int
    duplicate_id_count : Int
    named_product_ratio : Double
    guid_ratio : Double
    unknown_entity_ratio : Double
    } derive(
    Debug
    )

    A scorecard combining structural, semantic, unit and geometry signals.

    ModelQualityReport::count_level

    fn ModelQualityReport::count_level(self : ModelQualityReport, level : QualityLevel) -> Int

    ModelQualityReport::finding_code

    fn ModelQualityReport::finding_code(self : ModelQualityReport, code : String) -> QualityFinding?

    ModelQualityReport::finding_count

    fn ModelQualityReport::finding_count(self : ModelQualityReport) -> Int

    ModelQualityReport::findings_at

    ModelQualityReport::has_errors

    fn ModelQualityReport::has_errors(self : ModelQualityReport) -> Bool

    ModelQualityReport::headline

    fn ModelQualityReport::headline(self : ModelQualityReport) -> String

    ModelQualityReport::is_healthy

    fn ModelQualityReport::is_healthy(self : ModelQualityReport) -> Bool

    ModelQualityReport::to_json

    fn ModelQualityReport::to_json(self : ModelQualityReport) -> String

    ModelQualityReport::to_markdown

    fn ModelQualityReport::to_markdown(self : ModelQualityReport) -> String

    ModelRule

    pub(all) struct ModelRule {
    code : String
    description : String
    severity : DiagnosticSeverity
    entity_type : String?
    minimum_arguments : Int?
    required_attributes : Array[Int]
    required_properties : Array[String]
    minimum_value : Double?
    maximum_value : Double?
    } derive(
    Debug
    )

    A rule for validating a model against project delivery requirements.

    ModelRule::for_entity

    fn ModelRule::for_entity(self : ModelRule, entity_type : String) -> ModelRule

    ModelRule::headline

    fn ModelRule::headline(self : ModelRule) -> String

    ModelRule::is_error

    fn ModelRule::is_error(self : ModelRule) -> Bool

    ModelRule::new

    fn ModelRule::new(code~ : String, description~ : String, severity? : DiagnosticSeverity) -> ModelRule

    ModelRule::requiring_attribute

    fn ModelRule::requiring_attribute(self : ModelRule, index : Int) -> ModelRule

    ModelRule::requiring_property

    fn ModelRule::requiring_property(self : ModelRule, name : String) -> ModelRule

    ModelRule::with_minimum_arguments

    fn ModelRule::with_minimum_arguments(self : ModelRule, count : Int) -> ModelRule

    ModelRule::with_value_range

    fn ModelRule::with_value_range(self : ModelRule, minimum : Double?, maximum : Double?) -> ModelRule

    ModelSlice

    pub(all) struct ModelSlice {
    model : Model
    selected_ids : Array[Int]
    dependency_ids : Array[Int]
    omitted_ids : Array[Int]
    root_ids : Array[Int]
    } derive(
    Debug
    )

    A dependency-closed model slice for partial loading.

    ModelSlice::contains

    fn ModelSlice::contains(self : ModelSlice, id : Int) -> Bool

    ModelSlice::dependency_count

    fn ModelSlice::dependency_count(self : ModelSlice) -> Int

    ModelSlice::difference

    fn ModelSlice::difference(self : ModelSlice, other : ModelSlice) -> Array[Int]

    ModelSlice::entities_by_type

    fn ModelSlice::entities_by_type(self : ModelSlice, name : String) -> Array[Entity]

    ModelSlice::entity

    fn ModelSlice::entity(self : ModelSlice, id : Int) -> Entity?

    ModelSlice::headline

    fn ModelSlice::headline(self : ModelSlice) -> String

    ModelSlice::ids_by_type

    fn ModelSlice::ids_by_type(self : ModelSlice, name : String) -> Array[Int]

    ModelSlice::is_closed

    fn ModelSlice::is_closed(self : ModelSlice) -> Bool

    ModelSlice::omitted_count

    fn ModelSlice::omitted_count(self : ModelSlice) -> Int

    ModelSlice::product_count

    fn ModelSlice::product_count(self : ModelSlice) -> Int

    ModelSlice::products_by_kind

    fn ModelSlice::products_by_kind(self : ModelSlice, kind : ProductKind) -> Array[Product]

    ModelSlice::references_omitted

    fn ModelSlice::references_omitted(self : ModelSlice) -> Array[Int]

    ModelSlice::root_count

    fn ModelSlice::root_count(self : ModelSlice) -> Int

    ModelSlice::round_trip

    fn ModelSlice::round_trip(self : ModelSlice) -> Model raise ParseError

    ModelSlice::summary

    fn ModelSlice::summary(self : ModelSlice) -> Array[String]

    ModelSlice::to_json

    fn ModelSlice::to_json(self : ModelSlice) -> String

    ModelSlice::to_markdown

    fn ModelSlice::to_markdown(self : ModelSlice) -> String

    ModelSlice::to_step

    fn ModelSlice::to_step(self : ModelSlice) -> String

    ModelSlice::with_additional_roots

    fn ModelSlice::with_additional_roots(self : ModelSlice, ids : Array[Int], include_dependencies? : Bool) -> ModelSlice

    ModelSlice::without_roots

    fn ModelSlice::without_roots(self : ModelSlice, ids : Array[Int]) -> ModelSlice

    ModelSnapshot

    pub(all) struct ModelSnapshot {
    schema : String
    source_length : Int
    entity_count : Int
    product_count : Int
    shape_signatures : Array[String]
    reference_targets : Array[Int]
    } derive(
    Debug
    )

    A compact model snapshot used to compare revisions without serializing twice.

    ModelSnapshot::entity_delta

    fn ModelSnapshot::entity_delta(self : ModelSnapshot, other : ModelSnapshot) -> Int

    ModelSnapshot::headline

    fn ModelSnapshot::headline(self : ModelSnapshot) -> String

    ModelSnapshot::product_delta

    fn ModelSnapshot::product_delta(self : ModelSnapshot, other : ModelSnapshot) -> Int

    ModelSnapshot::same_references

    fn ModelSnapshot::same_references(self : ModelSnapshot, other : ModelSnapshot) -> Bool

    ModelSnapshot::same_shape

    fn ModelSnapshot::same_shape(self : ModelSnapshot, other : ModelSnapshot) -> Bool

    ModelSnapshot::to_json

    fn ModelSnapshot::to_json(self : ModelSnapshot) -> String

    ModelSummary

    pub(all) struct ModelSummary {
    schema : String
    entity_count : Int
    product_count : Int
    property_set_count : Int
    geometry_count : Int
    spatial_count : Int
    } derive(
    Debug
    )

    ModelWorkspace

    pub(all) struct ModelWorkspace {
    model : Model
    catalog : ModelCatalog
    spatial : SpatialIndex
    graph : GraphAnalysis
    health : SourceHealth
    quantities : TakeoffReport?
    } derive(
    Debug
    )

    A reusable high-level workspace built around one parsed model.

    ModelWorkspace::catalog

    ModelWorkspace::clashes

    fn ModelWorkspace::clashes(self : ModelWorkspace, options? : ClashOptions) -> ClashReport

    ModelWorkspace::delivery_report

    fn ModelWorkspace::delivery_report(self : ModelWorkspace) -> RuleReport raise ParseError

    ModelWorkspace::find

    fn ModelWorkspace::find(self : ModelWorkspace, product_id : Int) -> Product?

    ModelWorkspace::from_model

    fn ModelWorkspace::from_model(model : Model, source? : String) -> ModelWorkspace raise ParseError

    ModelWorkspace::graph_analysis

    fn ModelWorkspace::graph_analysis(self : ModelWorkspace) -> GraphAnalysis

    ModelWorkspace::has_quantities

    fn ModelWorkspace::has_quantities(self : ModelWorkspace) -> Bool

    ModelWorkspace::headline

    fn ModelWorkspace::headline(self : ModelWorkspace) -> String raise ParseError

    ModelWorkspace::model

    fn ModelWorkspace::model(self : ModelWorkspace) -> Model

    ModelWorkspace::open

    fn ModelWorkspace::open(source : String) -> ModelWorkspace raise ParseError

    Parse once and prepare the indexes commonly needed by BIM applications.

    ModelWorkspace::products

    fn ModelWorkspace::products(self : ModelWorkspace) -> Array[Product]

    ModelWorkspace::query

    ModelWorkspace::rules

    fn ModelWorkspace::rules(self : ModelWorkspace, rules : Array[ModelRule]) -> RuleReport raise ParseError

    ModelWorkspace::snapshot

    ModelWorkspace::source_health

    fn ModelWorkspace::source_health(self : ModelWorkspace) -> SourceHealth

    ModelWorkspace::spatial_index

    fn ModelWorkspace::spatial_index(self : ModelWorkspace) -> SpatialIndex

    ModelWorkspace::summary

    ModelWorkspace::takeoff

    fn ModelWorkspace::takeoff(self : ModelWorkspace, options? : TakeoffOptions) -> TakeoffReport raise ParseError

    ModelWorkspace::to_json

    fn ModelWorkspace::to_json(self : ModelWorkspace) -> String raise ParseError

    ModelWorkspace::with_quantities

    fn ModelWorkspace::with_quantities(self : ModelWorkspace, options? : TakeoffOptions) -> ModelWorkspace raise ParseError

    NormalizedQuantity

    pub(all) struct NormalizedQuantity {
    product_id : Int
    kind : QuantityKind
    value : Double
    unit : String
    source : String
    estimated : Bool
    recognized : Bool
    } derive(
    Debug
    )

    A quantity normalized to the requested presentation unit.

    NormalizedQuantity::headline

    fn NormalizedQuantity::headline(self : NormalizedQuantity) -> String

    NormalizedQuantity::to_json

    fn NormalizedQuantity::to_json(self : NormalizedQuantity) -> String

    NumberComparison

    pub(all) enum NumberComparison {
    LessThan
    LessOrEqual
    EqualTo
    GreaterOrEqual
    GreaterThan
    Between
    } derive(Eq,
    Debug
    )

    Comparison used by a numeric query predicate.

    Point3

    pub(all) struct Point3 {
    x : Double
    y : Double
    z : Double
    } derive(
    Debug
    )

    Product

    pub(all) struct Product {
    id : Int
    ifc_type : String
    kind : ProductKind
    global_id : String?
    name : String?
    description : String?
    object_type : String?
    placement : Int?
    representation : Int?
    tag : String?
    property_sets : Array[Int]
    container : Int?
    } derive(
    Debug
    )

    ProductExpression

    pub(all) enum ProductExpression {
    MatchAll
    MatchNone
    Predicate(ProductPredicate)
    Not(ProductExpression)
    AllOf(Array[ProductExpression])
    AnyOf(Array[ProductExpression])
    } derive(
    Debug
    )

    Boolean composition of product predicates.

    ProductExpression::all

    ProductExpression::and_

    ProductExpression::any

    ProductExpression::describe

    fn ProductExpression::describe(self : ProductExpression) -> String

    ProductExpression::not

    ProductExpression::or_

    ProductGeometryReport

    pub(all) struct ProductGeometryReport {
    product_id : Int
    geometry_count : Int
    mesh_count : Int
    point_count : Int
    triangle_count : Int
    bounds : BoundingBox
    surface_area : Double
    volume : Double
    estimated_volume : Bool
    valid_mesh_count : Int
    } derive(
    Debug
    )

    A compact report for one product's decoded geometric representations.

    ProductGeometryReport::center

    ProductGeometryReport::has_mesh

    fn ProductGeometryReport::has_mesh(self : ProductGeometryReport) -> Bool

    ProductGeometryReport::headline

    fn ProductGeometryReport::headline(self : ProductGeometryReport) -> String

    ProductGeometryReport::is_valid

    fn ProductGeometryReport::is_valid(self : ProductGeometryReport) -> Bool

    ProductGeometryReport::to_json

    fn ProductGeometryReport::to_json(self : ProductGeometryReport) -> String

    ProductKind

    pub(all) enum ProductKind {
    Project
    Site
    Building
    Storey
    Space
    Wall
    Door
    Window
    Beam
    Column
    Slab
    Roof
    Stair
    Ramp
    Opening
    Generic
    } derive(Eq, Hash,
    Debug
    )

    ProductPredicate

    pub(all) enum ProductPredicate {
    ProductKind(ProductKind)
    EntityType(String)
    EntityTypePrefix(String)
    NameContains(String)
    DescriptionContains(String)
    GlobalId(String)
    Tag(String)
    InContainer(Int)
    HasProperties
    HasGeometry
    PropertyExists(String)
    PropertyText(String, String)
    PropertyNumber(String, NumberComparison, Double, Double?)
    IdRange(Int, Int)
    GeometryKind(GeometryKind)
    Quantity(QuantityKind, NumberComparison, Double, Double?)
    } derive(
    Debug
    )

    A composable predicate over extracted IFC products.

    ProductPredicate::describe

    fn ProductPredicate::describe(self : ProductPredicate) -> String

    ProductQuery

    pub(all) struct ProductQuery {
    kind : ProductKind?
    ifc_type : String?
    name_contains : String?
    container : Int?
    has_properties : Bool
    } derive(
    Debug
    )

    ProductQuery::in_container

    fn ProductQuery::in_container(self : ProductQuery, id : Int) -> ProductQuery

    ProductQuery::named

    fn ProductQuery::named(self : ProductQuery, fragment : String) -> ProductQuery

    ProductQuery::new

    ProductQuery::of_kind

    fn ProductQuery::of_kind(self : ProductQuery, kind : ProductKind) -> ProductQuery

    ProductQuery::of_type

    fn ProductQuery::of_type(self : ProductQuery, ifc_type : String) -> ProductQuery

    ProductQuery::with_properties

    fn ProductQuery::with_properties(self : ProductQuery) -> ProductQuery

    ProductQueryPage

    pub(all) struct ProductQueryPage {
    products : Array[Product]
    total_matches : Int
    offset : Int
    limit : Int
    has_next : Bool
    examined : Int
    } derive(
    Debug
    )

    One page returned by a product query plan.

    ProductQueryPage::count

    fn ProductQueryPage::count(self : ProductQueryPage) -> Int

    ProductQueryPage::headline

    fn ProductQueryPage::headline(self : ProductQueryPage) -> String

    ProductQueryPage::ids

    fn ProductQueryPage::ids(self : ProductQueryPage) -> Array[Int]

    ProductQueryPage::is_empty

    fn ProductQueryPage::is_empty(self : ProductQueryPage) -> Bool

    ProductQueryPage::next_offset

    fn ProductQueryPage::next_offset(self : ProductQueryPage) -> Int?

    ProductQueryPage::to_json

    fn ProductQueryPage::to_json(self : ProductQueryPage) -> String

    ProductQueryPlan

    pub(all) struct ProductQueryPlan {
    expression : ProductExpression
    sort : ProductSort
    descending : Bool
    offset : Int
    limit : Int
    include_empty_geometry : Bool
    } derive(
    Debug
    )

    A reusable query plan for repeated product searches.

    ProductQueryPlan::execute

    fn ProductQueryPlan::execute(self : ProductQueryPlan, model : Model) -> ProductQueryPage raise ParseError

    ProductQueryPlan::explain

    fn ProductQueryPlan::explain(self : ProductQueryPlan) -> String

    ProductQueryPlan::expression

    ProductQueryPlan::including_empty_geometry

    fn ProductQueryPlan::including_empty_geometry(self : ProductQueryPlan, value : Bool) -> ProductQueryPlan

    ProductQueryPlan::is_unbounded

    fn ProductQueryPlan::is_unbounded(self : ProductQueryPlan) -> Bool

    ProductQueryPlan::new

    ProductQueryPlan::page

    fn ProductQueryPlan::page(self : ProductQueryPlan, offset : Int, limit : Int) -> ProductQueryPlan

    ProductQueryPlan::sort_key

    ProductQueryPlan::sorted_by

    fn ProductQueryPlan::sorted_by(self : ProductQueryPlan, sort : ProductSort, descending? : Bool) -> ProductQueryPlan

    ProductQueryPlan::where_

    ProductQueryPlan::where_predicate

    fn ProductQueryPlan::where_predicate(self : ProductQueryPlan, predicate : ProductPredicate) -> ProductQueryPlan

    ProductSort

    pub(all) enum ProductSort {
    ById
    ByType
    ByName
    ByKind
    ByQuantity(QuantityKind)
    ByDistance(Point3)
    } derive(
    Debug
    )

    Stable ordering options for a compiled product query.

    ProductTakeoff

    pub(all) struct ProductTakeoff {
    product : Product
    quantities : Array[QuantityValue]
    geometry_count : Int
    mesh_triangle_count : Int
    bounds : BoundingBox
    } derive(
    Debug
    )

    Quantities calculated for one IFC product.

    ProductTakeoff::has_geometry

    fn ProductTakeoff::has_geometry(self : ProductTakeoff) -> Bool

    ProductTakeoff::headline

    fn ProductTakeoff::headline(self : ProductTakeoff) -> String

    ProductTakeoff::is_estimated

    fn ProductTakeoff::is_estimated(self : ProductTakeoff, kind : QuantityKind) -> Bool

    ProductTakeoff::quantity

    fn ProductTakeoff::quantity(self : ProductTakeoff, kind : QuantityKind) -> QuantityValue?

    ProductTakeoff::to_json

    fn ProductTakeoff::to_json(self : ProductTakeoff) -> String

    ProductTakeoff::value

    fn ProductTakeoff::value(self : ProductTakeoff, kind : QuantityKind) -> Double

    Property

    pub(all) struct Property {
    name : String
    description : String?
    value : Value
    unit : Int?
    } derive(
    Debug
    )

    PropertyColumn

    pub(all) struct PropertyColumn {
    name : String
    value_type : String
    populated_count : Int
    numeric_count : Int
    distinct_count : Int
    } derive(
    Debug
    )

    A normalized column in a property schedule.

    PropertyColumn::coverage

    fn PropertyColumn::coverage(self : PropertyColumn, row_count : Int) -> Double

    PropertyColumn::headline

    fn PropertyColumn::headline(self : PropertyColumn) -> String

    PropertyColumn::is_numeric

    fn PropertyColumn::is_numeric(self : PropertyColumn) -> Bool

    PropertyRow

    pub(all) struct PropertyRow {
    product_id : Int
    ifc_type : String
    name : String?
    values : Map[String, String]
    missing_count : Int
    } derive(
    Debug
    )

    One row in a property schedule.

    PropertyRow::has_value

    fn PropertyRow::has_value(self : PropertyRow, name : String) -> Bool

    PropertyRow::headline

    fn PropertyRow::headline(self : PropertyRow) -> String

    PropertyRow::value

    fn PropertyRow::value(self : PropertyRow, name : String) -> String?

    PropertySet

    pub(all) struct PropertySet {
    id : Int
    name : String?
    description : String?
    properties : Array[Property]
    } derive(
    Debug
    )

    PropertyTable

    pub(all) struct PropertyTable {
    columns : Array[PropertyColumn]
    rows : Array[PropertyRow]
    product_count : Int
    missing_value_count : Int
    } derive(
    Debug
    )

    Tabular property data suitable for CSV or browser grids.

    PropertyTable::column

    fn PropertyTable::column(self : PropertyTable, name : String) -> PropertyColumn?

    PropertyTable::column_names

    fn PropertyTable::column_names(self : PropertyTable) -> Array[String]

    PropertyTable::complete_rows

    fn PropertyTable::complete_rows(self : PropertyTable) -> Array[PropertyRow]

    PropertyTable::coverage

    fn PropertyTable::coverage(self : PropertyTable, name : String) -> Double

    PropertyTable::headline

    fn PropertyTable::headline(self : PropertyTable) -> String

    PropertyTable::missing_rows

    fn PropertyTable::missing_rows(self : PropertyTable) -> Array[PropertyRow]

    PropertyTable::numeric_rows

    fn PropertyTable::numeric_rows(self : PropertyTable, name : String, comparison : NumberComparison, expected : Double, upper? : Double?) -> Array[PropertyRow]

    PropertyTable::product_ids

    fn PropertyTable::product_ids(self : PropertyTable) -> Array[Int]

    PropertyTable::row

    fn PropertyTable::row(self : PropertyTable, product_id : Int) -> PropertyRow?

    PropertyTable::rows_with_value

    fn PropertyTable::rows_with_value(self : PropertyTable, name : String, value : String) -> Array[PropertyRow]

    PropertyTable::to_csv

    fn PropertyTable::to_csv(self : PropertyTable) -> String

    PropertyTable::to_json

    fn PropertyTable::to_json(self : PropertyTable) -> String

    PropertyTable::to_markdown

    fn PropertyTable::to_markdown(self : PropertyTable) -> String

    QualityFinding

    pub(all) struct QualityFinding {
    code : String
    level : QualityLevel
    message : String
    entity_id : Int?
    measured : Double
    threshold : Double
    repair_hint : String
    } derive(
    Debug
    )

    A concrete, actionable quality finding.

    QualityFinding::headline

    fn QualityFinding::headline(self : QualityFinding) -> String

    QualityFinding::to_json

    fn QualityFinding::to_json(self : QualityFinding) -> String

    QualityLevel

    pub(all) enum QualityLevel {
    Pass
    Notice
    Warning
    Error
    } derive(Eq,
    Debug
    )

    Severity used by the cross-layer model quality audit.

    QualityPolicy

    pub(all) struct QualityPolicy {
    maximum_orphans : Int
    minimum_named_product_ratio : Double
    minimum_guid_ratio : Double
    maximum_duplicate_ids : Int
    maximum_unknown_entity_ratio : Double
    require_units : Bool
    require_spatial_structure : Bool
    require_geometry_for_products : Bool
    } derive(
    Debug
    )

    Thresholds for the model quality audit.

    QualityPolicy::allow_orphans

    fn QualityPolicy::allow_orphans(self : QualityPolicy, maximum_orphans : Int) -> QualityPolicy

    QualityPolicy::requiring_geometry

    fn QualityPolicy::requiring_geometry(self : QualityPolicy, required : Bool) -> QualityPolicy

    QualityPolicy::requiring_spatial_structure

    fn QualityPolicy::requiring_spatial_structure(self : QualityPolicy, required : Bool) -> QualityPolicy

    QualityPolicy::requiring_units

    fn QualityPolicy::requiring_units(self : QualityPolicy, required : Bool) -> QualityPolicy

    QualityPolicy::with_guid_ratio

    fn QualityPolicy::with_guid_ratio(self : QualityPolicy, minimum_guid_ratio : Double) -> QualityPolicy

    QualityPolicy::with_name_ratio

    fn QualityPolicy::with_name_ratio(self : QualityPolicy, minimum_named_product_ratio : Double) -> QualityPolicy

    QualityPolicy::with_unknown_ratio

    fn QualityPolicy::with_unknown_ratio(self : QualityPolicy, maximum_unknown_entity_ratio : Double) -> QualityPolicy

    QuantityFormula

    pub(all) struct QuantityFormula {
    kind : QuantityKind
    property_names : Array[String]
    fallback_to_geometry : Bool
    multiplier : Double
    unit : String
    } derive(
    Debug
    )

    A formula override used by quantity schedules.

    QuantityFormula::from_properties

    fn QuantityFormula::from_properties(self : QuantityFormula, names : Array[String]) -> QuantityFormula

    QuantityFormula::new

    fn QuantityFormula::new(kind : QuantityKind, unit? : String) -> QuantityFormula

    QuantityFormula::scaled

    fn QuantityFormula::scaled(self : QuantityFormula, multiplier : Double) -> QuantityFormula

    QuantityFormula::with_fallback

    fn QuantityFormula::with_fallback(self : QuantityFormula, value : Bool) -> QuantityFormula

    QuantityGrouping

    pub(all) enum QuantityGrouping {
    ProductType
    ProductKind
    Container
    Property(String)
    } derive(
    Debug
    )

    Grouping keys used when rolling up quantity takeoff rows.

    QuantityKind

    pub(all) enum QuantityKind {
    Count
    Length
    Area
    Volume
    SurfaceArea
    Height
    Width
    Depth
    } derive(Eq, Hash,
    Debug
    )

    The quantity kind used by takeoff and estimation APIs.

    QuantityNote

    pub(all) struct QuantityNote {
    product_id : Int
    kind : QuantityKind
    message : String
    severity : DiagnosticSeverity
    } derive(
    Debug
    )

    A non-fatal note explaining a missing or estimated quantity.

    QuantityNote::headline

    fn QuantityNote::headline(self : QuantityNote) -> String

    QuantityValue

    pub(all) struct QuantityValue {
    kind : QuantityKind
    value : Double
    unit : String
    source : String
    estimated : Bool
    } derive(
    Debug
    )

    A measured quantity with its source and unit semantics.

    QuantityValue::headline

    fn QuantityValue::headline(self : QuantityValue) -> String

    RelationIndex

    pub(all) struct RelationIndex {
    links : Array[RelationLink]
    parents : Map[Int, Array[Int]]
    children : Map[Int, Array[Int]]
    containers : Map[Int, Int]
    property_sets : Map[Int, Array[Int]]
    classifications : Map[Int, Array[Int]]
    } derive(
    Debug
    )

    Precomputed relationship maps for repeated semantic queries.

    RelationIndex::ancestors

    fn RelationIndex::ancestors(self : RelationIndex, id : Int) -> Array[Int]

    RelationIndex::child_ids

    fn RelationIndex::child_ids(self : RelationIndex, id : Int) -> Array[Int]

    RelationIndex::classification_ids

    fn RelationIndex::classification_ids(self : RelationIndex, product_id : Int) -> Array[Int]

    RelationIndex::container_id

    fn RelationIndex::container_id(self : RelationIndex, product_id : Int) -> Int?

    RelationIndex::descendants

    fn RelationIndex::descendants(self : RelationIndex, id : Int) -> Array[Int]

    RelationIndex::headline

    fn RelationIndex::headline(self : RelationIndex) -> String

    fn RelationIndex::link_count(self : RelationIndex) -> Int

    fn RelationIndex::links_for(self : RelationIndex, id : Int) -> Array[RelationLink]

    RelationIndex::new

    Build normalized relation maps from raw IFC relationship entities.

    RelationIndex::parent_ids

    fn RelationIndex::parent_ids(self : RelationIndex, id : Int) -> Array[Int]

    RelationIndex::products_without_container

    fn RelationIndex::products_without_container(self : RelationIndex, products : Array[Product]) -> Array[Int]

    RelationIndex::products_without_properties

    fn RelationIndex::products_without_properties(self : RelationIndex, products : Array[Product]) -> Array[Int]

    RelationIndex::property_set_ids

    fn RelationIndex::property_set_ids(self : RelationIndex, product_id : Int) -> Array[Int]

    RelationIndex::relationship_histogram

    fn RelationIndex::relationship_histogram(self : RelationIndex) -> Map[String, Int]

    RelationIndex::root_ids

    fn RelationIndex::root_ids(self : RelationIndex) -> Array[Int]

    RelationIndex::to_json

    fn RelationIndex::to_json(self : RelationIndex) -> String

    pub(all) struct RelationLink {
    relation_id : Int
    relation_type : String
    relating_id : Int?
    related_ids : Array[Int]
    role : String
    } derive(
    Debug
    )

    A normalized IFC relationship edge.

    RelationLink::headline

    fn RelationLink::headline(self : RelationLink) -> String

    RelationLink::is_many_to_one

    fn RelationLink::is_many_to_one(self : RelationLink) -> Bool

    RenderManifest

    pub(all) struct RenderManifest {
    schema : String
    nodes : Array[ManifestNode]
    bounds : BoundingBox
    } derive(
    Debug
    )

    RenderManifest::find

    fn RenderManifest::find(self : RenderManifest, product_id : Int) -> ManifestNode?

    RenderManifest::to_json

    fn RenderManifest::to_json(self : RenderManifest) -> String

    RevisionDelivery

    pub(all) struct RevisionDelivery {
    before_hash : Int
    after_hash : Int
    changes : Array[DeliveryAssetChange]
    affected_products : Array[Int]
    invalidated_count : Int
    retained_count : Int
    added_count : Int
    removed_count : Int
    bytes_added : Int
    bytes_removed : Int
    } derive(
    Debug
    )

    Cache invalidation plan generated from two model revisions.

    RevisionDelivery::byte_delta

    fn RevisionDelivery::byte_delta(self : RevisionDelivery) -> Int

    RevisionDelivery::change_count

    fn RevisionDelivery::change_count(self : RevisionDelivery) -> Int

    RevisionDelivery::headline

    fn RevisionDelivery::headline(self : RevisionDelivery) -> String

    RevisionDelivery::is_empty

    fn RevisionDelivery::is_empty(self : RevisionDelivery) -> Bool

    RevisionDelivery::paths_for

    fn RevisionDelivery::paths_for(self : RevisionDelivery, change : DeliveryChange) -> Array[String]

    RevisionDelivery::products_for_path

    fn RevisionDelivery::products_for_path(self : RevisionDelivery, path : String) -> Array[Int]

    RevisionDelivery::requires_geometry_refresh

    fn RevisionDelivery::requires_geometry_refresh(self : RevisionDelivery) -> Bool

    RevisionDelivery::requires_property_refresh

    fn RevisionDelivery::requires_property_refresh(self : RevisionDelivery) -> Bool

    RevisionDelivery::to_json

    fn RevisionDelivery::to_json(self : RevisionDelivery) -> String

    RevisionDelivery::to_markdown

    fn RevisionDelivery::to_markdown(self : RevisionDelivery) -> String

    RevisionImpact

    pub(all) struct RevisionImpact {
    changed_ids : Array[Int]
    affected_ids : Array[Int]
    affected_products : Array[Int]
    affected_spatial_nodes : Array[Int]
    field_changes : Array[EntityFieldChange]
    risk : String
    } derive(
    Debug
    )

    Dependency impact of a model revision.

    RevisionImpact::affected_count

    fn RevisionImpact::affected_count(self : RevisionImpact) -> Int

    RevisionImpact::contains_product

    fn RevisionImpact::contains_product(self : RevisionImpact, id : Int) -> Bool

    RevisionImpact::field_change_count

    fn RevisionImpact::field_change_count(self : RevisionImpact) -> Int

    RevisionImpact::headline

    fn RevisionImpact::headline(self : RevisionImpact) -> String

    RevisionImpact::is_empty

    fn RevisionImpact::is_empty(self : RevisionImpact) -> Bool

    RevisionReport

    pub(all) struct RevisionReport {
    diff : ModelDiff
    impact : RevisionImpact
    added_products : Array[Int]
    removed_products : Array[Int]
    modified_products : Array[Int]
    } derive(
    Debug
    )

    A deterministic revision report combining content and dependency changes.

    RevisionReport::change_count

    fn RevisionReport::change_count(self : RevisionReport) -> Int

    RevisionReport::changed_product_ids

    fn RevisionReport::changed_product_ids(self : RevisionReport) -> Array[Int]

    RevisionReport::field_changes_for

    fn RevisionReport::field_changes_for(self : RevisionReport, id : Int) -> Array[EntityFieldChange]

    RevisionReport::headline

    fn RevisionReport::headline(self : RevisionReport) -> String

    RevisionReport::impact_count

    fn RevisionReport::impact_count(self : RevisionReport) -> Int

    RevisionReport::is_empty

    fn RevisionReport::is_empty(self : RevisionReport) -> Bool

    RevisionReport::risk

    fn RevisionReport::risk(self : RevisionReport) -> String

    RevisionReport::to_json

    fn RevisionReport::to_json(self : RevisionReport) -> String

    RevisionReport::to_markdown

    fn RevisionReport::to_markdown(self : RevisionReport) -> String

    RuleReport

    pub(all) struct RuleReport {
    rules : Array[ModelRule]
    violations : Array[RuleViolation]
    error_count : Int
    warning_count : Int
    checked_entities : Int
    checked_products : Int
    } derive(
    Debug
    )

    Result of a configurable model rule evaluation.

    RuleReport::codes

    fn RuleReport::codes(self : RuleReport) -> Array[String]

    RuleReport::errors

    fn RuleReport::errors(self : RuleReport) -> Array[RuleViolation]

    RuleReport::for_code

    fn RuleReport::for_code(self : RuleReport, code : String) -> Array[RuleViolation]

    RuleReport::for_entity

    fn RuleReport::for_entity(self : RuleReport, id : Int) -> Array[RuleViolation]

    RuleReport::format

    fn RuleReport::format(self : RuleReport) -> String

    RuleReport::headline

    fn RuleReport::headline(self : RuleReport) -> String

    RuleReport::is_valid

    fn RuleReport::is_valid(self : RuleReport) -> Bool

    RuleReport::merge

    fn RuleReport::merge(self : RuleReport, other : RuleReport) -> RuleReport

    RuleReport::to_json

    fn RuleReport::to_json(self : RuleReport) -> String

    RuleReport::to_markdown

    fn RuleReport::to_markdown(self : RuleReport) -> String

    RuleReport::violation_count

    fn RuleReport::violation_count(self : RuleReport) -> Int

    RuleReport::warnings

    fn RuleReport::warnings(self : RuleReport) -> Array[RuleViolation]

    RuleViolation

    pub(all) struct RuleViolation {
    rule_code : String
    severity : DiagnosticSeverity
    entity_id : Int?
    entity_type : String?
    message : String
    property_name : String?
    } derive(
    Debug
    )

    A single rule violation with enough context for UI display.

    RuleViolation::headline

    fn RuleViolation::headline(self : RuleViolation) -> String

    SceneCamera

    pub(all) struct SceneCamera {
    position : Point3
    forward : Vector3
    up : Vector3
    near_distance : Double
    far_distance : Double
    vertical_fov : Double
    aspect_ratio : Double
    projection : SceneProjection
    } derive(
    Debug
    )

    Camera parameters shared by a WebAssembly viewer and native tools.

    SceneCamera::headline

    fn SceneCamera::headline(self : SceneCamera) -> String

    SceneCamera::is_valid

    fn SceneCamera::is_valid(self : SceneCamera) -> Bool

    SceneCamera::looking_at

    fn SceneCamera::looking_at(self : SceneCamera, target : Point3) -> SceneCamera

    SceneCamera::real_up

    fn SceneCamera::real_up(self : SceneCamera) -> Vector3

    SceneCamera::right

    fn SceneCamera::right(self : SceneCamera) -> Vector3

    SceneCamera::with_clip

    fn SceneCamera::with_clip(self : SceneCamera, near_distance : Double, far_distance : Double) -> SceneCamera

    SceneCamera::with_forward

    fn SceneCamera::with_forward(self : SceneCamera, forward : Vector3) -> SceneCamera

    SceneCamera::with_lens

    fn SceneCamera::with_lens(self : SceneCamera, vertical_fov : Double, aspect_ratio : Double) -> SceneCamera

    SceneCamera::with_position

    fn SceneCamera::with_position(self : SceneCamera, position : Point3) -> SceneCamera

    SceneCamera::with_projection

    fn SceneCamera::with_projection(self : SceneCamera, projection : SceneProjection) -> SceneCamera

    SceneChunk

    pub(all) struct SceneChunk {
    index : Int
    product_ids : Array[Int]
    bounds : BoundingBox
    point_count : Int
    triangle_count : Int
    } derive(
    Debug
    )

    A set of scene chunks used to stream large WebBIM models.

    SceneChunk::center

    fn SceneChunk::center(self : SceneChunk) -> Point3

    SceneChunk::contains_product

    fn SceneChunk::contains_product(self : SceneChunk, id : Int) -> Bool

    SceneChunk::headline

    fn SceneChunk::headline(self : SceneChunk) -> String

    SceneChunk::intersects

    fn SceneChunk::intersects(self : SceneChunk, bounds : BoundingBox, tolerance? : Double) -> Bool

    SceneChunk::is_empty

    fn SceneChunk::is_empty(self : SceneChunk) -> Bool

    SceneChunk::product_count

    fn SceneChunk::product_count(self : SceneChunk) -> Int

    SceneItem

    pub(all) struct SceneItem {
    product : Product
    geometries : Array[Geometry]
    transform : Transform3
    bounds : BoundingBox
    } derive(
    Debug
    )

    SceneLod

    pub(all) enum SceneLod {
    Full
    Medium
    Coarse
    BoundsOnly
    } derive(Eq,
    Debug
    )

    Render detail selected for one visible product.

    ScenePartition

    pub(all) struct ScenePartition {
    chunks : Array[SceneChunk]
    bounds : BoundingBox
    chunk_size : Int
    product_count : Int
    } derive(
    Debug
    )

    A deterministic spatial partition of renderable products.

    ScenePartition::average_products_per_chunk

    fn ScenePartition::average_products_per_chunk(self : ScenePartition) -> Double

    ScenePartition::chunk

    fn ScenePartition::chunk(self : ScenePartition, index : Int) -> SceneChunk?

    ScenePartition::chunk_count

    fn ScenePartition::chunk_count(self : ScenePartition) -> Int

    ScenePartition::chunk_for_product

    fn ScenePartition::chunk_for_product(self : ScenePartition, id : Int) -> SceneChunk?

    ScenePartition::chunks_at_point

    fn ScenePartition::chunks_at_point(self : ScenePartition, point : Point3, tolerance? : Double) -> Array[SceneChunk]

    ScenePartition::chunks_intersecting

    fn ScenePartition::chunks_intersecting(self : ScenePartition, bounds : BoundingBox, tolerance? : Double) -> Array[SceneChunk]

    ScenePartition::headline

    fn ScenePartition::headline(self : ScenePartition) -> String

    ScenePartition::largest_chunk

    fn ScenePartition::largest_chunk(self : ScenePartition) -> SceneChunk?

    ScenePartition::product_ids

    fn ScenePartition::product_ids(self : ScenePartition) -> Array[Int]

    ScenePartition::to_json

    fn ScenePartition::to_json(self : ScenePartition) -> String

    ScenePartition::to_markdown

    fn ScenePartition::to_markdown(self : ScenePartition) -> String

    ScenePick

    pub(all) struct ScenePick {
    origin : Point3
    direction : Vector3
    product_id : Int?
    distance : Double?
    point : Point3?
    } derive(
    Debug
    )

    A picking ray and its closest hit.

    ScenePick::headline

    fn ScenePick::headline(self : ScenePick) -> String

    ScenePick::is_hit

    fn ScenePick::is_hit(self : ScenePick) -> Bool

    ScenePick::to_json

    fn ScenePick::to_json(self : ScenePick) -> String

    SceneProjection

    pub(all) enum SceneProjection {
    Perspective
    Orthographic
    } derive(Eq,
    Debug
    )

    Projection mode used by a render-oriented visibility query.

    SceneQueryOptions

    pub(all) struct SceneQueryOptions {
    tolerance : Double
    minimum_distance : Double
    maximum_items : Int
    full_detail_distance : Double
    medium_detail_distance : Double
    include_empty : Bool
    include_back_facing : Bool
    } derive(
    Debug
    )

    Controls culling, LOD selection and the amount of render work returned.

    SceneQueryOptions::including_back_facing

    fn SceneQueryOptions::including_back_facing(self : SceneQueryOptions, include_back_facing : Bool) -> SceneQueryOptions

    SceneQueryOptions::including_empty

    fn SceneQueryOptions::including_empty(self : SceneQueryOptions, include_empty : Bool) -> SceneQueryOptions

    SceneQueryOptions::with_lod_distances

    fn SceneQueryOptions::with_lod_distances(self : SceneQueryOptions, full_detail_distance : Double, medium_detail_distance : Double) -> SceneQueryOptions

    SceneQueryOptions::with_maximum_items

    fn SceneQueryOptions::with_maximum_items(self : SceneQueryOptions, maximum_items : Int) -> SceneQueryOptions

    SceneQueryOptions::with_tolerance

    fn SceneQueryOptions::with_tolerance(self : SceneQueryOptions, tolerance : Double) -> SceneQueryOptions

    SceneSelection

    pub(all) struct SceneSelection {
    items : Array[SceneVisibleItem]
    tested_count : Int
    culled_count : Int
    full_count : Int
    medium_count : Int
    coarse_count : Int
    bounds_only_count : Int
    visible_bounds : BoundingBox
    } derive(
    Debug
    )

    Result of a visibility query over an indexed IFC model.

    SceneSelection::by_lod

    SceneSelection::contains

    fn SceneSelection::contains(self : SceneSelection, product_id : Int) -> Bool

    SceneSelection::from_index

    fn SceneSelection::from_index(index : SpatialIndex, camera : SceneCamera, options? : SceneQueryOptions) -> SceneSelection

    Select visible products and a stable LOD for a camera frame.

    SceneSelection::headline

    fn SceneSelection::headline(self : SceneSelection) -> String

    SceneSelection::ids

    fn SceneSelection::ids(self : SceneSelection) -> Array[Int]

    SceneSelection::item

    fn SceneSelection::item(self : SceneSelection, product_id : Int) -> SceneVisibleItem?

    SceneSelection::lod_histogram

    fn SceneSelection::lod_histogram(self : SceneSelection) -> Map[String, Int]

    SceneSelection::to_json

    fn SceneSelection::to_json(self : SceneSelection) -> String

    SceneSelection::to_markdown

    fn SceneSelection::to_markdown(self : SceneSelection) -> String

    SceneSelection::triangle_budget

    fn SceneSelection::triangle_budget(self : SceneSelection) -> Int

    SceneSelection::visible_count

    fn SceneSelection::visible_count(self : SceneSelection) -> Int

    SceneVisibleItem

    pub(all) struct SceneVisibleItem {
    product_id : Int
    ifc_type : String
    distance : Double
    depth : Double
    projected_radius : Double
    lod : SceneLod
    triangle_count : Int
    bounds : BoundingBox
    } derive(
    Debug
    )

    A visible item with a conservative screen-independent LOD choice.

    SchemaIssue

    pub(all) struct SchemaIssue {
    code : String
    entity_id : Int
    entity_name : String
    message : String
    severity : DiagnosticSeverity
    } derive(
    Debug
    )

    SchemaProfile

    pub(all) struct SchemaProfile {
    name : String
    version : SchemaVersion
    rules : Array[SchemaRule]
    known_entity_count : Int
    } derive(
    Debug
    )

    SchemaProfile::rule

    fn SchemaProfile::rule(self : SchemaProfile, entity_name : String) -> SchemaRule?

    SchemaReport

    pub(all) struct SchemaReport {
    profile : SchemaProfile
    checked_entities : Int
    issues : Array[SchemaIssue]
    error_count : Int
    warning_count : Int
    } derive(
    Debug
    )

    SchemaReport::format

    fn SchemaReport::format(self : SchemaReport) -> String

    SchemaReport::headline

    fn SchemaReport::headline(self : SchemaReport) -> String

    SchemaReport::is_valid

    fn SchemaReport::is_valid(self : SchemaReport) -> Bool

    SchemaReport::unknown_entity_count

    fn SchemaReport::unknown_entity_count(self : SchemaReport) -> Int

    SchemaRule

    pub(all) struct SchemaRule {
    entity_name : String
    minimum_arguments : Int
    maximum_arguments : Int?
    required_reference_arguments : Array[Int]
    family : String
    description : String
    } derive(
    Debug
    )

    A lightweight schema rule used by the validation layer.

    SchemaVersion

    pub(all) enum SchemaVersion {
    IFC2X3
    IFC4
    IFC4X3
    UnknownSchema(String)
    } derive(Eq,
    Debug
    )

    SearchField

    pub(all) enum SearchField {
    EntityType
    EntityText
    ProductName
    ProductGlobalId
    ProductTag
    PropertyName
    PropertyValue
    } derive(Eq,
    Debug
    )

    SearchHit

    pub(all) struct SearchHit {
    entity_id : Int
    product_id : Int?
    field : SearchField
    value : String
    } derive(
    Debug
    )

    SectionOptions

    pub(all) struct SectionOptions {
    tolerance : Double
    include_coplanar_edges : Bool
    maximum_segments : Int
    join_tolerance : Double
    } derive(
    Debug
    )

    Controls numerical tolerance and segment limits for a section cut.

    SectionOptions::including_coplanar_edges

    fn SectionOptions::including_coplanar_edges(self : SectionOptions, enabled : Bool) -> SectionOptions

    SectionOptions::with_join_tolerance

    fn SectionOptions::with_join_tolerance(self : SectionOptions, tolerance : Double) -> SectionOptions

    SectionOptions::with_maximum_segments

    fn SectionOptions::with_maximum_segments(self : SectionOptions, maximum : Int) -> SectionOptions

    SectionOptions::with_tolerance

    fn SectionOptions::with_tolerance(self : SectionOptions, tolerance : Double) -> SectionOptions

    SectionPlane

    pub(all) struct SectionPlane {
    origin : Point3
    normal : Vector3
    } derive(
    Debug
    )

    A plane used to extract a coordination or quantity-takeoff section.

    SectionPlane::headline

    fn SectionPlane::headline(self : SectionPlane) -> String

    SectionPlane::horizontal

    fn SectionPlane::horizontal(height : Double) -> SectionPlane

    SectionPlane::is_valid

    fn SectionPlane::is_valid(self : SectionPlane) -> Bool

    SectionPlane::new

    fn SectionPlane::new(origin~ : Point3, normal~ : Vector3) -> SectionPlane

    SectionPlane::project

    fn SectionPlane::project(self : SectionPlane, point : Point3) -> Point3

    SectionPlane::signed_distance

    fn SectionPlane::signed_distance(self : SectionPlane, point : Point3) -> Double

    SectionPlane::vertical_x

    fn SectionPlane::vertical_x(offset : Double) -> SectionPlane

    SectionPlane::vertical_y

    fn SectionPlane::vertical_y(offset : Double) -> SectionPlane

    SectionPolyline

    pub(all) struct SectionPolyline {
    product_id : Int
    points : Array[Point3]
    closed : Bool
    length : Double
    area : Double
    } derive(
    Debug
    )

    A connected sequence of section points assembled from raw segments.

    SectionPolyline::first

    fn SectionPolyline::first(self : SectionPolyline) -> Point3?

    SectionPolyline::is_degenerate

    fn SectionPolyline::is_degenerate(self : SectionPolyline, tolerance? : Double) -> Bool

    SectionPolyline::last

    SectionPolyline::point_count

    fn SectionPolyline::point_count(self : SectionPolyline) -> Int

    SectionResult

    pub(all) struct SectionResult {
    plane : SectionPlane
    segments : Array[SectionSegment]
    polylines : Array[SectionPolyline]
    product_ids : Array[Int]
    intersected_triangle_count : Int
    total_length : Double
    bounds : BoundingBox
    } derive(
    Debug
    )

    Aggregate output of a section extraction.

    SectionResult::closed_count

    fn SectionResult::closed_count(self : SectionResult) -> Int

    SectionResult::headline

    fn SectionResult::headline(self : SectionResult) -> String

    SectionResult::polyline_count

    fn SectionResult::polyline_count(self : SectionResult) -> Int

    SectionResult::polylines_for_product

    fn SectionResult::polylines_for_product(self : SectionResult, product_id : Int) -> Array[SectionPolyline]

    SectionResult::product_count

    fn SectionResult::product_count(self : SectionResult) -> Int

    SectionResult::segment_count

    fn SectionResult::segment_count(self : SectionResult) -> Int

    SectionResult::segments_for_product

    fn SectionResult::segments_for_product(self : SectionResult, product_id : Int) -> Array[SectionSegment]

    SectionResult::to_csv

    fn SectionResult::to_csv(self : SectionResult) -> String

    SectionResult::to_json

    fn SectionResult::to_json(self : SectionResult) -> String

    SectionResult::to_markdown

    fn SectionResult::to_markdown(self : SectionResult) -> String

    SectionResult::total_area

    fn SectionResult::total_area(self : SectionResult) -> Double

    SectionSegment

    pub(all) struct SectionSegment {
    product_id : Int
    source_triangle : Int
    start : Point3
    end : Point3
    length : Double
    coplanar : Bool
    } derive(
    Debug
    )

    One line segment produced by intersecting a triangle with a plane.

    SortDirection

    pub(all) enum SortDirection {
    Ascending
    Descending
    } derive(Eq,
    Debug
    )

    SourceHealth

    pub(all) struct SourceHealth {
    byte_length : Int
    line_count : Int
    record_count : Int
    maximum_record_length : Int
    reference_count : Int
    balanced_parentheses : Bool
    balanced_strings : Bool
    has_iso_header : Bool
    has_end_marker : Bool
    } derive(
    Debug
    )

    Cheap source-level health indicators used before allocating a full model.

    SourceHealth::is_well_formed

    fn SourceHealth::is_well_formed(self : SourceHealth) -> Bool

    SourceHealth::summary

    fn SourceHealth::summary(self : SourceHealth) -> String

    SourcePosition

    pub(all) struct SourcePosition {
    offset : Int
    line : Int
    column : Int
    } derive(Eq,
    Debug
    )

    A source position measured in Unicode code units.

    SourcePosition::new

    fn SourcePosition::new(offset~ : Int, line~ : Int, column~ : Int) -> SourcePosition

    SourceWindow

    pub(all) struct SourceWindow {
    start : Int
    end : Int
    text : String
    line : Int
    } derive(
    Debug
    )

    SpaceAdjacency

    pub(all) struct SpaceAdjacency {
    left_space : Int
    right_space : Int
    shared_elements : Array[Int]
    boundary_count : Int
    distance : Double
    } derive(
    Debug
    )

    A shared building element that connects two spaces.

    SpaceAdjacency::headline

    fn SpaceAdjacency::headline(self : SpaceAdjacency) -> String

    SpaceAdjacencyGraph

    pub(all) struct SpaceAdjacencyGraph {
    spaces : Array[Int]
    edges : Array[SpaceAdjacency]
    neighbors : Map[Int, Array[Int]]
    } derive(
    Debug
    )

    Space adjacency graph for navigation and evacuation analysis.

    SpaceAdjacencyGraph::degree

    fn SpaceAdjacencyGraph::degree(self : SpaceAdjacencyGraph, id : Int) -> Int

    SpaceAdjacencyGraph::edge

    fn SpaceAdjacencyGraph::edge(self : SpaceAdjacencyGraph, left : Int, right : Int) -> SpaceAdjacency?

    SpaceAdjacencyGraph::edge_count

    fn SpaceAdjacencyGraph::edge_count(self : SpaceAdjacencyGraph) -> Int

    SpaceAdjacencyGraph::headline

    fn SpaceAdjacencyGraph::headline(self : SpaceAdjacencyGraph) -> String

    SpaceAdjacencyGraph::isolated_spaces

    fn SpaceAdjacencyGraph::isolated_spaces(self : SpaceAdjacencyGraph) -> Array[Int]

    SpaceAdjacencyGraph::neighbors

    fn SpaceAdjacencyGraph::neighbors(self : SpaceAdjacencyGraph, id : Int) -> Array[Int]

    SpaceAdjacencyGraph::new

    Build a room adjacency graph from IfcRelSpaceBoundary records.

    SpaceAdjacencyGraph::reachable

    fn SpaceAdjacencyGraph::reachable(self : SpaceAdjacencyGraph, start : Int) -> Array[Int]

    SpaceAdjacencyGraph::shortest_path

    fn SpaceAdjacencyGraph::shortest_path(self : SpaceAdjacencyGraph, start : Int, goal : Int) -> Array[Int]?

    SpaceAdjacencyGraph::space_count

    fn SpaceAdjacencyGraph::space_count(self : SpaceAdjacencyGraph) -> Int

    SpaceAdjacencyGraph::to_json

    fn SpaceAdjacencyGraph::to_json(self : SpaceAdjacencyGraph) -> String

    SpaceAdjacencyGraph::to_markdown

    fn SpaceAdjacencyGraph::to_markdown(self : SpaceAdjacencyGraph) -> String

    SpatialEntry

    pub(all) struct SpatialEntry {
    product_id : Int
    entity_id : Int
    ifc_type : String
    name : String?
    container : Int?
    bounds : BoundingBox
    geometry_count : Int
    point_count : Int
    triangle_count : Int
    } derive(
    Debug
    )

    A product's world-space spatial record.

    SpatialEntry::center

    fn SpatialEntry::center(self : SpatialEntry) -> Point3

    SpatialEntry::headline

    fn SpatialEntry::headline(self : SpatialEntry) -> String

    SpatialEntry::is_empty

    fn SpatialEntry::is_empty(self : SpatialEntry) -> Bool

    SpatialEntry::volume

    fn SpatialEntry::volume(self : SpatialEntry) -> Double

    SpatialHit

    pub(all) struct SpatialHit {
    product_id : Int
    entity_id : Int
    bounds : BoundingBox
    relation : BoxRelation
    distance : Double
    overlap_volume : Double
    } derive(
    Debug
    )

    A hit returned from a spatial query.

    SpatialHit::headline

    fn SpatialHit::headline(self : SpatialHit) -> String

    SpatialIndex

    pub(all) struct SpatialIndex {
    entries : Array[SpatialEntry]
    cells : Map[String, Array[Int]]
    bounds : BoundingBox
    cell_size : Double
    } derive(
    Debug
    )

    A configurable spatial grid used for broad-phase BIM queries.

    SpatialIndex::bounds

    fn SpatialIndex::bounds(self : SpatialIndex) -> BoundingBox

    SpatialIndex::bounds_for_products

    fn SpatialIndex::bounds_for_products(self : SpatialIndex, product_ids : Array[Int]) -> BoundingBox

    SpatialIndex::cell_count

    fn SpatialIndex::cell_count(self : SpatialIndex) -> Int

    SpatialIndex::cell_size

    fn SpatialIndex::cell_size(self : SpatialIndex) -> Double

    SpatialIndex::contains_product

    fn SpatialIndex::contains_product(self : SpatialIndex, product_id : Int) -> Bool

    SpatialIndex::distance_between

    fn SpatialIndex::distance_between(self : SpatialIndex, left_id : Int, right_id : Int) -> Double?

    SpatialIndex::entries

    SpatialIndex::entry

    fn SpatialIndex::entry(self : SpatialIndex, product_id : Int) -> SpatialEntry?

    SpatialIndex::intersections

    fn SpatialIndex::intersections(self : SpatialIndex, query : BoundingBox, tolerance? : Double) -> Array[SpatialEntry]

    SpatialIndex::nearest

    fn SpatialIndex::nearest(self : SpatialIndex, point : Point3, maximum_distance? : Double) -> SpatialHit?

    SpatialIndex::new

    fn SpatialIndex::new(model : Model, options? : SpatialIndexOptions) -> SpatialIndex raise ParseError

    Build a broad-phase spatial index from transformed product meshes.

    SpatialIndex::product_ids

    fn SpatialIndex::product_ids(self : SpatialIndex) -> Array[Int]

    SpatialIndex::products_in_container

    fn SpatialIndex::products_in_container(self : SpatialIndex, container_id : Int) -> Array[SpatialEntry]

    SpatialIndex::query_box

    fn SpatialIndex::query_box(self : SpatialIndex, query : BoundingBox, tolerance? : Double) -> Array[SpatialHit]

    SpatialIndex::query_point

    fn SpatialIndex::query_point(self : SpatialIndex, point : Point3, tolerance? : Double) -> Array[SpatialHit]

    SpatialIndex::query_range

    fn SpatialIndex::query_range(self : SpatialIndex, minimum : Point3, maximum : Point3, tolerance? : Double) -> Array[SpatialHit]

    SpatialIndex::query_sphere

    fn SpatialIndex::query_sphere(self : SpatialIndex, center : Point3, radius : Double) -> Array[SpatialHit]

    SpatialIndex::raycast

    fn SpatialIndex::raycast(self : SpatialIndex, origin : Point3, direction : Vector3, maximum_distance? : Double) -> Array[SpatialHit]

    SpatialIndex::raycast_first

    fn SpatialIndex::raycast_first(self : SpatialIndex, origin : Point3, direction : Vector3, maximum_distance? : Double) -> SpatialHit?

    SpatialIndex::relation_between

    fn SpatialIndex::relation_between(self : SpatialIndex, left_id : Int, right_id : Int, tolerance? : Double) -> BoxRelation?

    SpatialIndex::to_json

    fn SpatialIndex::to_json(self : SpatialIndex) -> String

    SpatialIndex::total_geometry_count

    fn SpatialIndex::total_geometry_count(self : SpatialIndex) -> Int

    SpatialIndex::total_triangles

    fn SpatialIndex::total_triangles(self : SpatialIndex) -> Int

    SpatialIndex::type_histogram

    fn SpatialIndex::type_histogram(self : SpatialIndex) -> Map[String, Int]

    SpatialIndex::within

    fn SpatialIndex::within(self : SpatialIndex, container : BoundingBox, tolerance? : Double) -> Array[SpatialEntry]

    SpatialIndexOptions

    pub(all) struct SpatialIndexOptions {
    cell_size : Double
    include_empty : Bool
    maximum_entries : Int
    } derive(
    Debug
    )

    Options for constructing a spatial index.

    SpatialIndexOptions::including_empty

    fn SpatialIndexOptions::including_empty(self : SpatialIndexOptions, include_empty : Bool) -> SpatialIndexOptions

    SpatialIndexOptions::with_cell_size

    fn SpatialIndexOptions::with_cell_size(self : SpatialIndexOptions, cell_size : Double) -> SpatialIndexOptions

    SpatialIndexOptions::with_maximum_entries

    fn SpatialIndexOptions::with_maximum_entries(self : SpatialIndexOptions, maximum_entries : Int) -> SpatialIndexOptions

    SpatialMetrics

    pub(all) struct SpatialMetrics {
    node_count : Int
    leaf_count : Int
    product_count : Int
    max_depth : Int
    occupied_volume : Double
    bounds : BoundingBox
    } derive(
    Debug
    )

    Spatial roll-up metrics for a subtree or an entire model.

    SpatialNode

    pub(all) struct SpatialNode {
    id : Int
    ifc_type : String
    name : String?
    children : Array[SpatialNode]
    products : Array[Int]
    } derive(
    Debug
    )

    SpatialNode::all_product_ids

    fn SpatialNode::all_product_ids(self : SpatialNode) -> Array[Int]

    SpatialNode::contains

    fn SpatialNode::contains(self : SpatialNode, id : Int) -> Bool

    SpatialNode::depth

    fn SpatialNode::depth(self : SpatialNode) -> Int

    Return the number of levels below a spatial node. IFC aggregation is a graph in the file, but applications consume it as a bounded tree.

    SpatialNode::find

    fn SpatialNode::find(self : SpatialNode, id : Int) -> SpatialNode?

    SpatialNode::is_leaf

    fn SpatialNode::is_leaf(self : SpatialNode) -> Bool

    SpatialNode::leaf_count

    fn SpatialNode::leaf_count(self : SpatialNode) -> Int

    SpatialNode::leaves

    fn SpatialNode::leaves(self : SpatialNode) -> Array[SpatialNode]

    SpatialNode::node_count

    fn SpatialNode::node_count(self : SpatialNode) -> Int

    SpatialNode::nodes_at_depth

    fn SpatialNode::nodes_at_depth(self : SpatialNode, wanted : Int) -> Array[SpatialNode]

    SpatialNode::path_to

    fn SpatialNode::path_to(self : SpatialNode, target : Int) -> Array[Int]?

    SpatialNode::product_count

    fn SpatialNode::product_count(self : SpatialNode) -> Int

    SpatialNode::type_histogram

    fn SpatialNode::type_histogram(self : SpatialNode) -> Map[String, Int]

    SpatialNode::unique_product_ids

    fn SpatialNode::unique_product_ids(self : SpatialNode) -> Array[Int]

    SpatialSchedule

    pub(all) struct SpatialSchedule {
    rows : Array[SpatialScheduleRow]
    total_spaces : Int
    total_products : Int
    total_area : Double
    total_volume : Double
    } derive(
    Debug
    )

    Spatial schedule for all rooms and storeys in a model.

    SpatialSchedule::average_space_area

    fn SpatialSchedule::average_space_area(self : SpatialSchedule) -> Double

    SpatialSchedule::find

    fn SpatialSchedule::find(self : SpatialSchedule, id : Int) -> SpatialScheduleRow?

    SpatialSchedule::headline

    fn SpatialSchedule::headline(self : SpatialSchedule) -> String

    SpatialSchedule::named

    fn SpatialSchedule::named(self : SpatialSchedule, fragment : String) -> Array[SpatialScheduleRow]

    SpatialSchedule::row_count

    fn SpatialSchedule::row_count(self : SpatialSchedule) -> Int

    SpatialSchedule::spaces

    SpatialSchedule::storeys

    SpatialSchedule::to_csv

    fn SpatialSchedule::to_csv(self : SpatialSchedule) -> String

    SpatialSchedule::to_json

    fn SpatialSchedule::to_json(self : SpatialSchedule) -> String

    SpatialSchedule::to_markdown

    fn SpatialSchedule::to_markdown(self : SpatialSchedule) -> String

    SpatialSchedule::total_doors

    fn SpatialSchedule::total_doors(self : SpatialSchedule) -> Int

    SpatialSchedule::total_walls

    fn SpatialSchedule::total_walls(self : SpatialSchedule) -> Int

    SpatialSchedule::total_windows

    fn SpatialSchedule::total_windows(self : SpatialSchedule) -> Int

    SpatialScheduleRow

    pub(all) struct SpatialScheduleRow {
    id : Int
    name : String
    ifc_type : String
    path : Array[Int]
    product_count : Int
    door_count : Int
    window_count : Int
    wall_count : Int
    area : Double
    volume : Double
    bounds : BoundingBox
    } derive(
    Debug
    )

    A room or space schedule row used by coordination tools.

    SpatialScheduleRow::headline

    fn SpatialScheduleRow::headline(self : SpatialScheduleRow) -> String

    SpatialScheduleRow::opening_count

    fn SpatialScheduleRow::opening_count(self : SpatialScheduleRow) -> Int

    SpatialScheduleRow::path_text

    fn SpatialScheduleRow::path_text(self : SpatialScheduleRow) -> String

    StepDocumentStats

    pub(all) struct StepDocumentStats {
    byte_length : Int
    line_count : Int
    entity_count : Int
    reference_count : Int
    string_count : Int
    comment_count : Int
    } derive(
    Debug
    )

    StepRecord

    pub(all) struct StepRecord {
    id : Int
    name : String
    start_offset : Int
    end_offset : Int
    line : Int
    raw : String
    } derive(
    Debug
    )

    A physical STEP entity record found by the streaming scanner.

    StepRecord::contains_reference

    fn StepRecord::contains_reference(self : StepRecord, id : Int) -> Bool

    StepRecord::is_relationship

    fn StepRecord::is_relationship(self : StepRecord) -> Bool

    StepRecord::length

    fn StepRecord::length(self : StepRecord) -> Int

    StepRecord::reference_count

    fn StepRecord::reference_count(self : StepRecord) -> Int

    StepRecord::source_window

    fn StepRecord::source_window(self : StepRecord, source : String) -> SourceWindow

    StepRecord::summary

    fn StepRecord::summary(self : StepRecord) -> String

    StreamBatch

    pub(all) struct StreamBatch {
    sequence : Int
    start_offset : Int
    end_offset : Int
    records : Array[StepRecord]
    complete : Bool
    } derive(
    Debug
    )

    A bounded batch of raw STEP records.

    StreamBatch::first_id

    fn StreamBatch::first_id(self : StreamBatch) -> Int?

    StreamBatch::headline

    fn StreamBatch::headline(self : StreamBatch) -> String

    StreamBatch::is_empty

    fn StreamBatch::is_empty(self : StreamBatch) -> Bool

    StreamBatch::last_id

    fn StreamBatch::last_id(self : StreamBatch) -> Int?

    StreamBatch::parse_entities

    fn StreamBatch::parse_entities(self : StreamBatch) -> Array[Entity] raise ParseError

    StreamBatch::record_count

    fn StreamBatch::record_count(self : StreamBatch) -> Int

    StreamBatch::to_json

    fn StreamBatch::to_json(self : StreamBatch) -> String

    StreamFilter

    pub(all) struct StreamFilter {
    names : Array[String]
    first_id : Int?
    last_id : Int?
    minimum_length : Int
    maximum_length : Int
    maximum_records : Int
    } derive(
    Debug
    )

    Filter used by the low-allocation STEP record stream API.

    StreamFilter::between_ids

    fn StreamFilter::between_ids(self : StreamFilter, first : Int?, last : Int?) -> StreamFilter

    StreamFilter::describe

    fn StreamFilter::describe(self : StreamFilter) -> String

    StreamFilter::is_unbounded

    fn StreamFilter::is_unbounded(self : StreamFilter) -> Bool

    StreamFilter::limiting

    fn StreamFilter::limiting(self : StreamFilter, count : Int) -> StreamFilter

    StreamFilter::matches

    fn StreamFilter::matches(self : StreamFilter, record : StepRecord) -> Bool

    StreamFilter::named

    fn StreamFilter::named(self : StreamFilter, name : String) -> StreamFilter

    StreamFilter::with_maximum_length

    fn StreamFilter::with_maximum_length(self : StreamFilter, length : Int) -> StreamFilter

    StreamFilter::with_minimum_length

    fn StreamFilter::with_minimum_length(self : StreamFilter, length : Int) -> StreamFilter

    StreamFilter::with_name_set

    fn StreamFilter::with_name_set(self : StreamFilter, names : Array[String]) -> StreamFilter

    StreamSelection

    pub(all) struct StreamSelection {
    records : Array[StepRecord]
    examined : Int
    selected : Int
    truncated : Bool
    first_offset : Int
    last_offset : Int
    } derive(
    Debug
    )

    Summary of a filtered stream operation.

    StreamSelection::first

    StreamSelection::headline

    fn StreamSelection::headline(self : StreamSelection) -> String

    StreamSelection::ids

    fn StreamSelection::ids(self : StreamSelection) -> Array[Int]

    StreamSelection::is_empty

    fn StreamSelection::is_empty(self : StreamSelection) -> Bool

    StreamSelection::last

    StreamSelection::names

    fn StreamSelection::names(self : StreamSelection) -> Array[String]

    StreamSelection::parse_entities

    fn StreamSelection::parse_entities(self : StreamSelection) -> Array[Entity] raise ParseError

    StreamSelection::to_json

    fn StreamSelection::to_json(self : StreamSelection) -> String

    StreamStats

    pub(all) struct StreamStats {
    source_length : Int
    record_count : Int
    reference_count : Int
    max_record_length : Int
    comment_count : Int
    line_count : Int
    schema : String?
    } derive(
    Debug
    )

    Statistics collected without constructing the complete entity graph.

    StreamStats::density

    fn StreamStats::density(self : StreamStats) -> Double

    StreamStats::headline

    fn StreamStats::headline(self : StreamStats) -> String

    TakeoffGroup

    pub(all) struct TakeoffGroup {
    key : String
    product_count : Int
    quantities : Array[QuantityValue]
    } derive(
    Debug
    )

    A roll-up row grouped by type, container or an application key.

    TakeoffGroup::headline

    fn TakeoffGroup::headline(self : TakeoffGroup) -> String

    TakeoffGroup::quantity

    fn TakeoffGroup::quantity(self : TakeoffGroup, kind : QuantityKind) -> QuantityValue?

    TakeoffGroup::value

    fn TakeoffGroup::value(self : TakeoffGroup, kind : QuantityKind) -> Double

    TakeoffOptions

    pub(all) struct TakeoffOptions {
    grouping : QuantityGrouping
    include_empty : Bool
    include_unknown : Bool
    use_mesh_measurements : Bool
    include_surface_area : Bool
    minimum_value : Double
    } derive(
    Debug
    )

    Options for geometry and property driven quantity extraction.

    TakeoffOptions::group_by

    fn TakeoffOptions::group_by(self : TakeoffOptions, grouping : QuantityGrouping) -> TakeoffOptions

    TakeoffOptions::including_empty

    fn TakeoffOptions::including_empty(self : TakeoffOptions, value : Bool) -> TakeoffOptions

    TakeoffOptions::including_surface_area

    fn TakeoffOptions::including_surface_area(self : TakeoffOptions, value : Bool) -> TakeoffOptions

    TakeoffOptions::including_unknown

    fn TakeoffOptions::including_unknown(self : TakeoffOptions, value : Bool) -> TakeoffOptions

    TakeoffOptions::using_mesh_measurements

    fn TakeoffOptions::using_mesh_measurements(self : TakeoffOptions, value : Bool) -> TakeoffOptions

    TakeoffOptions::with_minimum_value

    fn TakeoffOptions::with_minimum_value(self : TakeoffOptions, value : Double) -> TakeoffOptions

    TakeoffReport

    pub(all) struct TakeoffReport {
    products : Array[ProductTakeoff]
    groups : Array[TakeoffGroup]
    unit_system : UnitSystem
    source_schema : String
    skipped_products : Int
    } derive(
    Debug
    )

    Complete quantity takeoff result.

    TakeoffReport::estimated_count

    fn TakeoffReport::estimated_count(self : TakeoffReport, kind : QuantityKind) -> Int

    TakeoffReport::find_group

    fn TakeoffReport::find_group(self : TakeoffReport, key : String) -> TakeoffGroup?

    TakeoffReport::find_product

    fn TakeoffReport::find_product(self : TakeoffReport, id : Int) -> ProductTakeoff?

    TakeoffReport::group_count

    fn TakeoffReport::group_count(self : TakeoffReport) -> Int

    TakeoffReport::group_keys

    fn TakeoffReport::group_keys(self : TakeoffReport) -> Array[String]

    TakeoffReport::headline

    fn TakeoffReport::headline(self : TakeoffReport) -> String

    TakeoffReport::product_count

    fn TakeoffReport::product_count(self : TakeoffReport) -> Int

    TakeoffReport::quantity_kinds

    fn TakeoffReport::quantity_kinds(self : TakeoffReport) -> Array[String]

    TakeoffReport::to_csv

    fn TakeoffReport::to_csv(self : TakeoffReport) -> String

    TakeoffReport::to_json

    fn TakeoffReport::to_json(self : TakeoffReport) -> String

    TakeoffReport::to_markdown

    fn TakeoffReport::to_markdown(self : TakeoffReport) -> String

    TakeoffReport::total

    fn TakeoffReport::total(self : TakeoffReport, kind : QuantityKind) -> Double

    TakeoffReport::total_in_si

    fn TakeoffReport::total_in_si(self : TakeoffReport, kind : QuantityKind) -> Double

    TopologyIssue

    pub(all) struct TopologyIssue {
    kind : TopologyIssueKind
    triangle : Int?
    vertex_a : Int?
    vertex_b : Int?
    message : String
    } derive(
    Debug
    )

    TopologyIssue::headline

    fn TopologyIssue::headline(self : TopologyIssue) -> String

    TopologyIssue::to_json

    fn TopologyIssue::to_json(self : TopologyIssue) -> String

    TopologyIssueKind

    pub(all) enum TopologyIssueKind {
    InvalidIndex
    DegenerateTriangle
    BoundaryEdge
    NonManifoldEdge
    DisconnectedComponent
    EmptyMesh
    } derive(Eq,
    Debug
    )

    A topology problem that can be surfaced before export or clash analysis.

    TopologyReport

    pub(all) struct TopologyReport {
    point_count : Int
    triangle_count : Int
    valid_triangle_count : Int
    edge_count : Int
    boundary_edge_count : Int
    non_manifold_edge_count : Int
    degenerate_triangle_count : Int
    invalid_index_count : Int
    component_count : Int
    euler_characteristic : Int
    surface_area : Double
    signed_volume : Double
    issues : Array[TopologyIssue]
    } derive(
    Debug
    )

    TopologyReport::headline

    fn TopologyReport::headline(self : TopologyReport) -> String

    TopologyReport::is_closed

    fn TopologyReport::is_closed(self : TopologyReport) -> Bool

    TopologyReport::is_manifold

    fn TopologyReport::is_manifold(self : TopologyReport) -> Bool

    TopologyReport::is_renderable

    fn TopologyReport::is_renderable(self : TopologyReport) -> Bool

    TopologyReport::is_solid_candidate

    fn TopologyReport::is_solid_candidate(self : TopologyReport) -> Bool

    TopologyReport::issue_count

    fn TopologyReport::issue_count(self : TopologyReport) -> Int

    TopologyReport::issues_of

    TopologyReport::signed_volume

    fn TopologyReport::signed_volume(self : TopologyReport) -> Double

    TopologyReport::to_json

    fn TopologyReport::to_json(self : TopologyReport) -> String

    TopologyReport::to_markdown

    fn TopologyReport::to_markdown(self : TopologyReport) -> String

    Transform3

    pub(all) struct Transform3 {
    m00 : Double
    m01 : Double
    m02 : Double
    m10 : Double
    m11 : Double
    m12 : Double
    m20 : Double
    m21 : Double
    m22 : Double
    tx : Double
    ty : Double
    tz : Double
    } derive(
    Debug
    )

    Transform3::apply

    fn Transform3::apply(self : Transform3, point : Point3) -> Point3

    Transform3::identity

    fn Transform3::identity() -> Transform3

    Transform3::multiply

    fn Transform3::multiply(self : Transform3, other : Transform3) -> Transform3

    Transform3::translation

    fn Transform3::translation(x~ : Double, y~ : Double, z~ : Double) -> Transform3

    UnitAuditReport

    pub(all) struct UnitAuditReport {
    rows : Array[UnitAuditRow]
    recognized_count : Int
    unknown_count : Int
    duplicate_kind_count : Int
    length_scale : Double
    area_scale : Double
    volume_scale : Double
    } derive(
    Debug
    )

    Summary of the unit declarations and quantity conversions in a model.

    UnitAuditReport::headline

    fn UnitAuditReport::headline(self : UnitAuditReport) -> String

    UnitAuditReport::is_consistent

    fn UnitAuditReport::is_consistent(self : UnitAuditReport) -> Bool

    UnitAuditReport::row_count

    fn UnitAuditReport::row_count(self : UnitAuditReport) -> Int

    UnitAuditReport::rows_for

    fn UnitAuditReport::rows_for(self : UnitAuditReport, kind : UnitKind) -> Array[UnitAuditRow]

    UnitAuditReport::scale

    fn UnitAuditReport::scale(self : UnitAuditReport, kind : UnitKind) -> Double

    UnitAuditReport::to_json

    fn UnitAuditReport::to_json(self : UnitAuditReport) -> String

    UnitAuditReport::to_markdown

    fn UnitAuditReport::to_markdown(self : UnitAuditReport) -> String

    UnitAuditRow

    pub(all) struct UnitAuditRow {
    entity_id : Int
    kind : UnitKind
    name : String
    prefix : String?
    to_si : Double
    status : UnitAuditStatus
    message : String
    } derive(
    Debug
    )

    A normalized unit declaration from the model.

    UnitAuditStatus

    pub(all) enum UnitAuditStatus {
    Consistent
    Missing
    Duplicate
    Unknown
    Incompatible
    } derive(Eq,
    Debug
    )

    A warning emitted while checking a model's unit declarations.

    UnitConversion

    pub(all) struct UnitConversion {
    kind : UnitKind
    value : Double
    converted : Double
    from_unit : String
    to_unit : String
    factor : Double
    recognized : Bool
    } derive(
    Debug
    )

    One explicit conversion between two labels.

    UnitConversion::headline

    fn UnitConversion::headline(self : UnitConversion) -> String

    UnitConversion::is_compatible

    fn UnitConversion::is_compatible(self : UnitConversion) -> Bool

    UnitConversion::to_json

    fn UnitConversion::to_json(self : UnitConversion) -> String

    UnitKind

    pub(all) enum UnitKind {
    Length
    Area
    Volume
    Mass
    Time
    PlaneAngle
    UnknownUnit
    } derive(Eq,
    Debug
    )

    UnitScale

    pub(all) struct UnitScale {
    kind : UnitKind
    name : String
    prefix : String?
    to_si : Double
    } derive(
    Debug
    )

    UnitSemantic

    pub(all) struct UnitSemantic {
    label : String
    normalized : String
    kind : UnitKind
    to_si : Double
    recognized : Bool
    } derive(
    Debug
    )

    A unit label resolved to a dimensional kind and an SI scale.

    UnitSystem

    pub(all) struct UnitSystem {
    units : Array[UnitScale]
    } derive(
    Debug
    )

    UnitSystem::area_to_square_meters

    fn UnitSystem::area_to_square_meters(self : UnitSystem, value : Double) -> Double

    UnitSystem::find

    fn UnitSystem::find(self : UnitSystem, kind : UnitKind) -> UnitScale?

    UnitSystem::from_si

    fn UnitSystem::from_si(self : UnitSystem, kind : UnitKind, value : Double) -> Double

    UnitSystem::length_to_meters

    fn UnitSystem::length_to_meters(self : UnitSystem, value : Double) -> Double

    UnitSystem::meters_to_length

    fn UnitSystem::meters_to_length(self : UnitSystem, value : Double) -> Double

    UnitSystem::scale

    fn UnitSystem::scale(self : UnitSystem, kind : UnitKind) -> Double

    UnitSystem::to_si

    fn UnitSystem::to_si(self : UnitSystem, kind : UnitKind, value : Double) -> Double

    UnitSystem::volume_to_cubic_meters

    fn UnitSystem::volume_to_cubic_meters(self : UnitSystem, value : Double) -> Double

    ValidationReport

    pub(all) struct ValidationReport {
    diagnostics : Array[Diagnostic]
    error_count : Int
    warning_count : Int
    } derive(
    Debug
    )

    ValidationReport::diagnostic_codes

    fn ValidationReport::diagnostic_codes(self : ValidationReport) -> Array[String]

    ValidationReport::format

    fn ValidationReport::format(self : ValidationReport) -> String

    ValidationReport::is_valid

    fn ValidationReport::is_valid(self : ValidationReport) -> Bool

    Value

    pub(all) enum Value {
    Null
    Omitted
    Integer(Int64)
    Real(Double)
    String(String)
    Enumeration(String)
    Reference(Int)
    Binary(String)
    Typed(name~ : String, value~ : Value)
    List(Array[Value])
    } derive(Eq,
    Debug
    )

    A value in an IFC STEP entity argument list.

    Value::as_double

    fn Value::as_double(self : Value) -> Double?

    Value::as_int

    fn Value::as_int(self : Value) -> Int?

    Value::as_reference

    fn Value::as_reference(self : Value) -> Int?

    Value::as_string

    fn Value::as_string(self : Value) -> String?

    Value::is_null

    fn Value::is_null(self : Value) -> Bool

    Value::to_step

    fn Value::to_step(self : Value) -> String

    Value::to_step_lossless

    fn Value::to_step_lossless(self : Value) -> String

    ValueStats

    pub(all) struct ValueStats {
    node_count : Int
    maximum_depth : Int
    reference_count : Int
    string_count : Int
    number_count : Int
    list_count : Int
    omitted_count : Int
    } derive(
    Debug
    )

    Aggregate shape information for a nested STEP value.

    ValueStats::is_reasonable

    fn ValueStats::is_reasonable(self : ValueStats, maximum_depth : Int) -> Bool

    ValueStats::summary

    fn ValueStats::summary(self : ValueStats) -> String

    Vector3

    pub(all) struct Vector3 {
    x : Double
    y : Double
    z : Double
    } derive(
    Debug
    )

    A three-dimensional vector used by mesh and placement analysis.

    Vector3::add

    fn Vector3::add(self : Vector3, other : Vector3) -> Vector3

    Vector3::cross

    fn Vector3::cross(self : Vector3, other : Vector3) -> Vector3

    Vector3::dot

    fn Vector3::dot(self : Vector3, other : Vector3) -> Double

    Vector3::from_points

    fn Vector3::from_points(start : Point3, end : Point3) -> Vector3

    Vector3::is_zero

    fn Vector3::is_zero(self : Vector3) -> Bool

    Vector3::length

    fn Vector3::length(self : Vector3) -> Double

    Vector3::new

    fn Vector3::new(x~ : Double, y~ : Double, z~ : Double) -> Vector3

    Vector3::normalized

    fn Vector3::normalized(self : Vector3) -> Vector3

    Vector3::scale

    fn Vector3::scale(self : Vector3, factor : Double) -> Vector3

    Vector3::subtract

    fn Vector3::subtract(self : Vector3, other : Vector3) -> Vector3

    Vector3::to_point

    fn Vector3::to_point(self : Vector3) -> Point3

    WorkspaceSummary

    pub(all) struct WorkspaceSummary {
    schema : String
    source_length : Int
    entity_count : Int
    product_count : Int
    indexed_products : Int
    graph_nodes : Int
    graph_edges : Int
    rule_errors : Int
    rule_warnings : Int
    } derive(
    Debug
    )

    A compact health and capability view of a model workspace.

    WorkspaceSummary::headline

    fn WorkspaceSummary::headline(self : WorkspaceSummary) -> String

    WorkspaceSummary::is_healthy

    fn WorkspaceSummary::is_healthy(self : WorkspaceSummary) -> Bool

    WorkspaceSummary::to_json

    fn WorkspaceSummary::to_json(self : WorkspaceSummary) -> String

    acceptance_checklist

    fn acceptance_checklist(model : Model) -> Array[String]

    acceptance_checklist_markdown

    fn acceptance_checklist_markdown(model : Model) -> String

    all_property_sets

    fn all_property_sets(index : ModelIndex) -> Array[PropertySet] raise ParseError

    analyze_entity_graph

    fn analyze_entity_graph(graph : EntityGraph) -> GraphAnalysis

    analyze_model

    fn analyze_model(source : String, model : Model) -> ModelMetrics

    analyze_product_mesh

    fn analyze_product_mesh(index : ModelIndex, product : Product) -> MeshAnalysis raise ParseError

    apply_patch

    fn apply_patch(model : Model, patch : ModelPatch) -> Model raise EditError

    Apply a sequence of edits while preserving the model header and entity order.

    asset_manifest

    fn asset_manifest(model : Model, options? : AssetManifestOptions) -> AssetManifest raise ParseError

    Build paths and resource statistics without serializing model geometry twice.

    asset_manifest_checksums

    fn asset_manifest_checksums(manifest : AssetManifest) -> Map[String, Int]

    asset_manifest_entry_json

    fn asset_manifest_entry_json(manifest : AssetManifest, path : String) -> String?

    asset_manifest_is_complete

    fn asset_manifest_is_complete(manifest : AssetManifest) -> Bool

    asset_manifest_kind_histogram

    fn asset_manifest_kind_histogram(manifest : AssetManifest) -> Map[String, Int]

    asset_manifest_paths

    fn asset_manifest_paths(manifest : AssetManifest, kind : AssetKind) -> Array[String]

    asset_manifest_product_paths

    fn asset_manifest_product_paths(manifest : AssetManifest, product_id : Int) -> Array[String]

    asset_manifest_summary

    fn asset_manifest_summary(manifest : AssetManifest) -> Array[String]

    attribute

    fn attribute(entity : Entity, index : Int) -> EntityAttribute?

    attribute_text

    fn attribute_text(entity : Entity, index : Int) -> String?

    attributes

    fn attributes(entity : Entity) -> Array[EntityAttribute]

    benchmark_case

    fn benchmark_case(name : String, product_count : Int, iterations : Int) -> BenchmarkCase raise ParseError

    benchmark_cases

    fn benchmark_cases() -> Array[BenchmarkCase] raise ParseError

    benchmark_fixture

    fn benchmark_fixture(product_count : Int) -> String

    Deterministic STEP workload generator used by the local benchmark command. It creates real IFC wall products, placements, representations and extrusions instead of timing a synthetic string operation.

    benchmark_parse_case

    fn benchmark_parse_case(case : BenchmarkCase) -> BenchmarkResult raise ParseError

    benchmark_pipeline_case

    fn benchmark_pipeline_case(case : BenchmarkCase) -> BenchmarkResult raise ParseError

    benchmark_result_summary

    fn benchmark_result_summary(result : BenchmarkResult) -> String

    benchmark_smoke

    fn benchmark_smoke(source : String) -> BenchmarkResult raise ParseError

    benchmark_stream_case

    fn benchmark_stream_case(case : BenchmarkCase) -> BenchmarkResult

    bounds_of_geometry

    fn bounds_of_geometry(geometry : Geometry) -> BoundingBox

    bounds_of_mesh

    fn bounds_of_mesh(mesh : Mesh) -> BoundingBox

    box_distance

    fn box_distance(left : BoundingBox, right : BoundingBox) -> Double

    box_intersection

    fn box_intersection(left : BoundingBox, right : BoundingBox) -> BoundingBox

    box_relation

    fn box_relation(left : BoundingBox, right : BoundingBox, tolerance : Double) -> BoxRelation

    box_relation_text

    fn box_relation_text(relation : BoxRelation) -> String

    build_scene

    fn build_scene(model : Model) -> BimScene

    Build a renderer-neutral scene for WebBIM or other front ends.

    canonical_diff

    fn canonical_diff(left : Model, right : Model) -> Array[String]

    canonical_entity_ids

    fn canonical_entity_ids(model : Model) -> Array[Int]

    canonical_entity_names

    fn canonical_entity_names(model : Model) -> Array[String]

    canonical_model

    fn canonical_model(model : Model, deduplicate? : Bool) -> Model

    Produce a deterministic entity order while preserving all argument values.

    canonical_model_hash

    fn canonical_model_hash(model : Model) -> Int

    canonical_model_without_duplicates

    fn canonical_model_without_duplicates(model : Model) -> Model

    canonical_models_equal

    fn canonical_models_equal(left : Model, right : Model) -> Bool

    canonical_record_text

    fn canonical_record_text(entity : Entity) -> String

    canonical_records

    fn canonical_records(model : Model) -> Array[String]

    canonical_step_stats

    fn canonical_step_stats(source : String) -> CanonicalStepStats raise ParseError

    canonical_step_summary

    fn canonical_step_summary(source : String) -> Array[String] raise ParseError

    canonicalize_step

    fn canonicalize_step(source : String, deduplicate? : Bool) -> String raise ParseError

    capability_report

    fn capability_report(model : Model) -> CapabilityReport

    catalog

    fn catalog(source : String) -> ModelCatalog raise ParseError

    Construct a reusable catalog from an IFC STEP source.

    catalog_query

    fn catalog_query(model : Model, query : CatalogQuery) -> Array[Product] raise ParseError

    clash_pairs_between

    fn clash_pairs_between(spatial : SpatialIndex, left_ids : Array[Int], right_ids : Array[Int], options? : ClashOptions) -> Array[ClashPair]

    clash_report

    fn clash_report(model : Model, options? : ClashOptions) -> ClashReport raise ParseError

    Construct a spatial index and run a clash report in one call.

    clash_report_summary

    fn clash_report_summary(report : ClashReport) -> Array[String]

    clash_type_histogram

    fn clash_type_histogram(report : ClashReport) -> Map[String, Int]

    classification_codes

    fn classification_codes(index : ModelIndex, product : Product) -> Array[String]

    classification_name

    fn classification_name(reference : ClassificationReference) -> String

    classification_references

    fn classification_references(index : ModelIndex, product : Product) -> Array[ClassificationReference]

    Decode classification associations for one product.

    clearances_below

    fn clearances_below(spatial : SpatialIndex, clearance : Double, options? : ClashOptions) -> Array[ClashPair]

    compare_revision

    fn compare_revision(before : Model, after : Model) -> RevisionReport

    compare_step

    fn compare_step(left : String, right : String) -> ModelDiff raise ParseError

    convert_unit_value

    fn convert_unit_value(value : Double, from_unit : String, to_unit : String) -> UnitConversion

    coordinate_frames

    fn coordinate_frames(model : Model) -> Array[CoordinateFrame]

    coordinate_report

    fn coordinate_report(model : Model) -> CoordinateReport raise ParseError

    Collect placement frames and world bounds for coordinate-aware consumers.

    coordinate_transform_for

    fn coordinate_transform_for(model : Model, placement_id : Int) -> Transform3?

    curve_bounds

    fn curve_bounds(index : ModelIndex, id : Int) -> BoundingBox

    curve_length

    fn curve_length(index : ModelIndex, id : Int, closed? : Bool) -> Double

    curve_points

    fn curve_points(index : ModelIndex, id : Int) -> Array[Point3]

    curves_in_entity

    fn curves_in_entity(index : ModelIndex, entity : Entity) -> Array[Int]

    default_asset_manifest_options

    fn default_asset_manifest_options() -> AssetManifestOptions

    default_clash_options

    fn default_clash_options() -> ClashOptions

    Defaults for coordination checks: report volumetric intersections but not merely touching faces.

    default_export_options

    fn default_export_options() -> ExportOptions

    default_mesh_pipeline_options

    fn default_mesh_pipeline_options() -> MeshPipelineOptions

    default_quality_policy

    fn default_quality_policy() -> QualityPolicy

    default_scene_camera

    fn default_scene_camera() -> SceneCamera

    Camera defaults are intentionally conservative for building-scale models.

    default_scene_query_options

    fn default_scene_query_options() -> SceneQueryOptions

    default_schema_profile

    fn default_schema_profile() -> SchemaProfile

    default_section_options

    fn default_section_options() -> SectionOptions

    default_spatial_index_options

    fn default_spatial_index_options() -> SpatialIndexOptions

    Return conservative construction defaults for a building-scale model.

    default_stream_filter

    fn default_stream_filter() -> StreamFilter

    default_takeoff_options

    fn default_takeoff_options() -> TakeoffOptions

    delivery_change_name

    fn delivery_change_name(change : DeliveryChange) -> String

    delivery_model_rules

    fn delivery_model_rules() -> Array[ModelRule]

    delivery_rule_report

    fn delivery_rule_report(model : Model) -> RuleReport raise ParseError

    dependency_layers

    fn dependency_layers(index : ModelIndex, roots : Array[Int]) -> Array[Array[Int]]

    detect_clashes

    fn detect_clashes(spatial : SpatialIndex, options? : ClashOptions) -> ClashReport

    Detect product-level clashes using the spatial grid as the broad phase.

    diff_models

    fn diff_models(left : Model, right : Model) -> ModelDiff

    duplicate_entity_ids

    fn duplicate_entity_ids(model : Model) -> Array[Int]

    duplicate_model_guids

    fn duplicate_model_guids(model : Model) -> Array[String]

    entities_referencing

    fn entities_referencing(index : ModelIndex, id : Int) -> Array[Entity]

    entity_family

    fn entity_family(entity : Entity) -> String

    entity_graph

    fn entity_graph(model : Model) -> EntityGraph

    entity_ids_in_range

    fn entity_ids_in_range(model : Model, first : Int, last : Int) -> Array[Int]

    entity_names_case_insensitive

    fn entity_names_case_insensitive(model : Model, name : String) -> Array[String]

    entity_range

    fn entity_range(model : Model) -> EntityRange

    entity_references

    fn entity_references(entity : Entity) -> Array[Int]

    entity_shape_signature

    fn entity_shape_signature(entity : Entity) -> String

    entity_to_json

    fn entity_to_json(entity : Entity) -> String

    entity_value

    fn entity_value(entity : Entity, index : Int) -> Value?

    estimated_volume

    fn estimated_volume(geometry : Geometry) -> Double?

    evaluate_rules

    fn evaluate_rules(model : Model, rules : Array[ModelRule]) -> RuleReport raise ParseError

    Apply custom rules plus model-wide integrity rules without changing the model.

    execute_query_plan

    fn execute_query_plan(model : Model, plan : ProductQueryPlan) -> ProductQueryPage raise ParseError

    Execute a reusable product query plan against a parsed model.

    export_bundle

    fn export_bundle(source : String) -> ExportBundle raise ParseError

    export_format_from_name

    fn export_format_from_name(name : String) -> ExportFormat?

    export_model_asset

    fn export_model_asset(model : Model, options : ExportOptions) -> ExportedAsset raise ParseError

    export_preview

    fn export_preview(asset : ExportedAsset, maximum_lines : Int) -> String

    export_step_asset

    fn export_step_asset(source : String, options : ExportOptions) -> ExportedAsset raise ParseError

    export_supported_formats

    fn export_supported_formats() -> Array[String]

    extract_products

    fn extract_products(index : ModelIndex) -> Array[Product]

    Extract common IFC products while preserving the original generic entities.

    extract_property_set

    fn extract_property_set(index : ModelIndex, id : Int) -> PropertySet raise ParseError

    Decode one IfcPropertySet and its IfcPropertySingleValue members.

    family_histogram

    fn family_histogram(index : ModelIndex) -> Map[String, Int]

    flatten_spatial

    fn flatten_spatial(root : SpatialNode) -> Array[SpatialNode]

    formula_quantity

    fn formula_quantity(model : Model, product_id : Int, formula : QuantityFormula) -> QuantityValue? raise ParseError

    formula_takeoff

    fn formula_takeoff(model : Model, formulas : Array[QuantityFormula]) -> FormulaTakeoff raise ParseError

    Evaluate application-specific quantity formulas against IFC properties.

    formula_takeoff_for_kind

    fn formula_takeoff_for_kind(model : Model, kind : ProductKind, formulas : Array[QuantityFormula]) -> FormulaTakeoff raise ParseError

    geometries_for_product

    fn geometries_for_product(index : ModelIndex, product : Product) -> Array[Geometry]

    geometry

    fn geometry(index : ModelIndex, id : Int) -> Geometry raise ParseError

    geometry_entities

    fn geometry_entities(index : ModelIndex) -> Array[Entity]

    geometry_for_product

    fn geometry_for_product(index : ModelIndex, product : Product) -> Geometry?

    geometry_inventory

    fn geometry_inventory(model : Model) -> GeometryInventory raise ParseError

    Build a geometry inventory with one row per product.

    geometry_inventory_summary

    fn geometry_inventory_summary(inventory : GeometryInventory) -> Array[String]

    geometry_kind_counts

    fn geometry_kind_counts(index : ModelIndex) -> Map[String, Int]

    Count geometry adapters by their stable output kind name.

    geometry_report_for_product

    fn geometry_report_for_product(model : Model, product_id : Int) -> ProductGeometryReport? raise ParseError

    geometry_to_json

    fn geometry_to_json(geometry : Geometry) -> String

    graph_analysis

    fn graph_analysis(model : Model) -> GraphAnalysis

    graph_component_for

    fn graph_component_for(model : Model, id : Int) -> GraphComponent?

    graph_cycles

    fn graph_cycles(model : Model) -> Array[Array[Int]]

    graph_degrees

    fn graph_degrees(model : Model) -> Array[GraphDegree]

    graph_dependents

    fn graph_dependents(model : Model, targets : Array[Int]) -> Array[Int]

    graph_path

    fn graph_path(model : Model, start : Int, goal : Int) -> GraphPath?

    graph_reachable

    fn graph_reachable(model : Model, roots : Array[Int]) -> Array[Int]

    graph_stats

    fn graph_stats(index : ModelIndex) -> GraphStats

    graph_topological_order

    fn graph_topological_order(model : Model) -> Array[Int]

    guid_fingerprint_map

    fn guid_fingerprint_map(model : Model) -> Map[String, Int]

    guid_quality_score

    fn guid_quality_score(model : Model) -> Int

    guid_quality_summary

    fn guid_quality_summary(model : Model) -> Array[String]

    ifc_guid_alphabet

    fn ifc_guid_alphabet() -> String

    ifc_guid_fingerprint

    fn ifc_guid_fingerprint(value : String) -> String

    ifc_guid_from_product

    fn ifc_guid_from_product(model : Model, product_id : Int) -> GuidReport?

    ifc_guid_is_valid

    fn ifc_guid_is_valid(value : String) -> Bool

    inspect_step

    fn inspect_step(source : String) -> Inspection raise ParseError

    Parse once and prepare the high-level data used by inspectors and CI tools.

    invalid_model_guids

    fn invalid_model_guids(model : Model) -> Array[GuidReport]

    inverse_transform

    fn inverse_transform(transform : Transform3) -> Transform3?

    Invert a general affine transform, including non-uniform scaling.

    is_geometry_entity

    fn is_geometry_entity(entity : Entity) -> Bool

    is_property_entity

    fn is_property_entity(entity : Entity) -> Bool

    is_relationship

    fn is_relationship(entity : Entity) -> Bool

    limit_mesh_triangles

    fn limit_mesh_triangles(mesh : Mesh, maximum : Int) -> Mesh

    local_to_world

    fn local_to_world(transform : Transform3, point : Point3) -> Point3

    manifest_product_names

    fn manifest_product_names(manifest : RenderManifest) -> Array[String]

    material_assignments

    fn material_assignments(index : ModelIndex, product : Product) -> Array[MaterialAssignment]

    Decode material associations for one product.

    material_inventory

    fn material_inventory(model : Model) -> MaterialInventory

    Build an inventory used by material schedules and specification checks.

    material_layers_for_product

    fn material_layers_for_product(index : ModelIndex, product : Product) -> Array[MaterialLayer]

    material_report_lines

    fn material_report_lines(inventory : MaterialInventory) -> Array[String]

    material_thickness

    fn material_thickness(index : ModelIndex, product : Product) -> Double

    materials_for_product

    fn materials_for_product(index : ModelIndex, product : Product) -> Array[String]

    merge_bounds

    fn merge_bounds(left : BoundingBox, right : BoundingBox) -> BoundingBox

    merge_meshes

    fn merge_meshes(meshes : Array[Mesh]) -> Mesh

    mesh_area

    fn mesh_area(mesh : Mesh) -> Double

    mesh_area_by_normal

    fn mesh_area_by_normal(mesh : Mesh, axis : Vector3, tolerance? : Double) -> Double

    mesh_aspect_ratio

    fn mesh_aspect_ratio(mesh : Mesh) -> Double

    mesh_bounds_json

    fn mesh_bounds_json(mesh : Mesh) -> String

    mesh_centered

    fn mesh_centered(mesh : Mesh) -> Mesh

    mesh_centroid

    fn mesh_centroid(mesh : Mesh) -> Point3

    mesh_compact

    fn mesh_compact(mesh : Mesh) -> Mesh

    mesh_diagonal

    fn mesh_diagonal(mesh : Mesh) -> Double

    mesh_edge_length_statistics

    fn mesh_edge_length_statistics(mesh : Mesh) -> (Double, Double, Double)

    mesh_flip_winding

    fn mesh_flip_winding(mesh : Mesh) -> Mesh

    mesh_for_geometry

    fn mesh_for_geometry(index : ModelIndex, id : Int) -> Mesh raise ParseError

    mesh_for_geometry_advanced

    fn mesh_for_geometry_advanced(index : ModelIndex, geometry : Geometry) -> Mesh raise ParseError

    Build an explicit mesh for the currently supported solid summaries.

    mesh_for_product_advanced

    fn mesh_for_product_advanced(index : ModelIndex, product : Product) -> Mesh raise ParseError

    mesh_for_product_pipeline

    fn mesh_for_product_pipeline(index : ModelIndex, product : Product, options? : MeshPipelineOptions) -> MeshPipelineResult raise ParseError

    mesh_horizontal_area

    fn mesh_horizontal_area(mesh : Mesh) -> Double

    mesh_is_renderable

    fn mesh_is_renderable(mesh : Mesh) -> Bool

    mesh_lod

    fn mesh_lod(mesh : Mesh, target_triangles : Int) -> Mesh

    Generate a coarse level of detail by welding vertices into a deterministic grid.

    mesh_lod_result

    fn mesh_lod_result(mesh : Mesh, target_triangles : Int, options? : MeshPipelineOptions) -> MeshPipelineResult

    mesh_normal_histogram

    fn mesh_normal_histogram(mesh : Mesh, bins : Int) -> Map[String, Int]

    mesh_normals

    fn mesh_normals(mesh : Mesh) -> Array[Vector3]

    mesh_pipeline

    fn mesh_pipeline(mesh : Mesh, options? : MeshPipelineOptions) -> MeshPipelineResult

    mesh_pipeline_summary

    fn mesh_pipeline_summary(result : MeshPipelineResult) -> Array[String]

    mesh_point_count

    fn mesh_point_count(mesh : Mesh) -> Int

    mesh_quality_histogram

    fn mesh_quality_histogram(mesh : Mesh, bins : Int) -> Map[Int, Int]

    mesh_stats

    fn mesh_stats(mesh : Mesh) -> MeshStats

    Calculate topology quality and geometric measurements for a mesh.

    mesh_to_json_stats

    fn mesh_to_json_stats(analysis : MeshAnalysis) -> String

    mesh_transform_scale

    fn mesh_transform_scale(mesh : Mesh, scale : Double) -> Mesh

    mesh_triangle_count

    fn mesh_triangle_count(mesh : Mesh) -> Int

    mesh_triangle_quality

    fn mesh_triangle_quality(mesh : Mesh, triangle_index : Int) -> Double?

    mesh_unique_triangles

    fn mesh_unique_triangles(mesh : Mesh) -> Mesh

    mesh_validation

    fn mesh_validation(mesh : Mesh) -> MeshValidation

    mesh_vertical_area

    fn mesh_vertical_area(mesh : Mesh) -> Double

    mesh_volume

    fn mesh_volume(mesh : Mesh) -> Double

    mesh_world_centroid

    fn mesh_world_centroid(index : ModelIndex, product : Product) -> Point3 raise ParseError

    metrics_from_step

    fn metrics_from_step(source : String) -> ModelMetrics raise ParseError

    minimal_fixture

    fn minimal_fixture() -> String

    A compact, valid IFC4 fixture used by examples and regression tests.

    model_bounds

    fn model_bounds(index : ModelIndex, products : Array[Product]) -> BoundingBox

    model_complexity_score

    fn model_complexity_score(model : Model) -> Int

    A compact, deterministic quality view for CI logs and acceptance reports.

    model_delivery_asset_breakdown

    fn model_delivery_asset_breakdown(report : ModelDeliveryReport) -> Array[String]

    model_delivery_gate

    fn model_delivery_gate(source : String) -> Bool raise ParseError

    model_delivery_gate_with_policy

    fn model_delivery_gate_with_policy(source : String, policy : QualityPolicy, options : AssetManifestOptions) -> Bool raise ParseError

    model_delivery_report

    fn model_delivery_report(source : String) -> ModelDeliveryReport raise ParseError

    Build the profile, quality score, cache manifest and canonical STEP statistics together.

    model_delivery_report_with_policy

    fn model_delivery_report_with_policy(source : String, policy : QualityPolicy, options : AssetManifestOptions) -> ModelDeliveryReport raise ParseError

    model_delivery_summary

    fn model_delivery_summary(source : String) -> Array[String] raise ParseError

    model_geometry_coverage

    fn model_geometry_coverage(model : Model) -> Double

    model_guid_reports

    fn model_guid_reports(model : Model) -> Array[GuidReport]

    model_index_json

    fn model_index_json(model : Model) -> String

    model_orphan_reference_ids

    fn model_orphan_reference_ids(model : Model) -> Array[Int]

    model_profile

    fn model_profile(model : Model) -> ModelProfile

    Build a reusable semantic profile without decoding every geometry mesh.

    model_profile_family_histogram

    fn model_profile_family_histogram(model : Model) -> Map[String, Int]

    model_profile_summary

    fn model_profile_summary(model : Model) -> Array[String]

    model_profile_type_histogram

    fn model_profile_type_histogram(model : Model) -> Map[String, Int]

    model_property_coverage

    fn model_property_coverage(model : Model) -> Double

    model_quality_audit

    fn model_quality_audit(model : Model, policy? : QualityPolicy) -> ModelQualityReport raise ParseError

    Run the complete quality audit with deterministic finding order.

    model_quality_errors

    fn model_quality_errors(model : Model) -> Array[QualityFinding] raise ParseError

    model_quality_grade

    fn model_quality_grade(model : Model) -> String

    model_quality_json

    fn model_quality_json(model : Model) -> String

    model_quality_lines

    fn model_quality_lines(model : Model) -> Array[String]

    model_quality_report

    fn model_quality_report(model : Model) -> String

    model_quality_summary

    fn model_quality_summary(model : Model) -> Array[String] raise ParseError

    model_quality_warnings

    fn model_quality_warnings(model : Model) -> Array[QualityFinding] raise ParseError

    model_reference_targets

    fn model_reference_targets(model : Model) -> Array[Int]

    model_shape_signatures

    fn model_shape_signatures(model : Model) -> Array[String]

    model_slice

    fn model_slice(model : Model, root_ids : Array[Int], include_dependencies? : Bool) -> ModelSlice

    Create a dependency-closed model slice rooted at raw entity IDs.

    model_slice_for_box

    fn model_slice_for_box(model : Model, bounds : BoundingBox, include_dependencies? : Bool) -> ModelSlice raise ParseError

    model_slice_for_products

    fn model_slice_for_products(model : Model, product_ids : Array[Int], include_dependencies? : Bool) -> ModelSlice

    model_slice_for_query

    fn model_slice_for_query(model : Model, plan : ProductQueryPlan, include_dependencies? : Bool) -> ModelSlice raise ParseError

    model_snapshot

    fn model_snapshot(model : Model) -> ModelSnapshot

    model_spatial_coverage

    fn model_spatial_coverage(model : Model) -> Bool

    model_summary_json

    fn model_summary_json(model : Model) -> String raise ParseError

    model_to_json

    fn model_to_json(model : Model) -> String raise ParseError

    model_value_stats

    fn model_value_stats(model : Model) -> ValueStats

    model_with_entity

    fn model_with_entity(model : Model, entity : Entity) -> Model raise EditError

    model_without_entity

    fn model_without_entity(model : Model, id : Int) -> Model raise EditError

    model_world_bounds

    fn model_world_bounds(model : Model) -> BoundingBox raise ParseError

    normalize_ifc_guid

    fn normalize_ifc_guid(value : String) -> String

    normalize_quantity

    fn normalize_quantity(product_id : Int, quantity : QuantityValue, target_unit~ : String?) -> NormalizedQuantity

    normalize_step_newlines

    fn normalize_step_newlines(source : String) -> String

    normalize_takeoff

    fn normalize_takeoff(report : TakeoffReport, target_length_unit? : String, target_area_unit? : String, target_volume_unit? : String) -> Array[NormalizedQuantity]

    normalized_quantities_for_product

    fn normalized_quantities_for_product(rows : Array[NormalizedQuantity], product_id : Int) -> Array[NormalizedQuantity]

    normalized_quantities_to_csv

    fn normalized_quantities_to_csv(rows : Array[NormalizedQuantity]) -> String

    normalized_quantities_to_json

    fn normalized_quantities_to_json(rows : Array[NormalizedQuantity]) -> String

    normalized_quantities_total

    fn normalized_quantities_total(rows : Array[NormalizedQuantity], kind : QuantityKind) -> Double

    normalized_quantities_unrecognized

    fn normalized_quantities_unrecognized(rows : Array[NormalizedQuantity]) -> Array[NormalizedQuantity]

    normalized_quantity_summary

    fn normalized_quantity_summary(rows : Array[NormalizedQuantity]) -> Array[String]

    normalized_quantity_unit_histogram

    fn normalized_quantity_unit_histogram(rows : Array[NormalizedQuantity]) -> Map[String, Int]

    parse

    fn parse(source : String) -> Model raise ParseError

    Parse an IFC2x3 or IFC4 ISO 10303-21 physical file.

    parse_many

    fn parse_many(source : String) -> Array[Model] raise ParseError

    parse_step_record

    fn parse_step_record(record : StepRecord) -> Entity raise ParseError

    Parse one scanned record through the normal lossless parser.

    patch_between

    fn patch_between(left : Model, right : Model) -> ModelPatch raise EditError

    Convert a structural diff into a replayable patch.

    patch_descriptions

    fn patch_descriptions(patch : ModelPatch) -> Array[String]

    patch_round_trip

    fn patch_round_trip(before : Model, after : Model) -> Bool raise EditError

    patch_summary

    fn patch_summary(patch : ModelPatch) -> String

    placement_transform

    fn placement_transform(index : ModelIndex, id : Int) -> Transform3?

    polyline_length

    fn polyline_length(points : Array[Point3], closed? : Bool) -> Double

    process_mesh

    fn process_mesh(mesh : Mesh, options? : MeshPipelineOptions) -> MeshPipelineResult

    Apply deterministic cleanup, welding, orientation and optional LOD limits.

    product_by_id

    fn product_by_id(products : Array[Product], id : Int) -> Product?

    product_json_by_id

    fn product_json_by_id(model : Model, id : Int) -> String?

    product_kind_counts

    fn product_kind_counts(products : Array[Product]) -> Map[String, Int]

    Count products by their normalized IFC family name.

    product_to_json

    fn product_to_json(product : Product) -> String

    product_transform

    fn product_transform(index : ModelIndex, product : Product) -> Transform3

    products_in_container

    fn products_in_container(index : ModelIndex, id : Int) -> Array[Product]

    products_json_named

    fn products_json_named(model : Model, fragment : String) -> String

    products_named

    fn products_named(index : ModelIndex, fragment : String) -> Array[Product]

    products_of_kind

    fn products_of_kind(products : Array[Product], kind : ProductKind) -> Array[Product]

    products_to_csv

    fn products_to_csv(products : Array[Product]) -> String

    property_coverage_report

    fn property_coverage_report(model : Model, names : Array[String]) -> Array[String] raise ParseError

    property_name_counts

    fn property_name_counts(property_sets : Array[PropertySet]) -> Map[String, Int]

    property_named

    fn property_named(property_sets : Array[PropertySet], name : String) -> Property?

    property_names

    fn property_names(property_set : PropertySet) -> Array[String]

    property_number

    fn property_number(property_sets : Array[PropertySet], name : String) -> Double?

    property_set_to_json

    fn property_set_to_json(property_set : PropertySet) -> String

    property_sets_for_product

    fn property_sets_for_product(index : ModelIndex, product : Product) -> Array[PropertySet] raise ParseError

    property_sets_to_csv

    fn property_sets_to_csv(property_sets : Array[PropertySet]) -> String

    property_string

    fn property_string(property_sets : Array[PropertySet], name : String) -> String?

    property_table

    fn property_table(model : Model, names? : Array[String]) -> PropertyTable raise ParseError

    Flatten selected IFC properties into a deterministic table.

    property_table_for_kind

    fn property_table_for_kind(model : Model, kind : ProductKind, names? : Array[String]) -> PropertyTable raise ParseError

    property_table_for_products

    fn property_table_for_products(model : Model, products : Array[Product], names? : Array[String]) -> PropertyTable raise ParseError

    property_to_json

    fn property_to_json(property : Property) -> String

    property_values

    fn property_values(model : Model, name : String) -> Map[String, Int] raise ParseError

    quantity_kind_dimension

    fn quantity_kind_dimension(kind : QuantityKind) -> UnitKind

    quantity_kind_name

    fn quantity_kind_name(kind : QuantityKind) -> String

    quantity_kind_unit

    fn quantity_kind_unit(kind : QuantityKind) -> String

    quantity_note

    fn quantity_note(product_id : Int, kind : QuantityKind, message : String, severity? : DiagnosticSeverity) -> QuantityNote

    quantity_takeoff

    fn quantity_takeoff(model : Model, options? : TakeoffOptions) -> TakeoffReport raise ParseError

    Calculate geometry and property quantities for all products in a model.

    quantity_value_in_si

    fn quantity_value_in_si(units : UnitSystem, value : QuantityValue) -> Double

    query_by_name

    fn query_by_name(model : Model, name : String) -> Array[Product] raise ParseError

    query_geometry

    fn query_geometry(model : Model, kind : GeometryKind) -> Array[Product] raise ParseError

    query_kind

    fn query_kind(model : Model, kind : ProductKind) -> Array[Product] raise ParseError

    query_plan

    fn query_plan(model : Model) -> ProductQueryPlan

    query_plan_report

    fn query_plan_report(model : Model, plan : ProductQueryPlan) -> Array[String] raise ParseError

    query_products

    fn query_products(index : ModelIndex, query : ProductQuery) -> Array[Product]

    query_property

    fn query_property(model : Model, name : String, value : String) -> Array[Product] raise ParseError

    reachable_entities

    fn reachable_entities(index : ModelIndex, roots : Array[Int]) -> Array[Entity]

    Follow generic STEP references without imposing an IFC schema.

    record_length_histogram

    fn record_length_histogram(source : String) -> Map[Int, Int]

    records_in_range

    fn records_in_range(source : String, start_offset : Int, end_offset : Int) -> Array[StepRecord]

    records_named

    fn records_named(source : String, name : String) -> Array[StepRecord]

    records_named_safe

    fn records_named_safe(source : String, name : String) -> Array[StepRecord]

    references

    fn references(value : Value) -> Array[Int]

    relation_ancestors

    fn relation_ancestors(model : Model, id : Int) -> Array[Int]

    relation_descendants

    fn relation_descendants(model : Model, id : Int) -> Array[Int]

    relation_histogram

    fn relation_histogram(model : Model) -> Map[String, Int]

    relation_index

    fn relation_index(model : Model) -> RelationIndex

    fn relation_links_for_product(model : Model, product_id : Int) -> Array[RelationLink]

    remove_degenerate_triangles

    fn remove_degenerate_triangles(mesh : Mesh, tolerance : Double) -> Mesh

    render_manifest

    fn render_manifest(model : Model) -> RenderManifest raise ParseError

    resample_polyline

    fn resample_polyline(points : Array[Point3], maximum_segment : Double) -> Array[Point3]

    reverse_patch

    fn reverse_patch(before : Model, patch : ModelPatch) -> ModelPatch raise EditError

    Build a patch that reverts patch against the original model.

    revision_affected_entity_ids

    fn revision_affected_entity_ids(before : Model, after : Model) -> Array[Int]

    revision_affected_products

    fn revision_affected_products(before : Model, after : Model) -> Array[Int]

    revision_changed_entity_ids

    fn revision_changed_entity_ids(before : Model, after : Model) -> Array[Int]

    revision_delivery

    fn revision_delivery(before : Model, after : Model, options? : AssetManifestOptions) -> RevisionDelivery raise ParseError

    Compare two generated manifests and classify every cache path.

    revision_delivery_invalidated_paths

    fn revision_delivery_invalidated_paths(before : Model, after : Model) -> Array[String] raise ParseError

    revision_delivery_paths

    fn revision_delivery_paths(before : Model, after : Model) -> Array[String] raise ParseError

    revision_delivery_summary

    fn revision_delivery_summary(before : Model, after : Model) -> Array[String] raise ParseError

    revision_impact

    fn revision_impact(before : Model, after : Model) -> RevisionImpact

    Calculate dependency-aware impact for a model revision.

    revision_report

    fn revision_report(before : Model, after : Model) -> RevisionReport

    Combine an entity diff with product-level and spatial dependency impact.

    revision_risk_level

    fn revision_risk_level(before : Model, after : Model) -> String

    round_trip

    fn round_trip(source : String) -> Model raise ParseError

    rule_names

    fn rule_names(rules : Array[ModelRule]) -> Array[String]

    rule_report

    fn rule_report(model : Model, rules : Array[ModelRule]) -> RuleReport raise ParseError

    rule_violation_codes

    fn rule_violation_codes(report : RuleReport) -> Map[String, Int]

    run_benchmark_report

    fn run_benchmark_report() -> BenchmarkReport raise ParseError

    scan_step_records

    fn scan_step_records(source : String) -> Array[StepRecord]

    Scan entity records without constructing Value trees.

    scene_partition

    fn scene_partition(model : Model, chunk_size? : Int) -> ScenePartition raise ParseError

    Partition the indexed product space into bounded render chunks.

    scene_partition_bounds

    fn scene_partition_bounds(partition : ScenePartition, indices : Array[Int]) -> BoundingBox

    scene_partition_for_products

    fn scene_partition_for_products(spatial : SpatialIndex, product_ids : Array[Int], chunk_size? : Int) -> ScenePartition

    scene_partition_product_chunk_counts

    fn scene_partition_product_chunk_counts(partition : ScenePartition) -> Map[Int, Int]

    scene_pick

    fn scene_pick(index : SpatialIndex, origin : Point3, direction : Vector3) -> ScenePick

    Pick the nearest indexed product along a normalized or non-normalized ray.

    scene_selection

    fn scene_selection(model : Model, camera : SceneCamera, options? : SceneQueryOptions) -> SceneSelection raise ParseError

    scene_selection_distance_range

    fn scene_selection_distance_range(selection : SceneSelection) -> (Double, Double)

    scene_selection_ids_json

    fn scene_selection_ids_json(selection : SceneSelection) -> String

    scene_selection_lod_json

    fn scene_selection_lod_json(selection : SceneSelection) -> String

    scene_selection_type_histogram

    fn scene_selection_type_histogram(selection : SceneSelection) -> Map[String, Int]

    schedule_area_by_name

    fn schedule_area_by_name(schedule : SpatialSchedule, name : String) -> Double

    schedule_product_count_by_type

    fn schedule_product_count_by_type(schedule : SpatialSchedule, ifc_type : String) -> Int

    schema_compare_profiles

    fn schema_compare_profiles(left : SchemaProfile, right : SchemaProfile) -> Array[String]

    schema_entity_is_known

    fn schema_entity_is_known(profile : SchemaProfile, entity_name : String) -> Bool

    schema_family_histogram

    fn schema_family_histogram(profile : SchemaProfile) -> Map[String, Int]

    schema_issues_by_code

    fn schema_issues_by_code(report : SchemaReport, code : String) -> Array[SchemaIssue]

    schema_profile

    fn schema_profile(version : SchemaVersion) -> SchemaProfile

    schema_profile_summary

    fn schema_profile_summary(profile : SchemaProfile) -> String

    schema_required_reference_count

    fn schema_required_reference_count(profile : SchemaProfile) -> Int

    schema_rule_names

    fn schema_rule_names(profile : SchemaProfile) -> Array[String]

    schema_validate_entity

    fn schema_validate_entity(profile : SchemaProfile, model : Model, entity_id : Int) -> Array[SchemaIssue]

    schema_version

    fn schema_version(model : Model) -> SchemaVersion

    fn search(model : Model, field : SearchField, term : String) -> Array[SearchHit] raise ParseError

    search_entities

    fn search_entities(index : ModelIndex, term : String) -> Array[SearchHit]

    search_first_product

    fn search_first_product(index : ModelIndex, field : SearchField, term : String) -> Product?

    search_products

    fn search_products(index : ModelIndex, field : SearchField, term : String) -> Array[SearchHit]

    search_properties

    fn search_properties(index : ModelIndex, term : String) -> Array[SearchHit] raise ParseError

    section_mesh

    fn section_mesh(product_id : Int, mesh : Mesh, plane : SectionPlane, options? : SectionOptions) -> Array[SectionSegment]

    Intersect a standalone mesh, retaining the source triangle index.

    section_model

    fn section_model(model : Model, plane : SectionPlane, options? : SectionOptions) -> SectionResult raise ParseError

    Extract a section across all products with supported mesh geometry.

    section_result_bounds_for

    fn section_result_bounds_for(result : SectionResult, product_id : Int) -> BoundingBox

    section_result_long_segments

    fn section_result_long_segments(result : SectionResult, minimum_length : Double) -> Array[SectionSegment]

    section_result_product_histogram

    fn section_result_product_histogram(result : SectionResult) -> Map[Int, Int]

    section_result_summary

    fn section_result_summary(result : SectionResult) -> Array[String]

    serialize

    fn serialize(model : Model) -> String

    slice_changed_entities

    fn slice_changed_entities(before : Model, after : Model) -> ModelSlice

    snapshot_diff

    fn snapshot_diff(left : ModelSnapshot, right : ModelSnapshot) -> Array[String]

    source_boundary_diagnostics

    fn source_boundary_diagnostics(source : String) -> Array[String]

    source_entity_names

    fn source_entity_names(source : String) -> Array[String]

    source_health

    fn source_health(source : String) -> SourceHealth

    source_health_grade

    fn source_health_grade(source : String) -> String

    source_health_score

    fn source_health_score(source : String) -> Int

    source_is_safe_for_full_parse

    fn source_is_safe_for_full_parse(source : String, maximum_chars : Int, maximum_records : Int) -> Bool

    source_line

    fn source_line(source : String, line : Int) -> SourceWindow?

    source_line_count

    fn source_line_count(source : String) -> Int

    source_range

    fn source_range(source : String) -> EntityRange

    source_record_at

    fn source_record_at(source : String, index : Int) -> StepRecord?

    source_records_cover_document

    fn source_records_cover_document(source : String) -> Bool

    source_reference_density

    fn source_reference_density(source : String) -> Double

    source_window

    fn source_window(source : String, start : Int, end : Int) -> SourceWindow

    source_window_for_record

    fn source_window_for_record(source : String, record : StepRecord) -> SourceWindow

    space_adjacency

    fn space_adjacency(model : Model) -> SpaceAdjacencyGraph raise ParseError

    space_neighbors

    fn space_neighbors(model : Model, space_id : Int) -> Array[Int] raise ParseError

    space_path

    fn space_path(model : Model, start : Int, goal : Int) -> Array[Int]? raise ParseError

    spatial_depth

    fn spatial_depth(root : SpatialNode) -> Int

    spatial_depth_histogram

    fn spatial_depth_histogram(root : SpatialNode) -> Map[Int, Int]

    spatial_duplicate_product_ids

    fn spatial_duplicate_product_ids(root : SpatialNode) -> Array[Int]

    spatial_find

    fn spatial_find(root : SpatialNode, id : Int) -> SpatialNode?

    spatial_find_named

    fn spatial_find_named(root : SpatialNode, fragment : String) -> Array[SpatialNode]

    spatial_find_product

    fn spatial_find_product(root : SpatialNode, product_id : Int) -> SpatialNode?

    spatial_index

    fn spatial_index(model : Model, options? : SpatialIndexOptions) -> SpatialIndex raise ParseError

    spatial_leaf_nodes

    fn spatial_leaf_nodes(root : SpatialNode) -> Array[SpatialNode]

    spatial_metrics

    fn spatial_metrics(index : ModelIndex, root : SpatialNode) -> SpatialMetrics

    spatial_model_metrics

    fn spatial_model_metrics(model : Model) -> SpatialMetrics

    spatial_named_nodes

    fn spatial_named_nodes(root : SpatialNode, fragment : String) -> Array[SpatialNode]

    spatial_nodes_by_type

    fn spatial_nodes_by_type(root : SpatialNode, ifc_type : String) -> Array[SpatialNode]

    spatial_path

    fn spatial_path(root : SpatialNode, target : Int) -> Array[Int]?

    spatial_product_containers

    fn spatial_product_containers(index : ModelIndex) -> Map[Int, Int]

    spatial_product_ids

    fn spatial_product_ids(root : SpatialNode) -> Array[Int]

    spatial_products_named

    fn spatial_products_named(root : SpatialNode, fragment : String) -> Array[Int]

    spatial_report

    fn spatial_report(index : ModelIndex, root : SpatialNode) -> String

    spatial_report_all

    fn spatial_report_all(model : Model) -> Array[String]

    spatial_root

    fn spatial_root(index : ModelIndex) -> SpatialNode?

    spatial_root_summary

    fn spatial_root_summary(model : Model) -> String

    spatial_roots

    fn spatial_roots(index : ModelIndex) -> Array[SpatialNode]

    spatial_schedule

    fn spatial_schedule(model : Model) -> SpatialSchedule raise ParseError

    Produce room/storey rows for schedules, dashboards and downstream reports.

    spatial_tree_ids

    fn spatial_tree_ids(root : SpatialNode) -> Array[Int]

    spatial_tree_is_acyclic

    fn spatial_tree_is_acyclic(root : SpatialNode) -> Bool

    standard_model_rules

    fn standard_model_rules() -> Array[ModelRule]

    step_statistics

    fn step_statistics(source : String) -> StepDocumentStats

    stream_batch_count

    fn stream_batch_count(source : String, batch_size : Int, filter? : StreamFilter) -> Int

    stream_batch_summary

    fn stream_batch_summary(batches : Array[StreamBatch]) -> Array[String]

    stream_batches

    fn stream_batches(source : String, batch_size : Int, filter? : StreamFilter) -> Array[StreamBatch]

    Partition selected raw records into deterministic source-order batches.

    stream_entities

    fn stream_entities(source : String) -> Array[StepRecord]

    stream_filter_names

    fn stream_filter_names(filter : StreamFilter) -> Array[String]

    stream_group_by_line

    fn stream_group_by_line(source : String, line_width : Int) -> Map[Int, Int]

    stream_group_by_name

    fn stream_group_by_name(source : String) -> Map[String, Int]

    stream_record_ids

    fn stream_record_ids(source : String) -> Array[Int]

    stream_record_names

    fn stream_record_names(source : String) -> Array[String]

    stream_records_in_batches

    fn stream_records_in_batches(source : String, batch_size : Int, filter? : StreamFilter) -> Array[StepRecord]

    stream_records_longer_than

    fn stream_records_longer_than(source : String, length : Int) -> Array[StepRecord]

    stream_records_with_references

    fn stream_records_with_references(source : String) -> Array[StepRecord]

    stream_reference_histogram

    fn stream_reference_histogram(source : String) -> Map[Int, Int]

    stream_select

    fn stream_select(source : String, filter? : StreamFilter) -> StreamSelection

    Select raw records without parsing values or constructing a model.

    stream_select_geometry

    fn stream_select_geometry(source : String) -> Array[StepRecord]

    stream_select_id_range

    fn stream_select_id_range(source : String, first : Int, last : Int) -> StreamSelection

    stream_select_named

    fn stream_select_named(source : String, name : String) -> StreamSelection

    stream_select_products

    fn stream_select_products(source : String, filter? : StreamFilter) -> Array[Entity] raise ParseError

    stream_select_relationships

    fn stream_select_relationships(source : String) -> Array[StepRecord]

    stream_selection_offsets

    fn stream_selection_offsets(selection : StreamSelection) -> (Int, Int)

    stream_statistics

    fn stream_statistics(source : String) -> StreamStats

    Calculate source and record statistics with a single record scan.

    stream_stats_for_filter

    fn stream_stats_for_filter(source : String, filter? : StreamFilter) -> StreamStats

    supports_schema

    fn supports_schema(model : Model, version : SchemaVersion) -> Bool

    takeoff_area_per_volume

    fn takeoff_area_per_volume(report : TakeoffReport) -> Double

    takeoff_by_kind

    fn takeoff_by_kind(report : TakeoffReport, kind : ProductKind) -> Array[ProductTakeoff]

    takeoff_by_type

    fn takeoff_by_type(report : TakeoffReport, ifc_type : String) -> Array[ProductTakeoff]

    takeoff_for_product

    fn takeoff_for_product(model : Model, product_id : Int, options? : TakeoffOptions) -> ProductTakeoff? raise ParseError

    topology_audit

    fn topology_audit(mesh : Mesh) -> TopologyReport

    Analyze edge incidence, manifoldness and connected components of a mesh.

    topology_face_count

    fn topology_face_count(index : ModelIndex, id : Int) -> Int raise ParseError

    topology_issue_histogram

    fn topology_issue_histogram(report : TopologyReport) -> Map[String, Int]

    topology_issue_name

    fn topology_issue_name(kind : TopologyIssueKind) -> String

    topology_reports_for_meshes

    fn topology_reports_for_meshes(meshes : Array[Mesh]) -> Array[TopologyReport]

    topology_summary

    fn topology_summary(reports : Array[TopologyReport]) -> Array[String]

    topology_total_surface_area

    fn topology_total_surface_area(reports : Array[TopologyReport]) -> Double

    topology_total_volume

    fn topology_total_volume(reports : Array[TopologyReport]) -> Double

    topology_unhealthy

    fn topology_unhealthy(reports : Array[TopologyReport]) -> Array[TopologyReport]

    total_estimated_volume

    fn total_estimated_volume(index : ModelIndex, products : Array[Product]) -> Double

    transform_bounds

    fn transform_bounds(transform : Transform3, bounds : BoundingBox) -> BoundingBox

    transform_mesh

    fn transform_mesh(transform : Transform3, mesh : Mesh) -> Mesh

    transform_point

    fn transform_point(index : ModelIndex, product : Product, point : Point3) -> Point3

    transform_points

    fn transform_points(index : ModelIndex, product : Product, points : Array[Point3]) -> Array[Point3]

    triangle_area

    fn triangle_area(mesh : Mesh, triangle : (Int, Int, Int)) -> Double

    triangle_normal

    fn triangle_normal(mesh : Mesh, triangle : (Int, Int, Int)) -> Vector3

    type_histogram

    fn type_histogram(index : ModelIndex) -> Map[String, Int]

    unit_audit

    fn unit_audit(model : Model) -> UnitAuditReport

    Audit the IFC unit assignment while retaining unknown declarations.

    unit_semantic

    fn unit_semantic(label : String) -> UnitSemantic

    Resolve the common labels used by IFC exports and quantity schedules.

    unit_semantic_catalog

    fn unit_semantic_catalog() -> Array[UnitSemantic]

    unit_semantic_catalog_json

    fn unit_semantic_catalog_json() -> String

    unit_semantic_is_recognized

    fn unit_semantic_is_recognized(label : String) -> Bool

    unit_semantic_kind

    fn unit_semantic_kind(label : String) -> UnitKind

    unit_semantic_scale

    fn unit_semantic_scale(label : String) -> Double?

    unit_system

    fn unit_system(index : ModelIndex) -> UnitSystem

    validate

    fn validate(model : Model) -> ValidationReport

    Check references and structural invariants without rejecting unknown IFC extensions.

    validate_ifc_guid

    fn validate_ifc_guid(value : String) -> GuidReport

    Validate the lexical constraints of an IFC compressed GUID.

    validate_mesh

    fn validate_mesh(mesh : Mesh, tolerance? : Double) -> MeshValidation

    Check index safety, duplicate vertices and geometric degeneracy before export.

    validate_rule

    fn validate_rule(model : Model, rule : ModelRule) -> RuleReport raise ParseError

    validate_schema

    fn validate_schema(model : Model) -> SchemaReport

    validate_with_schema

    fn validate_with_schema(model : Model, profile : SchemaProfile) -> SchemaReport

    validation_summary

    fn validation_summary(report : ValidationReport) -> String

    value_contains_reference

    fn value_contains_reference(value : Value, target : Int) -> Bool

    value_maximum_depth

    fn value_maximum_depth(value : Value) -> Int

    value_reference

    fn value_reference(value : Value?) -> Int?

    value_references

    fn value_references(value : Value) -> Array[Int]

    value_stats

    fn value_stats(value : Value) -> ValueStats

    value_to_json

    fn value_to_json(value : Value) -> String

    weld_mesh

    fn weld_mesh(mesh : Mesh, tolerance : Double) -> Mesh

    Weld nearby points and rewrite triangle indices deterministically.

    workspace

    fn workspace(source : String) -> ModelWorkspace raise ParseError

    workspace_export

    fn workspace_export(workspace : ModelWorkspace, options? : ExportOptions) -> ExportedAsset raise ParseError

    workspace_health_score

    fn workspace_health_score(workspace : ModelWorkspace) -> Int

    workspace_inspection

    fn workspace_inspection(workspace : ModelWorkspace) -> Inspection

    workspace_nearest_product

    fn workspace_nearest_product(workspace : ModelWorkspace, point : Point3) -> SpatialHit?

    workspace_products_at_point

    fn workspace_products_at_point(workspace : ModelWorkspace, point : Point3, tolerance? : Double) -> Array[SpatialHit]

    workspace_query_by_kind

    fn workspace_query_by_kind(workspace : ModelWorkspace, kind : ProductKind) -> Array[Product] raise ParseError

    workspace_query_by_type

    fn workspace_query_by_type(workspace : ModelWorkspace, ifc_type : String) -> Array[Product] raise ParseError

    workspace_snapshot_diff

    fn workspace_snapshot_diff(left : ModelWorkspace, right : ModelWorkspace) -> Array[String]

    world_to_local

    fn world_to_local(transform : Transform3, point : Point3) -> Point3?