示例#1
0
 private static IEnumerable <Vector3> ArcVertices(IArc arc, IArc nextArc, Sweepline sweepline)
 {
     if (arc.LeftNeighbour == arc.Site)
     {
         var azimuths = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, NumberOfVerticesPerArc);
         var vertices = azimuths.Select(azimuth => PointOnEllipse(arc, azimuth, sweepline)).ToList();
         return(vertices);
     }
     else if (Mathf.Approximately((float)arc.Site.Priority, (float)sweepline.Priority))
     {
         var intersection = arc.PointOfIntersection(sweepline).ToUnityVector3();
         var site         = arc.Site.Position.ToUnityVector3();
         var downArc      = DrawingUtilities.VerticesOnGeodesic(intersection, site, NumberOfVerticesPerArc);
         var upArc        = DrawingUtilities.VerticesOnGeodesic(site, intersection, NumberOfVerticesPerArc);
         var vertices     = downArc.Concat(upArc);
         return(vertices);
     }
     else
     {
         var leftLimit  = DrawingUtilities.AzimuthOf(arc.LeftIntersection(sweepline).ToUnityVector3());
         var rightLimit = DrawingUtilities.AzimuthOf(nextArc.LeftIntersection(sweepline).ToUnityVector3());
         var azimuths   = DrawingUtilities.AnglesInRange(leftLimit, rightLimit, NumberOfVerticesPerArc);
         var vertices   = azimuths.Select(azimuth => PointOnEllipse(arc, azimuth, sweepline)).ToList();
         return(vertices);
     }
 }
示例#2
0
        private Vector3[] CircleEventVertices(CircleEvent circle)
        {
            var angles = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, NumberOfVerticesPerCircle);

            var points = angles.Select(angle => VertexOfCircleEvent(circle, angle)).ToArray();

            return(points);
        }
示例#3
0
        private static Vector3[] SweeplineVertices(Sweepline sweepline)
        {
            if (Math.Abs(sweepline.Z) >= 1)
            {
                return(new Vector3[0]);
            }

            var azimuths = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, NumberOfVertices);
            var vertices = azimuths.Select(azimuth => VertexOnSweepline(sweepline, azimuth)).ToArray();

            return(vertices);
        }
示例#4
0
        private static GameObject DrawLabelsAtColatitude(float colatitude)
        {
            var azimuths = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, 36);

            var labels = azimuths.Take(36).Select(azimuth => DrawLabel(colatitude, azimuth));

            var parentObject = new GameObject("Latitude Labels " + Mathf.Rad2Deg * colatitude);

            foreach (var label in labels)
            {
                label.transform.parent = parentObject.transform;
            }

            return(parentObject);
        }
示例#5
0
        private static GameObject DrawLongitude(float azimuth)
        {
            var azimuths = DrawingUtilities.AnglesInRange(0, Mathf.PI, NumberOfPointsPerLongitude);

            var vertices =
                azimuths.Select(
                    colatitude => DrawingUtilities.CreateVectorAt(colatitude, azimuth))
                .ToArray();

            var longitudeObject =
                DrawingUtilities.CreateLineObject(
                    "Longitude " + Mathf.Rad2Deg * azimuth,
                    vertices,
                    "Boundaries");

            return(longitudeObject);
        }