internal virtual int GetRedElement() { if (m_b_quad_tree) { if (!m_b_swap_elements) { return(!m_b_paths ? m_seg_iter.GetStartPointIndex() : m_path_index); } return(m_quad_tree.GetElement(m_element_handle)); } return(m_intersector.GetRedElement(m_intersector.GetHandleA())); }
public static void TestEnvelope2Dintersector() { System.Collections.Generic.List <com.epl.geometry.Envelope2D> envelopes = new System.Collections.Generic.List <com.epl.geometry.Envelope2D>(0); com.epl.geometry.Envelope2D env0 = new com.epl.geometry.Envelope2D(2, 3, 4, 4); com.epl.geometry.Envelope2D env1 = new com.epl.geometry.Envelope2D(5, 13, 9, 15); com.epl.geometry.Envelope2D env2 = new com.epl.geometry.Envelope2D(6, 9, 11, 12); com.epl.geometry.Envelope2D env3 = new com.epl.geometry.Envelope2D(8, 10, 9, 17); com.epl.geometry.Envelope2D env4 = new com.epl.geometry.Envelope2D(11.001, 12, 14, 14); com.epl.geometry.Envelope2D env5 = new com.epl.geometry.Envelope2D(1, 3, 3, 4); com.epl.geometry.Envelope2D env6 = new com.epl.geometry.Envelope2D(0, 2, 5, 10); com.epl.geometry.Envelope2D env7 = new com.epl.geometry.Envelope2D(4, 7, 5, 10); com.epl.geometry.Envelope2D env8 = new com.epl.geometry.Envelope2D(3, 15, 15, 15); com.epl.geometry.Envelope2D env9 = new com.epl.geometry.Envelope2D(0, 9, 14, 9); com.epl.geometry.Envelope2D env10 = new com.epl.geometry.Envelope2D(0, 8.999, 14, 8.999); envelopes.Add(env0); envelopes.Add(env1); envelopes.Add(env2); envelopes.Add(env3); envelopes.Add(env4); envelopes.Add(env5); envelopes.Add(env6); envelopes.Add(env7); envelopes.Add(env8); envelopes.Add(env9); envelopes.Add(env10); com.epl.geometry.Envelope2DIntersectorImpl intersector = new com.epl.geometry.Envelope2DIntersectorImpl(); intersector.SetTolerance(0.001); intersector.StartConstruction(); for (int i = 0; i < envelopes.Count; i++) { intersector.AddEnvelope(i, envelopes[i]); } intersector.EndConstruction(); int count = 0; while (intersector.Next()) { int env_a = intersector.GetHandleA(); int env_b = intersector.GetHandleB(); count++; com.epl.geometry.Envelope2D env = new com.epl.geometry.Envelope2D(); env.SetCoords(envelopes[env_a]); env.Inflate(0.001, 0.001); NUnit.Framework.Assert.IsTrue(env.IsIntersecting(envelopes[env_b])); } System.Diagnostics.Debug.Assert((count == 16)); com.epl.geometry.Envelope2DIntersectorImpl intersector2 = new com.epl.geometry.Envelope2DIntersectorImpl(); intersector2.SetTolerance(0.0); intersector2.StartConstruction(); for (int i_1 = 0; i_1 < envelopes.Count; i_1++) { intersector2.AddEnvelope(i_1, envelopes[i_1]); } intersector2.EndConstruction(); count = 0; while (intersector2.Next()) { int env_a = intersector2.GetHandleA(); int env_b = intersector2.GetHandleB(); count++; com.epl.geometry.Envelope2D env = new com.epl.geometry.Envelope2D(); env.SetCoords(envelopes[env_a]); NUnit.Framework.Assert.IsTrue(env.IsIntersecting(envelopes[env_b])); } System.Diagnostics.Debug.Assert((count == 13)); env0 = new com.epl.geometry.Envelope2D(0, 0, 0, 10); env1 = new com.epl.geometry.Envelope2D(0, 10, 10, 10); env2 = new com.epl.geometry.Envelope2D(10, 0, 10, 10); env3 = new com.epl.geometry.Envelope2D(0, 0, 10, 0); envelopes.Clear(); envelopes.Add(env0); envelopes.Add(env1); envelopes.Add(env2); envelopes.Add(env3); com.epl.geometry.Envelope2DIntersectorImpl intersector3 = new com.epl.geometry.Envelope2DIntersectorImpl(); intersector3.SetTolerance(0.001); intersector3.StartConstruction(); for (int i_2 = 0; i_2 < envelopes.Count; i_2++) { intersector3.AddEnvelope(i_2, envelopes[i_2]); } intersector3.EndConstruction(); count = 0; while (intersector3.Next()) { int env_a = intersector3.GetHandleA(); int env_b = intersector3.GetHandleB(); count++; com.epl.geometry.Envelope2D env = new com.epl.geometry.Envelope2D(); env.SetCoords(envelopes[env_a]); NUnit.Framework.Assert.IsTrue(env.IsIntersecting(envelopes[env_b])); } NUnit.Framework.Assert.IsTrue(count == 4); env0 = new com.epl.geometry.Envelope2D(0, 0, 0, 10); envelopes.Clear(); envelopes.Add(env0); envelopes.Add(env0); envelopes.Add(env0); envelopes.Add(env0); com.epl.geometry.Envelope2DIntersectorImpl intersector4 = new com.epl.geometry.Envelope2DIntersectorImpl(); intersector4.SetTolerance(0.001); intersector4.StartConstruction(); for (int i_3 = 0; i_3 < envelopes.Count; i_3++) { intersector4.AddEnvelope(i_3, envelopes[i_3]); } intersector4.EndConstruction(); count = 0; while (intersector4.Next()) { int env_a = intersector4.GetHandleA(); int env_b = intersector4.GetHandleB(); count++; com.epl.geometry.Envelope2D env = new com.epl.geometry.Envelope2D(); env.SetCoords(envelopes[env_a]); NUnit.Framework.Assert.IsTrue(env.IsIntersecting(envelopes[env_b])); } System.Diagnostics.Debug.Assert((count == 6)); env0 = new com.epl.geometry.Envelope2D(0, 10, 10, 10); envelopes.Clear(); envelopes.Add(env0); envelopes.Add(env0); envelopes.Add(env0); envelopes.Add(env0); com.epl.geometry.Envelope2DIntersectorImpl intersector5 = new com.epl.geometry.Envelope2DIntersectorImpl(); intersector5.SetTolerance(0.001); intersector5.StartConstruction(); for (int i_4 = 0; i_4 < envelopes.Count; i_4++) { intersector5.AddEnvelope(i_4, envelopes[i_4]); } intersector5.EndConstruction(); count = 0; while (intersector5.Next()) { int env_a = intersector5.GetHandleA(); int env_b = intersector5.GetHandleB(); count++; com.epl.geometry.Envelope2D env = new com.epl.geometry.Envelope2D(); env.SetCoords(envelopes[env_a]); NUnit.Framework.Assert.IsTrue(env.IsIntersecting(envelopes[env_b])); } NUnit.Framework.Assert.IsTrue(count == 6); }