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();
}
}
}