static NodeLabelingWindow() { LabelModels.Add(LABEL_MODEL_INTERIOR, new InteriorLabelModel()); LabelModels.Add(LABEL_MODEL_EXTERIOR, new ExteriorLabelModel() { Insets = new InsetsD(10) }); LabelModels.Add(LABEL_MODEL_FREENODE, new FreeNodeLabelModel()); LabelModels.Add(LABEL_MODEL_SANDWICH, new SandwichLabelModel() { YOffset = 10 }); IList <ILabelModelParameter> list = new List <ILabelModelParameter>(); var model = new ExteriorLabelModel() { Insets = new InsetsD(5) }; list.Add(model.CreateParameter(ExteriorLabelModel.Position.North)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.South)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.East)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.West)); model = new ExteriorLabelModel() { Insets = new InsetsD(10) }; list.Add(model.CreateParameter(ExteriorLabelModel.Position.North)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.South)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.East)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.West)); model = new ExteriorLabelModel() { Insets = new InsetsD(15) }; list.Add(model.CreateParameter(ExteriorLabelModel.Position.North)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.South)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.East)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.West)); var genericLabelModel = new GenericLabelModel(list[0]); foreach (var labelModelParameter in list) { // set different profits for various insets var insets = ((ExteriorLabelModel)labelModelParameter.Model).Insets.Top; double profit = insets < 10 ? 1.0 : insets < 15 ? 0.9 : 0.8; genericLabelModel.AddParameter(labelModelParameter, new LabelCandidateDescriptor { Profit = profit }); } LabelModels.Add(LABEL_MODEL_THREE_DISTANCE, genericLabelModel); }
/// <summary> /// Creates a sample graph and introduces all important graph elements present in /// yFiles WPF. Additionally, this method now overrides the label placement for some specific labels. /// </summary> private void PopulateGraph() { #region Sample Graph creation //////////// Sample node creation /////////////////// // Creates two nodes with the default node size // The location is specified for the _center_ INode node1 = Graph.CreateNode(new PointD(50, 50)); INode node2 = Graph.CreateNode(new PointD(150, 50)); // Creates a third node with a different size of 80x40 // In this case, the location of (360,380) describes the _upper left_ // corner of the node bounds INode node3 = Graph.CreateNode(new RectD(360, 380, 80, 40)); ///////////////////////////////////////////////////// //////////// Sample edge creation /////////////////// // Creates some edges between the nodes IEdge edge1 = Graph.CreateEdge(node1, node2); IEdge edge2 = Graph.CreateEdge(node2, node3); ///////////////////////////////////////////////////// //////////// Using Bends //////////////////////////// // Creates the first bend for edge2 at (400, 50) IBend bend1 = Graph.AddBend(edge2, new PointD(400, 50)); ///////////////////////////////////////////////////// //////////// Using Ports //////////////////////////// // Actually, edges connect "ports", not nodes directly. // If necessary, you can manually create ports at nodes // and let the edges connect to these. // Creates a port in the center of the node layout IPort port1AtNode1 = Graph.AddPort(node1, FreeNodePortLocationModel.NodeCenterAnchored); // Creates a port at the middle of the left border // Note to use absolute locations when placing ports using PointD. IPort port1AtNode3 = Graph.AddPort(node3, new PointD(node3.Layout.X, node3.Layout.GetCenter().Y)); // Creates an edge that connects these specific ports IEdge edgeAtPorts = Graph.CreateEdge(port1AtNode1, port1AtNode3); ///////////////////////////////////////////////////// //////////// Sample label creation /////////////////// // Adds labels to several graph elements Graph.AddLabel(node1, "N 1"); Graph.AddLabel(node2, "N 2"); var node3Label = Graph.AddLabel(node3, "N 3"); Graph.AddLabel(edgeAtPorts, "Edge at Ports"); ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// #endregion ///////////////// New in this Sample ///////////////// // Override default label placement // For our "special" label, we use a model that describes discrete positions // outside the node bounds ExteriorLabelModel exteriorLabelModel = new ExteriorLabelModel(); // We use some extra insets from the label to the node bounds exteriorLabelModel.Insets = new InsetsD(5); // We assign this label a specific symbolic position out of the eight possible // external locations valid for ExteriorLabelModel Graph.SetLabelLayoutParameter(node3Label, exteriorLabelModel.CreateParameter(ExteriorLabelModel.Position.South)); ///////////////////////////////////////////////////// }
/// <summary> /// Populates the ToolStrip's LabelModel combobox /// </summary> private void SetupOptions() { const string LABEL_MODEL_INTERIOR = "Interior"; const string LABEL_MODEL_EXTERIOR = "Exterior"; const string LABEL_MODEL_FREENODE = "Free Node"; const string LABEL_MODEL_SANDWICH = "Sandwich"; const string LABEL_MODEL_THREE_DISTANCE = "Three Distances"; LabelModels.Add(LABEL_MODEL_INTERIOR, new InteriorLabelModel()); LabelModels.Add(LABEL_MODEL_EXTERIOR, new ExteriorLabelModel() { Insets = new InsetsD(10) }); LabelModels.Add(LABEL_MODEL_FREENODE, new FreeNodeLabelModel()); LabelModels.Add(LABEL_MODEL_SANDWICH, new SandwichLabelModel() { YOffset = 10 }); IList <ILabelModelParameter> list = new List <ILabelModelParameter>(); var model = new ExteriorLabelModel() { Insets = new InsetsD(5) }; list.Add(model.CreateParameter(ExteriorLabelModel.Position.North)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.South)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.East)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.West)); model = new ExteriorLabelModel() { Insets = new InsetsD(10) }; list.Add(model.CreateParameter(ExteriorLabelModel.Position.North)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.South)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.East)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.West)); model = new ExteriorLabelModel() { Insets = new InsetsD(15) }; list.Add(model.CreateParameter(ExteriorLabelModel.Position.North)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.NorthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.South)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthEast)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.SouthWest)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.East)); list.Add(model.CreateParameter(ExteriorLabelModel.Position.West)); var genericLabelModel = new GenericLabelModel(list[0]); foreach (var labelModelParameter in list) { // set different profits for various insets var insets = ((ExteriorLabelModel)labelModelParameter.Model).Insets.Top; double profit = insets < 10 ? 1.0 : insets < 15 ? 0.9 : 0.8; genericLabelModel.AddParameter(labelModelParameter, new LabelCandidateDescriptor { Profit = profit }); } LabelModels.Add(LABEL_MODEL_THREE_DISTANCE, genericLabelModel); // create the options foreach (var key in LabelModels.Keys) { labelModelComboBox.Items.Add(key); } labelModelComboBox.SelectedItem = LABEL_MODEL_EXTERIOR; }