1import numpy 2 3from UM.Math.Color import Color 4from UM.Math.Vector import Vector 5from UM.Mesh.MeshBuilder import MeshBuilder 6from UM.Mesh.MeshData import MeshType 7 8 9def test_addVertexWithNormal(): 10 builder = MeshBuilder() 11 builder.addVertexWithNormal(10, 20, 30, -1, -2, -3) 12 13 assert builder.getVertex(0)[0] == 10 14 assert builder.getVertex(0)[1] == 20 15 assert builder.getVertex(0)[2] == 30 16 17 assert builder.hasNormals() # We just added a vert with a normal, so we should have em 18 assert builder.getNormals()[0][0] == -1 19 assert builder.getNormals()[0][1] == -2 20 assert builder.getNormals()[0][2] == -3 21 22 assert builder.getVertexCount() == 1 23 # There is only one vertex, so we should get None back 24 assert builder.getVertex(22) is None 25 26 27def test_addFace(): 28 builder = MeshBuilder() 29 builder.addFaceByPoints(0, 0, 0, 10, 0, 0, 10, 10, 0) 30 31 assert builder.getVertexCount() == 3 32 assert builder.getFaceCount() == 1 33 assert not builder.hasNormals() 34 # Check if all the data ended up where it should be 35 assert builder.getVertex(0)[0] == 0 36 assert builder.getVertex(0)[1] == 0 37 assert builder.getVertex(0)[2] == 0 38 39 assert builder.getVertex(1)[0] == 10 40 assert builder.getVertex(1)[1] == 0 41 assert builder.getVertex(1)[2] == 0 42 43 assert builder.getVertex(2)[0] == 10 44 assert builder.getVertex(2)[1] == 10 45 assert builder.getVertex(2)[2] == 0 46 47 48def test_addFaceWithNormals(): 49 builder = MeshBuilder() 50 builder.addFaceWithNormals(0, 0, 0, 1, 0, 0, 10, 0, 0, 0, 1, 0, 10, 10, 0, 0, 0, 1) 51 assert builder.getVertexCount() == 3 52 assert builder.getFaceCount() == 1 53 assert builder.hasNormals() 54 55 56def test_setVertexColor(): 57 builder = MeshBuilder() 58 builder.addVertex(1, 2, 3) 59 builder.setVertexColor(0, Color(1.0, 0.5, 0.2)) 60 assert builder.hasColors() 61 assert builder.getColors()[0][0] == 1.0 62 63 64def test_calculateNormals(): 65 builder = MeshBuilder() 66 # Builder shouldn't start off with normals 67 assert not builder.hasNormals() 68 # Ensure that if there are no vertices / faces that calling the calculate doesn't break anything. 69 builder.calculateNormals() 70 assert not builder.hasNormals() 71 72 builder.addFaceByPoints(0, 0, 0, 10, 0, 0, 10, 10, 0) 73 74 builder.calculateNormals() 75 assert builder.hasNormals() 76 assert numpy.array_equal(builder.getNormals(), numpy.array([[0., 0., 1.], [0., 0., 1.], [0., 0., 1.]])) 77 78 builder2 = MeshBuilder() 79 builder2.addFaceByPoints(0, 0, 0, 0, 10, 0, 0, 10, 10) 80 builder2.calculateNormals(fast = True) 81 assert numpy.array_equal(builder2.getNormals(), numpy.array([[1., 0., 0], [1., 0., 0.], [1., 0., 0.]])) 82 83 84def test_addLine(): 85 builder = MeshBuilder() 86 builder.addLine(Vector(0, 0, 0), Vector(10, 11, 12)) 87 88 assert builder.getVertexCount() == 2 89 assert builder.getVertex(1)[0] == 10 90 assert builder.getVertex(1)[1] == 11 91 assert builder.getVertex(1)[2] == 12 92 93 94def test_addLineWithColor(): 95 builder = MeshBuilder() 96 builder.addLine(Vector(0, 0, 0), Vector(10, 11, 12), Color(1.0, 0.5, 0.25)) 97 98 assert builder.getColors()[0][0] == 1.0 99 assert builder.getColors()[0][1] == 0.5 100 assert builder.getColors()[0][2] == 0.25 101 102 assert builder.getColors()[1][0] == 1.0 103 assert builder.getColors()[1][1] == 0.5 104 assert builder.getColors()[1][2] == 0.25 105 106 107def test_reserveFaceCount(): 108 builder = MeshBuilder() 109 builder.addVertex(1, 2, 3) 110 111 builder.reserveFaceCount(200) 112 # Reserving face count should reset the verts 113 assert builder.getVertexCount() == 0 114 115 116def test_reserveFaceAndVertexCount(): 117 builder = MeshBuilder() 118 builder.addVertex(1, 2, 3) 119 120 builder.reserveFaceAndVertexCount(200, 20) 121 # Reserving face count should reset the verts 122 assert builder.getVertexCount() == 0 123 124 125def test_reserveVertexCount(): 126 builder = MeshBuilder() 127 assert builder.getVertices() is None 128 builder.addVertex(1, 2, 3) 129 130 builder.reserveVertexCount(10) 131 # Reserving face count should reset the verts 132 assert builder.getVertexCount() == 0 133 134 135def test_getSetCenterPosition(): 136 builder = MeshBuilder() 137 builder.setCenterPosition(Vector(100, 200, 300)) 138 assert builder.getCenterPosition() == Vector(100, 200, 300) 139 140 141def test_getSetType(): 142 builder = MeshBuilder() 143 builder.setType(MeshType.faces) 144 assert builder.getType() == MeshType.faces 145 146 # Should have no effect 147 builder.setType("ZOMG") 148 assert builder.getType() == MeshType.faces 149 150 151def test_setVertices(): 152 builder = MeshBuilder() 153 builder.setVertices(numpy.zeros(3)) 154 assert builder.getVertexCount() == 1 155 assert builder.getVertices()[0] == 0 156 157 158def test_setIndices(): 159 builder = MeshBuilder() 160 builder.setIndices(numpy.zeros(3)) 161 assert builder.getFaceCount() == 1 162 assert builder.getIndices()[0] == 0 163 164 165def test_addIndices(): 166 builder = MeshBuilder() 167 builder.addIndices(numpy.zeros(3)) 168 assert builder.getFaceCount() == 3 169 assert builder.getIndices()[0] == 0 170 171 builder.addIndices(numpy.zeros(3)) 172 assert builder.getFaceCount() == 6 173 174 175def test_addVertices(): 176 builder = MeshBuilder() 177 builder.addVertices(numpy.zeros(3)) 178 assert builder.getVertexCount() == 3 179 180 builder.addVertices(numpy.zeros(3)) 181 assert builder.getVertexCount() == 6 182 183 184def test_setUVCoordinates(): 185 builder = MeshBuilder() 186 builder.setVertices(numpy.zeros((10 * 3, 3), dtype=numpy.float32)) 187 builder.setVertexUVCoordinates(5, 20, 22) 188 assert builder.hasUVCoordinates() 189 assert builder.getUVCoordinates()[5, 0] == 20 190 assert builder.getUVCoordinates()[5, 1] == 22 191 192 193def test_getSetFilename(): 194 builder = MeshBuilder() 195 builder.setFileName("HERPDERP") 196 197 assert builder.getFileName() == "HERPDERP" 198