16 KiB
ocs_doc_api — API reference (auto-generated)
Envelope version: 1
Do NOT edit: regenerated by build.rs from spec/entities.toml.
Solid (acadrust Solid3D, collection solids)
B-rep solid. Host resolves bodies via the solid_models cache (lift-on-miss from ACIS SAT).
Constructors (doc.solids())
- create_cuboid(origin: [f64; 3], size: [f64; 3]) ->
Solid—CreateSolid; fixed primitive="Cuboid" - create_sphere(centre: [f64; 3], radius: f64) ->
Solid—CreateSolid; fixed primitive="Sphere" - create_cylinder(base: [f64; 3], radius: f64, height: f64) ->
Solid—CreateSolid; fixed primitive="Cylinder" - create_cone(base: [f64; 3], radius: f64, height: f64) ->
Solid—CreateSolid; fixed primitive="Cone" - create_torus(centre: [f64; 3], major_radius: f64, minor_radius: f64) ->
Solid—CreateSolid; fixed primitive="Torus" - create_wedge(origin: [f64; 3], size: [f64; 3]) ->
Solid—CreateSolid; fixed primitive="Wedge" - extrude(profile: EntityRef, direction: [f64; 3]) ->
Solid—Extrude - revolve(profile: EntityRef, pivot: [f64; 3], axis: [f64; 3], angle: f64) ->
Solid—Revolve - loft(profiles: &[EntityRef]) ->
Solid—Loft
Methods
- intersect(other: Solid) ->
Solid— opSolidBoolean; fixed erase_sources=true, op="Intersection" - union(other: Solid) ->
Solid— opSolidBoolean; fixed erase_sources=true, op="Union" - subtract(other: Solid) ->
Solid— opSolidBoolean; fixed erase_sources=true, op="Difference" - volume() ->
f64— queryGetVolume - centroid() ->
[f64; 3]— queryGetCentroid - intersects(other: Solid) ->
bool— queryGetIntersects
Line (acadrust Line, collection curves)
Constructors (doc.curves())
- create_line(start: [f64; 3], end: [f64; 3]) ->
Line—CreateCurve; fixed curve="Line"
Circle (acadrust Circle, collection curves)
Constructors (doc.curves())
- create_circle(centre: [f64; 3], radius: f64) ->
Circle—CreateCurve; fixed curve="Circle"
Polyline (acadrust LwPolyline, collection curves)
Constructors (doc.curves())
- create_polyline(points: &f64; 3, closed: bool) ->
Polyline—CreateCurve; fixed curve="Polyline"
Methods
- add_vertex(at: usize, point: [f64; 3]) ->
()— opAddVertex
Point (acadrust Point, collection curves)
Constructors (doc.curves())
- create_point(position: [f64; 3]) ->
Point—CreateCurve; fixed curve="Point" - create_points(positions: &f64; 3) ->
Vec<Point>(bulk op) —CreateMany; fixed curve="Point"
ArcCurve (acadrust Arc, collection curves)
Constructors (doc.curves())
- create_arc(centre: [f64; 3], radius: f64, start_angle: f64, end_angle: f64) ->
ArcCurve—CreateCurve; fixed curve="Arc"
Ellipse (acadrust Ellipse, collection curves)
Constructors (doc.curves())
- create_ellipse(centre: [f64; 3], major_axis: [f64; 3], ratio: f64, start: f64, end: f64) ->
Ellipse—CreateCurve; fixed curve="Ellipse"
Spline (acadrust Spline, collection curves)
Constructors (doc.curves())
- create_spline(degree: i32, control_points: &f64; 3, knots: &[f64], weights: &[f64]) ->
Spline—CreateCurve; fixed curve="Spline"
Ray (acadrust Ray, collection curves)
Constructors (doc.curves())
- create_ray(origin: [f64; 3], direction: [f64; 3]) ->
Ray—CreateCurve; fixed curve="Ray"
XLine (acadrust XLine, collection curves)
Constructors (doc.curves())
- create_xline(origin: [f64; 3], direction: [f64; 3]) ->
XLine—CreateCurve; fixed curve="XLine"
Text (acadrust Text, collection curves)
Single-line text annotation. content()/set_content() read+replace the value; transform moves insertion point.
Constructors (doc.curves())
- create_text(value: &str, insertion_point: [f64; 3], height: f64, rotation: f64) ->
Text—CreateText
Methods
- content() ->
String— queryGetTextContent - set_content(value: &str) ->
()— opSetTextContent
MText (acadrust MText, collection curves)
Multi-line text annotation. content()/set_content() read+replace the value; transform moves insertion point.
Constructors (doc.curves())
- create_mtext(value: &str, insertion_point: [f64; 3], height: f64) ->
MText—CreateMText
Methods
- content() ->
String— queryGetTextContent - set_content(value: &str) ->
()— opSetTextContent
Entity (acadrust Hatch, collection curves)
Filled region over a closed polyline boundary. boundary() returns the loops; bounds from boundary; generic delete.
Constructors (doc.curves())
- create_hatch(boundary: &f64; 2, solid: bool) ->
Entity—CreateHatch
Methods
- boundary() ->
Vec<Vec<[f64; 2]>>— queryGetHatchBoundary
Dimension (acadrust Dimension, collection curves)
Linear dimension between two measured points. measurement() reads the distance; bounds from the measured + definition points.
Constructors (doc.curves())
- create_dimension_linear(first_point: [f64; 3], second_point: [f64; 3], definition_point: [f64; 3]) ->
Dimension—CreateDimensionLinear - create_dimension_radius(center: [f64; 3], point: [f64; 3]) ->
Dimension—CreateDimensionRadius - create_dimension_diameter(center: [f64; 3], point: [f64; 3]) ->
Dimension—CreateDimensionDiameter - create_dimension_angular(vertex: [f64; 3], first_point: [f64; 3], second_point: [f64; 3], arc_location: [f64; 3]) ->
Dimension—CreateDimensionAngular - create_dimension_angular2ln(vertex: [f64; 3], first_point: [f64; 3], second_point: [f64; 3], arc_location: [f64; 3]) ->
Dimension—CreateDimensionAngular2Ln
Methods
- measurement() ->
f64— queryGetDimensionMeasurement
Entity (acadrust Insert, collection entities)
Block reference. Place an existing BlockRecord by name; transform moves its insert point.
Constructors (doc.entities())
- create_insert(block_name: &str, insert_point: [f64; 3], scale: f64, rotation: f64) ->
Entity—CreateInsert
Methods
- attributes() ->
Vec<(String, String)>— queryGetAttributes - set_attribute(tag: &str, value: &str) ->
()— opSetAttribute
Entity (acadrust AttributeDefinition, collection entities)
In-block attribute definition (ATTDEF): tag/prompt/default at an insertion point.
Constructors (doc.entities())
- create_attribute_definition(tag: &str, prompt: &str, default_value: &str, insertion_point: [f64; 3], height: f64, rotation: f64) ->
Entity—CreateAttributeDefinition
Entity (acadrust Viewport, collection entities)
Paper-space viewport: a width×height window at center looking at view_target with view_height zoom. bounds = center ± w/2,h/2; transform moves center.
Constructors (doc.entities())
- create_viewport(center: [f64; 3], width: f64, height: f64, view_target: [f64; 3], view_height: f64) ->
Entity—CreateViewport
Methods
- viewport_view() ->
([f64; 3], f64)— queryGetViewportView - set_view(view_target: [f64; 3], view_height: f64) ->
()— opSetViewportView
Entity (acadrust RasterImage, collection entities)
Raster image: create_raster_image(file_path, insertion, u, v, size) places an image (host auto-registers the ImageDefinition); bounds (4-corner bracket); delete.
Constructors (doc.entities())
- create_raster_image(file_path: &str, insertion_point: [f64; 3], u_vector: [f64; 3], v_vector: [f64; 3], size: [f64; 2]) ->
Entity—CreateRasterImage
Entity (acadrust Table, collection entities)
Table: create_table(insertion_point, data[row][col]) builds rows x columns of text cells; non-rectangular grid -> Validation; delete.
Constructors (doc.entities())
- create_table(insertion_point: [f64; 3], data: &[Vec]) ->
Entity—CreateTable
XRecord (acadrust XRecord, collection entities)
Extended record (XRecord): arbitrary DXF group-code/value pairs. Roundtripped verbatim as an XRecordSpec payload.
Constructors (doc.entities())
- create_xrecord(spec: XRecordSpec) ->
XRecord—CreateXRecord
Methods
- payload() ->
XRecordSpec— queryGetXRecord - set_payload(spec: XRecordSpec) ->
()— opSetXRecord
Layer (acadrust -, collection layers)
Named drawing layer (color, linetype, lineweight, visibility). Not an entity handle; accessed through Document::layers().
Methods
- list() ->
Vec<LayerInfo>— queryListLayers - create(info: LayerInfo) ->
()— opCreateLayer - update(name: String, info: LayerInfo) ->
()— opUpdateLayer - delete(name: String) ->
()— opDeleteLayer
Generic methods (every handle)
Every typed handle (Solid, Line, Circle, Polyline, Point, ArcCurve,
Ellipse, Spline, Ray, XLine, Text, MText, Dimension, Entity) is a
Clone, Send, Sync token { ObjectId, session } and supports:
id()->ObjectId— the stable entity identity.bounds()->Aabb— coarse bounding box (solids lift-on-miss; 2D entities computed; later families may beUnsupported).transform(placement)— in-place rigid similarity (sameObjectId). v1: solids only.delete()— remove the entity (one undo step).layer()->String— the name of the layer the entity is on.set_layer(layer)— move the entity to an existing layer (one undo step; blocked if the entity or target layer is locked).
Entity additionally has view() (id + kind + bounds), as_solid() (typed
downcast when kind == "Solid3D"), and XDATA access through
xdata(application_name) / set_xdata(application_name, record).
Layer table
Layers are a named document table, not an entity family. Document::layers()
lists all layers as Vec<LayerInfo>. Table-level ops are CreateLayer(info),
UpdateLayer { name, info } and DeleteLayer { name }. Entity::layer()
returns the layer name and Entity::set_layer(layer) moves the entity to an
existing layer. The host rejects duplicate names, deletion of layer "0" or the
current layer, and removing a layer that still has entities assigned.
Transports
InProcess(featurehost) — drives aDocApiBackenddirectly in the host.OcsPluginApiIpc(featureipc) — serializes envelopes over theocs_plugin_apiPluginRequestSender/PluginRequestchannel. The host routesDocApiRequest { tab_id, bytes }to the same executor.doc_api_for_host(host)(featuredoc_api_host) — convenience helper that builds aDocApifrom anyocs_plugin_api::host::HostApiexposing aPluginRequestSender(out-of-process / worker-thread plugins).
Collections & cross-cutting
DocApi— root:document(tab),active_tab(),alive().Document—solids()/curves()/entities()factories + lookup,revision(),assert_revision(rev)(read-guard),query_batch(|q| …)(read-only batch, one round-trip, no revision bump).EntityCollection—get(id) -> Entity,delete(id),transform_many(&ids, placement),delete_many(&ids).OpGroup— best-effort client-side failure cleanup (track/commit/compensate). Not a transaction: no atomicity, no rollback.
Bulk ops — single op, all-or-nothing, item-capped
CreateMany / TransformMany / DeleteMany are single write ops: one undo
step, one publish, and all-or-nothing via upfront validation (no rollback).
Item-capped at BULK_ITEM_CAP = 100_000 to bound host execution. Use them for
bulk data (N ≳ a few hundred); per-op autocommit is the right tool for
modeling-scale work.
Semantics
- Per-op autocommit, no write transactions. Every write op is ONE atomic host call = one undo step. Multi-op write transactions were removed (security/ integrity review).
- Per-op atomicity. Validate + compute geometry before any mutation; a
failed op applies nothing and records no undo step.
erase_sourcesbooleans run only on success. - Structured errors.
ApiError::{Validation, Geometry, UnknownId, Unsupported, Transport}; bulk validation names the failing index; a stale handle returnsUnknownId(never a panic).
Kernel mapping
| op | kernel call | returns |
|---|---|---|
| CreateSolid.Cuboid | cadkernel::brep::make::cuboid |
Option |
| CreateSolid.Sphere | cadkernel::brep::make::sphere |
Option |
| SolidBoolean | cadkernel::brep::combine |
Result<Body, Snag> |
| Transform | cadkernel::brep::transform |
Option |
| GetBounds | cadkernel::brep::body_bounds |
Option |
| GetVolume | cadkernel::brep::mesh_body + divergence |
computed |
Wire vocabulary
Every Operation is ONE atomic write op (one undo step); every Query is read-only (safe to batch). Variants are append-only (bincode discriminant stability). Requests ride DocApiEnvelope: Op(Operation) for a write, Queries(Vec<Query>) for a read batch.
Operation
CreateSolid(SolidPrimitive)CreateCurve(Curve2Spec)Extrude { profile: ObjectId, direction: [f64; 3] }Revolve { profile: ObjectId, axis: ([f64; 3], [f64; 3]), angle: f64 }Transform { id: ObjectId, placement: PlacementSpec }SolidBoolean { op: BoolOp, a: ObjectId, b: ObjectId, erase_sources: bool }AddVertex { id: ObjectId, at: usize, point: [f64; 3] }Delete { id: ObjectId }CreateMany(Vec<EntitySpec>)TransformMany { ids: Vec<ObjectId>, placement: PlacementSpec }DeleteMany(Vec<ObjectId>)CreateInsert(InsertSpec)CreateViewport(ViewportSpec)CreateText(TextSpec)CreateMText(MTextSpec)SetTextContent { id: ObjectId, value: String }CreateHatch(HatchSpec)CreateDimensionLinear(DimensionSpec)SetAttribute { id: ObjectId, tag: String, value: String }SetViewportView { id: ObjectId, view_target: [f64; 3], view_height: f64 }CreateRasterImage(RasterImageSpec)Loft { profiles: Vec<ObjectId> }CreateDimensionRadius(DimensionRadialSpec)CreateDimensionDiameter(DimensionRadialSpec)CreateDimensionAngular(DimensionAngularSpec)CreateAttributeDefinition(AttributeDefinitionSpec)CreateTable(TableSpec)CreateDimensionAngular2Ln(DimensionAngularSpec)SetXData { id: ObjectId, application_name: String, record: Option<XDataRecord> }CreateXRecord(XRecordSpec)SetXRecord { id: ObjectId, spec: XRecordSpec }CreateLayer(LayerInfo)UpdateLayer { name: String, info: LayerInfo }DeleteLayer { name: String }SetEntityLayer { id: ObjectId, layer: String }SetXDataMany(Vec<(ObjectId, String, Option<XDataRecord)>)
Query
GetEntity { id: ObjectId }GetBounds { id: ObjectId }GetCentroid { id: ObjectId }GetVolume { id: ObjectId }GetIntersects { a: ObjectId, b: ObjectId }GetGeometryRevisionGetTextContent { id: ObjectId }GetHatchBoundary { id: ObjectId }GetDimensionMeasurement { id: ObjectId }GetAttributes { id: ObjectId }GetBlockEntities { block_name: String }GetViewportView { id: ObjectId }GetXData { id: ObjectId, application_name: String }GetXRecord { id: ObjectId }ListLayersGetEntityLayer { id: ObjectId }
Errors (ApiError)
| Variant | Meaning |
|---|---|
Validation { op, reason } |
Input rejected before any document mutation. |
Geometry { kind, msg } |
The kernel failed (boolean refused, invalid input, ACIS lift/lower). |
UnknownId(ObjectId) |
The handle is stale / deleted / never existed (never a panic). |
Unsupported(String) |
Capability not supported for this entity or backend. |
Transport(String) |
The channel failed (disconnected / oversized / timeout). |
ApiError is serializable, so IPC returns the same structured error the in-process
executor produced.
Envelope & transport
DocApiEnvelope { version, body } — body is Op(Operation) (a single write) or
Queries(Vec<Query>) (a read batch). bincode-serialized; version is the crate's
envelope version (bridges must check it). Transports: InProcess (host) and
OcsPluginApiIpc (plugin over ocs_plugin_api), both behind the Transport: Send + Sync trait (apply(envelope) -> Receipt, alive()). Receipt carries
outcome (per-op result), query_results, and new_revision.