import { BundlingSettings } from './BundlingSettings';
import { EdgeRoutingMode } from './EdgeRoutingMode';
export class EdgeRoutingSettings {
    constructor() {
        this.coneAngle = 30 * (Math.PI / 180);
        //  Amount of space to leave around nodes
        this.padding = 3;
        this.polylinePadding = 1.5;
        this.routingToParentConeAngle = Math.PI / 6;
        this.simpleSelfLoopsForParentEdgesThreshold = 200;
        this.incrementalRoutingThreshold = 5000000;
        // debugging
        this.routeMultiEdgesAsBundles = true;
        //  if set to true the original spline is kept under the corresponding EdgeGeometry
        this.KeepOriginalSpline = false;
        this.EdgeRoutingMode = EdgeRoutingMode.Spline;
    }
    //  defines the way edges are routed
    get EdgeRoutingMode() {
        return this.edgeRoutingMode;
    }
    set EdgeRoutingMode(value) {
        if (value == EdgeRoutingMode.SplineBundling && this.BundlingSettings == null) {
            if (this.BundlingSettings == null) {
                this.BundlingSettings = new BundlingSettings();
            }
        }
        this.edgeRoutingMode = value;
    }
    //  the angle in degrees of the cones in the routing with the spanner
    get ConeAngle() {
        return this.coneAngle;
    }
    set ConeAngle(value) {
        this.coneAngle = value;
    }
    //  Amount of space to leave around nodes
    get Padding() {
        return this.padding;
    }
    set Padding(value) {
        this.padding = value;
    }
    //  Additional amount of padding to leave around nodes when routing with polylines
    get PolylinePadding() {
        return this.polylinePadding;
    }
    set PolylinePadding(value) {
        this.polylinePadding = value;
    }
    //  this is a cone angle to find a relatively close point on the parent boundary
    get RoutingToParentConeAngle() {
        return this.routingToParentConeAngle;
    }
    set RoutingToParentConeAngle(value) {
        this.routingToParentConeAngle = value;
    }
    //  if the number of the nodes participating in the routing of the parent edges is less than the threshold
    //  then the parent edges are routed avoiding the nodes
    get SimpleSelfLoopsForParentEdgesThreshold() {
        return this.simpleSelfLoopsForParentEdgesThreshold;
    }
    set SimpleSelfLoopsForParentEdgesThreshold(value) {
        this.simpleSelfLoopsForParentEdgesThreshold = value;
    }
    //  defines the size of the changed graph that could be routed fast with the standard spline routing when dragging
    get IncrementalRoutingThreshold() {
        return this.incrementalRoutingThreshold;
    }
    set IncrementalRoutingThreshold(value) {
        this.incrementalRoutingThreshold = value;
    }
    //  if set to true routes multi edges as ordered bundles, when routing in a spline mode
    //  <exception cref="NotImplementedException"></exception>
    get RouteMultiEdgesAsBundles() {
        return this.routeMultiEdgesAsBundles;
    }
    set RouteMultiEdgesAsBundles(value) {
        this.routeMultiEdgesAsBundles = value;
    }
}
//# sourceMappingURL=EdgeRoutingSettings.js.map