Example #1
0
    private static bool Inside(List <Vector2d> points, GMLGeometry.GeometryType type, Vector2d point)
    {
        var meters = GM.LatLonToMeters(point);

        var inside = false;

        switch (type)
        {
        case GeometryType.Point:
            break;

        case GeometryType.LineString:
            break;

        case GeometryType.Polygon:
            var originPoints = points.ConvertAll(p => GM.LatLonToMeters(p) - meters);
            for (int i = 0; i < originPoints.Count; i++)
            {
                if (((originPoints[i].y > 0) != (originPoints[(i + 1) % originPoints.Count].y > 0)) &&
                    ((originPoints[i].y > 0) == (originPoints[i].y * originPoints[(i + 1) % originPoints.Count].x > originPoints[(i + 1) % originPoints.Count].y * originPoints[i].x)))
                {
                    inside = !inside;
                }
            }
            break;

        default:
            break;
        }



        return(inside);
    }
Example #2
0
 public ChangeGeometryTypeTool(GMLGeometry gmlGeometry, GMLGeometry.GeometryType geometryType)
 {
     this.gmlGeometry          = gmlGeometry;
     this.previousPoints       = gmlGeometry.Points.ToArray();
     this.previousGeometryType = gmlGeometry.Type;
     this.newGeometryType      = geometryType;
 }
 public AddRemovePointTool(GMLGeometry gmlGeometry, int index, Vector2d point)
 {
     this.gmlGeometry  = gmlGeometry;
     this.add          = true;
     this.index        = index;
     this.point        = point;
     this.previousType = gmlGeometry.Type;
 }
 public AddRemovePointTool(GMLGeometry gmlGeometry, int index)
 {
     this.gmlGeometry  = gmlGeometry;
     this.add          = false;
     this.index        = index;
     this.point        = gmlGeometry.Points[index];
     this.previousType = gmlGeometry.Type;
 }
 public ChangeGeometryTypeTool(GMLGeometry gmlGeometry, GMLGeometry.GeometryType geometryType, MapEditor mapEditor)
 {
     this.gmlGeometry          = gmlGeometry;
     this.previousPoints       = gmlGeometry.Points.ToArray();
     this.previousGeometryType = gmlGeometry.Type;
     this.newGeometryType      = geometryType;
     this.mapEditor            = mapEditor;
     zoom   = mapEditor.Zoom;
     center = mapEditor.Center;
 }
Example #6
0
        private void DrawInfluenceArea(Vector2[] points, float radius, GMLGeometry.GeometryType type)
        {
            if (points.Length == 1)
            {
                Handles.color = Color.black;
                Handles.DrawWireArc(points[0], Vector3.back, Vector2.up, 360, radius);
                return;
            }

            DrawPolyLine(ExtendPolygon(new List <Vector2>(points), radius, type).ToArray());
        }
Example #7
0
            public override bool combine(Tool other)
            {
                var otherChange = other as ChangeGeometryTypeTool;

                if (otherChange == null || otherChange.gmlGeometry != gmlGeometry)
                {
                    return(false);
                }

                newGeometryType = otherChange.newGeometryType;
                return(true);
            }
Example #8
0
        public List <Vector2> ExtendPolygon(List <Vector2> points, float radius, GMLGeometry.GeometryType type)
        {
            Path polygon = points.ConvertAll(p => new IntPoint(p.x, p.y));

            Paths solution = new Paths();

            ClipperOffset c = new ClipperOffset();

            c.AddPath(polygon, JoinType.jtRound, type == GMLGeometry.GeometryType.Polygon ? EndType.etClosedPolygon : EndType.etOpenRound);
            c.Execute(ref solution, radius);

            var r = solution.Count > 0 ? solution[0].ConvertAll(p => new Vector2(p.X, p.Y)) : new List <Vector2>();

            if (r.Count > 0)
            {
                r.Add(r[0]);
            }

            return(r);
        }
    private static bool Inside(Vector2d[] points, GMLGeometry.GeometryType type, Vector2d point)
    {
        var meters = GM.LatLonToMeters(point);

        var inside = false;

        switch (type)
        {
        case GeometryType.Point:
            break;

        case GeometryType.LineString:
            break;

        case GeometryType.Polygon:
            var originPoints = new Vector2d[points.Length];

            for (int i = 0; i < points.Length; i++)
            {
                originPoints[i] = GM.LatLonToMeters(points[i]) - meters;
            }

            for (int i = 0; i < originPoints.Length; i++)
            {
                if (((originPoints[i].y > 0) != (originPoints[(i + 1) % originPoints.Length].y > 0)) &&
                    ((originPoints[i].y > 0) == (originPoints[i].y * originPoints[(i + 1) % originPoints.Length].x > originPoints[(i + 1) % originPoints.Length].y * originPoints[i].x)))
                {
                    inside = !inside;
                }
            }
            break;

        default:
            break;
        }



        return(inside);
    }
Example #10
0
    private void DrawInfluenceArea(Vector2[] points, float radius, GMLGeometry.GeometryType type)
    {
        if (points.Length == 1)
        {
            Handles.color = Color.black;
            Handles.DrawWireArc(points[0], Vector3.back, Vector2.up, 360, radius);
            return;
        }

        DrawPolyLine(ExtendPolygon(new List <Vector2>(points), radius, type).ToArray());

        /*var prev = points[points.Length - 1];
         * Vector2 prTh, thNx, prevVector = Vector2.zero;
         * for(int i = 0; i<= points.Length; i++)
         * {
         *  prTh = points[i % points.Length] - prev;
         *  thNx = points[(i + 1) % points.Length] - points[i % points.Length];
         *
         *  prTh = RotateVector(prTh, -90).normalized;
         *  thNx = RotateVector(thNx, -90).normalized;
         *
         *  if (i > 0) {
         *      if (Vector3.Cross(prTh, thNx).z < 0)
         *      {
         *          Handles.color = Color.blue;
         *          Handles.DrawLine(prev + prevVector * radius, points[i % points.Length] + prTh * radius);
         *          Handles.DrawWireArc(points[i % points.Length], Vector3.back, prTh, Vector3.Angle(prTh, thNx), radius);
         *      }
         *      else
         *      {
         *          Handles.DrawLine(prev + prevVector, LineIntersectionPoint(prev + prevVector * radius*2, prev + prevVector*radius, points[i % points.Length] + prTh * radius*2, points[i % points.Length] + prTh * radius));
         *      }
         *  }
         *  prevVector = thNx;
         *  prev = points[i % points.Length];*/
    }