CoordinateSystem
using Autodesk.DesignScript.Geometry.Properties;
using Autodesk.DesignScript.Interfaces;
using Autodesk.DesignScript.Runtime;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace Autodesk.DesignScript.Geometry
{
public class CoordinateSystem : DesignScriptEntity
{
internal ICoordinateSystemEntity CoordinateSystemEntity => HostImpl as ICoordinateSystemEntity;
public bool IsSingular => CoordinateSystemEntity.get_IsSingular();
public bool IsScaledOrtho => CoordinateSystemEntity.get_IsScaledOrtho();
public bool IsUniscaledOrtho => CoordinateSystemEntity.get_IsUniscaledOrtho();
public double Determinant => CoordinateSystemEntity.get_Determinant();
public Point Origin => Point.Wrap(CoordinateSystemEntity.get_Origin(), true);
public Vector XAxis => Vector.Wrap(CoordinateSystemEntity.get_XAxis().Scale(1 / DesignScriptEntity.scaleFactor), true);
public Vector YAxis => Vector.Wrap(CoordinateSystemEntity.get_YAxis().Scale(1 / DesignScriptEntity.scaleFactor), true);
public Vector ZAxis => Vector.Wrap(CoordinateSystemEntity.get_ZAxis().Scale(1 / DesignScriptEntity.scaleFactor), true);
public double XScaleFactor => CoordinateSystemEntity.get_XScaleFactor();
public double YScaleFactor => CoordinateSystemEntity.get_YScaleFactor();
public double ZScaleFactor => CoordinateSystemEntity.get_ZScaleFactor();
public Plane XYPlane => Plane.Wrap(CoordinateSystemEntity.get_XYPlane(), true);
public Plane YZPlane => Plane.Wrap(CoordinateSystemEntity.get_YZPlane(), true);
public Plane ZXPlane => Plane.Wrap(CoordinateSystemEntity.get_ZXPlane(), true);
internal CoordinateSystem(ICoordinateSystemEntity host, bool persist)
: base(host, persist)
{
}
public override string ToString()
{
string[] obj = new string[15] {
"CoordinateSystem(Origin = ",
Origin?.ToString(),
", XAxis = ",
XAxis?.ToString(),
", YAxis = ",
YAxis?.ToString(),
", ZAxis = ",
ZAxis?.ToString(),
", XScaleFactor = ",
null,
null,
null,
null,
null,
null
};
double num = XScaleFactor;
obj[9] = num.ToString(GeometryExtension.DoublePrintFormat, CultureInfo.InvariantCulture);
obj[10] = ", YScaleFactor = ";
num = YScaleFactor;
obj[11] = num.ToString(GeometryExtension.DoublePrintFormat, CultureInfo.InvariantCulture);
obj[12] = ", ZScaleFactor = ";
num = ZScaleFactor;
obj[13] = num.ToString(GeometryExtension.DoublePrintFormat, CultureInfo.InvariantCulture);
obj[14] = ")";
return string.Concat(obj);
}
internal static CoordinateSystem Wrap(ICoordinateSystemEntity host, bool persist = true)
{
if (host == null)
return null;
return new CoordinateSystem(host, persist);
}
internal static CoordinateSystem[] Wrap(ICoordinateSystemEntity[] hosts, bool persist = true)
{
return (from x in hosts
select Wrap(x, persist)).ToArray();
}
internal static ICoordinateSystemEntity[] Unwrap(CoordinateSystem[] o)
{
return o.Select(Unwrap).ToArray();
}
internal static ICoordinateSystemEntity Unwrap(CoordinateSystem o)
{
return o.CoordinateSystemEntity;
}
public static CoordinateSystem Identity()
{
return Wrap(HostFactory.Factory.CoordinateSystemIdentity(), true);
}
[Obsolete("This method is deprecated and will be removed in a future version of Dynamo.")]
[IsObsolete("coordinatesystem_bymatrix_deprecated", typeof(Resources))]
[IsVisibleInDynamoLibrary(false)]
public static CoordinateSystem ByMatrix(double[] matrix)
{
return Wrap(HostFactory.Factory.CoordinateSystemByMatrix(matrix), true);
}
public static CoordinateSystem ByOrigin(double x = 0, double y = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
x,
y
});
x /= DesignScriptEntity.scaleFactor;
y /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CoordinateSystemByOrigin(x, y), true);
}
public static CoordinateSystem ByOrigin(double x = 0, double y = 0, double z = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
x,
y,
z
});
x /= DesignScriptEntity.scaleFactor;
y /= DesignScriptEntity.scaleFactor;
z /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CoordinateSystemByOrigin(x, y, z), true);
}
public static CoordinateSystem ByOrigin([DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)")] Point origin)
{
return Wrap(HostFactory.Factory.CoordinateSystemByOrigin(Point.Unwrap(origin)), true);
}
public static CoordinateSystem ByPlane([DefaultArgument("Autodesk.DesignScript.Geometry.Plane.XY()")] Plane plane)
{
return Wrap(HostFactory.Factory.CoordinateSystemByPlane(Plane.Unwrap(plane)), true);
}
public static CoordinateSystem ByOriginVectors([DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)")] Point origin, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ByCoordinates(1, 0, 0)")] Vector xAxis, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 1, 0)")] Vector yAxis)
{
return Wrap(HostFactory.Factory.CoordinateSystemByOriginVectors(Point.Unwrap(origin), Vector.Unwrap(xAxis), Vector.Unwrap(yAxis)), true);
}
public static CoordinateSystem ByOriginVectors([DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)")] Point origin, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ByCoordinates(1, 0, 0)")] Vector xAxis, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 1, 0)")] Vector yAxis, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)")] Vector zAxis)
{
return Wrap(HostFactory.Factory.CoordinateSystemByOriginVectors(Point.Unwrap(origin), Vector.Unwrap(xAxis), Vector.Unwrap(yAxis), Vector.Unwrap(zAxis)), true);
}
public static CoordinateSystem ByCylindricalCoordinates([DefaultArgument("Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)")] CoordinateSystem cs, double radius = 0, double theta = 0, double height = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
radius,
height
});
radius /= DesignScriptEntity.scaleFactor;
height /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CoordinateSystemByCylindricalCoordinates(Unwrap(cs), radius, theta, height), true);
}
public static CoordinateSystem BySphericalCoordinates([DefaultArgument("Autodesk.DesignScript.Geometry.CoordinateSystem.ByOrigin(0, 0, 0)")] CoordinateSystem cs, double radius = 0, double theta = 0, double phi = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
radius
});
radius /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CoordinateSystemBySphericalCoordinates(Unwrap(cs), radius, theta, phi), true);
}
public CoordinateSystem Inverse()
{
return Wrap(CoordinateSystemEntity.Inverse(), true);
}
public CoordinateSystem Mirror(Plane mirrorPlane)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Mirror(mirrorPlane.PlaneEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem PostMultiplyBy(CoordinateSystem other)
{
return Wrap(CoordinateSystemEntity.PostMultiplyBy(Unwrap(other)), true);
}
public CoordinateSystem PreMultiplyBy(CoordinateSystem other)
{
return Wrap(CoordinateSystemEntity.PreMultiplyBy(Unwrap(other)), true);
}
public Vector ScaleFactor()
{
return Vector.Wrap(CoordinateSystemEntity.ScaleFactor().Scale(1 / DesignScriptEntity.scaleFactor), true);
}
public bool IsEqualTo(CoordinateSystem other)
{
return CoordinateSystemEntity.IsEqualTo(Unwrap(other));
}
public CoordinateSystem Translate(double xTranslation = 0, double yTranslation = 0, double zTranslation = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
xTranslation,
yTranslation,
zTranslation
});
xTranslation /= DesignScriptEntity.scaleFactor;
yTranslation /= DesignScriptEntity.scaleFactor;
zTranslation /= DesignScriptEntity.scaleFactor;
ICoordinateSystemEntity host = CoordinateSystemEntity.Translate(xTranslation, yTranslation, zTranslation) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Translate(Vector direction)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Translate(direction.VectorEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Translate(Vector direction, double distance = 0)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
distance
});
distance /= DesignScriptEntity.scaleFactor;
ICoordinateSystemEntity host = CoordinateSystemEntity.Translate(direction.VectorEntity, distance) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Transform(CoordinateSystem coordinateSystem)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Transform(coordinateSystem.CoordinateSystemEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Transform(CoordinateSystem fromCoordinateSystem, CoordinateSystem contextCoordinateSystem)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.TransformFromTo(fromCoordinateSystem.CoordinateSystemEntity, contextCoordinateSystem.CoordinateSystemEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Rotate(Point origin, Vector axis, double degrees = 0)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Rotate(origin.PointEntity, axis.VectorEntity, degrees) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Rotate(Plane plane, double degrees = 0)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Rotate(plane.PlaneEntity, degrees) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Scale(double amount = 1)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Scale(amount) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Scale(double xamount = 1, double yamount = 1, double zamount = 1)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Scale(xamount, yamount, zamount) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Scale(Plane plane, double xamount = 1, double yamount = 1, double zamount = 1)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Scale(Plane.Unwrap(plane), xamount, yamount, zamount) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Scale(Point basePoint, Point from, Point to)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Scale(basePoint.PointEntity, from.PointEntity, to.PointEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Scale1D(Point basePoint, Point from, Point to)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Scale1D(basePoint.PointEntity, from.PointEntity, to.PointEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
public CoordinateSystem Scale2D(Plane basePlane, Point from, Point to)
{
ICoordinateSystemEntity host = CoordinateSystemEntity.Scale2D(basePlane.PlaneEntity, from.PointEntity, to.PointEntity) as ICoordinateSystemEntity;
return Wrap(host, true);
}
[SupressImportIntoVM]
public static CoordinateSystem FromJson(string json)
{
return Wrap(HostFactory.Factory.CoordinateSystemFromJson(json, DesignScriptEntity.scaleFactor), true);
}
[SupressImportIntoVM]
public string ToJson()
{
return HostImpl.ToJson(DesignScriptEntity.scaleFactor);
}
}
}