From 493471f631d21a6d810823716262cced5bcf5e55 Mon Sep 17 00:00:00 2001 From: Mihail Silantev Date: Thu, 22 Jan 2026 18:29:06 +0300 Subject: [PATCH 1/4] feat: added checkpoints binding methods --- embind/bindings.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/embind/bindings.cpp b/embind/bindings.cpp index c1f1d12..caded3b 100644 --- a/embind/bindings.cpp +++ b/embind/bindings.cpp @@ -104,7 +104,10 @@ EMSCRIPTEN_BINDINGS(my_module) { .value("ConnType_Orthogonal", Avoid::ConnType_Orthogonal); class_("Checkpoint") - .constructor(); + .constructor() + .constructor(); + + register_vector("CheckpointVector"); class_("ConnRef") .constructor() @@ -115,6 +118,8 @@ EMSCRIPTEN_BINDINGS(my_module) { .function("setDestEndpoint", &Avoid::ConnRef::setDestEndpoint) .function("routingType", &Avoid::ConnRef::routingType) .function("setRoutingType", &Avoid::ConnRef::setRoutingType) + .function("setRoutingCheckpoints", &Avoid::ConnRef::setRoutingCheckpoints, allow_raw_pointers()) + .function("routingCheckpoints", &Avoid::ConnRef::routingCheckpoints) .function("displayRoute", &Avoid::ConnRef::displayRoute, allow_raw_pointers()) .function("setHateCrossings", &Avoid::ConnRef::setHateCrossings) .function("doesHateCrossings", &Avoid::ConnRef::doesHateCrossings); From f27daf082349492daf41de89e37ca1325084bab8 Mon Sep 17 00:00:00 2001 From: Mihail Silantev Date: Thu, 22 Jan 2026 18:31:16 +0300 Subject: [PATCH 2/4] feat: added checkpoint methods types --- typings/libavoid.d.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/typings/libavoid.d.ts b/typings/libavoid.d.ts index 66cb67d..d627b62 100644 --- a/typings/libavoid.d.ts +++ b/typings/libavoid.d.ts @@ -31,6 +31,16 @@ declare interface ConnEnd { createConnEndFromJunctionRef(JunctionRef: JunctionRef, classId: number): ConnEnd; } +declare interface Checkpoint { + new (point: Point): Checkpoint; + new (point: Point, ad: ConnDirFlags, dd: ConnDirFlags): Checkpoint; +} + +declare interface CheckpointVector { + new (): CheckpointVector; + push_back(checkpoint: Checkpoint): void; +} + declare interface ConnRef { new (router: Router): ConnRef; new (router: Router, srcConnEnd: ConnEnd, dstConnEnd: ConnEnd): ConnRef; @@ -39,6 +49,9 @@ declare interface ConnRef { setSourceEndpoint(srcPoint: ConnEnd): void; setDestEndpoint(dstPoint: ConnEnd): void; setRoutingType(type: number): void; + setRoutingCheckpoints(checkpoints: CheckpointVector): void; + routingCheckpoints(): CheckpointVector; + // connRefPtr is raw pointer to the object, to get ConnRef object use: // `const connRef = Avoid.wrapPointer(connRefPtr, Avoid.ConnRef)` // more details: https://emscripten.org/docs/porting/connecting_cpp_and_javascript/WebIDL-Binder.html#pointers-and-comparisons @@ -101,6 +114,8 @@ export interface Avoid { ConnEnd: ConnEnd; ConnRef: ConnRef; + Checkpoint: Checkpoint; + CheckpointVector: CheckpointVector; Point: Point; Rectangle: Rectangle; Router: Router; From d74a8efc7d28b1461e1027853388544fdc01f73e Mon Sep 17 00:00:00 2001 From: Mihail Silantev Date: Thu, 22 Jan 2026 18:32:31 +0300 Subject: [PATCH 3/4] feat: added RoutingParameter and RoutingOption enums to types --- typings/libavoid.d.ts | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/typings/libavoid.d.ts b/typings/libavoid.d.ts index d627b62..96f189e 100644 --- a/typings/libavoid.d.ts +++ b/typings/libavoid.d.ts @@ -6,6 +6,28 @@ declare interface Point { y: number; } +declare enum RoutingParameter { + "segmentPenalty", + "anglePenalty", + "crossingPenalty", + "clusterCrossingPenalty", + "fixedSharedPathPenalty", + "portDirectionPenalty", + "shapeBufferDistance", + "idealNudgingDistance", + "reverseDirectionPenalty", +} + +declare enum RoutingOption { + "nudgeOrthogonalSegmentsConnectedToShapes", + "improveHyperedgeRoutesMovingJunctions", + "penaliseOrthogonalSharedPathsAtConnEnds", + "nudgeOrthogonalTouchingColinearSegments", + "performUnifyingNudgingPreprocessingStep", + "improveHyperedgeRoutesMovingAddingAndDeletingJunctions", + "nudgeSharedPathsWithCommonEndPoint", +} + declare interface Router { new (flags: number): Router; @@ -16,8 +38,8 @@ declare interface Router { moveShape(shape: ShapeRef, newPolygon: Polygon); moveShape(shape: ShapeRef, xDiff: number, yDiff: number); deleteShape(shape: ShapeRef); - setRoutingParameter(parameter: number, value: number): void; - setRoutingOption(option: number, value: boolean): void; + setRoutingParameter(parameter: RoutingParameter, value: number): void; + setRoutingOption(option: RoutingOption, value: boolean): void; } declare interface PolyLine { @@ -124,6 +146,9 @@ export interface Avoid { JunctionRef: JunctionRef; ShapeConnectionPin: ShapeConnectionPin; + RoutingParameter: Record; + RoutingOption: Record; + destroy(obj: any): void; getPointer(obj: any): number; wrapPointer(ptr: number, Class: T): T; From 19b72a619aad6f68cbeab663a287753acd71185c Mon Sep 17 00:00:00 2001 From: Mihail Silantev Date: Thu, 22 Jan 2026 18:34:07 +0300 Subject: [PATCH 4/4] fix: several fixes related with using of embind instead of WebIDLBinder --- typings/libavoid.d.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/typings/libavoid.d.ts b/typings/libavoid.d.ts index 96f189e..e84015a 100644 --- a/typings/libavoid.d.ts +++ b/typings/libavoid.d.ts @@ -35,16 +35,18 @@ declare interface Router { printInfo(): void; deleteConnector(connRef: ConnRef): void; - moveShape(shape: ShapeRef, newPolygon: Polygon); - moveShape(shape: ShapeRef, xDiff: number, yDiff: number); + moveShape_poly(shape: ShapeRef, newPolygon: Polygon); + moveShape_delta(shape: ShapeRef, xDiff: number, yDiff: number); deleteShape(shape: ShapeRef); setRoutingParameter(parameter: RoutingParameter, value: number): void; setRoutingOption(option: RoutingOption, value: boolean): void; + + delete(): void; } declare interface PolyLine { size(): number; - get_ps(index: number): Point; + at(index: number): Point; } declare interface ConnEnd { @@ -97,6 +99,7 @@ declare interface ShapeConnectionPin { directions(): ConnDirFlags; position(): Point; updatePosition(newPosition: Point): void; + delete(): void; }