sprotty-routing-libavoid v1.1.1
Supported Sprotty versions: 0.11-0.13
📦 Getting Started
Install
sprotty-routing-libavoid
npm package.npm install --save sprotty-routing-libavoid
1.1 Build systems don't recognize .wasm file as dependency, you need to include it in build manually. For instance run copy at the end of build process(e.g. esbuild-plugin-copy for esbuild) or just execute cp as the second subcommand of npm build script(or postbuild command), e.g:
"postbuild": "cp -f ../../node_modules/libavoid-js/dist/libavoid.wasm ./dist/libavoid.wasm"
Load router before application start, e.g.:
import { load as loadLibavoidRouter } from 'sprotty-routing-libavoid'; loadLibavoidRouter().then(() => { startApp(); // app start can vary, it just an example })
Note, that router loading is asynchronous, it's required because router uses WebAssembly and currently it can be loaded only asynchronously.
Add LibavoidRouter and optionally anchors to the DI container.
import { TYPES } from 'sprotty'; import { LibavoidDiamondAnchor, LibavoidEllipseAnchor, LibavoidRectangleAnchor, LibavoidRouter, } from 'sprotty-routing-libavoid'; bind(LibavoidRouter).toSelf().inSingletonScope(); bind(TYPES.IEdgeRouter).toService(LibavoidRouter); bind(TYPES.IAnchorComputer).to(LibavoidDiamondAnchor).inSingletonScope(); bind(TYPES.IAnchorComputer).to(LibavoidEllipseAnchor).inSingletonScope(); bind(TYPES.IAnchorComputer).to(LibavoidRectangleAnchor).inSingletonScope();
Use LibavoidEdge as base class for edges that should be routed with
LibavoidRouter
. It's optional, but recommended because so you can pass additional parameters to edges supported by libavoid router.import { LibavoidEdge } from 'sprotty-routing-libavoid'; import { PolylineEdgeView } from 'sprotty'; class CustomEdge extends LibavoidEdge {} // in DI config: configureModelElement(context, 'edge', CustomEdge, PolylineEdgeView);
Optionally customize configuration of
LibavoidRouter
:const router = container.get(LibavoidRouter); router.setOptions({ routingType: RouteType.Orthogonal, segmentPenalty: 50, idealNudgingDistance: 24, shapeBufferDistance: 25, nudgeOrthogonalSegmentsConnectedToShapes: true, // allow or disallow moving edge end from center nudgeOrthogonalTouchingColinearSegments: false });
Known limitations
TODO
- if AnchorComputer returns anchors on sides of connectables on first
Development
Notes:
- inversify requires
reflect-metadata
and experimentalDecorators, emitDecoratorMetadata, types and lib compilation options in tsconfig.json. Esbuild doesn't take these parameters(at least some of them) from tsconfig, because build created with esbuild doesn't work properly(injected classes cannot be resolved), that's why we still use tsc.
7 months ago
12 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago