internal static double GeodesicDistanceOnWGS84Impl(com.epl.geometry.Point ptFrom, com.epl.geometry.Point ptTo)
        {
            double a = 6378137.0;
            // radius of spheroid for WGS_1984
            double e2 = 0.0066943799901413165;
            // ellipticity for WGS_1984
            double rpu = System.Math.PI / 180.0;

            com.epl.geometry.PeDouble answer = new com.epl.geometry.PeDouble();
            com.epl.geometry.GeoDist.Geodesic_distance_ngs(a, e2, ptFrom.GetX() * rpu, ptFrom.GetY() * rpu, ptTo.GetX() * rpu, ptTo.GetY() * rpu, answer, null, null);
            return(answer.val);
        }
        internal static com.epl.geometry.Geometry PointTaggedText(int import_flags, com.epl.geometry.WktParser wkt_parser)
        {
            com.epl.geometry.Point point = new com.epl.geometry.Point();
            int current_token            = wkt_parser.NextToken();

            if (current_token == com.epl.geometry.WktParser.WktToken.attribute_z)
            {
                point.AddAttribute(com.epl.geometry.VertexDescription.Semantics.Z);
                wkt_parser.NextToken();
            }
            else
            {
                if (current_token == com.epl.geometry.WktParser.WktToken.attribute_m)
                {
                    point.AddAttribute(com.epl.geometry.VertexDescription.Semantics.M);
                    wkt_parser.NextToken();
                }
                else
                {
                    if (current_token == com.epl.geometry.WktParser.WktToken.attribute_zm)
                    {
                        point.AddAttribute(com.epl.geometry.VertexDescription.Semantics.Z);
                        point.AddAttribute(com.epl.geometry.VertexDescription.Semantics.M);
                        wkt_parser.NextToken();
                    }
                }
            }
            // At start of PointText
            current_token = wkt_parser.CurrentToken();
            if (current_token != com.epl.geometry.WktParser.WktToken.empty)
            {
                wkt_parser.NextToken();
                double x = wkt_parser.CurrentNumericLiteral();
                wkt_parser.NextToken();
                double y = wkt_parser.CurrentNumericLiteral();
                wkt_parser.NextToken();
                point.SetXY(x, y);
                if (wkt_parser.HasZs())
                {
                    double z = wkt_parser.CurrentNumericLiteral();
                    wkt_parser.NextToken();
                    point.SetZ(z);
                }
                if (wkt_parser.HasMs())
                {
                    double m = wkt_parser.CurrentNumericLiteral();
                    wkt_parser.NextToken();
                    point.SetM(m);
                }
            }
            return(point);
        }
 public override void InsertAttributes(int start, com.epl.geometry.Point pt, int semantics, int validSize)
 {
     if (m_bReadonly)
     {
         throw new com.epl.geometry.GeometryException("invalid_call");
     }
     int comp = com.epl.geometry.VertexDescription.GetComponentCount(semantics);
     System.Array.Copy(m_buffer, start, m_buffer, start + comp, validSize - start);
     for (int c = 0; c < comp; c++)
     {
         m_buffer[start + c] = (float)pt.GetAttributeAsDbl(semantics, c);
     }
 }
Пример #4
0
 /// <summary>Creates an envelope by defining its center, width, and height.</summary>
 /// <param name="center">The center point of the envelope.</param>
 /// <param name="width">The width of the envelope.</param>
 /// <param name="height">The height of the envelope.</param>
 public Envelope(com.epl.geometry.Point center, double width, double height)
 {
     //We are using writeReplace instead.
     //private static final long serialVersionUID = 2L;
     // use doubles to store everything
     m_description = com.epl.geometry.VertexDescriptionDesignerImpl.GetDefaultDescriptor2D();
     m_envelope.SetEmpty();
     if (center.IsEmpty())
     {
         return;
     }
     _setFromPoint(center, width, height);
 }
 public virtual void TestSerializePoint()
 {
     try
     {
         java.io.ByteArrayOutputStream streamOut = new java.io.ByteArrayOutputStream();
         java.io.ObjectOutputStream    oo        = new java.io.ObjectOutputStream(streamOut);
         com.epl.geometry.Point        pt        = new com.epl.geometry.Point(10, 40);
         oo.WriteObject(pt);
         System.IO.BinaryWriter    streamIn = new System.IO.BinaryWriter(streamOut.ToByteArray());
         java.io.ObjectInputStream ii       = new java.io.ObjectInputStream(streamIn);
         com.epl.geometry.Point    ptRes    = (com.epl.geometry.Point)ii.ReadObject();
         NUnit.Framework.Assert.IsTrue(ptRes.Equals(pt));
     }
     catch (System.Exception)
     {
         Fail("Point serialization failure");
     }
     //try
     //{
     //FileOutputStream streamOut = new FileOutputStream("c:/temp/savedPoint1.txt");
     //ObjectOutputStream oo = new ObjectOutputStream(streamOut);
     //Point pt = new Point(10, 40, 2);
     //oo.writeObject(pt);
     //}
     //catch(Exception ex)
     //{
     //fail("Point serialization failure");
     //}
     try
     {
         java.io.InputStream       s     = typeof(com.epl.geometry.TestSerialization).GetResourceAsStream("savedPoint.txt");
         java.io.ObjectInputStream ii    = new java.io.ObjectInputStream(s);
         com.epl.geometry.Point    ptRes = (com.epl.geometry.Point)ii.ReadObject();
         NUnit.Framework.Assert.IsTrue(ptRes.GetX() == 10 && ptRes.GetY() == 40);
     }
     catch (System.Exception)
     {
         Fail("Point serialization failure");
     }
     try
     {
         java.io.InputStream       s     = typeof(com.epl.geometry.TestSerialization).GetResourceAsStream("savedPoint1.txt");
         java.io.ObjectInputStream ii    = new java.io.ObjectInputStream(s);
         com.epl.geometry.Point    ptRes = (com.epl.geometry.Point)ii.ReadObject();
         NUnit.Framework.Assert.IsTrue(ptRes.GetX() == 10 && ptRes.GetY() == 40 && ptRes.GetZ() == 2);
     }
     catch (System.Exception)
     {
         Fail("Point serialization failure");
     }
 }
Пример #6
0
 public virtual void TestReplaceNaNs()
 {
     com.epl.geometry.Envelope env = new com.epl.geometry.Envelope();
     com.epl.geometry.Point    pt  = new com.epl.geometry.Point();
     pt.SetXY(1, 2);
     pt.SetZ(double.NaN);
     pt.QueryEnvelope(env);
     pt.ReplaceNaNs(com.epl.geometry.VertexDescription.Semantics.Z, 5);
     NUnit.Framework.Assert.IsTrue(pt.Equals(new com.epl.geometry.Point(1, 2, 5)));
     NUnit.Framework.Assert.IsTrue(env.HasZ());
     NUnit.Framework.Assert.IsTrue(env.QueryInterval(com.epl.geometry.VertexDescription.Semantics.Z, 0).IsEmpty());
     env.ReplaceNaNs(com.epl.geometry.VertexDescription.Semantics.Z, 5);
     NUnit.Framework.Assert.IsTrue(env.QueryInterval(com.epl.geometry.VertexDescription.Semantics.Z, 0).Equals(new com.epl.geometry.Envelope1D(5, 5)));
 }
        internal static com.epl.geometry.Geometry PointMinusPoint_(com.epl.geometry.Point point_a, com.epl.geometry.Point point_b, double tolerance, com.epl.geometry.ProgressTracker progress_tracker)
        {
            double tolerance_cluster    = tolerance * System.Math.Sqrt(2.0) * 1.00001;
            double tolerance_cluster_sq = tolerance_cluster * tolerance_cluster;

            com.epl.geometry.Point2D pt_a = point_a.GetXY();
            com.epl.geometry.Point2D pt_b = point_b.GetXY();
            if (com.epl.geometry.Point2D.SqrDistance(pt_a, pt_b) <= tolerance_cluster_sq)
            {
                return(point_a.CreateInstance());
            }
            // return empty point
            return(point_a);
        }
Пример #8
0
 public static void TestUnion__()
 {
     com.epl.geometry.Point pt  = new com.epl.geometry.Point(10, 20);
     com.epl.geometry.Point pt2 = new com.epl.geometry.Point();
     pt2.SetXY(10, 10);
     com.epl.geometry.Envelope             env1            = new com.epl.geometry.Envelope(10, 10, 30, 50);
     com.epl.geometry.Envelope             env2            = new com.epl.geometry.Envelope(30, 10, 60, 50);
     com.epl.geometry.Geometry[]           geomArray       = new com.epl.geometry.Geometry[] { env1, env2 };
     com.epl.geometry.SimpleGeometryCursor inputGeometries = new com.epl.geometry.SimpleGeometryCursor(geomArray);
     com.epl.geometry.OperatorUnion        union           = (com.epl.geometry.OperatorUnion)com.epl.geometry.OperatorFactoryLocal.GetInstance().GetOperator(com.epl.geometry.Operator.Type.Union);
     com.epl.geometry.SpatialReference     sr           = com.epl.geometry.SpatialReference.Create(4326);
     com.epl.geometry.GeometryCursor       outputCursor = union.Execute(inputGeometries, sr, null);
     com.epl.geometry.Geometry             result       = outputCursor.Next();
 }
Пример #9
0
        public virtual void TestTouchesBetweenPointAndLine()
        {
            com.epl.geometry.SpatialReference sr     = com.epl.geometry.SpatialReference.Create(4326);
            com.epl.geometry.Point            p      = new com.epl.geometry.Point(2, 4);
            com.epl.geometry.Polyline         compPl = new com.epl.geometry.Polyline();
            compPl.StartPath(2, 4);
            compPl.LineTo(9, 4);
            compPl.LineTo(9, 9);
            compPl.LineTo(2, 9);
            compPl.LineTo(2, 4);
            bool isTouched = com.epl.geometry.GeometryEngine.Touches(p, compPl, sr);

            NUnit.Framework.Assert.IsTrue(!isTouched);
        }
        internal static com.epl.geometry.Geometry PointSymDiffPoint_(com.epl.geometry.Point point_a, com.epl.geometry.Point point_b, double tolerance, com.epl.geometry.ProgressTracker progress_tracker)
        {
            double tolerance_cluster    = tolerance * System.Math.Sqrt(2.0) * 1.00001;
            double tolerance_cluster_sq = tolerance_cluster * tolerance_cluster;

            com.epl.geometry.Point2D    pt_a        = point_a.GetXY();
            com.epl.geometry.Point2D    pt_b        = point_b.GetXY();
            com.epl.geometry.MultiPoint multi_point = new com.epl.geometry.MultiPoint(point_a.GetDescription());
            if (com.epl.geometry.Point2D.SqrDistance(pt_a, pt_b) > tolerance_cluster_sq)
            {
                multi_point.Add(point_a);
                multi_point.Add(point_b);
            }
            return(multi_point);
        }
Пример #11
0
 internal virtual void QueryCoord(double t, com.epl.geometry.Point point)
 {
     point.AssignVertexDescription(m_description);
     point.SetXY(GetCoord2D(t));
     for (int iattrib = 1, nattrib = m_description.GetAttributeCount(); iattrib < nattrib; iattrib++)
     {
         int semantics = m_description._getSemanticsImpl(iattrib);
         int ncomp     = com.epl.geometry.VertexDescription.GetComponentCount(semantics);
         for (int iord = 0; iord < ncomp; iord++)
         {
             double value = GetAttributeAsDbl(t, semantics, iord);
             point.SetAttribute(semantics, iord, value);
         }
     }
 }
Пример #12
0
 internal virtual void _setFromPoint(com.epl.geometry.Point centerPoint)
 {
     m_envelope.SetCoords(centerPoint.m_attributes[0], centerPoint.m_attributes[1]);
     com.epl.geometry.VertexDescription pointVD = centerPoint.m_description;
     for (int iattrib = 1, nattrib = pointVD.GetAttributeCount(); iattrib < nattrib; iattrib++)
     {
         int semantics = pointVD._getSemanticsImpl(iattrib);
         int ncomps    = com.epl.geometry.VertexDescription.GetComponentCount(semantics);
         for (int iord = 0; iord < ncomps; iord++)
         {
             double v = centerPoint.GetAttributeAsDbl(semantics, iord);
             SetInterval(semantics, iord, v, v);
         }
     }
 }
Пример #13
0
        /// <summary>Gets the current bounding geometry.</summary>
        /// <remarks>
        /// Gets the current bounding geometry.
        /// Returns a Geometry.
        /// </remarks>
        internal virtual com.epl.geometry.Geometry GetBoundingGeometry()
        {
            // Extracts the convex hull from the tree. Reading the tree in order from first to last is the resulting convex hull.
            com.epl.geometry.Point point = new com.epl.geometry.Point();
            int first = m_tree_hull.GetFirst(-1);

            com.epl.geometry.Polygon hull = new com.epl.geometry.Polygon(m_shape.GetVertexDescription());
            m_shape.QueryPoint(m_tree_hull.GetElement(first), point);
            hull.StartPath(point);
            for (int i = m_tree_hull.GetNext(first); i != -1; i = m_tree_hull.GetNext(i))
            {
                m_shape.QueryPoint(m_tree_hull.GetElement(i), point);
                hull.LineTo(point);
            }
            return(hull);
        }
Пример #14
0
 // reset the place holder to tp
 private void AddEnvelope_(com.epl.geometry.Envelope envelope)
 {
     com.epl.geometry.Point   point = new com.epl.geometry.Point();
     com.epl.geometry.Point2D pt_p  = new com.epl.geometry.Point2D();
     for (int i = 0; i < 4; i++)
     {
         envelope.QueryCorner(i, pt_p);
         int p = AddPoint_(pt_p);
         if (p != -1)
         {
             envelope.QueryCornerByVal(i, point);
             int tp = m_shape.AddPoint(m_path_handle, point);
             m_tree_hull.SetElement(p, tp);
         }
     }
 }
Пример #15
0
 // Dynamically inserts each geometry into the convex hull.
 private void AddMultiVertexGeometry_(com.epl.geometry.MultiVertexGeometry mvg)
 {
     com.epl.geometry.Point   point = new com.epl.geometry.Point();
     com.epl.geometry.Point2D pt_p  = new com.epl.geometry.Point2D();
     for (int i = 0; i < mvg.GetPointCount(); i++)
     {
         mvg.GetXY(i, pt_p);
         int p = AddPoint_(pt_p);
         if (p != -1)
         {
             mvg.GetPointByVal(i, point);
             int tp = m_shape.AddPoint(m_path_handle, point);
             m_tree_hull.SetElement(p, tp);
         }
     }
 }
 public static void TestProximity2D_3()
 {
     com.epl.geometry.OperatorFactoryLocal factory   = com.epl.geometry.OperatorFactoryLocal.GetInstance();
     com.epl.geometry.OperatorProximity2D  proximity = (com.epl.geometry.OperatorProximity2D)factory.GetOperator(com.epl.geometry.Operator.Type.Proximity2D);
     com.epl.geometry.Polygon polygon = new com.epl.geometry.Polygon();
     polygon.StartPath(new com.epl.geometry.Point(-120, 22));
     polygon.LineTo(new com.epl.geometry.Point(-120, 10));
     polygon.LineTo(new com.epl.geometry.Point(-110, 10));
     polygon.LineTo(new com.epl.geometry.Point(-110, 22));
     com.epl.geometry.Point point = new com.epl.geometry.Point();
     point.SetXY(-110, 20);
     com.epl.geometry.Proximity2DResult result = proximity.GetNearestCoordinate(polygon, point, false);
     com.epl.geometry.Point             point2 = new com.epl.geometry.Point();
     point2.SetXY(-120, 12);
     com.epl.geometry.Proximity2DResult[] results = proximity.GetNearestVertices(polygon, point2, 10, 12);
 }
Пример #17
0
        public static void TestDistanceBetweenVariousGeometries()
        {
            com.epl.geometry.Polygon    polygon    = MakePolygon();
            com.epl.geometry.Polyline   polyline   = MakePolyline();
            com.epl.geometry.MultiPoint multipoint = MakeMultiPoint();
            com.epl.geometry.Point      point      = MakePoint();
            // SpatialReference spatialRef =
            // SpatialReference.create(3857);//PCS_WGS_1984_WEB_MERCATOR_AUXSPHERE
            double distance;

            distance = com.epl.geometry.GeometryEngine.Distance(polygon, polyline, null);
            NUnit.Framework.Assert.IsTrue(System.Math.Abs(distance - 5.0) < 0.00001);
            distance = com.epl.geometry.GeometryEngine.Distance(polygon, multipoint, null);
            NUnit.Framework.Assert.IsTrue(System.Math.Abs(distance - 5.0) < 0.00001);
            distance = com.epl.geometry.GeometryEngine.Distance(polygon, point, null);
            NUnit.Framework.Assert.IsTrue(System.Math.Abs(distance - 5.0) < 0.00001);
        }
Пример #18
0
        public virtual void TestEqualsOnEnvelopes()
        {
            com.epl.geometry.SpatialReference sr   = com.epl.geometry.SpatialReference.Create(4326);
            com.epl.geometry.Point            p    = new com.epl.geometry.Point(-130, 10);
            com.epl.geometry.Envelope         env  = new com.epl.geometry.Envelope(p, 12, 12);
            com.epl.geometry.Envelope         env2 = new com.epl.geometry.Envelope(-136, 4, -124, 16);
            bool isEqual;

            try
            {
                isEqual = com.epl.geometry.GeometryEngine.Equals(env, env2, sr);
            }
            catch (System.ArgumentException)
            {
                isEqual = false;
            }
            NUnit.Framework.Assert.IsTrue(isEqual);
        }
 public virtual void TestProximity2D_2()
 {
     com.epl.geometry.Point    point1   = new com.epl.geometry.Point(3, 2);
     com.epl.geometry.Point    point2   = new com.epl.geometry.Point(2, 4);
     com.epl.geometry.Envelope envelope = new com.epl.geometry.Envelope();
     envelope.SetCoords(4, 3, 7, 6);
     com.epl.geometry.Polygon polygonToTest = new com.epl.geometry.Polygon();
     polygonToTest.AddEnvelope(envelope, false);
     com.epl.geometry.Proximity2DResult prxResult1 = com.epl.geometry.GeometryEngine.GetNearestVertex(envelope, point1);
     com.epl.geometry.Proximity2DResult prxResult2 = com.epl.geometry.GeometryEngine.GetNearestVertex(polygonToTest, point1);
     com.epl.geometry.Proximity2DResult prxResult3 = com.epl.geometry.GeometryEngine.GetNearestCoordinate(envelope, point2, false);
     com.epl.geometry.Proximity2DResult prxResult4 = com.epl.geometry.GeometryEngine.GetNearestCoordinate(polygonToTest, point2, false);
     com.epl.geometry.Point             result1    = prxResult1.GetCoordinate();
     com.epl.geometry.Point             result2    = prxResult2.GetCoordinate();
     NUnit.Framework.Assert.IsTrue(result1.GetX() == result2.GetX());
     com.epl.geometry.Point result3 = prxResult3.GetCoordinate();
     com.epl.geometry.Point result4 = prxResult4.GetCoordinate();
     NUnit.Framework.Assert.IsTrue(result3.GetX() == result4.GetX());
 }
 internal static com.epl.geometry.Point Cluster_non_empty_points(com.epl.geometry.Point pt1, com.epl.geometry.Point pt2, double w1, int rank1, double w2, int rank2)
 {
     if (rank1 > rank2)
     {
         return(pt1);
     }
     else
     {
         if (rank2 < rank1)
         {
             return(pt2);
         }
     }
     int[]    rank             = null;
     double[] w                = null;
     com.epl.geometry.Point pt = new com.epl.geometry.Point();
     com.epl.geometry.Clusterer.MergeVertices(pt1, pt2, w1, rank1, w2, rank2, pt, w, rank);
     return(pt);
 }
Пример #21
0
 public static void TestCopy()
 {
     com.epl.geometry.MultiPoint mpoint = new com.epl.geometry.MultiPoint();
     com.epl.geometry.Point      pt0    = new com.epl.geometry.Point(0.0, 0.0, -1.0);
     com.epl.geometry.Point      pt1    = new com.epl.geometry.Point(0.0, 0.0, 1.0);
     com.epl.geometry.Point      pt2    = new com.epl.geometry.Point(0.0, 1.0, 1.0);
     mpoint.Add(pt0);
     mpoint.Add(pt1);
     mpoint.Add(pt2);
     mpoint.RemovePoint(1);
     com.epl.geometry.MultiPoint mpCopy = (com.epl.geometry.MultiPoint)mpoint.Copy();
     NUnit.Framework.Assert.IsTrue(mpCopy.Equals(mpoint));
     com.epl.geometry.Point pt;
     pt = mpCopy.GetPoint(0);
     NUnit.Framework.Assert.IsTrue(pt.GetX() == pt0.GetX() && pt.GetY() == pt0.GetY());
     pt = mpCopy.GetPoint(1);
     NUnit.Framework.Assert.IsTrue(pt.GetX() == pt2.GetX() && pt.GetY() == pt2.GetY());
     NUnit.Framework.Assert.IsTrue(mpCopy.GetPointCount() == 2);
 }
Пример #22
0
        public virtual void TestIntersection()
        {
            com.epl.geometry.OperatorIntersects op      = (com.epl.geometry.OperatorIntersects)com.epl.geometry.OperatorFactoryLocal.GetInstance().GetOperator(com.epl.geometry.Operator.Type.Intersects);
            com.epl.geometry.Polygon            polygon = new com.epl.geometry.Polygon();
            // outer ring1
            polygon.StartPath(0, 0);
            polygon.LineTo(10, 10);
            polygon.LineTo(20, 0);
            com.epl.geometry.Point point1 = new com.epl.geometry.Point(15, 10);
            com.epl.geometry.Point point2 = new com.epl.geometry.Point(2, 10);
            com.epl.geometry.Point point3 = new com.epl.geometry.Point(5, 5);
            bool res = op.Execute(polygon, point1, null, null);

            NUnit.Framework.Assert.IsTrue(!res);
            res = op.Execute(polygon, point2, null, null);
            NUnit.Framework.Assert.IsTrue(!res);
            res = op.Execute(polygon, point3, null, null);
            NUnit.Framework.Assert.IsTrue(res);
        }
Пример #23
0
        public virtual void TestTouchesOnPointAndEnvelope()
        {
            com.epl.geometry.SpatialReference sr = com.epl.geometry.SpatialReference.Create(4326);
            com.epl.geometry.Point            p  = new com.epl.geometry.Point(-130, 10);
            // Envelope env = new Envelope(p, 12, 12);//not touched
            com.epl.geometry.Envelope env = new com.epl.geometry.Envelope(-130, 10, -110, 20);
            // touched
            bool isTouched;

            try
            {
                isTouched = com.epl.geometry.GeometryEngine.Touches(p, env, sr);
            }
            catch (System.ArgumentException)
            {
                isTouched = false;
            }
            NUnit.Framework.Assert.AreEqual(isTouched, true);
        }
Пример #24
0
        public virtual void TestPointAndPoint2()
        {
            com.epl.geometry.Point basePl = new com.epl.geometry.Point(-115, 20);
            com.epl.geometry.Point compPl = new com.epl.geometry.Point(-116, 20);
            int noException = 1;

            // no exception
            com.epl.geometry.Geometry intersectGeom = null;
            try
            {
                intersectGeom = com.epl.geometry.GeometryEngine.Intersect(basePl, compPl, com.epl.geometry.SpatialReference.Create(4326));
            }
            catch (System.Exception)
            {
                noException = 0;
            }
            NUnit.Framework.Assert.AreEqual(noException, 1);
            NUnit.Framework.Assert.IsTrue(intersectGeom.IsEmpty());
        }
Пример #25
0
 private void _set(int endPoint, com.epl.geometry.Point src)
 {
     _touch();
     com.epl.geometry.Point point = src;
     if (src.IsEmptyImpl())
     {
         // can not assign an empty point
         throw new com.epl.geometry.GeometryException("empty_Geometry");
     }
     com.epl.geometry.VertexDescription vdin = point.GetDescription();
     for (int attributeIndex = 0, nattrib = vdin.GetAttributeCount(); attributeIndex < nattrib; attributeIndex++)
     {
         int semantics = vdin._getSemanticsImpl(attributeIndex);
         int ncomp     = com.epl.geometry.VertexDescription.GetComponentCount(semantics);
         for (int icomp = 0; icomp < ncomp; icomp++)
         {
             double v = point.GetAttributeAsDbl(semantics, icomp);
             _setAttribute(endPoint, semantics, icomp, v);
         }
     }
 }
Пример #26
0
 public override void CopyTo(com.epl.geometry.Geometry dst)
 {
     if (dst.GetType() != com.epl.geometry.Geometry.Type.Point)
     {
         throw new System.ArgumentException();
     }
     com.epl.geometry.Point pointDst = (com.epl.geometry.Point)dst;
     dst._touch();
     if (m_attributes == null)
     {
         pointDst.SetEmpty();
         pointDst.m_attributes = null;
         pointDst.AssignVertexDescription(m_description);
     }
     else
     {
         pointDst.AssignVertexDescription(m_description);
         pointDst.ResizeAttributes(m_description.GetTotalComponentCount());
         AttributeCopy(m_attributes, pointDst.m_attributes, m_description.GetTotalComponentCount());
     }
 }
Пример #27
0
        public virtual void GetCenter(com.epl.geometry.Point point_out)
        {
            point_out.AssignVertexDescription(m_description);
            if (IsEmpty())
            {
                point_out.SetEmpty();
                return;
            }
            int nattrib = m_description.GetAttributeCount();

            for (int i = 1; i < nattrib; i++)
            {
                int semantics = m_description.GetSemantics(i);
                int ncomp     = com.epl.geometry.VertexDescription.GetComponentCount(semantics);
                for (int iord = 0; iord < ncomp; iord++)
                {
                    double v = 0.5 * (GetAttributeAsDblImpl_(0, semantics, iord) + GetAttributeAsDblImpl_(1, semantics, iord));
                    point_out.SetAttribute(semantics, iord, v);
                }
            }
            point_out.SetXY(m_envelope.GetCenter());
        }
Пример #28
0
        /// <summary>Returns the center point of the envelope.</summary>
        /// <returns>The center point of the envelope.</returns>
        public virtual com.epl.geometry.Point GetCenter()
        {
            com.epl.geometry.Point pointOut = new com.epl.geometry.Point(m_description);
            if (IsEmpty())
            {
                return(pointOut);
            }
            int nattrib = m_description.GetAttributeCount();

            for (int i = 1; i < nattrib; i++)
            {
                int semantics = m_description._getSemanticsImpl(i);
                int ncomp     = com.epl.geometry.VertexDescription.GetComponentCount(semantics);
                for (int iord = 0; iord < ncomp; iord++)
                {
                    double v = 0.5 * (_getAttributeAsDbl(0, semantics, iord) + _getAttributeAsDbl(1, semantics, iord));
                    pointOut.SetAttribute(semantics, iord, v);
                }
            }
            pointOut.SetXY(m_envelope.GetCenterX(), m_envelope.GetCenterY());
            return(pointOut);
        }
Пример #29
0
        internal virtual com.epl.geometry.Point _RandomizeExisting()
        {
            if (points.Count == 0)
            {
                return(_GenerateNewPoint());
            }
            double f   = random.NextDouble();
            int    num = (int)(f * points.Count);

            com.epl.geometry.Point pt = points[num];
            f = random.NextDouble();
            // if (f > 0.9)
            if (f > 2)
            {
                f = random.NextDouble();
                pt.SetX(pt.GetX() + (1 - 2 * f) * 2 * tolerance);
                f = random.NextDouble();
                pt.SetY(pt.GetY() + (1 - 2 * f) * 2 * tolerance);
                pt = _snapClip(pt, env);
            }
            return(pt);
        }
Пример #30
0
 private void _get(int endPoint, com.epl.geometry.Point outPoint)
 {
     if (IsEmptyImpl())
     {
         throw new com.epl.geometry.GeometryException("empty geometry");
     }
     // ._setToDefault();
     outPoint.AssignVertexDescription(m_description);
     if (outPoint.IsEmptyImpl())
     {
         outPoint._setToDefault();
     }
     for (int attributeIndex = 0; attributeIndex < m_description.GetAttributeCount(); attributeIndex++)
     {
         int semantics = m_description._getSemanticsImpl(attributeIndex);
         for (int icomp = 0, ncomp = com.epl.geometry.VertexDescription.GetComponentCount(semantics); icomp < ncomp; icomp++)
         {
             double v = _getAttributeAsDbl(endPoint, semantics, icomp);
             outPoint.SetAttribute(semantics, icomp, v);
         }
     }
 }