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;