/usr/share/pyshared/collada/tests/test_collada.py is in python-collada 0.4-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 | import os
import numpy
import dateutil.parser
import collada
from collada.util import unittest, BytesIO
from collada.xmlutil import etree
fromstring = etree.fromstring
tostring = etree.tostring
class TestCollada(unittest.TestCase):
def setUp(self):
self.dummy = collada.Collada(validate_output=True)
self.datadir = os.path.join(os.path.dirname(os.path.realpath( __file__ )), "data")
def test_collada_duck_tris(self):
f = os.path.join(self.datadir, "duck_triangles.dae")
mesh = collada.Collada(f, validate_output=True)
self.assertEqual(mesh.assetInfo.contributors[0].author, 'gcorson')
self.assertEqual(mesh.assetInfo.contributors[0].authoring_tool, 'Maya 8.0 | ColladaMaya v3.02 | FCollada v3.2')
self.assertEqual(mesh.assetInfo.contributors[0].source_data, 'file:///C:/vs2005/sample_data/Complete_Packages/SCEA_Private/Maya_MoonLander/Moonlander/untitled')
self.assertEqual(len(mesh.assetInfo.contributors[0].copyright), 595)
self.assertEqual(len(mesh.assetInfo.contributors[0].comments), 449)
self.assertEqual(mesh.assetInfo.unitmeter, 0.01)
self.assertEqual(mesh.assetInfo.unitname, 'centimeter')
self.assertEqual(mesh.assetInfo.upaxis, collada.asset.UP_AXIS.Y_UP)
self.assertIsNone(mesh.assetInfo.title)
self.assertIsNone(mesh.assetInfo.subject)
self.assertIsNone(mesh.assetInfo.revision)
self.assertIsNone(mesh.assetInfo.keywords)
self.assertEqual(mesh.assetInfo.created, dateutil.parser.parse('2006-08-23T22:29:59Z'))
self.assertEqual(mesh.assetInfo.modified, dateutil.parser.parse('2007-02-21T22:52:44Z'))
self.assertEqual(mesh.scene.id, 'VisualSceneNode')
self.assertIn('LOD3spShape-lib', mesh.geometries)
self.assertIn('directionalLightShape1-lib', mesh.lights)
self.assertIn('cameraShape1', mesh.cameras)
self.assertIn('file2', mesh.images)
self.assertIn('blinn3-fx', mesh.effects)
self.assertIn('blinn3', mesh.materials)
self.assertEqual(len(mesh.nodes), 0)
self.assertIn('VisualSceneNode', mesh.scenes)
self.assertIsNotNone(str(list(mesh.scene.objects('geometry'))))
self.assertIsNotNone(str(list(mesh.scene.objects('light'))))
self.assertIsNotNone(str(list(mesh.scene.objects('camera'))))
s = BytesIO()
mesh.write(s)
out = s.getvalue()
t = BytesIO(out)
mesh = collada.Collada(t, validate_output=True)
self.assertEqual(mesh.assetInfo.contributors[0].author, 'gcorson')
self.assertEqual(mesh.assetInfo.contributors[0].authoring_tool, 'Maya 8.0 | ColladaMaya v3.02 | FCollada v3.2')
self.assertEqual(mesh.assetInfo.contributors[0].source_data, 'file:///C:/vs2005/sample_data/Complete_Packages/SCEA_Private/Maya_MoonLander/Moonlander/untitled')
self.assertEqual(len(mesh.assetInfo.contributors[0].copyright), 595)
self.assertEqual(len(mesh.assetInfo.contributors[0].comments), 449)
self.assertEqual(mesh.assetInfo.unitmeter, 0.01)
self.assertEqual(mesh.assetInfo.unitname, 'centimeter')
self.assertEqual(mesh.assetInfo.upaxis, collada.asset.UP_AXIS.Y_UP)
self.assertIsNone(mesh.assetInfo.title)
self.assertIsNone(mesh.assetInfo.subject)
self.assertIsNone(mesh.assetInfo.revision)
self.assertIsNone(mesh.assetInfo.keywords)
self.assertEqual(mesh.assetInfo.created, dateutil.parser.parse('2006-08-23T22:29:59Z'))
self.assertEqual(mesh.assetInfo.modified, dateutil.parser.parse('2007-02-21T22:52:44Z'))
self.assertEqual(mesh.scene.id, 'VisualSceneNode')
self.assertIn('LOD3spShape-lib', mesh.geometries)
self.assertIn('directionalLightShape1-lib', mesh.lights)
self.assertIn('cameraShape1', mesh.cameras)
self.assertIn('file2', mesh.images)
self.assertIn('blinn3-fx', mesh.effects)
self.assertIn('blinn3', mesh.materials)
self.assertEqual(len(mesh.nodes), 0)
self.assertIn('VisualSceneNode', mesh.scenes)
self.assertIsNotNone(str(list(mesh.scene.objects('geometry'))))
self.assertIsNotNone(str(list(mesh.scene.objects('light'))))
self.assertIsNotNone(str(list(mesh.scene.objects('camera'))))
def test_collada_duck_poly(self):
f = os.path.join(self.datadir, "duck_polylist.dae")
mesh = collada.Collada(f, validate_output=True)
self.assertEqual(mesh.scene.id, 'VisualSceneNode')
self.assertIn('LOD3spShape-lib', mesh.geometries)
self.assertIn('directionalLightShape1-lib', mesh.lights)
self.assertIn('cameraShape1', mesh.cameras)
self.assertIn('file2', mesh.images)
self.assertIn('blinn3-fx', mesh.effects)
self.assertIn('blinn3', mesh.materials)
self.assertEqual(len(mesh.nodes), 0)
self.assertIn('VisualSceneNode', mesh.scenes)
s = BytesIO()
mesh.write(s)
out = s.getvalue()
t = BytesIO(out)
mesh = collada.Collada(t, validate_output=True)
self.assertEqual(mesh.scene.id, 'VisualSceneNode')
self.assertIn('LOD3spShape-lib', mesh.geometries)
self.assertIn('directionalLightShape1-lib', mesh.lights)
self.assertIn('cameraShape1', mesh.cameras)
self.assertIn('file2', mesh.images)
self.assertIn('blinn3-fx', mesh.effects)
self.assertIn('blinn3', mesh.materials)
self.assertEqual(len(mesh.nodes), 0)
self.assertIn('VisualSceneNode', mesh.scenes)
def test_collada_duck_zip(self):
f = os.path.join(self.datadir, "duck.zip")
mesh = collada.Collada(f, validate_output=True)
self.assertEqual(mesh.scene.id, 'VisualSceneNode')
self.assertIn('LOD3spShape-lib', mesh.geometries)
self.assertIn('directionalLightShape1-lib', mesh.lights)
self.assertIn('cameraShape1', mesh.cameras)
self.assertIn('file2', mesh.images)
self.assertIn('blinn3-fx', mesh.effects)
self.assertIn('blinn3', mesh.materials)
self.assertEqual(len(mesh.nodes), 0)
self.assertIn('VisualSceneNode', mesh.scenes)
def test_collada_saving(self):
mesh = collada.Collada(validate_output=True)
self.assertEqual(len(mesh.geometries), 0)
self.assertEqual(len(mesh.controllers), 0)
self.assertEqual(len(mesh.lights), 0)
self.assertEqual(len(mesh.cameras), 0)
self.assertEqual(len(mesh.images), 0)
self.assertEqual(len(mesh.effects), 0)
self.assertEqual(len(mesh.materials), 0)
self.assertEqual(len(mesh.nodes), 0)
self.assertEqual(len(mesh.scenes), 0)
self.assertEqual(mesh.scene, None)
self.assertIsNotNone(str(mesh))
floatsource = collada.source.FloatSource("myfloatsource", numpy.array([0.1,0.2,0.3]), ('X', 'Y', 'Z'))
geometry1 = collada.geometry.Geometry(mesh, "geometry1", "mygeometry1", {"myfloatsource":floatsource})
mesh.geometries.append(geometry1)
linefloats = [1,1,-1, 1,-1,-1, -1,-0.9999998,-1, -0.9999997,1,-1, 1,0.9999995,1, 0.9999994,-1.000001,1]
linefloatsrc = collada.source.FloatSource("mylinevertsource", numpy.array(linefloats), ('X', 'Y', 'Z'))
geometry2 = collada.geometry.Geometry(mesh, "geometry2", "mygeometry2", [linefloatsrc])
input_list = collada.source.InputList()
input_list.addInput(0, 'VERTEX', "#mylinevertsource")
indices = numpy.array([0,1, 1,2, 2,3, 3,4, 4,5])
lineset1 = geometry2.createLineSet(indices, input_list, "mymaterial2")
geometry2.primitives.append(lineset1)
mesh.geometries.append(geometry2)
ambientlight = collada.light.AmbientLight("myambientlight", (1,1,1))
pointlight = collada.light.PointLight("mypointlight", (1,1,1))
mesh.lights.append(ambientlight)
mesh.lights.append(pointlight)
camera1 = collada.camera.PerspectiveCamera("mycam1", 45.0, 0.01, 1000.0)
camera2 = collada.camera.PerspectiveCamera("mycam2", 45.0, 0.01, 1000.0)
mesh.cameras.append(camera1)
mesh.cameras.append(camera2)
cimage1 = collada.material.CImage("mycimage1", "./whatever.tga", mesh)
cimage2 = collada.material.CImage("mycimage2", "./whatever.tga", mesh)
mesh.images.append(cimage1)
mesh.images.append(cimage2)
effect1 = collada.material.Effect("myeffect1", [], "phong")
effect2 = collada.material.Effect("myeffect2", [], "phong")
mesh.effects.append(effect1)
mesh.effects.append(effect2)
mat1 = collada.material.Material("mymaterial1", "mymat1", effect1)
mat2 = collada.material.Material("mymaterial2", "mymat2", effect2)
mesh.materials.append(mat1)
mesh.materials.append(mat2)
rotate = collada.scene.RotateTransform(0.1, 0.2, 0.3, 90)
scale = collada.scene.ScaleTransform(0.1, 0.2, 0.3)
mynode1 = collada.scene.Node('mynode1', children=[], transforms=[rotate, scale])
mynode2 = collada.scene.Node('mynode2', children=[], transforms=[])
mesh.nodes.append(mynode1)
mesh.nodes.append(mynode2)
geomnode = collada.scene.GeometryNode(geometry2)
mynode3 = collada.scene.Node('mynode3', children=[geomnode], transforms=[])
mynode4 = collada.scene.Node('mynode4', children=[], transforms=[])
scene1 = collada.scene.Scene('myscene1', [mynode3])
scene2 = collada.scene.Scene('myscene2', [mynode4])
mesh.scenes.append(scene1)
mesh.scenes.append(scene2)
mesh.scene = scene1
out = BytesIO()
mesh.write(out)
toload = BytesIO(out.getvalue())
loaded_mesh = collada.Collada(toload, validate_output=True)
self.assertEqual(len(loaded_mesh.geometries), 2)
self.assertEqual(len(loaded_mesh.controllers), 0)
self.assertEqual(len(loaded_mesh.lights), 2)
self.assertEqual(len(loaded_mesh.cameras), 2)
self.assertEqual(len(loaded_mesh.images), 2)
self.assertEqual(len(loaded_mesh.effects), 2)
self.assertEqual(len(loaded_mesh.materials), 2)
self.assertEqual(len(loaded_mesh.nodes), 2)
self.assertEqual(len(loaded_mesh.scenes), 2)
self.assertEqual(loaded_mesh.scene.id, scene1.id)
self.assertIn('geometry1', loaded_mesh.geometries)
self.assertIn('geometry2', loaded_mesh.geometries)
self.assertIn('mypointlight', loaded_mesh.lights)
self.assertIn('myambientlight', loaded_mesh.lights)
self.assertIn('mycam1', loaded_mesh.cameras)
self.assertIn('mycam2', loaded_mesh.cameras)
self.assertIn('mycimage1', loaded_mesh.images)
self.assertIn('mycimage2', loaded_mesh.images)
self.assertIn('myeffect1', loaded_mesh.effects)
self.assertIn('myeffect2', loaded_mesh.effects)
self.assertIn('mymaterial1', loaded_mesh.materials)
self.assertIn('mymaterial2', loaded_mesh.materials)
self.assertIn('mynode1', loaded_mesh.nodes)
self.assertIn('mynode2', loaded_mesh.nodes)
self.assertIn('myscene1', loaded_mesh.scenes)
self.assertIn('myscene2', loaded_mesh.scenes)
linefloatsrc2 = collada.source.FloatSource("mylinevertsource2", numpy.array(linefloats), ('X', 'Y', 'Z'))
geometry3 = collada.geometry.Geometry(mesh, "geometry3", "mygeometry3", [linefloatsrc2])
loaded_mesh.geometries.pop(0)
loaded_mesh.geometries.append(geometry3)
dirlight = collada.light.DirectionalLight("mydirlight", (1,1,1))
loaded_mesh.lights.pop(0)
loaded_mesh.lights.append(dirlight)
camera3 = collada.camera.PerspectiveCamera("mycam3", 45.0, 0.01, 1000.0)
loaded_mesh.cameras.pop(0)
loaded_mesh.cameras.append(camera3)
cimage3 = collada.material.CImage("mycimage3", "./whatever.tga", loaded_mesh)
loaded_mesh.images.pop(0)
loaded_mesh.images.append(cimage3)
effect3 = collada.material.Effect("myeffect3", [], "phong")
loaded_mesh.effects.pop(0)
loaded_mesh.effects.append(effect3)
mat3 = collada.material.Material("mymaterial3", "mymat3", effect3)
loaded_mesh.materials.pop(0)
loaded_mesh.materials.append(mat3)
mynode5 = collada.scene.Node('mynode5', children=[], transforms=[])
loaded_mesh.nodes.pop(0)
loaded_mesh.nodes.append(mynode5)
mynode6 = collada.scene.Node('mynode6', children=[], transforms=[])
scene3 = collada.scene.Scene('myscene3', [mynode6])
loaded_mesh.scenes.pop(0)
loaded_mesh.scenes.append(scene3)
loaded_mesh.scene = scene3
loaded_mesh.save()
strdata = tostring(loaded_mesh.xmlnode.getroot())
indata = BytesIO(strdata)
loaded_mesh2 = collada.Collada(indata, validate_output=True)
self.assertEqual(loaded_mesh2.scene.id, scene3.id)
self.assertIn('geometry3', loaded_mesh2.geometries)
self.assertIn('geometry2', loaded_mesh2.geometries)
self.assertIn('mydirlight', loaded_mesh2.lights)
self.assertIn('mypointlight', loaded_mesh2.lights)
self.assertIn('mycam3', loaded_mesh2.cameras)
self.assertIn('mycam2', loaded_mesh2.cameras)
self.assertIn('mycimage3', loaded_mesh2.images)
self.assertIn('mycimage2', loaded_mesh2.images)
self.assertIn('myeffect3', loaded_mesh2.effects)
self.assertIn('myeffect2', loaded_mesh2.effects)
self.assertIn('mymaterial3', loaded_mesh2.materials)
self.assertIn('mymaterial2', loaded_mesh2.materials)
self.assertIn('mynode5', loaded_mesh2.nodes)
self.assertIn('mynode2', loaded_mesh2.nodes)
self.assertIn('myscene3', loaded_mesh2.scenes)
self.assertIn('myscene2', loaded_mesh2.scenes)
def test_collada_attribute_replace(self):
mesh = collada.Collada(validate_output=True)
self.assertIsInstance(mesh.geometries, collada.util.IndexedList)
self.assertIsInstance(mesh.controllers, collada.util.IndexedList)
self.assertIsInstance(mesh.animations, collada.util.IndexedList)
self.assertIsInstance(mesh.lights, collada.util.IndexedList)
self.assertIsInstance(mesh.cameras, collada.util.IndexedList)
self.assertIsInstance(mesh.images, collada.util.IndexedList)
self.assertIsInstance(mesh.effects, collada.util.IndexedList)
self.assertIsInstance(mesh.materials, collada.util.IndexedList)
self.assertIsInstance(mesh.nodes, collada.util.IndexedList)
self.assertIsInstance(mesh.scenes, collada.util.IndexedList)
mesh.geometries = []
mesh.controllers = []
mesh.animations = []
mesh.lights = []
mesh.cameras = []
mesh.images = []
mesh.effects = []
mesh.materials = []
mesh.nodes = []
mesh.scenes = []
self.assertIsInstance(mesh.geometries, collada.util.IndexedList)
self.assertIsInstance(mesh.controllers, collada.util.IndexedList)
self.assertIsInstance(mesh.animations, collada.util.IndexedList)
self.assertIsInstance(mesh.lights, collada.util.IndexedList)
self.assertIsInstance(mesh.cameras, collada.util.IndexedList)
self.assertIsInstance(mesh.images, collada.util.IndexedList)
self.assertIsInstance(mesh.effects, collada.util.IndexedList)
self.assertIsInstance(mesh.materials, collada.util.IndexedList)
self.assertIsInstance(mesh.nodes, collada.util.IndexedList)
self.assertIsInstance(mesh.scenes, collada.util.IndexedList)
if __name__ == '__main__':
unittest.main()
|