|
| 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 | + |
0 commit comments