Hakan Seven
2f2d894eee
fix(surface): refresh construction display
2026-09-10 17:14:44 +03:00
Hakan Seven
4201b0a031
Merge pull request #1131 from ramox81/codex/thicken-surface-grips
2026-09-10 17:05:43 +03:00
ramox81
11057cc5e9
Fix extrusion surface properties and snapping
2026-09-10 16:07:05 +03:00
ramox81
a24d1e6108
Fix live extrusion surface grip editing
2026-09-10 14:53:48 +03:00
Sebastian
8bf5eac3fc
ocs_doc_api: layer CRUD, per-curve layer assignment, XDATA/XRECORD support, and bulk SetXDataMany
2026-09-10 10:43:15 +02:00
Hakan Seven
f69f0b32be
fix(sectionplane): persist and clip section modes correctly
2026-09-09 20:53:05 +03:00
Hakan Seven
50e4f2bfe3
Use safely stitched thicken geometry
2026-09-09 14:50:09 +03:00
Hakan Seven
7a58b9bf91
Enable free-form surface thickening
2026-09-09 14:26:29 +03:00
Hakan Seven
cf12c6a272
Merge PR #1106 : thicken surfaces with exact kernel geometry
...
Use the maintained cadkernel main revision and retain source surfaces. Verify signed and two-point input, partial failure, DWG round-trips and one-step undo/redo of solids and history objects.
2026-09-09 13:33:14 +03:00
Hakan Seven
4bb6aac0b6
Merge PR #1089 : document API extension workflow
...
Preserve main's validation, atomic bulk operations, profile planes, kernel geometry, transport limits and complete Python bindings. The submitted implementation reverted those existing fixes; retain its documentation intent without restoring the regressions.
2026-09-09 13:10:35 +03:00
ramox81
85abdf0c12
Merge remote-tracking branch 'origin/main' into codex/thicken-parity
...
# Conflicts:
# Cargo.lock
# Cargo.toml
# crates/ocs_doc_api/Cargo.toml
2026-09-09 12:57:32 +03:00
ramox81
4b45e06cf8
Implement surface thickening workflow
2026-09-09 12:35:18 +03:00
Hakan Seven
672297e732
chore: update DWG class metadata repair
2026-09-09 10:42:25 +03:00
Sebastian
6d7c3443d3
Cleaning implementation
2026-09-09 08:03:40 +02:00
Sebastian
55f61a4327
General improvements on API
2026-09-09 08:02:35 +02:00
Hakan Seven
56e09cd3f5
fix(dwg): preserve hatch context loops
2026-09-09 08:23:41 +03:00
Hakan Seven
3fb49c4d3e
chore: update DWG database repair stack
2026-09-09 07:23:33 +03:00
Hakan Seven
4ddd19f6e8
feat(mcp): describe complete CAD record schemas
2026-09-09 01:01:44 +03:00
Hakan Seven
8f574c8388
feat(mcp): expose complete drawing records
2026-09-08 23:59:13 +03:00
Hakan Seven
2d55b90b0e
chore: update DWG save dependencies
2026-09-08 22:20:07 +03:00
Hakan Seven
c5503e4758
Merge PR #1083 : implement solid shell workflow
2026-09-08 21:02:01 +03:00
ramox81
7913f8e2da
Merge remote-tracking branch 'origin/main' into codex/shell-parity
...
# Conflicts:
# Cargo.lock
# Cargo.toml
# crates/ocs_doc_api/Cargo.toml
# src/modules/model/mod.rs
2026-09-08 19:49:35 +03:00
ramox81
be06a756da
Implement solid shell workflow and properties
2026-09-08 19:37:35 +03:00
Hakan Seven
f611ceb638
Update CAD dependency revisions
2026-09-08 19:34:39 +03:00
Hakan Seven
fd3ddc1608
Finish Ramox edge and slice integration
2026-09-08 19:02:08 +03:00
Hakan Seven
7ec07f3222
Merge pull request #1070 from ramox81/codex/filletedge-parity
...
# Conflicts:
# Cargo.lock
2026-09-08 18:30:34 +03:00
ramox81
1c9eb46b78
Update slice kernel revision
2026-09-08 10:35:23 +03:00
ramox81
21a357f55a
Complete SLICE command behavior
2026-09-08 10:27:23 +03:00
Hakan Seven
67163de15d
Update kernel for reliable wall opening cuts
2026-09-07 20:27:42 +03:00
Hakan Seven
e51c4d0932
Merge updated origin/main
2026-09-07 19:01:54 +03:00
Hakan Seven
d5047b49d9
Merge PR #1053 : complete INTERSECT behavior
2026-09-07 18:43:49 +03:00
Karim Jerbi
6e01d464e5
fix(workspace): resolve clippy warnings in ocs_plugin_api and ocs_doc_api
2026-09-07 14:52:58 +01:00
Karim Jerbi
690971c44e
Make tessellation memo and resident wire set zoom-independent
...
With GPU analytical rendering handling circles, arcs, and ellipses,
tessellation geometry is now camera- and zoom-independent.
- Remove wpp from the tessellation memo guard hash to prevent clearing
all cached entities when zooming across quantization bands.
- Remove quantized_wpp from resident_wire_key and resident_wires_for
so all zoom levels reuse the cached resident set directly with zero
CPU re-tessellation.
- Fix clippy slice_from_raw_parts lint in dwg-thumbnailer without suppression.
- Update zoom test to assert Arc pointer equality across camera zooms.
2026-09-07 14:32:55 +01:00
ramox81
1e118b2e90
Complete exact INTERSECT behavior
2026-09-07 16:32:01 +03:00
ramox81
04a9a1b0a0
Complete SUBTRACT behavior
2026-09-07 13:58:31 +03:00
ramox81
a59ea47990
Complete UNION command behavior
2026-09-07 11:27:03 +03:00
Hakan Seven
3385160493
Merge PR #1028 : add document API with atomic edits
...
Add the typed document facade and plugin IPC adapter. Prepare bulk edits
before mutation, preserve undo and dirty state, keep profile elevations,
validate numeric inputs and session bindings, and generate Python constructors
with typed results.
Reuse existing entity transforms and profile conversion. Compute mass
properties and closed-surface bounds in cadkernel; pin its main revision
6a5e6fc2822f6af6b2611cd605b44437b35158f0. Keep plugin API metadata at version 6.
Validation: 646 native application tests, 597 kernel tests, 12 document API
tests, 91 plugin API tests, 3 Python tests, default/IPC feature builds and
wasm32 check passed.
2026-09-06 21:43:02 +03:00
Sebastian
d746d635fb
ocs_doc_api: move doc_api_convert.rs into the crate (src/convert.rs)
...
Move the 503-line host-independent entity-conversion module (acadrust EntityType
<-> DTO conversions, transform_entity_geometry, entity_to_profile_curves,
bulge_arc_segment, entity_bounds, entity_kind_name, points_aabb) from
src/app/doc_api_convert.rs into crates/ocs_doc_api/src/convert.rs (host feature).
The host file is now a thin re-export (pub use ocs_doc_api::convert::*) so all
existing crate::app::doc_api_convert::* paths keep working unchanged. Zero
coupling risk (the module only touches acadrust + crate DTOs).
623 host lib + 8 crate + 3 consistency green.
2026-09-06 17:00:04 +02:00
Sebastian
d1b8fc93f5
ocs_doc_api: convert architecture flow diagram to readable text format
...
Replace the mermaid flowchart (hard to read raw) with a clean ASCII/text diagram
tracing the same flow from the single source of truth (spec/entities.toml +
layouts.json) through codegen, facade, wire, transport, executor, and the host
backend/Scene, plus a layer-by-layer legend.
2026-09-06 16:34:39 +02:00
Sebastian
0965e188c9
ocs_doc_api: enrich + update all documentation (architecture flow diagram, guarantees, counts)
...
- ARCHITECTURE.md: add 'Flow: from the single source of truth to a committed
change' mermaid diagram (spec/entities.toml + layouts.json -> codegen -> facade
-> wire -> transport -> executor -> host backend/Scene); fix stale claims
(hand-maintained enums not 'GENERATED'; accuracy-first mass properties + Scene
cold-tess budget; with_body borrow; tab auth); add Review round 3 change-log;
update Known deviations.
- README.md: Core guarantees now include Loft/query caps, accurate mass properties
(Scene budget persists + graceful fallback), and tab authorization.
- IMPLEMENTATION.md: accuracy paragraph (Scene budget + fallback) + current test
counts (623 host lib + 8 crate + 3 consistency + 34 plugin_api).
- Regenerate api_reference.md (26 sections) + binding_schema.json (28 ops / 12
queries / 14 handles / 19 families).
- 623 host lib + 8 crate + 3 consistency + 34 plugin_api green.
2026-09-06 16:23:33 +02:00
Sebastian
919128e087
ocs_doc_api: fix branch-review findings (tab auth, bulge center, budget, caps, dead code)
...
CRITICAL:
- execute_doc_api: reject tab_id != bound tab (confused deputy); test
doc_api_tab_mismatch_is_rejected.
- bulge_arc_segment: fix negative/CW bulge center (apothem magnitude + sign picks
side; was double-sign-mirrored); test CW-vs-CCW center offset.
- cold-tess budget: move mass_cache/cold_tess_used to per-tab Scene so the budget
persists across DocApi dispatches (was reset per request); budget-exhausted ->
approximate meshes.metrics fallback instead of error.
WARNING:
- Loft: add BULK_ITEM_CAP (was uncapped -> unbounded kernel call from one request).
- CreateMany: pre-validate EntitySpec::Curve (ellipse ratio) in prepare phase ->
all-or-nothing restored; regression test.
- Partial Ellipse: offset start/end_parameter by rot_z on rotation; regression test.
- resolve_body: add with_body borrow accessor (host overrides to borrow cache in
place, O(1)); bounds() uses it instead of deep-cloning the B-rep per query.
- add_raster_image: validate file path (non-empty, image extension, reject
UNC/traversal); regression test.
SUGGESTION:
- deploy: bump API_VERSION 5 -> 6 so DocApi plugins are gated at handshake on old
hosts (append-only wire + defaulted method keep old V2-V5 plugins loading).
- dead code: wire query_name into apply_queries error labels; host uses crate's
ObjectId::from_handle/to_handle (drop local duplicates); delete is_null/backend_mut.
- mock drift: test mock now stores curve specs + computes curve bounds (aligns with
example mock); Spline/Dimension bounds delegate to points_aabb.
623 host lib + 8 crate + 3 consistency + 34 plugin_api green.
2026-09-06 16:03:34 +02:00
Sebastian
ac54d6079b
ocs_doc_api: fix review findings (layouts, Helix bounds, points_aabb, mass-properties budget, docs)
...
- layouts.json: append the 6 missing ops (CreateDimensionRadius/Diameter/Angular,
CreateAttributeDefinition, CreateTable, CreateDimensionAngular2Ln); regenerate
binding_schema.json + api_reference.md wire vocabulary (all 28 ops).
- Helix bounds: bound the evaluated spline control polygon (was a degenerate
single-start-point AABB).
- points_aabb: empty -> Geometry::Empty('entity has no points to bound'), not
UnknownId (the entity exists; don't misclassify as stale/deleted).
- mass_properties: accuracy-first fine tessellation + graceful degradation to the
approximate meshes.metrics value when the cold-tess budget is exhausted (large
distinct-solid batches no longer hard-fail).
- IMPLEMENTATION.md: Volume/Centroid rows + accuracy paragraph + test count (618)
consistent with the final design.
- 618 host lib + 8 crate + 3 consistency green.
2026-09-06 14:23:00 +02:00
Sebastian
28c8e0ef1a
ocs_doc_api: read-mostly family bounds (Leader/Mesh/Face3D/MLine/Helix)
...
- entity_bounds: vertex/point-carrying read-mostly families (Leader.vertices,
Mesh.vertices, Face3D 4 corners, MLine vertex positions, Helix start point)
via a points-to-AABB helper. Region/Body/Surface/MultiLeader stay Unsupported.
- IMPLEMENTATION.md: read-mostly bounds done.
- Test read_mostly_family_bounds_leader_and_mesh -> 618 host lib green.
2026-09-06 13:46:41 +02:00
Sebastian
6997dfe618
ocs_doc_api: accurate GetVolume/GetCentroid via fine tessellation
...
- mass_properties: query path now uses fine mesh_body(0.1, 1e-4) for near-analytic
volume/centroid; the render-mesh metrics cache (coarse display LOD) no longer
shadows query accuracy. Memoized per (handle, epoch); cold-tess budget kept.
- IMPLEMENTATION.md: accuracy item done.
- Test accurate_volume_centroid_sphere_and_cube (sphere within 0.5% of 4/3*pi*r^3,
centroid at centre, cube exact) -> 617 host lib green.
2026-09-06 13:40:07 +02:00
Sebastian
612e8e13e0
ocs_doc_api: Phase 2c-iii — 2-line angular dimension (all dimension sub-types done)
...
- CreateDimensionAngular2Ln(DimensionAngularSpec) op (append-only).
- backend add_dimension_angular2ln (DimensionAngular2Ln::new computes angle).
- facade create_dimension_angular2ln; spec constructor; api_reference + binding_schema
regenerated; mocks + baseline.
- IMPLEMENTATION.md: fix stale Status line (all 5 phases complete, current test
counts); mark all dimension sub-types done.
- Test phase2ciii_dimension_angular2ln (90-degree 2-line angle) -> 616 host lib +
3 consistency green.
2026-09-06 13:24:25 +02:00
Sebastian
240831edcd
ocs_doc_api: Phase 5-ii — typed Table create
...
- CreateTable(TableSpec{insertion_point, data[row][col]}) op (append-only).
- backend add_table via Table::new(insertion_point, rows, cols) + set_cell_text
(Table::default() pre-creates 3x3, so use Table::new for exact dims).
- executor validates non-empty rectangular grid; facade create_table.
- spec Table constructor; api_reference + binding_schema regenerated; mocks + baseline.
- Test phase5ii_create_table_from_grid (3x2 grid, non-rectangular rejected)
-> 615 host lib + 3 consistency green. Phase 5 complete.
2026-09-06 13:02:21 +02:00
Sebastian
f8ae54a351
ocs_doc_api: Phase 3-ii — typed AttributeDefinition create (Phase 3 complete)
...
- CreateAttributeDefinition(AttributeDefinitionSpec) op (append-only).
- backend add_attribute_definition (ATTDEF tag/prompt/default/insertion/height/rotation).
- facade create_attribute_definition; entity_kind_name AttributeDefinition/AttributeEntity.
- spec AttributeDefinition family; api_reference + binding_schema regenerated; mocks + baseline.
- Test phase3ii_create_attribute_definition -> 614 host lib + 3 consistency green.
2026-09-06 12:43:34 +02:00
Sebastian
8d8c120880
ocs_doc_api: Phase 2c-ii — dimension sub-types (radius/diameter/angular)
...
- CreateDimensionRadius/CreateDimensionDiameter (DimensionRadialSpec) +
CreateDimensionAngular (DimensionAngularSpec) ops (append-only).
- backend add_dimension_radius/diameter (DimensionRadius/DimensionDiameter::new)
+ add_dimension_angular (DimensionAngular3Pt::new computes angle);
dimension_measurement returns degrees for angular sub-types.
- facade create_dimension_radius/diameter/angular; spec constructors; api_reference
+ binding_schema regenerated; mocks + baseline.
- Test phase2cii_dimension_radius_diameter_angular -> 613 host lib + 3 consistency green.
2026-09-06 12:31:23 +02:00
Sebastian
2522979285
ocs_doc_api: enrich API reference generator
...
api_reference.md now includes (regenerated from spec + layouts.json):
- Wire vocabulary section: every Operation (22) + Query (12) variant with payloads.
- Errors section: ApiError variant table.
- Envelope & transport section: DocApiEnvelope framing, Receipt, transports.
- Method/constructor lines now show fixed fields (e.g. SolidBoolean erase_sources
+ op value) and clean zero-arg () rendering.
Generator: fmt_fixed/fmt_call_args helpers; reads layouts.json for the wire vocab.
612 host lib + 8 crate + 3 consistency green.
2026-09-06 11:35:23 +02:00
Sebastian
a9c278e32a
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.
2026-09-06 11:22:01 +02:00