ocs_doc_api: update docs + fix review-drift findings

- lib.rs: export all 14 facade handles (add ArcCurve/Ellipse/Spline/Ray/XLine/Text/
  MText/Dimension + Circle) — public surface matches collection return types.
- build.rs: fix step-1 comment (enums are hand-maintained, not 'regenerated');
  generic_reference_md: Clone (not Copy) + full 14-handle list (was stale 6).
- ops.rs/query.rs: correct 'hand-maintained' module doc comments (were 'GENERATED').
- layouts.json: extend to all 22 Operation + 12 Query variants (was stale phase-1).
- binding_schema.json regenerated (complete layouts + derived handles).
- generate.py: inject 'id': self.id for SetTextContent/SetAttribute/SetViewportView/
  Transform/Delete/AddVertex (was malformed id-less payloads); _apply_op/_apply_query
  accept want=None; extend PY_TYPES (String/&str/Vec returns/new handles).
- README.md: Clone (not Copy) + full scope (2D curves, annotations, containers,
  viewports, media) replacing stale 'Not yet' list.
- Plan (.kilo): mark implemented & published; pointer to live crate docs.
This commit is contained in:
Sebastian committed 2026-09-06 11:22:01 +02:00
1 parent 8417375e5a
commit a9c278e32a
9 files changed
+90 -32

No files matched your search

+3 -2
View File
@@ -178,8 +178,9 @@ Table (read-only): GetEntity kind; generic delete. No typed create/bounds in v1.
## Generic methods (every handle)
Every typed handle (`Solid`, `Line`, `Circle`, `Polyline`, `Point`, `Entity`) is a
`Copy`, `Send`, `Sync` token `{ ObjectId, session }` and supports:
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
+19 -2
View File
@@ -410,7 +410,18 @@
"Delete { id: ObjectId }",
"CreateMany(Vec<EntitySpec>)",
"TransformMany { ids: Vec<ObjectId>, placement: PlacementSpec }",
"DeleteMany(Vec<ObjectId>)"
"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> }"
]
},
"Query": {
@@ -420,7 +431,13 @@
"GetCentroid { id: ObjectId }",
"GetVolume { id: ObjectId }",
"GetIntersects { a: ObjectId, b: ObjectId }",
"GetGeometryRevision"
"GetGeometryRevision",
"GetTextContent { id: ObjectId }",
"GetHatchBoundary { id: ObjectId }",
"GetDimensionMeasurement { id: ObjectId }",
"GetAttributes { id: ObjectId }",
"GetBlockEntities { block_name: String }",
"GetViewportView { id: ObjectId }"
]
}
},
+19 -2
View File
@@ -12,7 +12,18 @@
"Delete { id: ObjectId }",
"CreateMany(Vec<EntitySpec>)",
"TransformMany { ids: Vec<ObjectId>, placement: PlacementSpec }",
"DeleteMany(Vec<ObjectId>)"
"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> }"
]
},
"Query": {
@@ -22,7 +33,13 @@
"GetCentroid { id: ObjectId }",
"GetVolume { id: ObjectId }",
"GetIntersects { a: ObjectId, b: ObjectId }",
"GetGeometryRevision"
"GetGeometryRevision",
"GetTextContent { id: ObjectId }",
"GetHatchBoundary { id: ObjectId }",
"GetDimensionMeasurement { id: ObjectId }",
"GetAttributes { id: ObjectId }",
"GetBlockEntities { block_name: String }",
"GetViewportView { id: ObjectId }"
]
}
}
+3 -2
View File
@@ -46,8 +46,9 @@ pub use revision::GeometryRevision;
pub use envelope::{DocApiEnvelope, EnvelopeBody, OpOutcome, Receipt};
pub use facade::{
CurveCollection, DocApi, Document, Entity, EntityCollection, HasId, Line, OpGroup, Point,
Polyline, QueryBatch, QueryResults, Solid, SolidCollection,
ArcCurve, Circle, CurveCollection, Dimension, DocApi, Document, Ellipse, Entity,
EntityCollection, HasId, Line, MText, OpGroup, Point, Polyline, QueryBatch, QueryResults, Ray,
Solid, SolidCollection, Spline, Text, XLine,
};
pub use ops::{BoolOp, Curve2Spec, EntitySpec, Operation, PlacementSpec, SolidPrimitive};
pub use query::{Aabb, EntityView, Query, QueryResult};
+4 -3
View File
@@ -1,7 +1,8 @@
//! Write operations — the typed, transport-agnostic vocabulary for changing the
//! document (plan §5). The `Operation` enum itself is GENERATED into
//! `crate::gen` by `build.rs` from `spec/entities.toml`; this module re-exports
//! it and holds the hand-written payload mirrors.
//! document (plan §5). The `Operation` enum is **hand-maintained** (append-only)
//! in `src/gen/ops_gen.rs` — it is NOT derived from the spec by build.rs; the
//! spec's `op` names must each map to a variant here (asserted by a test). This
//! module re-exports it and holds the hand-written payload mirrors.
use serde::{Deserialize, Serialize};
+4 -2
View File
@@ -1,6 +1,8 @@
//! Read queries — typed, transport-agnostic reads of entity state (plan §5).
//! The `Query` enum is GENERATED into `crate::gen` by `build.rs`; this module
//! re-exports it and holds the hand-written result DTOs.
//! The `Query` enum is **hand-maintained** (append-only) in `src/gen/query_gen.rs`
//! — NOT derived from the spec by build.rs (the spec's `query` names must map to
//! a variant here, asserted by a test). This module re-exports it and holds the
//! hand-written result DTOs.
use serde::{Deserialize, Serialize};