1.1.1 • Published 7 months ago

sprotty-routing-libavoid v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Supported Sprotty versions: 0.11-0.13

📦 Getting Started

  1. 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"
  2. 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.

  3. 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();
  4. 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);
  5. 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:

1.2.0-beta.0

7 months ago

1.1.1

12 months ago

1.0.38

2 years ago

1.0.33

2 years ago

1.0.32

2 years ago

1.0.31

2 years ago

1.0.37

2 years ago

1.0.36

2 years ago

1.0.35

2 years ago

1.0.34

2 years ago

1.0.26

2 years ago

1.0.29

2 years ago

1.0.28

2 years ago

1.0.27

2 years ago

1.0.30

2 years ago

1.0.19

2 years ago

1.0.18

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.22

2 years ago

1.0.21

2 years ago

1.0.20

2 years ago

1.0.25

2 years ago

1.0.24

2 years ago

1.0.23

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.2

3 years ago