Skip to content

Commit 3b31903

Browse files
authored
Simple C# collision examples based on cpp examples (#5564)
* simple collision examples based on cpp examples * replacing submodules * doxygen files edited
1 parent c30f894 commit 3b31903

File tree

6 files changed

+114
-0
lines changed

6 files changed

+114
-0
lines changed

doxygen/examples/Collision.dox

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ Following code presents example of finding collision triangles of two meshes
1414
- <b class="tab-title">C</b>
1515
\include Collision.dox.c
1616

17+
- <b class="tab-title">C#</b>
18+
\include Collision.dox.cs
19+
1720
</div>
1821

1922
*/

doxygen/examples/CollisionPrecise.dox

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ Following code presents example of finding preceise collision triangles and edge
1414
- <b class="tab-title">C</b>
1515
\include CollisionPrecise.dox.c
1616

17+
- <b class="tab-title">C#</b>
18+
\include CollisionPrecise.dox.cs
19+
1720
</div>
1821

1922
*/

doxygen/examples/CollisionSelf.dox

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ Following code presents example of finding self-intersecting triangles of single
1414
- <b class="tab-title">C</b>
1515
\include CollisionSelf.dox.c
1616

17+
- <b class="tab-title">C#</b>
18+
\include CollisionSelf.dox.cs
19+
1720
</div>
1821

1922
*/
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using static MR;
2+
3+
public class Collision {
4+
5+
public static void Run(string[] args) {
6+
7+
var meshA = MR.MakeUVSphere();
8+
var meshB = MR.MakeUVSphere();
9+
10+
meshB.Transform(MR.AffineXf3f.Translation(new MR.Vector3f(0.1f, 0.1f, 0.1f)));
11+
12+
var meshPartA = new MeshPart(meshA);
13+
var meshPartB = new MeshPart(meshB);
14+
15+
Console.WriteLine(" --- Beginning Colliding Test! --- ");
16+
var collidingFacePairs = MR.FindCollidingTriangles(meshPartA, meshPartB);
17+
18+
for (ulong i = 0; i < collidingFacePairs.Size(); i++) {
19+
var pair = collidingFacePairs.At(i);
20+
Console.WriteLine($"FaceA: {pair.AFace.Id} FaceB: {pair.BFace.Id}");
21+
}
22+
23+
var collidingFaceBitSet = MR.FindCollidingTriangleBitsets(meshPartA, meshPartB);
24+
var bitSet = collidingFaceBitSet.First();
25+
Console.WriteLine($"Colliding faces on MeshA: {bitSet.Count()}");
26+
bitSet = collidingFaceBitSet.Second();
27+
Console.WriteLine($"Colliding faces on MeshB: {bitSet.Count()}");
28+
29+
var isColliding = !MR.FindCollidingTriangles(meshPartA, meshPartB, null, true).IsEmpty();
30+
Console.WriteLine($"Meshes are colliding: {isColliding}\n");
31+
}
32+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using static MR;
2+
3+
public class CollisionPrecise {
4+
5+
public static void Run(string[] args) {
6+
var meshA = MR.MakeUVSphere();
7+
var meshB = MR.MakeUVSphere();
8+
9+
meshB.Transform(MR.AffineXf3f.Translation(new MR.Vector3f(0.1f, 0.1f, 0.1f)));
10+
11+
var meshPartA = new MeshPart(meshA);
12+
var meshPartB = new MeshPart(meshB);
13+
14+
Console.WriteLine(" --- Beginning Colliding Precise Test! --- ");
15+
var converters = MR.GetVectorConverters(meshPartA, meshPartB).ToInt;
16+
var collidingFaceEdges = MR.FindCollidingEdgeTrisPrecise(meshPartA, meshPartB, converters);
17+
18+
for (ulong i = 0; i < collidingFaceEdges.Size(); i++) {
19+
var vet = collidingFaceEdges.At(i);
20+
var text = vet.IsEdgeATriB()
21+
? $"edgeA: {vet.Edge.Id}, triB: {vet.Tri().Id}"
22+
: $"triA: {vet.Tri().Id}, edgeB: {vet.Edge.Id}";
23+
24+
Console.WriteLine(text);
25+
}
26+
27+
var collidingFaceBitSet = MR.FindCollidingTriangleBitsets(meshPartA, meshPartB);
28+
var bitSet = collidingFaceBitSet.First();
29+
Console.WriteLine($"Colliding faces on MeshA: {bitSet.Count()}");
30+
bitSet = collidingFaceBitSet.Second();
31+
Console.WriteLine($"Colliding faces on MeshB: {bitSet.Count()}");
32+
33+
var isColliding = !MR.FindCollidingTriangles(meshPartA, meshPartB, null, true).IsEmpty();
34+
Console.WriteLine($"Is Colliding: {isColliding}\n");
35+
36+
}
37+
38+
}
39+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using static MR;
2+
3+
public class CollisionSelf {
4+
5+
public static void Run(string[] args) {
6+
var mesh = new MeshPart(MR.MakeTorusWithSelfIntersections());
7+
8+
Console.WriteLine(" --- Beginning Colliding Self Test! --- ");
9+
var selfCollidingPairs = MR.FindSelfCollidingTriangles(mesh);
10+
if (selfCollidingPairs.IsEmpty()) {
11+
Console.WriteLine("Error with MR.FindSelfCollidingTriangles");
12+
return;
13+
}
14+
15+
FaceFace pair; // more efficient to declare outside loop
16+
for (ulong i = 0; i < selfCollidingPairs.Size(); i++) {
17+
pair = selfCollidingPairs.At(i);
18+
Console.WriteLine($"FaceA: {pair.AFace.Id} FaceB: {pair.BFace.Id}"); // print each pair
19+
}
20+
21+
var selfCollidingBitSet = MR.FindSelfCollidingTrianglesBS(mesh);
22+
if (!selfCollidingBitSet.Any()) {
23+
Console.WriteLine("Error with MR.FindSelfCollidingTrianglesBS");
24+
return;
25+
}
26+
27+
Console.WriteLine($"{selfCollidingBitSet.Count()} faces self-intersecting");
28+
29+
var isSelfColliding = !MR.FindSelfCollidingTriangles(mesh).IsEmpty();
30+
Console.WriteLine($"Is self colliding: {isSelfColliding}");
31+
}
32+
33+
}
34+

0 commit comments

Comments
 (0)