/// <summary>
        ///   Builds an ellipse from 3 points in space
        /// </summary>
        private static TopoDSWire BuildEllipse(Point3D center, Point3D secondPoint, Point3D thirdPoint)
        {
            double minorRadius;
            double majorRadius;
            bool   reversed;
            gpDir  dirX = null;
            gpDir  dirY = null;

            if (secondPoint.GpPnt.Distance(thirdPoint.GpPnt) < Precision.Confusion)
            {
                return(null);
            }


            if (!TreeUtils.ComputeEllipseRadiuses(center, secondPoint, thirdPoint,
                                                  out minorRadius, out majorRadius, out reversed,
                                                  ref dirX, ref dirY))
            {
                return(null);
            }
            // Build a plane from the 3 points
            var plane = GeomUtils.BuildPlane(center, secondPoint, thirdPoint);
            var ax1   = plane.Axis;
            var ax2   = new gpAx2();

            ax2.Axis     = (ax1);
            ax2.Location = (center.GpPnt);

            // If major and minor radius are reversed also their directions arereversed
            if (!reversed)
            {
                ax2.XDirection = (dirX);
                ax2.YDirection = (dirY);
            }
            else
            {
                ax2.XDirection = (dirY);
                ax2.YDirection = (dirX);
            }

            var ellipse = new GeomEllipse(ax2, majorRadius, minorRadius);
            var edge    = new BRepBuilderAPIMakeEdge(ellipse).Edge;
            var wire    = new BRepBuilderAPIMakeWire(edge).Wire;

            return(wire);
        }
Esempio n. 2
0
        public static ComplexGeometry ExecuteStages(Point centerLocation)
        {
            var finalGeometry = new List <Geometry>();

            var pointsList = GeomPoint.CreatePoints();

            finalGeometry.Add(pointsList);
            var linesList = GeomLine.CreateLines(pointsList);

            finalGeometry.Add(linesList);
            var ellipse = GeomEllipse.CreateEllipse(linesList);

            finalGeometry.Add(ellipse);
            var circle = GeomCircle.CreateCircle(ellipse);

            finalGeometry.Add(circle);
            var boundingBox = GeomBoundingBox.CreateBoundingBox(ellipse);

            finalGeometry.Add(boundingBox);

            return(finalGeometry);
        }