diff --git a/OSCADSharp/OSCADSharp/OSCADSharp.csproj b/OSCADSharp/OSCADSharp/OSCADSharp.csproj
index b07c370..0e43fd2 100644
--- a/OSCADSharp/OSCADSharp/OSCADSharp.csproj
+++ b/OSCADSharp/OSCADSharp/OSCADSharp.csproj
@@ -48,6 +48,7 @@
+
diff --git a/OSCADSharp/OSCADSharp/Scripting/SingleStatementObject.cs b/OSCADSharp/OSCADSharp/Scripting/SingleStatementObject.cs
new file mode 100644
index 0000000..ad30701
--- /dev/null
+++ b/OSCADSharp/OSCADSharp/Scripting/SingleStatementObject.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OSCADSharp.Spatial;
+
+namespace OSCADSharp.Scripting
+{
+ ///
+ /// A statement with just one nested child node
+ ///
+ internal abstract class SingleStatementObject : OSCADObject
+ {
+ protected OSCADObject obj;
+
+ public SingleStatementObject(OSCADObject obj)
+ {
+ this.obj = obj;
+
+ this.children.Add(obj);
+ obj.Parent = this;
+ }
+ }
+}
diff --git a/OSCADSharp/OSCADSharp/Scripting/StatementBuilder.cs b/OSCADSharp/OSCADSharp/Scripting/StatementBuilder.cs
index 30171ad..2d440f0 100644
--- a/OSCADSharp/OSCADSharp/Scripting/StatementBuilder.cs
+++ b/OSCADSharp/OSCADSharp/Scripting/StatementBuilder.cs
@@ -8,6 +8,7 @@ namespace OSCADSharp.Scripting
{
///
/// Extends the capabilities of StringBuilder with domain-specific behavior
+ /// aimed at constructing OpenSCAD commands
///
internal class StatementBuilder
{
diff --git a/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs b/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs
index 9f02c14..15b15ba 100644
--- a/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs
@@ -11,29 +11,23 @@ namespace OSCADSharp.Transforms
///
/// An object that has color and/or opacity applied to it
///
- internal class ColoredObject : OSCADObject
+ internal class ColoredObject : SingleStatementObject
{
#region Attributes
internal string ColorName { get; set; } = "Yellow";
internal double Opacity { get; set; } = 1.0;
#endregion
-
- private OSCADObject obj;
-
+
///
/// Creates a colorized object
///
/// The object(s) to which color will be applied
/// The string-wise name of the color to be applied
/// Opacity from 0.0 to 1.0
- internal ColoredObject(OSCADObject obj, string color = "Yellow", double opacity = 1.0)
+ internal ColoredObject(OSCADObject obj, string color = "Yellow", double opacity = 1.0) : base(obj)
{
- this.obj = obj;
this.ColorName = color;
this.Opacity = opacity;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override string ToString()
diff --git a/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs b/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs
index 0f6900c..bc1b594 100644
--- a/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs
@@ -13,13 +13,12 @@ namespace OSCADSharp.Transforms
///
/// This is a limited subset of the capabilities
///
- internal class LinearExtrudedObject : OSCADObject
+ internal class LinearExtrudedObject : SingleStatementObject
{
///
/// Height to extrude to
///
public double Height { get; set; } = 1.0;
- private OSCADObject obj;
//TODO: Possibly implement everything else?
//linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0) {...}
@@ -29,13 +28,9 @@ namespace OSCADSharp.Transforms
///
///
///
- public LinearExtrudedObject(OSCADObject obj, double height)
+ public LinearExtrudedObject(OSCADObject obj, double height) : base(obj)
{
- this.obj = obj;
this.Height = height;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override OSCADObject Clone()
diff --git a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs
index 7cad6ca..54d0b68 100644
--- a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs
@@ -11,28 +11,22 @@ namespace OSCADSharp.Transforms
///
/// An object that's mirrored on a plane
///
- internal class MirroredObject : OSCADObject
+ internal class MirroredObject : SingleStatementObject
{
///
/// The normal vector of a plane intersecting the origin of the object,
/// through which to mirror it.
///
internal Vector3 Normal { get; set; } = new Vector3();
-
- private OSCADObject obj;
-
+
///
/// Creates an object that's mirrored on a plane
///
/// The object(s) to be mirrored
/// The normal vector of the plane on the object's origin to mirror upon
- internal MirroredObject(OSCADObject obj, Vector3 normal)
+ internal MirroredObject(OSCADObject obj, Vector3 normal) : base(obj)
{
- this.obj = obj;
this.Normal = normal;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override string ToString()
diff --git a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs
index f8eff1a..240c49e 100644
--- a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs
@@ -11,26 +11,21 @@ namespace OSCADSharp.Transforms
///
/// An object that's been resized to a specified set of X/Y/Z dimensions
///
- internal class ResizedObject : OSCADObject
+ internal class ResizedObject : SingleStatementObject
{
///
/// Size of the object in terms of X/Y/Z
///
internal Vector3 Size { get; set; }
- private OSCADObject obj;
///
/// Creates a resized object
///
/// The object(s) to be resized
/// The size to resize to, in terms of x/y/z dimensions
- internal ResizedObject(OSCADObject obj, Vector3 size)
+ internal ResizedObject(OSCADObject obj, Vector3 size) : base(obj)
{
- this.obj = obj;
this.Size = size;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override string ToString()
diff --git a/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs
index 616b78f..6d18cbf 100644
--- a/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/RotatedObject.cs
@@ -11,26 +11,21 @@ namespace OSCADSharp.Transforms
///
/// An object with rotation applied
///
- internal class RotatedObject : OSCADObject
+ internal class RotatedObject : SingleStatementObject
{
///
/// The angle to rotate, in terms of X/Y/Z euler angles
///
internal Vector3 Angle { get; set; } = new Vector3();
- private OSCADObject obj;
///
/// Creates an object with rotation applied
///
/// The object being rotated
/// The angle to rotate
- internal RotatedObject(OSCADObject obj, Vector3 angle)
+ internal RotatedObject(OSCADObject obj, Vector3 angle) : base(obj)
{
- this.obj = obj;
this.Angle = angle;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override string ToString()
diff --git a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs
index e4d230e..94cdf36 100644
--- a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs
@@ -11,26 +11,21 @@ namespace OSCADSharp.Transforms
///
/// An object that's been rescaled
///
- internal class ScaledObject : OSCADObject
+ internal class ScaledObject : SingleStatementObject
{
///
/// The scale factor to be applied
///
internal Vector3 ScaleFactor { get; set; } = new Vector3(1, 1, 1);
- private OSCADObject obj;
///
/// Creates a scaled object
///
/// Object(s) to be scaled
/// Scale factor in x/y/z components
- internal ScaledObject(OSCADObject obj, Vector3 scale)
+ internal ScaledObject(OSCADObject obj, Vector3 scale) : base(obj)
{
- this.obj = obj;
this.ScaleFactor = scale;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override string ToString()
diff --git a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs
index b8445f3..8f5cd5d 100644
--- a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs
+++ b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs
@@ -11,23 +11,18 @@ namespace OSCADSharp.Transforms
///
/// An object or objects that have been moved along the specified vector
///
- internal class TranslatedObject : OSCADObject
+ internal class TranslatedObject : SingleStatementObject
{
internal Vector3 Vector { get; set; }
- private OSCADObject obj;
///
/// Creates a translated object
///
/// Object(s) to translate
/// Amount to translate by
- internal TranslatedObject(OSCADObject obj, Vector3 vector)
+ internal TranslatedObject(OSCADObject obj, Vector3 vector) : base(obj)
{
- this.obj = obj;
this.Vector = vector;
-
- this.children.Add(obj);
- obj.Parent = this;
}
public override string ToString()