/// <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); }
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); }