private void InitializeGraphDefaults(IGraph graph)
        {
            graph.NodeDefaults.Style = new ShinyPlateNodeStyle {
                Brush = Brushes.Orange
            };
            graph.NodeDefaults.Size = new SizeD(100, 50);

            // create a label style that shows the labels bounds
            DefaultLabelStyle labelStyle = new DefaultLabelStyle {
                BackgroundPen   = Pens.LightGray,
                BackgroundBrush = new SolidBrush(Color.FromArgb(0x77, 0xCC, 0xFF, 0xFF)),
                StringFormat    = new StringFormat()
                {
                    Alignment = StringAlignment.Center
                }
            };

            graph.NodeDefaults.Labels.Style = labelStyle;
            //Our resize logic does not work together with all label models resp. label model parameters
            //for simplicity, we just use a centered label for nodes
            graph.NodeDefaults.Labels.LayoutParameter =
                new GenericLabelModel(InteriorLabelModel.Center).CreateDefaultParameter();
            graph.EdgeDefaults.Labels.Style = labelStyle;

            var labelModel = new EdgeSegmentLabelModel {
                Distance = 10
            };

            graph.EdgeDefaults.Labels.LayoutParameter = labelModel.CreateParameterFromSource(0, 0.5, EdgeSides.RightOfEdge);

            graph.SetUndoEngineEnabled(true);
        }
    /// <summary>
    /// Set up default label model parameters for graph elements.
    /// </summary>
    /// <remarks>
    /// Label model parameters control the actual label placement as well as the available
    /// placement candidates when moving the label interactively.
    /// </remarks>
    private void SetDefaultLabelParameters() {
      #region Default node label model parameter

      // For node labels, the default is a label position at the node center
      // Let's keep the default.  Here is how to set it manually
      Graph.NodeDefaults.Labels.LayoutParameter = InteriorLabelModel.Center;

      #endregion

      #region Default edge label parameter

      // For edge labels, the default is a label that is rotated to match the associated edge segment
      // We'll start by creating a model that is similar to the default:
      EdgeSegmentLabelModel edgeSegmentLabelModel = new EdgeSegmentLabelModel();
      // However, by default, the rotated label is centered on the edge path.
      // Let's move the label off of the path:
      edgeSegmentLabelModel.Distance = 10;
      // Finally, we can set this label model as the default for edge labels using a location at the center of the first segment
      Graph.EdgeDefaults.Labels.LayoutParameter = edgeSegmentLabelModel.CreateParameterFromSource(0, 0.5, EdgeSides.RightOfEdge);

      #endregion
    }
Beispiel #3
0
        private void SetupEdgeLabelModels(IGraph coreGraph, string edgeLabelingName)
        {
            if (edgeLabelingName == AS_IS)
            {
                return;
            }

            ILabelModel model;

            bool selectionOnly   = (bool)Handler.GetValue(SCOPE, CONSIDER_SELECTED_FEATURES_ONLY);
            bool placeEdgeLabels = (bool)Handler.GetValue(SCOPE, PLACE_EDGE_LABELS);
            bool autoRotate      = (bool)Handler.GetValue(MODEL, AUTO_ROTATE);

            if (!placeEdgeLabels)
            {
                return;
            }

            switch (edgeLabelingName)
            {
            case CENTER_SLIDER:
                model = new EdgeSegmentLabelModel {
                    AutoRotation = autoRotate, SideOfEdge = EdgeSides.OnEdge
                };
                break;

            case SIDE_SLIDER:
                model = new EdgeSegmentLabelModel {
                    AutoRotation = autoRotate, Distance = 10, SideOfEdge = EdgeSides.LeftOfEdge | EdgeSides.RightOfEdge
                };
                break;

            case NINE_POS:
                model = new NinePositionsEdgeLabelModel();
                break;

            case FREE:
            case BEST:
                model = new FreeEdgeLabelModel();
                break;

            default:
                throw new ArgumentException(UNKNOWN_MODEL_VALUE + edgeLabelingName, "edgeLabelingName");
            }

            foreach (ILabel label in coreGraph.Labels)
            {
                if (label.Owner is IEdge)
                {
                    if (selectionOnly)
                    {
                        if (base.IsSelected(label))
                        {
                            coreGraph.SetLabelLayoutParameter(label, model.CreateDefaultParameter());
                        }
                    }
                    else
                    {
                        coreGraph.SetLabelLayoutParameter(label, model.CreateDefaultParameter());
                    }
                }
            }
        }