PolyCurve
using Autodesk.DesignScript.Geometry.Properties;
using Autodesk.DesignScript.Interfaces;
using Autodesk.DesignScript.Runtime;
using Dynamo.Graph.Nodes;
using DynamoServices;
using ProtoGeometryGenerator;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
namespace Autodesk.DesignScript.Geometry
{
[GenerateFromInterface(typeof(IPolyCurveEntity), typeof(IGeometryFactory), new Type[] {
})]
public class PolyCurve : Curve
{
private static readonly Version MinDynamoVersionForInfoMessages = new Version(4, 0, 0, 0);
public virtual Point[] Points => Point.Wrap(PolyCurveEntity.get_Points());
public virtual int NumberOfCurves => PolyCurveEntity.get_NumberOfCurves();
internal IPolyCurveEntity PolyCurveEntity => HostImpl as IPolyCurveEntity;
public virtual Curve[] Curves()
{
return Curve.Wrap(PolyCurveEntity.Curves());
}
public virtual Curve CurveAtIndex(int index = 0, bool endOrStart = false)
{
return Curve.Wrap(PolyCurveEntity.CurveAtIndex(index, endOrStart));
}
public virtual Plane BasePlane()
{
return Plane.Wrap(PolyCurveEntity.BasePlane());
}
public virtual PolyCurve CloseWithLine()
{
return Wrap(PolyCurveEntity.CloseWithLine());
}
[AllowRankReduction]
public virtual Curve[] OffsetMany([Scaling()] double signedDistance, bool extendCircular, [DefaultArgument("null")] Vector planeNormal)
{
DesignScriptEntity.CheckArgsForAsmExtents(signedDistance);
return Curve.Wrap(PolyCurveEntity.OffsetMany(signedDistance / DesignScriptEntity.scaleFactor, extendCircular, Vector.Unwrap(planeNormal)));
}
public virtual PolyCurve Fillet([Scaling()] double radius = 1, bool clockwise_corners = true)
{
DesignScriptEntity.CheckArgsForAsmExtents(radius);
return Wrap(PolyCurveEntity.Fillet(radius / DesignScriptEntity.scaleFactor, clockwise_corners));
}
[AllowRankReduction]
[NodeCategory("Create")]
public static PolyCurve[] ByGroupedCurves(IEnumerable<Curve> curves, [Scaling()] double joinTolerance = 0.001, bool trimCurves = false, [Scaling()] double trimLength = 0)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
DesignScriptEntity.CheckArgsForAsmExtents(joinTolerance, trimLength);
return Wrap(HostFactory.Factory.PolyCurveByGroupedCurves(Curve.Unwrap(curves), joinTolerance / DesignScriptEntity.scaleFactor, trimCurves, trimLength / DesignScriptEntity.scaleFactor));
}
internal PolyCurve(IPolyCurveEntity host)
: base(host)
{
}
internal new static void InitType()
{
Geometry.RegisterHostType(typeof(IPolyCurveEntity), (IGeometryEntity host) => new PolyCurve(host as IPolyCurveEntity));
}
public PolyCurve ExtendWithEllipse([Scaling()] double length, [Scaling()] double radius1, [Scaling()] double radius2, double endEllipseParameter, bool endOrStart)
{
DesignScriptEntity.CheckArgsForAsmExtents(length, radius1, radius2);
return Wrap(PolyCurveEntity.ExtendWithEllipse(length / DesignScriptEntity.scaleFactor, radius1 / DesignScriptEntity.scaleFactor, radius2 / DesignScriptEntity.scaleFactor, endEllipseParameter, endOrStart));
}
public PolyCurve ExtendWithArc([Scaling()] double length, [Scaling()] double radius, bool endOrStart)
{
DesignScriptEntity.CheckArgsForAsmExtents(length, radius);
return Wrap(PolyCurveEntity.ExtendWithArc(length / DesignScriptEntity.scaleFactor, radius / DesignScriptEntity.scaleFactor, endOrStart));
}
public PolyCurve CloseWithLineAndTangentArcs([Scaling()] double radiusAtStart = 1, [Scaling()] double radiusAtEnd = 1)
{
DesignScriptEntity.CheckArgsForAsmExtents(radiusAtStart, radiusAtEnd);
return Wrap(PolyCurveEntity.CloseWithLineAndTangentArcs(radiusAtStart / DesignScriptEntity.scaleFactor, radiusAtEnd / DesignScriptEntity.scaleFactor));
}
[IsVisibleInDynamoLibrary(false)]
[IsObsolete("polycurve_offset_deprecated", typeof(Resources))]
[Obsolete("This method is deprecated and will be removed in a future version of Dynamo. Use PolyCurve.OffsetMany instead.")]
public Curve Offset([Scaling()] double signedDistance, bool extendCircular)
{
DesignScriptEntity.CheckArgsForAsmExtents(signedDistance);
return Curve.Wrap(PolyCurveEntity.Offset(signedDistance / DesignScriptEntity.scaleFactor, extendCircular));
}
public PolyCurve Heal([Scaling()] double trimLength = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(trimLength);
return Wrap(PolyCurveEntity.Heal(trimLength / DesignScriptEntity.scaleFactor));
}
[IsVisibleInDynamoLibrary(false)]
[IsObsolete("polycurve_byjoinedcurves_deprecated", typeof(Resources))]
[Obsolete("This method is deprecated and will be removed in a future version of Dynamo. Use PolyCurve.ByJoinedCurves(Curve[] curves, double joinTolerance, bool trimCurves, double trimLength) instead")]
public static PolyCurve ByJoinedCurves(IEnumerable<Curve> curves, [Scaling()] double joinTolerance = 0.001)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
DesignScriptEntity.CheckArgsForAsmExtents(joinTolerance);
return Wrap(HostFactory.Factory.PolyCurveByJoinedCurves(Curve.Unwrap(curves), joinTolerance / DesignScriptEntity.scaleFactor));
}
public static PolyCurve ByJoinedCurves(IEnumerable<Curve> curves, [Scaling()] double joinTolerance = 0.001, bool trimCurves = false, [Scaling()] double trimLength = 0)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
DesignScriptEntity.CheckArgsForAsmExtents(joinTolerance, trimLength);
return Wrap(HostFactory.Factory.PolyCurveByJoinedCurves(Curve.Unwrap(curves), joinTolerance / DesignScriptEntity.scaleFactor, trimCurves, trimLength / DesignScriptEntity.scaleFactor));
}
[IsVisibleInDynamoLibrary(false)]
[IsObsolete("polycurve_bygroupedcurves_deprecated", typeof(Resources))]
[Obsolete("This method is deprecated and will be removed in a future version of Dynamo. Use PolyCurve.ByGroupedCurves(Curve[] curves, double joinTolerance, bool trimCurves, double trimLength) instead")]
[AllowRankReduction]
public static PolyCurve[] ByGroupedCurves(IEnumerable<Curve> curves, [Scaling()] double joinTolerance = 0.001)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
DesignScriptEntity.CheckArgsForAsmExtents(joinTolerance);
return Wrap(HostFactory.Factory.PolyCurveByGroupedCurves(Curve.Unwrap(curves), joinTolerance / DesignScriptEntity.scaleFactor));
}
public static PolyCurve ByPoints(IEnumerable<Point> points, bool connectLastToFirst = false)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
return Wrap(HostFactory.Factory.PolyCurveByPoints(Point.Unwrap(points), connectLastToFirst));
}
[IsVisibleInDynamoLibrary(false)]
[IsObsolete("polycurve_bythickeningcurve_depreacted", typeof(Resources))]
[Obsolete("This method is deprecated and will be removed in a future version of Dynamo. Use PolyCurve.ByThickeningCurveNormal(Curve curve, double thickness, Vector normal) instead")]
public static PolyCurve ByThickeningCurve(Curve curve, [Scaling()] double thickness, Vector nor)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
DesignScriptEntity.CheckArgsForAsmExtents(thickness);
return Wrap(HostFactory.Factory.PolyCurveByThickeningCurve(Curve.Unwrap(curve), thickness / DesignScriptEntity.scaleFactor, Vector.Unwrap(nor)));
}
public static PolyCurve ByThickeningCurveNormal(Curve curve, [Scaling()] double thickness, [DefaultArgument("null")] Vector normal)
{
string message = string.Format(CultureInfo.InvariantCulture, Resources.PolyCurveDirectionalityInfoMessage, Array.Empty<object>());
LogWarningMessageEvents.OnLogInfoMessage(message, MinDynamoVersionForInfoMessages);
DesignScriptEntity.CheckArgsForAsmExtents(thickness);
return Wrap(HostFactory.Factory.PolyCurveByThickeningCurveNormal(Curve.Unwrap(curve), thickness / DesignScriptEntity.scaleFactor, Vector.Unwrap(normal)));
}
internal static PolyCurve Wrap(IPolyCurveEntity host)
{
return Geometry.Wrap(host) as PolyCurve;
}
internal static PolyCurve[] Wrap(IPolyCurveEntity[] hosts)
{
return hosts.Select(Wrap).ToArray();
}
internal static PolyCurve[][] Wrap(IPolyCurveEntity[][] hosts)
{
return hosts.Select(Wrap).ToArray();
}
internal static IPolyCurveEntity Unwrap(PolyCurve o)
{
return o.PolyCurveEntity;
}
internal static IPolyCurveEntity[] Unwrap(IEnumerable<PolyCurve> o)
{
return o.Select(Unwrap).ToArray();
}
internal static IPolyCurveEntity[] Unwrap(PolyCurve[] o)
{
return o.Select(Unwrap).ToArray();
}
internal static IPolyCurveEntity[][] Unwrap(PolyCurve[][] o)
{
return o.Select(Unwrap).ToArray();
}
public override string ToString()
{
StringBuilder builder = DesignScriptEntity.GetBuilder();
AppendTo(builder);
return builder.ToString();
}
internal override void AppendTo(StringBuilder builder)
{
builder.Add("PolyCurve(NumberOfCurves = ", NumberOfCurves).Append(")");
}
}
}