private void UpdateHighlights() { ClearHighlights(); // get the selected shape NShape shape = (view.Selection.AnchorNode as NShape); if (shape == null) { document.SmartRefreshAllViews(); return; } // build the graph in which the shape resides NGraphBuilder graphBuilder = new NGraphBuilder(new NShapeGraphAdapter(), new NGraphPartFactory()); NObjectGraphPartMap map; NGraph graph = graphBuilder.BuildGraph(shape, out map); if (graph == null) { document.SmartRefreshAllViews(); return; } NNodeList shapesToHighlight = new NNodeList(); switch (shape.ShapeType) { case ShapeType.Shape2D: // 2D shapes are treated as graph vertices, so we must find the vertex in the graph, which // represents the shape NGraphVertex vertex = (map.GetPartFromObject(shape) as NGraphVertex); if (vertex != null) { // add edges if (allEdgesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.Edges, map)); } else { if (incommingEdgesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.IncomingEdges, map)); } if (outgoingEdgesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.OutgoingEdges, map)); } } // add neighbour vertices if (neighbourVerticesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.NeighbourVertices, map)); } else { if (sourceVerticesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.SourceVertices, map)); } if (destinationVerticesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.DestinationVertices, map)); } } // add accessible vertices if (accessibleVerticesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.AccessibleVertices, map)); } else { if (predecessorVerticesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.PredecessorVertices, map)); } if (successorVerticesCheck.Checked) { shapesToHighlight.AddRangeNoDuplicates(GetShapesList(vertex.SuccessorVertices, map)); } } } break; case ShapeType.Shape1D: // 1D shapes are treated as graph edges, so we must find the edge in the graph, which // represents the shape NGraphEdge edge = (map.GetPartFromObject(shape) as NGraphEdge); if (edge != null) { if (fromVertexCheck.Checked) { shapesToHighlight.AddNoDuplicates((NShape)map.GetObjectFromPart(edge.FromVertex)); } if (toVertexCheck.Checked) { shapesToHighlight.AddNoDuplicates((NShape)map.GetObjectFromPart(edge.ToVertex)); } } break; } // highlight the shapes foreach (NShape cur in shapesToHighlight) { cur.Style.FillStyle = (highlightFillStyle.Clone() as NFillStyle); cur.Style.StrokeStyle = (highlightStrokeStyle.Clone() as NStrokeStyle); } // smart refresh all views document.SmartRefreshAllViews(); }