public static void Test2()
		{
			com.esri.core.geometry.Polyline poly = new com.esri.core.geometry.Polyline();
			poly.StartPath(0, 0);
			poly.LineTo(0, 1.0 / 3.0);
			poly.StartPath(0, System.Math.Sqrt(8.0));
			poly.LineTo(0, System.Math.Sqrt(10.0));
			poly.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0, System.Math.Sqrt(3.0));
			poly.InterpolateAttributes(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 1, 1, 0);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0) == System.Math.Sqrt(3.0));
			NUnit.Framework.Assert.IsTrue(com.esri.core.geometry.NumberUtils.IsNaN(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 2, 0)));
			poly.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.M, 3, 0, System.Math.Sqrt(5.0));
			poly.InterpolateAttributes(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 1, 1, 1);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0) == System.Math.Sqrt(3.0));
			double a2 = poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 2, 0);
			NUnit.Framework.Assert.IsTrue(a2 == System.Math.Sqrt(3.0));
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 3, 0) == System.Math.Sqrt(5.0));
		}
		public static void Test1()
		{
			com.esri.core.geometry.Polyline poly = new com.esri.core.geometry.Polyline();
			poly.StartPath(0, 0);
			poly.LineTo(0, 1.0 / 3.0);
			poly.LineTo(0, 2.0 / 3.0);
			poly.LineTo(0, 4.0 / 3.0);
			poly.LineTo(0, System.Math.Sqrt(6.0));
			poly.LineTo(0, System.Math.Sqrt(7.0));
			poly.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 0, 3);
			poly.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0, 5);
			poly.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.M, 2, 0, 7);
			poly.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.M, 5, 0, 11);
			poly.InterpolateAttributes(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 1, 0, 1);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 0) == 3);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0) == 5);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 2, 0) == 7);
			NUnit.Framework.Assert.IsTrue(com.esri.core.geometry.NumberUtils.IsNaN(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 3, 0)));
			NUnit.Framework.Assert.IsTrue(com.esri.core.geometry.NumberUtils.IsNaN(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 4, 0)));
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 5, 0) == 11);
			poly.InterpolateAttributes(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 1, 0, 2);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 0) == 3);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0) == 5);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 2, 0) == 7);
			NUnit.Framework.Assert.IsTrue(com.esri.core.geometry.NumberUtils.IsNaN(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 3, 0)));
			NUnit.Framework.Assert.IsTrue(com.esri.core.geometry.NumberUtils.IsNaN(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 4, 0)));
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 5, 0) == 11);
			poly.InterpolateAttributes(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 2, 0, 5);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 0, 0) == 3);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 1, 0) == 5);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 2, 0) == 7);
			double a3 = poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 3, 0);
			NUnit.Framework.Assert.IsTrue(a3 > 7 && a3 < 11);
			double a4 = poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 4, 0);
			NUnit.Framework.Assert.IsTrue(a4 > a3 && a4 < 11);
			NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.M, 5, 0) == 11);
			poly.StartPath(0, System.Math.Sqrt(8.0));
			poly.LineTo(0, System.Math.Sqrt(10.0));
			poly.LineTo(0, System.Math.Sqrt(11.0));
		}
		public virtual void TestIntersectionPolylinePolygon()
		{
			{
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				polygon.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polygon.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 3);
				polygon.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 3, 0, 3);
				polygon.InterpolateAttributes(0, 0, 3);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(0, 10);
				polyline.LineTo(5, 5);
				polyline.LineTo(6, 4);
				polyline.LineTo(7, -1);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 3, 0, 5);
				polyline.InterpolateAttributes(0, 0, 0, 3);
				// OperatorFactoryLocal projEnv =
				// OperatorFactoryLocal.getInstance();
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)(geom);
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
			{
				// std::shared_ptr<Operator_export_to_JSON> jsonExport =
				// (Operator_export_to_JSON>)Operator_factory_local::get_instance().get_operator(Operator::Operator_type::export_to_JSON);
				// std::string str = jsonExport.execute(0, geom, null, null);
				// OutputDebugStringA(str.c_str());
				// OutputDebugString(L"\n");
				// assertTrue(str=="{\"paths\":[[[0,10],[5,5],[6,4],[6.7999999999999998,4.4408922169635528e-016]]]}");
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				polygon.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polygon.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 3);
				polygon.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 3, 0, 3);
				polygon.InterpolateAttributes(0, 0, 3);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(0, 10);
				polyline.LineTo(20, 0);
				polyline.LineTo(5, 5);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 1, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 2, 0, 5);
				// OperatorFactoryLocal projEnv =
				// OperatorFactoryLocal.getInstance();
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)(geom);
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
			{
				// Operator_export_to_JSON> jsonExport =
				// (Operator_export_to_JSON>)Operator_factory_local::get_instance().get_operator(Operator::Operator_type::export_to_JSON);
				// std::string str = jsonExport.execute(0, geom, null, null);
				// OutputDebugStringA(str.c_str());
				// OutputDebugString(L"\n");
				// assertTrue(str=="{\"paths\":[[[0,10],[20,0],[5,5]]]}");
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				polygon.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polygon.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 3);
				polygon.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 3, 0, 3);
				polygon.InterpolateAttributes(0, 0, 3);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(0, 0);
				polyline.LineTo(0, 10);
				polyline.LineTo(20, 10);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 1, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 2, 0, 5);
				// OperatorFactoryLocal projEnv =
				// OperatorFactoryLocal.getInstance();
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)(geom);
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
			{
				// Operator_export_to_JSON> jsonExport =
				// (Operator_export_to_JSON>)Operator_factory_local::get_instance().get_operator(Operator::Operator_type::export_to_JSON);
				// std::string str = jsonExport.execute(0, geom, null, null);
				// OutputDebugStringA(str.c_str());
				// OutputDebugString(L"\n");
				// assertTrue(str=="{\"paths\":[[[0,0],[0,10],[20,10]]]}");
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(3, -1);
				polyline.LineTo(17, 1);
				polyline.LineTo(10, 8);
				polyline.LineTo(-1, 5);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 1, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 2, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 3, 0, 5);
				// OperatorFactoryLocal projEnv =
				// OperatorFactoryLocal.getInstance();
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)geom;
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
			{
				// Operator_export_to_JSON> jsonExport =
				// (Operator_export_to_JSON>)Operator_factory_local::get_instance().get_operator(Operator::Operator_type::export_to_JSON);
				// std::string str = jsonExport.execute(0, geom, null, null);
				// OutputDebugStringA(str.c_str());
				// OutputDebugString(L"\n");
				// assertTrue(str=="{\"paths\":[[[10,0],[17,1],[10,8],[4.7377092701401439e-024,5.2727272727272734]]]}");
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(0, 15);
				polyline.LineTo(3, -1);
				polyline.LineTo(17, 1);
				polyline.LineTo(10, 8);
				polyline.LineTo(-1, 5);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 4, 0, 5);
				polyline.InterpolateAttributes(0, 0, 0, 4);
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)geom;
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
			{
				// Operator_export_to_JSON> jsonExport =
				// (Operator_export_to_JSON>)Operator_factory_local::get_instance().get_operator(Operator::Operator_type::export_to_JSON);
				// std::string str = jsonExport.execute(0, geom, null, null);
				// OutputDebugStringA(str.c_str());
				// OutputDebugString(L"\n");
				// assertTrue(str=="{\"paths\":[[[0.9375,10],[2.8125,9.476226333847234e-024]],[[10,0],[17,1],[10,8],[4.7377092701401439e-024,5.2727272727272734]]]}");
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(5, 5);
				polyline.LineTo(1, 1);
				polyline.LineTo(-1, 1);
				polyline.LineTo(-1, 10);
				polyline.LineTo(0, 10);
				polyline.LineTo(6, 6);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 5, 0, 5);
				polyline.InterpolateAttributes(0, 0, 0, 5);
				// OperatorFactoryLocal projEnv =
				// OperatorFactoryLocal.getInstance();
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)geom;
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
			{
				// Operator_export_to_JSON> jsonExport =
				// (Operator_export_to_JSON>)Operator_factory_local::get_instance().get_operator(Operator::Operator_type::export_to_JSON);
				// std::string str = jsonExport.execute(0, geom, null, null);
				// OutputDebugStringA(str.c_str());
				// OutputDebugString(L"\n");
				// assertTrue(str=="{\"paths\":[[[5,5],[1,1],[4.738113166923617e-023,1]],[[0,10],[6,6]]]}");
				com.esri.core.geometry.Polygon polygon = new com.esri.core.geometry.Polygon();
				polygon.StartPath(0, 0);
				polygon.LineTo(0, 10);
				polygon.LineTo(20, 10);
				polygon.LineTo(20, 0);
				com.esri.core.geometry.Polyline polyline = new com.esri.core.geometry.Polyline();
				polyline.StartPath(0, 15);
				polyline.LineTo(3, -1);
				polyline.LineTo(17, 1);
				polyline.LineTo(10, 8);
				polyline.LineTo(-1, 5);
				polyline.StartPath(19, 15);
				polyline.LineTo(29, 9);
				polyline.StartPath(19, 15);
				polyline.LineTo(29, 9);
				polyline.StartPath(5, 5);
				polyline.LineTo(1, 1);
				polyline.LineTo(-1, 1);
				polyline.LineTo(-1, 10);
				polyline.LineTo(0, 10);
				polyline.LineTo(6, 6);
				polyline.AddAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 0, 0, 5);
				polyline.SetAttribute(com.esri.core.geometry.VertexDescription.Semantics.Z, 14, 0, 5);
				polyline.InterpolateAttributes(0, 0, 3, 5);
				// OperatorFactoryLocal projEnv =
				// OperatorFactoryLocal.getInstance();
				com.esri.core.geometry.OperatorIntersection operatorIntersection = (com.esri.core.geometry.OperatorIntersection)projEnv.GetOperator(com.esri.core.geometry.Operator.Type.Intersection);
				com.esri.core.geometry.Geometry geom = operatorIntersection.Execute(polyline, polygon, null, null);
				NUnit.Framework.Assert.IsTrue(!geom.IsEmpty());
				com.esri.core.geometry.Polyline poly = (com.esri.core.geometry.Polyline)geom;
				for (int i = 0; i < poly.GetPointCount(); i++)
				{
					NUnit.Framework.Assert.IsTrue(poly.GetAttributeAsDbl(com.esri.core.geometry.VertexDescription.Semantics.Z, i, 0) == 5);
				}
			}
		}