From 9f11c39986e1b414624e64e3c72f44822813e100 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Wed, 24 Feb 2016 23:30:21 -0800 Subject: [PATCH] + Added SingleStatementObject (abstract) between OSCADObject and repetetive single-objectt transforms. + Shifted basic parent/child/object reference assignments to SingleStatementObject --- OSCADSharp/OSCADSharp/OSCADSharp.csproj | 1 + .../Scripting/SingleStatementObject.cs | 25 +++++++++++++++++++ .../OSCADSharp/Scripting/StatementBuilder.cs | 1 + .../OSCADSharp/Transforms/ColoredObject.cs | 12 +++------ .../Transforms/LinearExtrudedObject.cs | 9 ++----- .../OSCADSharp/Transforms/MirroredObject.cs | 12 +++------ .../OSCADSharp/Transforms/ResizedObject.cs | 9 ++----- .../OSCADSharp/Transforms/RotatedObject.cs | 9 ++----- .../OSCADSharp/Transforms/ScaledObject.cs | 9 ++----- .../OSCADSharp/Transforms/TranslatedObject.cs | 9 ++----- 10 files changed, 43 insertions(+), 53 deletions(-) create mode 100644 OSCADSharp/OSCADSharp/Scripting/SingleStatementObject.cs 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()