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); }
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; }
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()); }
public override bool combine(Tool other) { var otherChange = other as ChangeGeometryTypeTool; if (otherChange == null || otherChange.gmlGeometry != gmlGeometry) { return(false); } newGeometryType = otherChange.newGeometryType; return(true); }
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); }
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];*/ }