+ Reworked Sphere to use StatementBuilder as well to conditionally output $f* values

This commit is contained in:
Michael L Smith 2016-02-23 17:47:36 -08:00
parent 3a7875ee51
commit a4613ea79d
3 changed files with 44 additions and 7 deletions

View File

@ -14,7 +14,7 @@ namespace OSCADSharp.ConsoleTests
static void Main(string[] args) static void Main(string[] args)
{ {
var obj = new Text3D("Whaat is thissss?"); var obj = new Sphere(30);
var pos = obj.Position(); var pos = obj.Position();
var cyl1 = new Cylinder(1, 100, true).Translate(pos); var cyl1 = new Cylinder(1, 100, true).Translate(pos);

View File

@ -86,5 +86,34 @@ namespace OSCADSharp.UnitTests
Assert.AreEqual(new Vector3(15, 15, 15), obj.Bounds().TopRight); Assert.AreEqual(new Vector3(15, 15, 15), obj.Bounds().TopRight);
Assert.AreEqual(new Vector3(-15, -15, -15), obj.Bounds().BottomLeft); Assert.AreEqual(new Vector3(-15, -15, -15), obj.Bounds().BottomLeft);
} }
[TestMethod]
public void Sphere_ScriptOutputDoesNotContainResolutionValuesIfNotSpecified()
{
var sphere = new Sphere();
string script = sphere.ToString();
Assert.IsTrue(!script.Contains("$fn"));
Assert.IsTrue(!script.Contains("$fa"));
Assert.IsTrue(!script.Contains("$fs"));
}
[TestMethod]
public void Sphere_ScriptOutpuHasResolutionValuesIfSpecified()
{
var sphere = new Sphere()
{
Resolution = 40,
MinimumAngle = 5,
MinimumFragmentSize = 2
};
string script = sphere.ToString();
Assert.IsTrue(script.Contains("$fn"));
Assert.IsTrue(script.Contains("$fa"));
Assert.IsTrue(script.Contains("$fs"));
}
} }
} }

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using OSCADSharp.Spatial; using OSCADSharp.Spatial;
using OSCADSharp.Scripting;
namespace OSCADSharp.Solids namespace OSCADSharp.Solids
{ {
@ -30,19 +31,19 @@ namespace OSCADSharp.Solids
/// Minimum angle (in degrees) of each cylinder fragment. /// Minimum angle (in degrees) of each cylinder fragment.
/// ($fa in OpenSCAD) /// ($fa in OpenSCAD)
/// </summary> /// </summary>
public int MinimumAngle { get; set; } = 12; public int? MinimumAngle { get; set; }
/// <summary> /// <summary>
/// Fragment size in mm /// Fragment size in mm
/// ($fs in OpenSCAD) /// ($fs in OpenSCAD)
/// </summary> /// </summary>
public int MinimumFragmentSize { get; set; } = 2; public int? MinimumFragmentSize { get; set; }
/// <summary> /// <summary>
/// Number of fragments in 360 degrees. Values of 3 or more override MinimumAngle and MinimumCircumferentialLength /// Number of fragments in 360 degrees. Values of 3 or more override MinimumAngle and MinimumCircumferentialLength
/// ($fn in OpenSCAD) /// ($fn in OpenSCAD)
/// </summary> /// </summary>
public int Resolution { get; set; } = 0; public int? Resolution { get; set; }
#endregion #endregion
#region Constructors #region Constructors
@ -70,9 +71,16 @@ namespace OSCADSharp.Solids
/// <returns>Script for this object</returns> /// <returns>Script for this object</returns>
public override string ToString() public override string ToString()
{ {
return String.Format("sphere($fn = {0}, $fa = {1}, $fs = {2}, r = {3});{4}", StatementBuilder sb = new StatementBuilder();
this.Resolution.ToString(), this.MinimumAngle.ToString(), sb.Append("sphere(");
this.MinimumFragmentSize.ToString(), this.Radius.ToString(), Environment.NewLine); sb.AppendValuePairIfExists("r", this.Radius);
sb.AppendValuePairIfExists("$fn", this.Resolution, true);
sb.AppendValuePairIfExists("$fa", this.MinimumAngle, true);
sb.AppendValuePairIfExists("$fs", this.MinimumFragmentSize, true);
sb.Append(");");
sb.Append(Environment.NewLine);
return sb.ToString();
} }
/// <summary> /// <summary>