Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/11/15 13:53:10 (8 years ago)
Author:
jkarder
Message:

#2205: worked on optimization networks

  • refactored network visualization
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/OptimizationNetworks/HeuristicLab.Networks.Views.NetworkVisualization.Views/3.3/NetworkVisualizationView.cs

    r13077 r13135  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using System.Linq;
    2324using HeuristicLab.Collections;
     
    2829using HeuristicLab.Networks.Views.NetworkVisualization.Views.ChartModes;
    2930using HeuristicLab.Visualization;
     31using HeuristicLab.Visualization.ChartModes;
    3032
    3133namespace HeuristicLab.Networks.Views.NetworkVisualization.Views {
     
    3436  [Content(typeof(INetwork), false)]
    3537  public partial class NetworkVisualizationView : NetworkItemView {
     38    private Dictionary<string, IPrimitive> primitiveDict = new Dictionary<string, IPrimitive>();
     39
    3640    public new INetwork Content {
    3741      get { return (INetwork)base.Content; }
     
    4246      InitializeComponent();
    4347
    44       var initialMode = new NetworkSelectChartMode(chartControl);
     48      var initialMode = new SelectChartMode(chartControl);
    4549      chartControl.AddChartModes(
    4650        initialMode,
    47         new MoveChartMode(chartControl),
     51        new PanChartMode(chartControl),
     52        new RulerChartMode(chartControl),
    4853        new ZoomInChartMode(chartControl),
    4954        new ZoomOutChartMode(chartControl),
     
    8186    }
    8287
    83     private void UpdateContent() {
    84       if (Content == null) return;
    85 
    86       chartControl.Chart.Group.Clear();
    87       DrawNodes(Content.Nodes);
    88       ConnectNodes(Content.Nodes);
    89     }
    90 
    91     private void DrawNodes(IKeyedItemCollection<string, INode> nodes) {
    92       var chart = chartControl.Chart;
    93 
    94       foreach (var node in nodes.OfType<IVisualizableNode>()) {
    95         var nodeShape = new NodeRectangle(chart, node);
    96         chart.Group.Add(nodeShape);
    97       }
    98     }
    99 
    100     private void ConnectNodes(IKeyedItemCollection<string, INode> nodes) {
    101       var chart = chartControl.Chart;
    102       var nodeRectangles = chart.Group.Primitives.OfType<NodeRectangle>();
    103       var node2NodeShape = nodeRectangles.ToDictionary(k => k.NetworkItem.Name, v => v);
    104 
    105       foreach (var node in nodes) {
    106         var nodeShape = node2NodeShape[node.Name];
    107         foreach (var port in node.Ports.OfType<IConnectablePort>()) {
    108           var connectedPort = port.ConnectedPort as IConnectablePort;
    109           if (connectedPort == null) continue;
    110 
    111           var connectedNode = connectedPort.Parent;
    112           if (connectedNode == null) continue;
    113 
    114           var connectedShape = node2NodeShape[connectedNode.Name];
    115           var leftPortRectangle = nodeShape.GetPortRectangle(port);
    116           var rightPortRectangle = connectedShape.GetPortRectangle(connectedPort);
    117 
    118           var connectionShape = new ConnectionLine(chart, leftPortRectangle, rightPortRectangle);
    119 
    120           chart.Group.Add(connectionShape);
    121         }
    122       }
    123     }
    124 
    12588    #region Event Handlers
    12689    #region Nodes Event Handlers
     
    149112    #endregion
    150113    #endregion
     114
     115    #region Helpers
     116    private void UpdateContent() {
     117      if (Content == null) return;
     118
     119      chartControl.SuspendRendering();
     120      try {
     121        chartControl.Chart.Group.Clear();
     122        DrawNodes(Content.Nodes);
     123        ConnectNodes(Content.Nodes);
     124      } finally {
     125        chartControl.ResumeRendering();
     126      }
     127    }
     128
     129    private void DrawNodes(IKeyedItemCollection<string, INode> nodes) {
     130      foreach (var node in nodes) {
     131        var defaultPrimitive = PrimitiveAttribute.CreateDefaultPrimitive(node.GetType(), chartControl.Chart, node);
     132        if (defaultPrimitive == null) continue;
     133        chartControl.Chart.Group.Add(defaultPrimitive);
     134        primitiveDict[node.Name] = defaultPrimitive;
     135      }
     136    }
     137
     138    private void ConnectNodes(IKeyedItemCollection<string, INode> nodes) {
     139      var chart = chartControl.Chart;
     140      foreach (var node in nodes) {
     141        var nodeRectangle = primitiveDict[node.Name] as NodeRectangle;
     142        if (nodeRectangle == null) continue;
     143
     144        foreach (var port in node.Ports.OfType<IConnectablePort>()) {
     145          var connectedPort = port.ConnectedPort as IConnectablePort;
     146          if (connectedPort == null) continue;
     147
     148          var connectedNode = connectedPort.Parent;
     149          if (connectedNode == null) continue;
     150
     151          var connectedRectangle = primitiveDict[connectedNode.Name] as NodeRectangle;
     152          if (connectedRectangle == null) continue;
     153
     154          var leftPortRectangle = (PortRectangle)nodeRectangle.GetPortPrimitive(port);
     155          var rightPortRectangle = (PortRectangle)connectedRectangle.GetPortPrimitive(connectedPort);
     156
     157          var connectionShape = new ConnectionLine(chart, leftPortRectangle, rightPortRectangle);
     158
     159          chart.Group.Add(connectionShape);
     160        }
     161      }
     162    }
     163    #endregion
    151164  }
    152165}
Note: See TracChangeset for help on using the changeset viewer.