Sitelet https://github.com/carnworkstudios/construct/commit/881fc4e7d6304361ab265b547994efd2d7a3cbe7
Skip to content

Commit 881fc4e

Browse files
Bonzai CarnBonzai Carn
authored andcommitted
created a GeometryEngine for parsing and analyzing spatial coordinate systems
1 parent 7447f07 commit 881fc4e

14 files changed

Lines changed: 784 additions & 2093 deletions

File tree

‎construction/index.html‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -749,12 +749,12 @@ <h3 class="modal-title">
749749
<!-- Geometry Engine (4-phase pipeline — after canvas, before features) -->
750750
<script src="src/js/core/geometryEngine.js"></script>
751751

752-
<!-- Domain Kits (Phase 2) -->
753-
<script src="src/js/domains/domainManager.js"></script>
754-
<script src="src/js/domains/generalKit.js"></script>
755-
<script src="src/js/domains/electricalKit.js"></script>
756-
<script src="src/js/domains/softwareKit.js"></script>
757-
<script src="src/js/domains/constructionKit.js"></script>
752+
<!-- Domain Kits — portfolio-managed, not in engine submodule -->
753+
<script src="/assets/schema-editor/domains/domainManager.js"></script>
754+
<script src="/assets/schema-editor/domains/generalKit.js"></script>
755+
<script src="/assets/schema-editor/domains/electricalKit.js"></script>
756+
<script src="/assets/schema-editor/domains/softwareKit.js"></script>
757+
<script src="/assets/schema-editor/domains/constructionKit.js"></script>
758758

759759
<!-- Features -->
760760
<script src="src/js/features/viewTransform.js"></script>
@@ -853,8 +853,8 @@ <h3 class="modal-title">
853853
$('#exportXStateBtn').on('click', () => window.editor.exportAsXState());
854854
$('#sendFsmToTafneBtn').on('click', () => window.editor.sendFsmToTafne());
855855

856-
// CWS IPC: receive back-annotation from TAFNE
857-
CwsBridge.onData(function (envelope) {
856+
// CWS IPC: receive back-annotation from TAFNE (no-op when OS bridge absent)
857+
if (window.CwsBridge) CwsBridge.onData(function (envelope) {
858858
if (envelope?.hints?.action !== 'back-annotate') return;
859859
window.editor.receiveBackAnnotation(envelope);
860860
});

‎electrical/index.html‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -748,13 +748,13 @@ <h3 class="modal-title">
748748
<!-- Geometry Engine (4-phase pipeline — after canvas, before features) -->
749749
<script src="src/js/core/geometryEngine.js"></script>
750750

751-
<!-- Domain Kits (Phase 2) -->
752-
<script src="src/js/domains/domainManager.js"></script>
753-
<script src="src/js/domains/generalKit.js"></script>
754-
<script src="src/js/data/component-specs.js"></script>
755-
<script src="src/js/domains/electricalKit.js"></script>
756-
<script src="src/js/domains/softwareKit.js"></script>
757-
<script src="src/js/domains/constructionKit.js"></script>
751+
<!-- Domain Kits — portfolio-managed, not in engine submodule -->
752+
<script src="/assets/schema-editor/domains/domainManager.js"></script>
753+
<script src="/assets/schema-editor/domains/generalKit.js"></script>
754+
<script src="/assets/schema-editor/data/component-specs.js"></script>
755+
<script src="/assets/schema-editor/domains/electricalKit.js"></script>
756+
<script src="/assets/schema-editor/domains/softwareKit.js"></script>
757+
<script src="/assets/schema-editor/domains/constructionKit.js"></script>
758758

759759
<!-- Features -->
760760
<script src="src/js/features/viewTransform.js"></script>
@@ -858,8 +858,8 @@ <h3 class="modal-title">
858858
$('#exportXStateBtn').on('click', () => window.editor.exportAsXState());
859859
$('#sendFsmToTafneBtn').on('click', () => window.editor.sendFsmToTafne());
860860

861-
// CWS IPC: receive back-annotation from TAFNE
862-
CwsBridge.onData(function (envelope) {
861+
// CWS IPC: receive back-annotation from TAFNE (no-op when OS bridge absent)
862+
if (window.CwsBridge) CwsBridge.onData(function (envelope) {
863863
if (envelope?.hints?.action !== 'back-annotate') return;
864864
window.editor.receiveBackAnnotation(envelope);
865865
});

‎general/index.html‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -746,11 +746,12 @@ <h3 class="modal-title">
746746
<!-- Geometry Engine (4-phase pipeline — after canvas, before features) -->
747747
<script src="src/js/core/geometryEngine.js"></script>
748748

749-
<!-- Domain Kits (Phase 2) -->
750-
<script src="src/js/domains/domainManager.js"></script>
751-
<script src="src/js/domains/electricalKit.js"></script>
752-
<script src="src/js/domains/softwareKit.js"></script>
753-
<script src="src/js/domains/constructionKit.js"></script>
749+
<!-- Domain Kits — portfolio-managed, not in engine submodule -->
750+
<script src="/assets/schema-editor/domains/domainManager.js"></script>
751+
<script src="/assets/schema-editor/domains/generalKit.js"></script>
752+
<script src="/assets/schema-editor/domains/electricalKit.js"></script>
753+
<script src="/assets/schema-editor/domains/softwareKit.js"></script>
754+
<script src="/assets/schema-editor/domains/constructionKit.js"></script>
754755

755756
<!-- Features -->
756757
<script src="src/js/features/viewTransform.js"></script>
@@ -849,8 +850,8 @@ <h3 class="modal-title">
849850
$('#exportXStateBtn').on('click', () => window.editor.exportAsXState());
850851
$('#sendFsmToTafneBtn').on('click', () => window.editor.sendFsmToTafne());
851852

852-
// CWS IPC: receive back-annotation from TAFNE
853-
CwsBridge.onData(function (envelope) {
853+
// CWS IPC: receive back-annotation from TAFNE (no-op when OS bridge absent)
854+
if (window.CwsBridge) CwsBridge.onData(function (envelope) {
854855
if (envelope?.hints?.action !== 'back-annotate') return;
855856
window.editor.receiveBackAnnotation(envelope);
856857
});

‎index.html‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -761,12 +761,12 @@ <h3 class="modal-title">
761761
<!-- Geometry Engine (4-phase pipeline — after canvas, before features) -->
762762
<script src="src/js/core/geometryEngine.js"></script>
763763

764-
<!-- Domain Kits (Phase 2) -->
765-
<script src="src/js/domains/domainManager.js"></script>
766-
<script src="src/js/domains/generalKit.js"></script>
767-
<script src="src/js/domains/electricalKit.js"></script>
768-
<script src="src/js/domains/softwareKit.js"></script>
769-
<script src="src/js/domains/constructionKit.js"></script>
764+
<!-- Domain Kits — portfolio-managed, not in engine submodule -->
765+
<script src="/assets/schema-editor/domains/domainManager.js"></script>
766+
<script src="/assets/schema-editor/domains/generalKit.js"></script>
767+
<script src="/assets/schema-editor/domains/electricalKit.js"></script>
768+
<script src="/assets/schema-editor/domains/softwareKit.js"></script>
769+
<script src="/assets/schema-editor/domains/constructionKit.js"></script>
770770

771771
<!-- Features -->
772772
<script src="src/js/features/viewTransform.js"></script>
@@ -881,8 +881,8 @@ <h3 class="modal-title">
881881
});
882882
}
883883

884-
// CWS IPC: receive back-annotation from TAFNE
885-
CwsBridge.onData(function (envelope) {
884+
// CWS IPC: receive back-annotation from TAFNE (no-op when OS bridge absent)
885+
if (window.CwsBridge) CwsBridge.onData(function (envelope) {
886886
if (envelope?.hints?.action !== 'back-annotate') return;
887887
window.editor.receiveBackAnnotation(envelope);
888888
});

‎software/index.html‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -749,12 +749,12 @@ <h3 class="modal-title">
749749
<!-- Geometry Engine (4-phase pipeline — after canvas, before features) -->
750750
<script src="src/js/core/geometryEngine.js"></script>
751751

752-
<!-- Domain Kits (Phase 2) -->
753-
<script src="src/js/domains/domainManager.js"></script>
754-
<script src="src/js/domains/generalKit.js"></script>
755-
<script src="src/js/domains/electricalKit.js"></script>
756-
<script src="src/js/domains/softwareKit.js"></script>
757-
<script src="src/js/domains/constructionKit.js"></script>
752+
<!-- Domain Kits — portfolio-managed, not in engine submodule -->
753+
<script src="/assets/schema-editor/domains/domainManager.js"></script>
754+
<script src="/assets/schema-editor/domains/generalKit.js"></script>
755+
<script src="/assets/schema-editor/domains/electricalKit.js"></script>
756+
<script src="/assets/schema-editor/domains/softwareKit.js"></script>
757+
<script src="/assets/schema-editor/domains/constructionKit.js"></script>
758758

759759
<!-- Features -->
760760
<script src="src/js/features/viewTransform.js"></script>
@@ -858,8 +858,8 @@ <h3 class="modal-title">
858858
$('#exportXStateBtn').on('click', () => window.editor.exportAsXState());
859859
$('#sendFsmToTafneBtn').on('click', () => window.editor.sendFsmToTafne());
860860

861-
// CWS IPC: receive back-annotation from TAFNE
862-
CwsBridge.onData(function (envelope) {
861+
// CWS IPC: receive back-annotation from TAFNE (no-op when OS bridge absent)
862+
if (window.CwsBridge) CwsBridge.onData(function (envelope) {
863863
if (envelope?.hints?.action !== 'back-annotate') return;
864864
window.editor.receiveBackAnnotation(envelope);
865865
});

‎src/js/core/engine.js‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/* ============================================================
2+
ginexys-schema-engine — public API entry point
3+
4+
Two tiers of engine access:
5+
6+
1. Spatial primitives (browser + worker, zero DOM):
7+
KDTree2D — O(log n) nearest-neighbour queries
8+
QuadTree2D — O(log n) bounding-box range queries
9+
CameraMatrix — affine 2D pan/zoom/rotate with SVG matrix sync
10+
11+
2. Topology engine (worker-safe, zero DOM):
12+
PDFGeometryEngine — 4-phase SVG topology analysis pipeline
13+
Phase 1: transform baking (DOMMatrix/DOMPoint, worker-native)
14+
Phase 2: geometric classification (linearity + circularity)
15+
Phase 3: vertex snapping + port discovery (KDTree2D)
16+
Phase 4: adjacency graph (nodes, edges, junctions)
17+
18+
Browser CDN — full editor context:
19+
<script src="src/js/core/cameraMatrix.js"></script>
20+
<script src="src/js/core/kdTree.js"></script>
21+
<script src="src/js/core/quadTree.js"></script>
22+
<script src="src/js/core/geometry-engine.standalone.js"></script>
23+
<script src="src/js/core/engine.js"></script>
24+
25+
Web Worker usage:
26+
importScripts('kdTree.js', 'geometry-engine.standalone.js');
27+
const descriptors = PDFGeometryEngine.serialize(svgElement); // main thread
28+
// postMessage(descriptors) → worker:
29+
const result = new PDFGeometryEngine({ eps: 0.5 }).analyze(descriptors);
30+
// result: { wires, components, connectors, graph, ports }
31+
32+
npm / ES module support planned for a future release.
33+
============================================================ */
34+
(function (global) {
35+
global.GinexysEngine = {
36+
/** 2D k-d tree — O(log n) nearest-neighbour spatial queries */
37+
KDTree2D,
38+
/** 2D quad-tree — O(log n) bounding-box range queries */
39+
QuadTree2D,
40+
/** Affine 2D camera transform — pan, zoom, rotate with SVG matrix sync */
41+
CameraMatrix,
42+
/** Worker-safe 4-phase SVG topology analysis — accepts plain JS descriptors */
43+
PDFGeometryEngine,
44+
version: '1.1.0',
45+
};
46+
})(window);

0 commit comments

Comments
 (0)