diff --git a/test/manifold_test.cpp b/test/manifold_test.cpp index 15a94d97d..816ac90cf 100644 --- a/test/manifold_test.cpp +++ b/test/manifold_test.cpp @@ -759,3 +759,442 @@ TEST(Manifold, EmptyHull) { {0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}; EXPECT_TRUE(Manifold::Hull(coplanar).IsEmpty()); } + +TEST(Manifold, InterpolatedNormals) { + MeshGL a; + a.numProp = 8; + a.vertProperties = { + // 0 + -409.0570983886719, -300, -198.83624267578125, 0, -1, 0, + 590.9429321289062, 301.1637268066406, + // 1 + -1000, -300, 500, 0, -1, 0, 0, 1000, + // 2 + -1000, -300, -500, 0, -1, 0, 0, 0, + // 3 + -1000, -300, -500, -1, 0, 0, 600, 0, + // 4 + -1000, -300, 500, -1, 0, 0, 600, 1000, + // 5 + -1000, 300, -500, -1, 0, 0, 0, 0, + // 6 + 7.179656982421875, -300, -330.03717041015625, 0, -1, 0, + 1007.1796264648438, 169.9628448486328, + // 7 + 1000, 300, 500, 0, 0, 1, 2000, 600, + // 8 + 403.5837097167969, 300, 500, 0, 0, 1, 1403.583740234375, 600, + // 9 + 564.2904052734375, 21.64801025390625, 500, 0, 0, 1, 1564.29052734375, + 321.64801025390625, + // 10 + 1000, -300, -500, 0, 0, -1, 2000, 600, + // 11 + -1000, -300, -500, 0, 0, -1, 0, 600, + // 12 + -1000, 300, -500, 0, 0, -1, 0, 0, + // 13 + 1000, 300, 500, 0, 1, 0, 0, 1000, + // 14 + 1000, 300, -500, 0, 1, 0, 0, 0, + // 15 + 724.5271606445312, 300, 398.83624267578125, 0, 1, 0, 275.47283935546875, + 898.8362426757812, + // 16 + -115.35255432128906, -300, 500, 0, -1, 0, 884.6475219726562, + 1000.0001220703125, + // 17 + -384.7195129394531, 166.55722045898438, 500, 0, 0, 1, 615.280517578125, + 466.5572509765625, + // 18 + -1000, -300, 500, 0, 0, 1, 0, 0, + // 19 + -161.6136932373047, -219.87335205078125, 500, 0, 0, 1, 838.3862915039062, + 80.12664794921875, + // 20 + 1000, -300, 500, 0, 0, 1, 2000, 0, + // 21 + -115.35255432128906, -300, 500, 0, 0, 1, 884.6475219726562, 0, + // 22 + 1000, 300, 500, 1, 0, 0, 600, 1000, + // 23 + 1000, -300, 500, 1, 0, 0, 0, 1000, + // 24 + 1000, 300, -500, 1, 0, 0, 600, 0, + // 25 + 566.6257934570312, 300, 23.1280517578125, 0, 1, 0, 433.3742370605469, + 523.1281127929688, + // 26 + 411.5867004394531, -66.51548767089844, -500, 0, 0, -1, 1411.586669921875, + 366.5155029296875, + // 27 + 375.7498779296875, -4.444300651550293, -500, 0, 0, -1, 1375.7498779296875, + 304.4443054199219, + // 28 + 346.7673034667969, 300, -500, 0, 1, 0, 653.2326049804688, 0, + // 29 + -153.58984375, 300, -388.552490234375, 0, 1, 0, 1153.58984375, + 111.447509765625, + // 30 + 199.9788818359375, 300, -500, 0, 1, 0, 800.0211791992188, 0, + // 31 + -1000, 300, -500, 0, 1, 0, 2000, 0, + // 32 + -153.58987426757812, 300, 44.22247314453125, 0, 1, 0, 1153.58984375, + 544.2224731445312, + // 33 + 199.9788818359375, 300, -500, 0, 0, -1, 1199.9791259765625, 0, + // 34 + 521.6780395507812, -2.9542479515075684, -500, 0, 0, -1, 1521.677978515625, + 302.9542541503906, + // 35 + 346.7673034667969, 300, -500, 0, 0, -1, 1346.767333984375, 0, + // 36 + 1000, 300, -500, 0, 0, -1, 2000, 0, + // 37 + -1000, 300, 500, -1, 0, 0, 0, 1000, + // 38 + -1000, 300, 500, 0, 0, 1, 0, 600, + // 39 + -1000, 300, 500, 0, 1, 0, 2000, 1000, + // 40 + -153.58985900878906, 300, 500, 0, 0, 1, 846.4102172851562, 600, + // 41 + 88.46627807617188, -253.06915283203125, 500, 0, 0, 1, 1088.4664306640625, + 46.93084716796875, + // 42 + -153.58985900878906, 300, 500, 0, 1, 0, 1153.58984375, 1000, + // 43 + 7.1796698570251465, -300, 500, 0, 0, 1, 1007.1797485351562, 0, + // 44 + 1000, -300, -500, 0, -1, 0, 2000, 0, + // 45 + 1000, -300, 500, 0, -1, 0, 2000, 1000, + // 46 + 7.1796698570251465, -300, 500, 0, -1, 0, 1007.1796264648438, 1000, + // 47 + 403.5837097167969, 300, 500, 0, 1, 0, 596.4163208007812, 1000, + // 48 + 1000, -300, -500, 1, 0, 0, 0, 0, + // 49 + 492.3005676269531, -19.915321350097656, -500, 0, 0, -1, 1492.300537109375, + 319.91534423828125, + // 50 + 411.5867004394531, -66.51548767089844, -500, -0.5, 0.8660253882408142, 0, + 880.5439453125, 0, + // 51 + 7.179656982421875, -300, -330.03717041015625, -0.5000000596046448, + 0.866025447845459, 0, 383.6058654785156, 0, + // 52 + 492.3005676269531, -19.915321350097656, -500, -0.5, 0.8660253882408142, 0, + 968.1235961914062, 31.876384735107422, + // 53 + 7.1796698570251465, -300, 500, -0.5000000596046448, 0.866025447845459, 0, + 99.71644592285156, 779.979736328125, + // 54 + 88.46627807617188, -253.06915283203125, 500, -0.5, 0.8660253882408142, 0, + 187.91758728027344, 812.0823974609375, + // 55 + -153.58985900878906, 300, 500, 0.5, -0.866025447845459, 0, + 749.2095947265625, 834.9661865234375, + // 56 + -384.7195129394531, 166.55722045898438, 500, 0.5000000596046448, + -0.866025447845459, 0, 1000, 743.6859741210938, + // 57 + -153.58987426757812, 300, 44.22247314453125, 0.5, -0.8660253882408142, 0, + 593.3245239257812, 406.6754455566406, + // 58 + 564.2904052734375, 21.64801025390625, 500, -0.5, 0.866025447845459, 0, + 704.217041015625, 1000.0000610351562, + // 59 + -604.9979248046875, 39.37942886352539, -198.83624267578125, 0.5, + -0.8660253882408142, 0, 1000, 0, + // 60 + 199.9788818359375, 300, -500, 0.29619815945625305, 0.1710100919008255, + 0.9396927356719971, 880.5438842773438, 176.7843475341797, + // 61 + -153.58984375, 300, -388.552490234375, 0.29619815945625305, + 0.1710100919008255, 0.9396927356719971, 554.6932373046875, 0, + // 62 + 375.7498779296875, -4.444300651550293, -500, 0.29619812965393066, + 0.1710100919008255, 0.9396926760673523, 880.5438842773438, + 528.3263549804688, + // 63 + 566.6257934570312, 300, 23.1280517578125, -0.8137977123260498, + -0.46984636783599854, 0.342020183801651, 239.89218139648438, 600.1796875, + // 64 + 346.7673034667969, 300, -500, -0.8137977719306946, -0.46984633803367615, + 0.342020183801651, 349.8214111328125, 43.478458404541016, + // 65 + 521.6780395507812, -2.9542479515075684, -500, -0.8137977719306946, + -0.46984633803367615, 0.342020183801651, 0, 43.478458404541016, + // 66 + 804.9979248046875, 160.62057495117188, 398.83624267578125, -0.5, + 0.8660253882408142, 0, 1000, 1000, + // 67 + 521.6780395507812, -2.9542479515075684, -500, -0.5, 0.8660253882408142, 0, + 1000, 43.47837829589844, + // 68 + -153.58984375, 300, -388.552490234375, 0.5, -0.8660253882408142, 0, + 445.3067626953125, 0, + // 69 + -604.9979248046875, 39.37942886352539, -198.83624267578125, + 0.29619815945625305, 0.1710100919008255, 0.9396927356719971, 0, 0, + // 70 + 804.9979248046875, 160.62057495117188, 398.83624267578125, + -0.813797652721405, -0.46984630823135376, 0.3420201539993286, 0, 1000, + // 71 + -161.6136932373047, -219.87335205078125, 500, 0.8137977123260498, + 0.46984630823135376, -0.3420201539993286, 446.21160888671875, + 743.68603515625, + // 72 + -604.9979248046875, 39.37942886352539, -198.83624267578125, + 0.813797652721405, 0.46984630823135376, -0.3420201539993286, 0, 0, + // 73 + -384.7195129394531, 166.55722045898438, 500, 0.8137977123260498, + 0.46984636783599854, -0.342020183801651, 0, 743.6859741210938, + // 74 + -115.35255432128906, -300, 500, 0.813797652721405, 0.46984633803367615, + -0.3420201539993286, 538.73388671875, 743.68603515625, + // 75 + -409.0570983886719, -300, -198.83624267578125, 0.813797652721405, + 0.46984630823135376, -0.3420201539993286, 391.8816223144531, 0, + // 76 + 7.179656982421875, -300, -330.03717041015625, 0.29619815945625305, + 0.1710100919008255, 0.9396927356719971, 383.6058654785156, 600, + // 77 + 564.2904052734375, 21.64801025390625, 500, -0.29619812965393066, + -0.1710100919008255, -0.9396926164627075, 704.2169189453125, + -0.000030517578125, + // 78 + 403.5837097167969, 300, 500, -0.29619812965393066, -0.1710100919008255, + -0.9396926164627075, 704.2169799804688, 321.4132385253906, + // 79 + 724.5271606445312, 300, 398.83624267578125, -0.29619815945625305, + -0.1710100919008255, -0.9396926760673523, 1000, 160.94149780273438, + // 80 + 804.9979248046875, 160.62057495117188, 398.83624267578125, + -0.29619815945625305, -0.1710100919008255, -0.9396927356719971, 1000, 0, + // 81 + -409.0570983886719, -300, -198.83624267578125, 0.29619815945625305, + 0.1710100919008255, 0.9396927356719971, 0, 391.88165283203125, + // 82 + 724.5271606445312, 300, 398.83624267578125, -0.813797652721405, + -0.46984630823135376, 0.342020183801651, 160.94149780273438, + 1000.0000610351562, + // 83 + 411.5867004394531, -66.51548767089844, -500, 0.29619815945625305, + 0.1710100769996643, 0.9396926164627075, 880.5440063476562, + 600.0000610351562}; + a.triVerts = {// 0 + 0, 1, 2, + // 1 + 3, 4, 5, + // 2 + 6, 0, 2, + // 3 + 7, 8, 9, + // 4 + 10, 11, 12, + // 5 + 13, 14, 15, + // 6 + 0, 16, 1, + // 7 + 17, 18, 19, + // 8 + 9, 20, 7, + // 9 + 18, 21, 19, + // 10 + 22, 23, 24, + // 11 + 14, 25, 15, + // 12 + 26, 12, 27, + // 13 + 14, 28, 25, + // 14 + 29, 30, 31, + // 15 + 29, 31, 32, + // 16 + 12, 33, 27, + // 17 + 34, 35, 36, + // 18 + 5, 4, 37, + // 19 + 17, 38, 18, + // 20 + 31, 39, 32, + // 21 + 40, 38, 17, + // 22 + 9, 41, 20, + // 23 + 39, 42, 32, + // 24 + 41, 43, 20, + // 25 + 6, 2, 44, + // 26 + 6, 45, 46, + // 27 + 26, 10, 12, + // 28 + 47, 13, 15, + // 29 + 48, 24, 23, + // 30 + 6, 44, 45, + // 31 + 26, 49, 10, + // 32 + 49, 34, 10, + // 33 + 34, 36, 10, + // 34 + 50, 51, 52, + // 35 + 51, 53, 54, + // 36 + 51, 54, 52, + // 37 + 55, 56, 57, + // 38 + 52, 54, 58, + // 39 + 59, 57, 56, + // 40 + 60, 61, 62, + // 41 + 63, 64, 65, + // 42 + 52, 66, 67, + // 43 + 59, 68, 57, + // 44 + 69, 62, 61, + // 45 + 65, 70, 63, + // 46 + 71, 72, 73, + // 47 + 52, 58, 66, + // 48 + 74, 72, 71, + // 49 + 74, 75, 72, + // 50 + 62, 69, 76, + // 51 + 77, 78, 79, + // 52 + 79, 80, 77, + // 53 + 69, 81, 76, + // 54 + 63, 70, 82, + // 55 + 76, 83, 62}; + a.mergeFromVert = {3, 4, 11, 12, 13, 18, 21, 22, 23, 24, 31, 33, 35, 36, + 38, 39, 42, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83}; + a.mergeToVert = {2, 1, 2, 5, 7, 1, 16, 7, 20, 14, 5, 30, 28, 14, + 37, 37, 40, 10, 20, 43, 8, 10, 26, 6, 49, 43, 41, 40, + 17, 32, 9, 30, 29, 27, 25, 28, 34, 34, 29, 59, 66, 19, + 59, 17, 16, 0, 6, 9, 8, 15, 66, 0, 15, 26}; + + MeshGL b; + b.numProp = 8; + b.vertProperties = {// 0 + -1700, -600, -1000, -1, 0, 0, 1200, 0, + // 1 + -1700, -600, 1000, -1, 0, 0, 1200, 2000, + // 2 + -1700, 600, -1000, -1, 0, 0, 0, 0, + // 3 + -1700, -600, -1000, 0, -1, 0, 0, 0, + // 4 + 300, -600, -1000, 0, -1, 0, 2000, 0, + // 5 + -1700, -600, 1000, 0, -1, 0, 0, 2000, + // 6 + -1700, -600, -1000, 0, 0, -1, 0, 1200, + // 7 + -1700, 600, -1000, 0, 0, -1, 0, 0, + // 8 + 300, -600, -1000, 0, 0, -1, 2000, 1200, + // 9 + -1700, -600, 1000, 0, 0, 1, 0, 0, + // 10 + 300, -600, 1000, 0, 0, 1, 2000, 0, + // 11 + -1700, 600, 1000, 0, 0, 1, 0, 1200, + // 12 + -1700, 600, 1000, -1, 0, 0, 0, 2000, + // 13 + -1700, 600, -1000, 0, 1, 0, 2000, 0, + // 14 + -1700, 600, 1000, 0, 1, 0, 2000, 2000, + // 15 + 300, 600, 1000, 0, 1, 0, 0, 2000, + // 16 + 300, -600, -1000, 1, 0, 0, 0, 0, + // 17 + 300, 600, -1000, 1, 0, 0, 1200, 0, + // 18 + 300, -600, 1000, 1, 0, 0, 0, 2000, + // 19 + 300, -600, 1000, 0, -1, 0, 2000, 2000, + // 20 + 300, 600, -1000, 0, 0, -1, 2000, 0, + // 21 + 300, 600, -1000, 0, 1, 0, 0, 0, + // 22 + 300, 600, 1000, 0, 0, 1, 2000, 1200, + // 23 + 300, 600, 1000, 1, 0, 0, 1200, 2000}; + b.triVerts = {// 0 + 0, 1, 2, + // 1 + 3, 4, 5, + // 2 + 6, 7, 8, + // 3 + 9, 10, 11, + // 4 + 1, 12, 2, + // 5 + 13, 14, 15, + // 6 + 16, 17, 18, + // 7 + 4, 19, 5, + // 8 + 7, 20, 8, + // 9 + 21, 13, 15, + // 10 + 10, 22, 11, + // 11 + 17, 23, 18}; + b.mergeFromVert = {3, 5, 6, 7, 8, 9, 12, 13, 14, 16, 18, 19, 20, 21, 22, 23}; + b.mergeToVert = {0, 1, 0, 2, 4, 1, 11, 2, 11, 4, 10, 10, 17, 17, 15, 15}; + + a.runOriginalID = {Manifold::ReserveIDs(1)}; + b.runOriginalID = {Manifold::ReserveIDs(1)}; + + Manifold aManifold(a); + Manifold bManifold(b); + + auto aMinusB = aManifold - bManifold; + + std::vector meshList; + meshList.emplace_back(a); + meshList.emplace_back(b); + + RelatedGL(aMinusB, meshList, true, true); +} \ No newline at end of file