From 294ae7e3577ff08ee7bb9242fc79614b6e8b141f Mon Sep 17 00:00:00 2001 From: Michael L Smith Date: Mon, 15 Feb 2016 21:18:13 -0800 Subject: [PATCH] Several more Position implementations --- .../Scripting/MultiBlockStatementObject.cs | 3 +- OSCADSharp/OSCADSharp/Spatial/Vector3.cs | 28 ++++++++++++++++++- .../Transforms/LinearExtrudedObject.cs | 2 +- .../OSCADSharp/Transforms/ResizedObject.cs | 2 +- .../OSCADSharp/Transforms/ScaledObject.cs | 2 +- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/OSCADSharp/OSCADSharp/Scripting/MultiBlockStatementObject.cs b/OSCADSharp/OSCADSharp/Scripting/MultiBlockStatementObject.cs index 4399fcc..c3a4cea 100644 --- a/OSCADSharp/OSCADSharp/Scripting/MultiBlockStatementObject.cs +++ b/OSCADSharp/OSCADSharp/Scripting/MultiBlockStatementObject.cs @@ -46,7 +46,8 @@ namespace OSCADSharp.Scripting public override Vector3 Position() { - throw new NotImplementedException(); + var positions = this.children.Select(child => child.Position()); + return Vector3.Average(positions.ToArray()); } } } diff --git a/OSCADSharp/OSCADSharp/Spatial/Vector3.cs b/OSCADSharp/OSCADSharp/Spatial/Vector3.cs index dbf858c..3f27e7b 100644 --- a/OSCADSharp/OSCADSharp/Spatial/Vector3.cs +++ b/OSCADSharp/OSCADSharp/Spatial/Vector3.cs @@ -46,6 +46,32 @@ namespace OSCADSharp return new Vector3(this.X, this.Y, this.Z); } + /// + /// Returns the average position of the provided positions + /// + /// + /// + public static Vector3 Average(params Vector3[] positions) + { + if(positions == null || positions.Length == 0) + { + return null; + } + else if (positions.Length == 1) + { + return positions[0]; + } + + var sum = new Vector3(); + + foreach (var pos in positions) + { + sum += pos; + } + + return new Vector3(sum.X / positions.Length, sum.Y / positions.Length, sum.Z / positions.Length); + } + #region Operators/Overrides public override bool Equals(object obj) { @@ -81,7 +107,7 @@ namespace OSCADSharp return new Vector3(left.X - right.X, left.Y - right.Y, left.Z - right.Z); } #endregion - + internal Matrix ToMatrix() { double[] coords = { this.X, this.Y, this.Z, 0 }; diff --git a/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs b/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs index 25a6a19..d1506b2 100644 --- a/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/LinearExtrudedObject.cs @@ -50,7 +50,7 @@ namespace OSCADSharp.Transforms public override Vector3 Position() { - throw new NotImplementedException(); + throw new NotSupportedException(); } } } diff --git a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs index a5bd317..506bdb3 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs @@ -51,7 +51,7 @@ namespace OSCADSharp.Transforms public override Vector3 Position() { - throw new NotImplementedException(); + return obj.Position(); } } } diff --git a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs index 563d0a4..ed30e60 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs @@ -51,7 +51,7 @@ namespace OSCADSharp.Transforms public override Vector3 Position() { - throw new NotImplementedException(); + return obj.Position(); } } }