()
| 8 | |
| 9 | |
| 10 | def test_boolean_exposing(): |
| 11 | size = mrmesh.Vector3f.diagonal(2) |
| 12 | pos1 = mrmesh.Vector3f.diagonal(0) |
| 13 | pos2 = mrmesh.Vector3f.diagonal(-1) |
| 14 | pos3 = mrmesh.Vector3f.diagonal(1) |
| 15 | |
| 16 | meshA = mrmesh.makeCube(size, pos1) |
| 17 | meshB = mrmesh.makeCube(size, pos2) |
| 18 | |
| 19 | bOperation = mrmesh.BooleanOperation.Intersection |
| 20 | bResMapper = mrmesh.BooleanResultMapper() |
| 21 | bResult = mrmesh.boolean(meshA, meshB, bOperation, None, bResMapper) |
| 22 | assert bResult.valid(), bResult.errorString |
| 23 | |
| 24 | bResMesh = bResult.mesh |
| 25 | |
| 26 | assert is_equal_vector3( |
| 27 | bResMesh.computeBoundingBox( |
| 28 | bResMesh.topology.getValidFaces(), mrmesh.AffineXf3f() |
| 29 | ).min, |
| 30 | pos1, |
| 31 | ) |
| 32 | assert is_equal_vector3( |
| 33 | bResMesh.computeBoundingBox( |
| 34 | bResMesh.topology.getValidFaces(), mrmesh.AffineXf3f() |
| 35 | ).max, |
| 36 | pos3, |
| 37 | ) |
| 38 | |
| 39 | assert bResMesh.topology.getValidVerts().count() == 14 |
| 40 | assert bResMesh.topology.findHoleRepresentiveEdges().size() == 0 |
| 41 | |
| 42 | brmmAA = bResMapper.map(meshA.topology.getValidVerts(), mrmesh.BooleanResMapObj.A) |
| 43 | brmmBB = bResMapper.map(meshB.topology.getValidVerts(), mrmesh.BooleanResMapObj.B) |
| 44 | |
| 45 | filteredOldFacesA = bResMapper.filteredOldFaceBitSet( meshA.topology.getValidFaces(), mrmesh.BooleanResMapObj.A ) |
| 46 | mapsA = bResMapper.getMaps(mrmesh.BooleanResMapObj.A) |
| 47 | assert mapsA.cut2newFaces.vec.size() == 30 |
| 48 | assert brmmAA.count() == 1 |
| 49 | assert brmmBB.count() == 1 |
| 50 | assert filteredOldFacesA.count() == 6 |
| 51 | |
| 52 | |
| 53 | def test_unite_many_meshes(): |
nothing calls this directly
no test coverage detected