diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs index 22d5403..643e756 100644 --- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs +++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs @@ -12,15 +12,20 @@ namespace OSCADSharp.ConsoleTests { static void Main(string[] args) { - Cube cube = new Cube() { + OSCADObject cube = new Cube() + { Size = new Vector3(5, 5, 5), - Center = true + Center = false }; - ColoredObject co = new ColoredObject(cube, "Red"); - var mirror = new RotatedObject(co, new Vector3(0, 90, 0)); + cube = cube.Color("Red") + .Mirror(new Vector3(1, 0, 0)) + .Resize(new Vector3(10, 20, 10)) + .Rotate(new Vector3(90, 90, 0)) + .Scale(new Vector3(1, 1, 2)) + .Translate(new Vector3(10, 5, 2)); - Console.WriteLine(mirror.ToString()); + Console.WriteLine(cube.ToString()); Console.ReadKey(); } } diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs index 70b1aff..c60b49e 100644 --- a/OSCADSharp/OSCADSharp/OSCADObject.cs +++ b/OSCADSharp/OSCADSharp/OSCADObject.cs @@ -1,4 +1,5 @@ -using System; +using OSCADSharp.Transforms; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,5 +9,68 @@ namespace OSCADSharp { public abstract class OSCADObject { + #region Transforms + /// + /// Applies Color and/or Opacity to this object + /// + /// The name of the color to apply + /// The opacity from 0.0 to 1.0 + /// A colorized object + public OSCADObject Color(string colorName, double opacity = 1.0) + { + return new ColoredObject(this, colorName, opacity); + } + + /// + /// Mirrors the object about a plane, as specified by the normal + /// + /// The normal vector of the plane intersecting the origin of the object, + /// through which to mirror it. + /// A mirrored object + public OSCADObject Mirror(Vector3 normal) + { + return new MirroredObject(this, normal); + } + + /// + /// Resizes to a specified set of X/Y/Z dimensions + /// + /// The X/Y/Z dimensions + /// A resized object + public OSCADObject Resize(Vector3 newsize) + { + return new ResizedObject(this, newsize); + } + + /// + /// Rotates about a specified X/Y/Z euler angle + /// + /// The angle(s) to rotate + /// A rotated object + public OSCADObject Rotate(Vector3 angle) + { + return new RotatedObject(this, angle); + } + + /// + /// Rescales an object by an X/Y/Z scale factor + /// + /// The scale to apply. For example 1, 2, 1 would yield 2x scale on the Y axis + /// A scaled object + public OSCADObject Scale(Vector3 scale) + { + return new ScaledObject(this, scale); + } + + /// + /// Translates an object by the specified amount + /// + /// The vector upon which to translate (move object(s)) + /// A translated object + public OSCADObject Translate(Vector3 translation) + { + return new TranslatedObject(this, translation); + } + #endregion } } diff --git a/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs b/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs index 2f545ae..512f452 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs @@ -9,11 +9,11 @@ namespace OSCADSharp.Transforms /// /// An object that has color and/or opacity applied to it /// - public class ColoredObject : OSCADObject + internal class ColoredObject : OSCADObject { #region Attributes - public string Color { get; set; } = "Yellow"; - public double Opacity { get; set; } = 1.0; + internal string ColorName { get; set; } = "Yellow"; + internal double Opacity { get; set; } = 1.0; #endregion private OSCADObject obj; @@ -22,18 +22,18 @@ namespace OSCADSharp.Transforms /// Creates a colorized object /// /// The object(s) to which color will be applied - /// The string-wise name of the color to be applied + /// The string-wise name of the color to be applied /// Opacity from 0.0 to 1.0 - public ColoredObject(OSCADObject obj, string Color = "Yellow", double opacity = 1.0) + internal ColoredObject(OSCADObject obj, string color = "Yellow", double opacity = 1.0) { this.obj = obj; - this.Color = Color; + this.ColorName = color; this.Opacity = opacity; } public override string ToString() { - string colorCommand = String.Format("color(\"{0}\", {1})", this.Color, this.Opacity); + string colorCommand = String.Format("color(\"{0}\", {1})", this.ColorName, this.Opacity); var formatter = new BlockFormatter(colorCommand, this.obj.ToString()); return formatter.ToString(); } diff --git a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs index 2e5aa05..0a04c07 100644 --- a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs @@ -9,13 +9,13 @@ namespace OSCADSharp.Transforms /// /// An object that's mirrored on a plane /// - public class MirroredObject + internal class MirroredObject : OSCADObject { /// /// The normal vector of a plane intersecting the origin of the object, /// through which to mirror it. /// - public Vector3 Normal { get; set; } = new Vector3(); + internal Vector3 Normal { get; set; } = new Vector3(); private OSCADObject obj; @@ -24,7 +24,7 @@ namespace OSCADSharp.Transforms /// /// The object(s) to be mirrored /// The normal vector of the plane on the object's origin to mirror upon - public MirroredObject(OSCADObject obj, Vector3 normal) + internal MirroredObject(OSCADObject obj, Vector3 normal) { this.obj = obj; this.Normal = normal; diff --git a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs index ff46659..1999048 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs @@ -9,12 +9,12 @@ namespace OSCADSharp.Transforms /// /// An object that's been resized to a specified set of X/Y/Z dimensions /// - public class ResizedObject + internal class ResizedObject : OSCADObject { /// /// Size of the object in terms of X/Y/Z /// - public Vector3 Size { get; set; } + internal Vector3 Size { get; set; } private OSCADObject obj; /// @@ -22,7 +22,7 @@ namespace OSCADSharp.Transforms /// /// The object(s) to be resized /// The size to resize to, in terms of x/y/z dimensions - public ResizedObject(OSCADObject obj, Vector3 size) + internal ResizedObject(OSCADObject obj, Vector3 size) { this.obj = obj; this.Size = size; diff --git a/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs index cf4549b..ff8351e 100644 --- a/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs @@ -9,15 +9,20 @@ namespace OSCADSharp.Transforms /// /// An object with rotation applied /// - public class RotatedObject + internal class RotatedObject : OSCADObject { /// /// The angle to rotate, in terms of X/Y/Z euler angles /// - public Vector3 Angle { get; set; } = new Vector3(); + internal Vector3 Angle { get; set; } = new Vector3(); private OSCADObject obj; - public RotatedObject(OSCADObject obj, Vector3 angle) + /// + /// Creates an object with rotation applied + /// + /// The object being rotated + /// The angle to rotate + internal RotatedObject(OSCADObject obj, Vector3 angle) { this.obj = obj; this.Angle = angle; diff --git a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs index 7427de0..f300a9d 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs @@ -9,12 +9,12 @@ namespace OSCADSharp.Transforms /// /// An object that's been rescaled /// - public class ScaledObject + internal class ScaledObject : OSCADObject { /// /// The scale factor to be applied /// - public Vector3 Scale { get; set; } = new Vector3(1, 1, 1); + internal Vector3 ScaleFactor { get; set; } = new Vector3(1, 1, 1); private OSCADObject obj; /// @@ -22,16 +22,16 @@ namespace OSCADSharp.Transforms /// /// Object(s) to be scaled /// Scale factor in x/y/z components - public ScaledObject(OSCADObject obj, Vector3 scale) + internal ScaledObject(OSCADObject obj, Vector3 scale) { this.obj = obj; - this.Scale = scale; + this.ScaleFactor = scale; } public override string ToString() { string scaleCommand = String.Format("scale(v = [{0}, {1}, {2}])", - this.Scale.X.ToString(), this.Scale.Y.ToString(), this.Scale.Z.ToString()); + this.ScaleFactor.X.ToString(), this.ScaleFactor.Y.ToString(), this.ScaleFactor.Z.ToString()); var formatter = new BlockFormatter(scaleCommand, this.obj.ToString()); return formatter.ToString(); } diff --git a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs index 8b241fb..cc4e342 100644 --- a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs @@ -9,9 +9,9 @@ namespace OSCADSharp.Transforms /// /// An object or objects that have been moved along the specified vector /// - public class TranslatedObject + internal class TranslatedObject : OSCADObject { - public Vector3 Vector { get; set; } + internal Vector3 Vector { get; set; } private OSCADObject obj; /// @@ -19,7 +19,7 @@ namespace OSCADSharp.Transforms /// /// Object(s) to translate /// Amount to translate by - public TranslatedObject(OSCADObject obj, Vector3 vector) + internal TranslatedObject(OSCADObject obj, Vector3 vector) { this.obj = obj; this.Vector = vector;