mirror of
https://github.com/eliasstepanik/OSCADSharpDotnet7.git
synced 2026-01-23 03:08:28 +00:00
+ Added an auto-incrementing Id to OSCADObjects
This commit is contained in:
parent
e62111b1df
commit
4dc79e8bc2
@ -1,6 +1,7 @@
|
|||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
using OSCADSharp.Solids;
|
using OSCADSharp.Solids;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -79,5 +80,45 @@ namespace OSCADSharp.UnitTests
|
|||||||
Assert.IsFalse(sphere.GetType() == cube.GetType());
|
Assert.IsFalse(sphere.GetType() == cube.GetType());
|
||||||
Assert.AreEqual(0, sphere.Children().Count());
|
Assert.AreEqual(0, sphere.Children().Count());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void OSCADObject_IdsAreSequentialAndDistinct()
|
||||||
|
{
|
||||||
|
var obj1 = new Sphere();
|
||||||
|
var obj2 = new Cube();
|
||||||
|
var obj3 = new Sphere();
|
||||||
|
|
||||||
|
|
||||||
|
Assert.IsTrue(obj1.Id < obj2.Id && obj2.Id < obj3.Id);
|
||||||
|
|
||||||
|
Assert.IsTrue(obj1.Id + 1 == obj2.Id);
|
||||||
|
Assert.IsTrue(obj2.Id + 1 == obj3.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void OSCADObject_ParallelObjectCreationDoesNotYieldDuplicateIds()
|
||||||
|
{
|
||||||
|
ConcurrentBag<OSCADObject> bag = new ConcurrentBag<OSCADObject>();
|
||||||
|
|
||||||
|
Parallel.For(0, 1000, (i) => {
|
||||||
|
bag.Add(new Sphere());
|
||||||
|
});
|
||||||
|
|
||||||
|
var ids = bag.Select(obj => obj.Id).ToList();
|
||||||
|
Assert.AreEqual(ids.Count, ids.Distinct().Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void OSCADObject_EachOscadObjectChildHasDistinctId()
|
||||||
|
{
|
||||||
|
var obj = new Cube(5, 5, 10, true)
|
||||||
|
.Translate(0, 5, 10).Rotate(0, 90, 0)
|
||||||
|
.Translate(0, 0, 10).Scale(1, 1, 2);
|
||||||
|
|
||||||
|
List<uint> ids = obj.Children().Select(child => child.Id).ToList();
|
||||||
|
ids.Add(obj.Id);
|
||||||
|
|
||||||
|
Assert.AreEqual(ids.Count, ids.Distinct().Count());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
30
OSCADSharp/OSCADSharp/Ids.cs
Normal file
30
OSCADSharp/OSCADSharp/Ids.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace OSCADSharp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Responsible for creating identifiers for objects
|
||||||
|
/// </summary>
|
||||||
|
internal static class Ids
|
||||||
|
{
|
||||||
|
private static uint globalId = 0;
|
||||||
|
private static object idLockObject = new object();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a unique auto-incrementing integer id
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
internal static uint Get()
|
||||||
|
{
|
||||||
|
lock (idLockObject)
|
||||||
|
{
|
||||||
|
globalId++;
|
||||||
|
return globalId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -14,6 +14,16 @@ namespace OSCADSharp
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class OSCADObject
|
public abstract class OSCADObject
|
||||||
{
|
{
|
||||||
|
#region Fields
|
||||||
|
private uint id = Ids.Get();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The unique Id of the object
|
||||||
|
/// these values auto-increment
|
||||||
|
/// </summary>
|
||||||
|
public uint Id { get { return this.id; } }
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Transforms
|
#region Transforms
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Applies Color and/or Opacity to this object
|
/// Applies Color and/or Opacity to this object
|
||||||
|
|||||||
@ -42,6 +42,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Ids.cs" />
|
||||||
<Compile Include="Sizes.cs" />
|
<Compile Include="Sizes.cs" />
|
||||||
<Compile Include="Spatial\Matrix.cs" />
|
<Compile Include="Spatial\Matrix.cs" />
|
||||||
<Compile Include="Transforms\HulledObject.cs" />
|
<Compile Include="Transforms\HulledObject.cs" />
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user