public Ellipse(EntityObject entity) : base(EdgeType.Ellipse) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } Entities.Ellipse ellipse = entity as Entities.Ellipse; if (ellipse == null) { throw new ArgumentException("The entity is not an Ellipse", nameof(entity)); } this.Center = new Vector2(ellipse.Center.X, ellipse.Center.Y); double sine = 0.5 * ellipse.MajorAxis * Math.Sin(ellipse.Rotation * MathHelper.DegToRad); double cosine = 0.5 * ellipse.MajorAxis * Math.Cos(ellipse.Rotation * MathHelper.DegToRad); this.EndMajorAxis = new Vector2(cosine, sine); this.MinorRatio = ellipse.MinorAxis / ellipse.MajorAxis; if (ellipse.IsFullEllipse) { this.StartAngle = 0.0; this.EndAngle = 360.0; } else { this.StartAngle = ellipse.StartAngle; this.EndAngle = ellipse.EndAngle; } this.IsCounterclockwise = true; }
/// <summary> /// Initializes a new instance of the the <c>HatchBoundaryPath.Ellipse</c> class. /// </summary> /// <param name="entity"><see cref="EntityObject">Entity</see> that represents the edge.</param> public Ellipse(EntityObject entity) : base(EdgeType.Ellipse) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } Entities.Ellipse ellipse = entity as Entities.Ellipse; if (ellipse == null) { throw new ArgumentException("The entity is not an Ellipse", nameof(entity)); } Matrix3 trans = MathHelper.ArbitraryAxis(entity.Normal).Transpose(); Vector3 point = trans * ellipse.Center; Center = new Vector2(point.X, point.Y); double sine = 0.5 * ellipse.MajorAxis * Math.Sin(ellipse.Rotation * MathHelper.DegToRad); double cosine = 0.5 * ellipse.MajorAxis * Math.Cos(ellipse.Rotation * MathHelper.DegToRad); EndMajorAxis = new Vector2(cosine, sine); MinorRatio = ellipse.MinorAxis / ellipse.MajorAxis; if (ellipse.IsFullEllipse) { StartAngle = 0.0; EndAngle = 360.0; } else { StartAngle = ellipse.StartAngle; EndAngle = ellipse.EndAngle; } IsCounterclockwise = true; }