VerifyOriginalEdgeMetadata ( IEdge oEdge1, IEdge oEdge2, IEdge oEdge3, IEdge oEdge4 ) { Assert.IsFalse(oEdge1.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsFalse(oEdge1.ContainsKey( ReservedMetadataKeys.Visibility)); Assert.IsFalse(oEdge2.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge2.ContainsKey( ReservedMetadataKeys.Visibility)); Assert.AreEqual(VisibilityKeyValue.Filtered, oEdge2.GetValue(ReservedMetadataKeys.Visibility)); Assert.IsFalse(oEdge3.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsFalse(oEdge3.ContainsKey( ReservedMetadataKeys.Visibility)); Assert.IsFalse(oEdge4.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsFalse(oEdge4.ContainsKey( ReservedMetadataKeys.Visibility)); }
IncidentEdgeShouldBeHidden ( IEdge oIncidentEdge, IVertex oVertex, Int32 iGroupIndex, Dictionary <Int32, Int32> oGroupIndexDictionary ) { Debug.Assert(oIncidentEdge != null); Debug.Assert(oVertex != null); Debug.Assert(iGroupIndex >= 0); Debug.Assert(oGroupIndexDictionary != null); Int32 iOtherGroupIndex = oGroupIndexDictionary[ oIncidentEdge.GetAdjacentVertex(oVertex).ID]; return( // The edge's vertices are not in the same group. iOtherGroupIndex != iGroupIndex && // The edge has not already been hidden. !oIncidentEdge.ContainsKey(ReservedMetadataKeys.SavedVisibility) ); }
IncidentEdgeShouldBeHidden ( IEdge oIncidentEdge, IVertex oVertex, Int32 iGroupIndex, Dictionary<Int32, Int32> oGroupIndexDictionary ) { Debug.Assert(oIncidentEdge != null); Debug.Assert(oVertex != null); Debug.Assert(iGroupIndex >= 0); Debug.Assert(oGroupIndexDictionary != null); Int32 iOtherGroupIndex = oGroupIndexDictionary[ oIncidentEdge.GetAdjacentVertex(oVertex).ID]; return ( // The edge's vertices are not in the same group. iOtherGroupIndex != iGroupIndex && // The edge has not already been hidden. !oIncidentEdge.ContainsKey(ReservedMetadataKeys.SavedVisibility) ); }
TestOnLayoutBegin() { // Draw rectangles, hide intergroup edges. const Double GroupRectanglePenWidth = 1.23; const IntergroupEdgeStyle IntergroupEdgeStyle = IntergroupEdgeStyle.Hide; IGraph oGraph = new Graph(GraphDirectedness.Undirected); IVertex[] aoVertices = TestGraphUtil.AddVertices(oGraph, 4); IEdgeCollection oEdges = oGraph.Edges; IEdge oEdge1 = oEdges.Add(aoVertices[0], aoVertices[1], false); IEdge oEdge2 = oEdges.Add(aoVertices[0], aoVertices[2], false); IEdge oEdge3 = oEdges.Add(aoVertices[2], aoVertices[3], false); IEdge oEdge4 = oEdges.Add(aoVertices[1], aoVertices[3], false); // oEdge2 is intergroup. Give it an initial visibility. oEdge2.SetValue(ReservedMetadataKeys.Visibility, VisibilityKeyValue.Filtered); // (oEdge4 is intergroup. Don't give it an initial visibility.) GroupInfo oGroup1 = new GroupInfo(); oGroup1.Vertices.AddLast(aoVertices[0]); oGroup1.Vertices.AddLast(aoVertices[1]); oGroup1.Rectangle = Rectangle.FromLTRB(1, 2, 3, 4); GroupInfo oGroup2 = new GroupInfo(); oGroup2.Vertices.AddLast(aoVertices[2]); oGroup2.Vertices.AddLast(aoVertices[3]); oGroup2.Rectangle = Rectangle.FromLTRB(5, 6, 7, 8); GroupMetadataManager.OnLayoutBegin(oGraph); GroupMetadataManager.OnLayoutUsingGroupsEnd(oGraph, new GroupInfo[] { oGroup1, oGroup2 }, GroupRectanglePenWidth, IntergroupEdgeStyle); GroupLayoutDrawingInfo oGroupLayoutDrawingInfo; Assert.IsTrue(GroupMetadataManager.TryGetGroupLayoutDrawingInfo( oGraph, out oGroupLayoutDrawingInfo)); Assert.AreEqual(GroupRectanglePenWidth, oGroupLayoutDrawingInfo.PenWidth); IList <GroupInfo> oGroupInfo = oGroupLayoutDrawingInfo.GroupsToDraw; Assert.AreEqual(2, oGroupInfo.Count); Assert.AreEqual(oGroup1, oGroupInfo[0]); Assert.AreEqual(oGroup2, oGroupInfo[1]); Assert.IsTrue(oGraph.ContainsKey( ReservedMetadataKeys.IntergroupEdgesHidden)); Assert.IsFalse(oEdge1.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge2.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.AreEqual(VisibilityKeyValue.Filtered, oEdge2.GetValue(ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge2.ContainsKey( ReservedMetadataKeys.Visibility)); Assert.AreEqual(VisibilityKeyValue.Hidden, oEdge2.GetValue(ReservedMetadataKeys.Visibility)); Assert.IsFalse(oEdge3.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge4.ContainsKey( ReservedMetadataKeys.Visibility)); Assert.AreEqual(VisibilityKeyValue.Hidden, oEdge4.GetValue(ReservedMetadataKeys.Visibility)); // Verify that OnLayoutBegin() reverses the metadata changes. GroupMetadataManager.OnLayoutBegin(oGraph); VerifyOriginalMetadata(oGraph, oEdge1, oEdge2, oEdge3, oEdge4); }
TestOnLayoutBegin6() { // Request that intergroup edges be combined, and there are some. const Double GroupRectanglePenWidth = 4.567; const IntergroupEdgeStyle IntergroupEdgeStyle = IntergroupEdgeStyle.Combine; IGraph oGraph = new Graph(GraphDirectedness.Undirected); IVertex[] aoVertices = TestGraphUtil.AddVertices(oGraph, 5); IEdgeCollection oEdges = oGraph.Edges; // Not intergroup. IEdge oEdge1 = oEdges.Add(aoVertices[0], aoVertices[1], false); IEdge oEdge2 = oEdges.Add(aoVertices[2], aoVertices[3], false); // Intergroup, between groups 1 and 2. IEdge oEdge3 = oEdges.Add(aoVertices[0], aoVertices[2], false); IEdge oEdge4 = oEdges.Add(aoVertices[1], aoVertices[2], false); IEdge oEdge5 = oEdges.Add(aoVertices[1], aoVertices[3], false); // Intergroup, between groups 2 and 3. IEdge oEdge6 = oEdges.Add(aoVertices[2], aoVertices[4], false); IEdge oEdge7 = oEdges.Add(aoVertices[3], aoVertices[4], false); // Intergroup, between groups 1 and 3. IEdge oEdge8 = oEdges.Add(aoVertices[1], aoVertices[4], false); GroupInfo oGroup1 = new GroupInfo(); oGroup1.Vertices.AddLast(aoVertices[0]); oGroup1.Vertices.AddLast(aoVertices[1]); oGroup1.Rectangle = Rectangle.FromLTRB(1, 2, 3, 4); GroupInfo oGroup2 = new GroupInfo(); oGroup2.Vertices.AddLast(aoVertices[2]); oGroup2.Vertices.AddLast(aoVertices[3]); oGroup2.Rectangle = Rectangle.FromLTRB(5, 6, 7, 8); GroupInfo oGroup3 = new GroupInfo(); oGroup3.Vertices.AddLast(aoVertices[4]); oGroup3.Rectangle = Rectangle.FromLTRB(9, 10, 11, 12); GroupMetadataManager.OnLayoutBegin(oGraph); GroupMetadataManager.OnLayoutUsingGroupsEnd(oGraph, new GroupInfo[] { oGroup1, oGroup2, oGroup3 }, GroupRectanglePenWidth, IntergroupEdgeStyle); GroupLayoutDrawingInfo oGroupLayoutDrawingInfo; Assert.IsTrue(GroupMetadataManager.TryGetGroupLayoutDrawingInfo( oGraph, out oGroupLayoutDrawingInfo)); Assert.AreEqual(GroupRectanglePenWidth, oGroupLayoutDrawingInfo.PenWidth); IList <GroupInfo> oGroupInfo = oGroupLayoutDrawingInfo.GroupsToDraw; Assert.AreEqual(3, oGroupInfo.Count); Assert.AreEqual(oGroup1, oGroupInfo[0]); Assert.AreEqual(oGroup2, oGroupInfo[1]); Assert.AreEqual(oGroup3, oGroupInfo[2]); Assert.IsTrue(oGraph.ContainsKey( ReservedMetadataKeys.IntergroupEdgesHidden)); Assert.IsFalse(oEdge1.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsFalse(oEdge2.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge3.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge4.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge5.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge6.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge7.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsTrue(oEdge8.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.AreEqual(3, oGroupLayoutDrawingInfo.CombinedIntergroupEdges.Count()); IntergroupEdgeInfo oCombinedIntergroupEdge; oCombinedIntergroupEdge = oGroupLayoutDrawingInfo.CombinedIntergroupEdges.Single( intergroupEdgeInfo => intergroupEdgeInfo.Group1Index == 0 && intergroupEdgeInfo.Group2Index == 1 ); Assert.AreEqual(0, oCombinedIntergroupEdge.Group1Index); Assert.AreEqual(1, oCombinedIntergroupEdge.Group2Index); Assert.AreEqual(3, oCombinedIntergroupEdge.Edges); oCombinedIntergroupEdge = oGroupLayoutDrawingInfo.CombinedIntergroupEdges.Single( intergroupEdgeInfo => intergroupEdgeInfo.Group1Index == 0 && intergroupEdgeInfo.Group2Index == 2 ); Assert.AreEqual(0, oCombinedIntergroupEdge.Group1Index); Assert.AreEqual(2, oCombinedIntergroupEdge.Group2Index); Assert.AreEqual(1, oCombinedIntergroupEdge.Edges); oCombinedIntergroupEdge = oGroupLayoutDrawingInfo.CombinedIntergroupEdges.Single( intergroupEdgeInfo => intergroupEdgeInfo.Group1Index == 1 && intergroupEdgeInfo.Group2Index == 2 ); Assert.AreEqual(1, oCombinedIntergroupEdge.Group1Index); Assert.AreEqual(2, oCombinedIntergroupEdge.Group2Index); Assert.AreEqual(2, oCombinedIntergroupEdge.Edges); }
TestOnLayoutBegin5() { // Request that intergroup edges be combined, although there are none. const Double GroupRectanglePenWidth = 4.567; const IntergroupEdgeStyle IntergroupEdgeStyle = IntergroupEdgeStyle.Combine; IGraph oGraph = new Graph(GraphDirectedness.Undirected); IVertex[] aoVertices = TestGraphUtil.AddVertices(oGraph, 5); IEdgeCollection oEdges = oGraph.Edges; IEdge oEdge1 = oEdges.Add(aoVertices[0], aoVertices[1], false); IEdge oEdge2 = oEdges.Add(aoVertices[2], aoVertices[3], false); GroupInfo oGroup1 = new GroupInfo(); oGroup1.Vertices.AddLast(aoVertices[0]); oGroup1.Vertices.AddLast(aoVertices[1]); oGroup1.Rectangle = Rectangle.FromLTRB(1, 2, 3, 4); GroupInfo oGroup2 = new GroupInfo(); oGroup2.Vertices.AddLast(aoVertices[2]); oGroup2.Vertices.AddLast(aoVertices[3]); oGroup2.Rectangle = Rectangle.FromLTRB(5, 6, 7, 8); GroupInfo oGroup3 = new GroupInfo(); oGroup3.Vertices.AddLast(aoVertices[4]); oGroup3.Rectangle = Rectangle.FromLTRB(9, 10, 11, 12); GroupMetadataManager.OnLayoutBegin(oGraph); GroupMetadataManager.OnLayoutUsingGroupsEnd(oGraph, new GroupInfo[] { oGroup1, oGroup2, oGroup3 }, GroupRectanglePenWidth, IntergroupEdgeStyle); GroupLayoutDrawingInfo oGroupLayoutDrawingInfo; Assert.IsTrue(GroupMetadataManager.TryGetGroupLayoutDrawingInfo( oGraph, out oGroupLayoutDrawingInfo)); Assert.AreEqual(GroupRectanglePenWidth, oGroupLayoutDrawingInfo.PenWidth); IList <GroupInfo> oGroupInfo = oGroupLayoutDrawingInfo.GroupsToDraw; Assert.AreEqual(3, oGroupInfo.Count); Assert.AreEqual(oGroup1, oGroupInfo[0]); Assert.AreEqual(oGroup2, oGroupInfo[1]); Assert.AreEqual(oGroup3, oGroupInfo[2]); Assert.IsFalse(oGraph.ContainsKey( ReservedMetadataKeys.IntergroupEdgesHidden)); Assert.IsFalse(oEdge1.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.IsFalse(oEdge2.ContainsKey( ReservedMetadataKeys.SavedVisibility)); Assert.AreEqual(0, oGroupLayoutDrawingInfo.CombinedIntergroupEdges.Count()); }
VerifyOriginalEdgeMetadata ( IEdge oEdge1, IEdge oEdge2, IEdge oEdge3, IEdge oEdge4 ) { Assert.IsFalse( oEdge1.ContainsKey( ReservedMetadataKeys.SavedVisibility) ); Assert.IsFalse( oEdge1.ContainsKey( ReservedMetadataKeys.Visibility) ); Assert.IsFalse( oEdge2.ContainsKey( ReservedMetadataKeys.SavedVisibility) ); Assert.IsTrue( oEdge2.ContainsKey( ReservedMetadataKeys.Visibility) ); Assert.AreEqual( VisibilityKeyValue.Filtered, oEdge2.GetValue(ReservedMetadataKeys.Visibility) ); Assert.IsFalse( oEdge3.ContainsKey( ReservedMetadataKeys.SavedVisibility) ); Assert.IsFalse( oEdge3.ContainsKey( ReservedMetadataKeys.Visibility) ); Assert.IsFalse( oEdge4.ContainsKey( ReservedMetadataKeys.SavedVisibility) ); Assert.IsFalse( oEdge4.ContainsKey( ReservedMetadataKeys.Visibility) ); }