示例#1
0
        /// <summary>
        /// Adds a mapper with a <see cref="PreferredPlacementDescriptor"/> that matches the given settings to the mapper
        /// registry of the given graph. In addition, sets the label model of all edge labels to free since that model
        /// can realizes any label placement calculated by a layout algorithm.
        /// </summary>
        public LayoutData CreateLabelingLayoutData(
            IGraph graph, EnumLabelPlacementAlongEdge placeAlongEdge, EnumLabelPlacementSideOfEdge sideOfEdge,
            EnumLabelPlacementOrientation orientation, double distanceToEdge)
        {
            var descriptor = CreatePreferredPlacementDescriptor(
                placeAlongEdge,
                sideOfEdge,
                orientation,
                distanceToEdge
                );

            // change to a free edge label model to support integrated edge labeling
            var model = new FreeEdgeLabelModel();

            foreach (var label in graph.GetEdgeLabels())
            {
                if (!(label.LayoutParameter.Model  is FreeEdgeLabelModel))
                {
                    graph.SetLabelLayoutParameter(label, model.FindBestParameter(label, model, label.GetLayout()));
                }
            }

            var layoutData = new GenericLayoutData();

            layoutData.AddItemMapping(LayoutGraphAdapter.EdgeLabelLayoutPreferredPlacementDescriptorDpKey,
                                      new ItemMapping <ILabel, PreferredPlacementDescriptor>(label => descriptor));

            return(layoutData);
        }
示例#2
0
        /// <summary>
        /// Adds a mapper with a <see cref="PreferredPlacementDescriptor"/> that matches the given settings to the mapper
        /// registry of the given graph. In addition, sets the label model of all edge labels to free since that model
        /// can realizes any label placement calculated by a layout algorithm.
        /// </summary>
        public static void AddPreferredPlacementDescriptor(
            IGraph graph, EnumLabelPlacementAlongEdge placeAlongEdge, EnumLabelPlacementSideOfEdge sideOfEdge,
            EnumLabelPlacementOrientation orientation, double distanceToEdge)
        {
            var model      = new FreeEdgeLabelModel();
            var descriptor = CreatePreferredPlacementDescriptor(placeAlongEdge, sideOfEdge, orientation, distanceToEdge);

            graph.MapperRegistry.CreateConstantMapper <ILabel, PreferredPlacementDescriptor>(
                LayoutGraphAdapter.EdgeLabelLayoutPreferredPlacementDescriptorDpKey,
                descriptor);

            foreach (ILabel label in graph.GetEdgeLabels())
            {
                graph.SetLabelLayoutParameter(
                    label,
                    model.FindBestParameter(label, model, label.GetLayout()));
            }
        }
示例#3
0
        /// <summary>
        /// Creates a new <see cref="PreferredPlacementDescriptor"/> that matches the given settings.
        /// </summary>
        public PreferredPlacementDescriptor CreatePreferredPlacementDescriptor(
            EnumLabelPlacementAlongEdge placeAlongEdge, EnumLabelPlacementSideOfEdge sideOfEdge,
            EnumLabelPlacementOrientation orientation, double distanceToEdge)
        {
            var descriptor = new PreferredPlacementDescriptor();

            switch (sideOfEdge)
            {
            case EnumLabelPlacementSideOfEdge.Anywhere:
                descriptor.SideOfEdge = LabelPlacements.Anywhere;
                break;

            case EnumLabelPlacementSideOfEdge.OnEdge:
                descriptor.SideOfEdge = LabelPlacements.OnEdge;
                break;

            case EnumLabelPlacementSideOfEdge.Left:
                descriptor.SideOfEdge = LabelPlacements.LeftOfEdge;
                break;

            case EnumLabelPlacementSideOfEdge.Right:
                descriptor.SideOfEdge = LabelPlacements.RightOfEdge;
                break;

            case EnumLabelPlacementSideOfEdge.LeftOrRight:
                descriptor.SideOfEdge = LabelPlacements.LeftOfEdge | LabelPlacements.RightOfEdge;
                break;
            }

            switch (placeAlongEdge)
            {
            case EnumLabelPlacementAlongEdge.Anywhere:
                descriptor.PlaceAlongEdge = LabelPlacements.Anywhere;
                break;

            case EnumLabelPlacementAlongEdge.AtSourcePort:
                descriptor.PlaceAlongEdge = LabelPlacements.AtSourcePort;
                break;

            case EnumLabelPlacementAlongEdge.AtTargetPort:
                descriptor.PlaceAlongEdge = LabelPlacements.AtTargetPort;
                break;

            case EnumLabelPlacementAlongEdge.AtSource:
                descriptor.PlaceAlongEdge = LabelPlacements.AtSource;
                break;

            case EnumLabelPlacementAlongEdge.AtTarget:
                descriptor.PlaceAlongEdge = LabelPlacements.AtTarget;
                break;

            case EnumLabelPlacementAlongEdge.Centered:
                descriptor.PlaceAlongEdge = LabelPlacements.AtCenter;
                break;
            }

            switch (orientation)
            {
            case EnumLabelPlacementOrientation.Parallel:
                descriptor.Angle          = 0.0d;
                descriptor.AngleReference = LabelAngleReferences.RelativeToEdgeFlow;
                break;

            case EnumLabelPlacementOrientation.Orthogonal:
                descriptor.Angle          = Math.PI / 2;
                descriptor.AngleReference = LabelAngleReferences.RelativeToEdgeFlow;
                break;

            case EnumLabelPlacementOrientation.Horizontal:
                descriptor.Angle          = 0.0d;
                descriptor.AngleReference = LabelAngleReferences.Absolute;
                break;

            case EnumLabelPlacementOrientation.Vertical:
                descriptor.Angle          = Math.PI / 2;
                descriptor.AngleReference = LabelAngleReferences.Absolute;
                break;
            }

            descriptor.DistanceToEdge = distanceToEdge;
            return(descriptor);
        }