Beispiel #1
0
    def testConstructor(self):

        self.failUnless("shw" in IECore.Reader.supportedExtensions())
        self.failUnless("shw" in IECore.Reader.supportedExtensions(
            IECore.TypeId.DeepImageReader))

        reader = IECoreRI.SHWDeepImageReader()
        self.failUnless(isinstance(reader, IECoreRI.SHWDeepImageReader))
        self.assertEqual(reader.typeId(),
                         IECoreRI.SHWDeepImageReader.staticTypeId())

        self.failUnless(
            IECoreRI.SHWDeepImageReader.canRead(TestSHWDeepImageReader.__shw))

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageReader.__shw)
        self.failUnless(isinstance(reader, IECoreRI.SHWDeepImageReader))
        self.assertEqual(reader.typeId(),
                         IECoreRI.SHWDeepImageReader.staticTypeId())

        reader = IECore.DeepImageReader.create(TestSHWDeepImageReader.__shw)
        self.failUnless(isinstance(reader, IECoreRI.SHWDeepImageReader))
        self.assertEqual(reader.typeId(),
                         IECoreRI.SHWDeepImageReader.staticTypeId())

        reader = IECore.Reader.create(TestSHWDeepImageReader.__shw)
        self.failUnless(isinstance(reader, IECoreRI.SHWDeepImageReader))
        self.assertEqual(reader.typeId(),
                         IECoreRI.SHWDeepImageReader.staticTypeId())

        self.failUnless(not IECoreRI.SHWDeepImageReader.canRead(
            TestSHWDeepImageReader.__exr))
Beispiel #2
0
    def testComposite(self):

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageReader.__shw)

        image = reader.read()
        self.failUnless(isinstance(image, IECore.ImagePrimitive))
        self.assertEqual(image.dataWindow, reader.dataWindow())
        self.assertEqual(image.displayWindow, reader.displayWindow())
        self.failUnless(image.channelValid("A"))

        a = image["A"].data

        i = 11 * 512 + 153
        self.assertEqual(a[i], 1.0)

        i = 11 * 512 + 154
        self.assertEqual(a[i], 0)

        realImage = IECore.EXRImageReader(TestSHWDeepImageReader.__exr).read()
        for k in image.keys():
            imageData = image[k].data
            realImageData = realImage[k].data
            self.assertEqual(imageData.size(), realImageData.size())
            for i in range(imageData.size()):
                self.assertAlmostEqual(imageData[i], realImageData[i], 6)
Beispiel #3
0
    def testDefaultReader(self):

        reader = IECoreRI.SHWDeepImageReader()
        self.assertEqual(reader.parameters()['fileName'].getTypedValue(), "")
        self.failUnless(not reader.isComplete())
        self.assertRaises(RuntimeError, reader.channelNames)
        self.assertRaises(RuntimeError, reader.dataWindow)
        self.assertRaises(RuntimeError, reader.displayWindow)
        self.assertRaises(RuntimeError, reader.worldToCameraMatrix)
        self.assertRaises(RuntimeError, reader.worldToNDCMatrix)
Beispiel #4
0
    def testHeader(self):

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageReader.__shw)
        header = reader.readHeader()
        self.failUnless(isinstance(header, IECore.CompoundObject))
        self.assertEqual(header["dataWindow"].value, reader.dataWindow())
        self.assertEqual(header["displayWindow"].value, reader.displayWindow())
        self.assertEqual(header["channelNames"], reader.channelNames())
        self.failUnless(header["worldToCameraMatrix"].value.equalWithAbsError(
            reader.worldToCameraMatrix(), 1e-6))
        self.failUnless(header["worldToNDCMatrix"].value.equalWithAbsError(
            reader.worldToNDCMatrix(), 1e-6))
    def testWriteSimplePixel(self):

        writer = IECoreRI.SHWDeepImageWriter(TestSHWDeepImageWriter.__output)
        writer.parameters()['channelNames'].setValue(
            IECore.StringVectorData(["A"]))
        writer.parameters()['resolution'].setTypedValue(IECore.V2i(2, 2))
        writer.parameters()['tileSize'].setTypedValue(IECore.V2i(2, 2))

        p = IECore.DeepPixel("A")
        p.addSample(1, (0.25, ))

        p2 = IECore.DeepPixel("A")
        p2.addSample(2, (0.5, ))

        p3 = IECore.DeepPixel("A")
        p3.addSample(1, (0.25, ))
        p3.addSample(2, (0.5, ))

        writer.writePixel(0, 0, p)
        writer.writePixel(0, 1, p2)
        writer.writePixel(1, 1, p3)
        del writer

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageWriter.__output)
        self.assertEqual(reader.dataWindow().size() + IECore.V2i(1),
                         IECore.V2i(2, 2))
        self.assertEqual(reader.channelNames(), IECore.StringVectorData(["A"]))

        rp = reader.readPixel(0, 0)
        self.assertEqual(rp.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(rp.numSamples(), 1)
        self.assertEqual(rp.getDepth(0), 1)
        self.assertEqual(rp[0], (0.25, ))

        rp2 = reader.readPixel(0, 1)
        self.assertEqual(rp2.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(rp2.numSamples(), 1)
        self.assertEqual(rp2.getDepth(0), 2)
        self.assertEqual(rp2[0], (0.5, ))

        rp3 = reader.readPixel(1, 1)
        self.assertEqual(rp3.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(rp3.numSamples(), 2)
        self.assertEqual(rp3.getDepth(0), 1)
        self.assertEqual(rp3.getDepth(1), 2)
        self.assertEqual(rp3[0], (0.25, ))
        self.assertEqual(rp3[1], (0.5, ))
        self.assertEqual(rp3.composite(), [0.625])

        self.failUnless(reader.readPixel(1, 0) is None)
Beispiel #6
0
    def testReadPixel(self):

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageReader.__shw)

        self.failUnless(isinstance(reader.readPixel(80, 112),
                                   IECore.DeepPixel))
        self.failUnless(reader.readPixel(0, 0) is None)
        self.assertRaises(RuntimeError, IECore.curry(reader.readPixel, 512,
                                                     511))
        self.assertRaises(RuntimeError, IECore.curry(reader.readPixel, 511,
                                                     512))

        # hits ground plane only
        p = reader.readPixel(100, 100)
        self.assertEqual(p.channelNames(), ("A", ))
        self.assertEqual(p.numSamples(), 1)
        self.assertAlmostEqual(p.getDepth(0), 102.18660736, 6)
        self.assertAlmostEqual(p[0][0], 1.0, 6)

        # hits one box then ground plane
        p2 = reader.readPixel(256, 256)
        self.assertEqual(p2.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(p2.numSamples(), 3)
        self.assertAlmostEqual(p2.getDepth(0), 72.6086884, 6)
        self.assertAlmostEqual(p2.getDepth(1), 77.7386627, 6)
        self.assertAlmostEqual(p2.getDepth(2), 85.6621628, 6)

        expected = (0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(p2[i][0], expected[i])

        # hits 2 boxes then ground plane
        p3 = reader.readPixel(195, 225)
        self.assertEqual(p3.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(p3.numSamples(), 5)
        self.assertAlmostEqual(p3.getDepth(0), 68.6202545, 6)
        self.assertAlmostEqual(p3.getDepth(1), 75.3051300, 6)
        self.assertAlmostEqual(p3.getDepth(2), 77.4111862, 6)
        self.assertAlmostEqual(p3.getDepth(3), 80.0710297, 6)
        self.assertAlmostEqual(p3.getDepth(4), 88.8488693, 6)

        expected = (0.5, 0.75, 0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(p3[i][0], expected[i])

        self.failUnless(reader.readPixel(440, 30) is None)
    def testReadPixel(self):

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageReader.__shw)

        self.failUnless(isinstance(reader.readPixel(80, 112),
                                   IECore.DeepPixel))
        self.failUnless(reader.readPixel(0, 0) is None)
        self.assertRaises(RuntimeError, IECore.curry(reader.readPixel, 512,
                                                     511))
        self.assertRaises(RuntimeError, IECore.curry(reader.readPixel, 511,
                                                     512))

        # hits ground plane only
        p = reader.readPixel(100, 100)
        self.assertEqual(p.channelNames(), ("A", ))
        self.assertEqual(p.numSamples(), 1)
        self.assertAlmostEqual(p.getDepth(0), 107.5978927, 6)
        self.assertAlmostEqual(p[0][0], 1.0, 6)

        # hits one box then ground plane
        p2 = reader.readPixel(256, 256)
        self.assertEqual(p2.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(p2.numSamples(), 3)
        self.assertAlmostEqual(p2.getDepth(0), 71.7940826, 6)
        self.assertAlmostEqual(p2.getDepth(1), 76.9240646, 6)
        self.assertAlmostEqual(p2.getDepth(2), 84.8475646, 6)

        expected = (0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(p2[i][0], expected[i])

        # hits 2 boxes then ground plane
        p3 = reader.readPixel(195, 225)
        self.assertEqual(p3.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(p3.numSamples(), 5)
        self.assertAlmostEqual(p3.getDepth(0), 68.2118148, 6)
        self.assertAlmostEqual(p3.getDepth(1), 74.9367370, 6)
        self.assertAlmostEqual(p3.getDepth(2), 77.0554046, 6)
        self.assertAlmostEqual(p3.getDepth(3), 79.7311859, 6)
        self.assertAlmostEqual(p3.getDepth(4), 88.5616073, 6)

        expected = (0.5, 0.75, 0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(p3[i][0], expected[i])

        self.failUnless(reader.readPixel(440, 30) is None)
    def testEmptyPixel(self):

        writer = IECoreRI.SHWDeepImageWriter(TestSHWDeepImageWriter.__output)
        p = IECore.DeepPixel("A")
        writer.writePixel(0, 0, p)
        writer.writePixel(0, 50, None)
        writer.writePixel(0, 100, p)
        p.addSample(1, [0.5])
        writer.writePixel(0, 1, p)
        del writer

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageWriter.__output)
        self.failUnless(reader.readPixel(0, 0) is None)
        self.failUnless(reader.readPixel(0, 50) is None)
        self.failUnless(reader.readPixel(0, 100) is None)
        rp = reader.readPixel(0, 1)
        self.failUnless(isinstance(rp, IECore.DeepPixel))
        self.assertEqual(rp[0], (0.5, ))
Beispiel #9
0
    def testBasics(self):

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageReader.__shw)
        self.assertEqual(reader.parameters()['fileName'].getTypedValue(),
                         TestSHWDeepImageReader.__shw)
        self.failUnless(reader.isComplete())
        self.assertEqual(reader.channelNames(), IECore.StringVectorData(["A"]))
        self.assertEqual(reader.dataWindow(),
                         IECore.Box2i(IECore.V2i(0, 0), IECore.V2i(511, 511)))
        self.assertEqual(reader.displayWindow(),
                         IECore.Box2i(IECore.V2i(0, 0), IECore.V2i(511, 511)))
        self.failUnless(reader.worldToCameraMatrix().equalWithAbsError(
            IECore.M44f(-0.422618, -0.694272, -0.582563, 0, -2.42861e-17,
                        0.642788, -0.766044, 0, -0.906308, 0.323744, 0.271654,
                        0, 3.00476, -0.592705, 84.3541, 1), 1e-4))
        self.failUnless(reader.worldToNDCMatrix().equalWithAbsError(
            IECore.M44f(-1.02029, -1.67612, -0.582578, -0.582563, 0, 1.55183,
                        -0.766064, -0.766044, -2.18802, 0.781588, 0.271661,
                        0.271654, 7.25413, -1.43092, 83.5416, 84.3541), 1e-4))
    def testReadWritePixel(self):

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageWriter.__shw)
        writer = IECoreRI.SHWDeepImageWriter(TestSHWDeepImageWriter.__output)
        writer.parameters()['resolution'].setTypedValue(
            reader.dataWindow().size() + IECore.V2i(1))
        self.assertEqual(writer.parameters()['resolution'].getTypedValue(),
                         IECore.V2i(512, 512))
        self.assertEqual(writer.parameters()['channelNames'].getValue(),
                         IECore.StringVectorData(["A"]))

        writer.parameters()['resolution'].setTypedValue(IECore.V2i(2, 2))
        self.assertEqual(writer.parameters()['resolution'].getTypedValue(),
                         IECore.V2i(2, 2))
        writer.parameters()['tileSize'].setTypedValue(IECore.V2i(2, 2))

        wToC = IECore.M44f(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1,
                           11.11, 12.12, 13.13, 14.14, 15.15, 16.16)
        cToS = IECore.M44f(10.1, 20.2, 30.3, 40.4, 50.5, 60.6, 7.7, 80.8, 90.9,
                           100.1, 110.11, 120.12, 130.13, 140.14, 150.15,
                           160.16)
        writer.parameters()['worldToCameraMatrix'].setTypedValue(wToC)
        writer.parameters()['worldToNDCMatrix'].setTypedValue(cToS)
        self.assertEqual(
            writer.parameters()['worldToCameraMatrix'].getTypedValue(), wToC)
        self.assertEqual(
            writer.parameters()['worldToNDCMatrix'].getTypedValue(), cToS)

        # hits ground plane only
        p = reader.readPixel(100, 100)
        self.assertEqual(p.channelNames(), ("A", ))
        self.assertEqual(p.numSamples(), 1)
        self.assertAlmostEqual(p.getDepth(0), 102.17636108, 6)
        self.assertAlmostEqual(p[0][0], 1.0, 6)

        # hits one box then ground plane
        p2 = reader.readPixel(256, 256)
        self.assertEqual(p2.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(p2.numSamples(), 3)
        self.assertAlmostEqual(p2.getDepth(0), 72.6087493, 6)
        self.assertAlmostEqual(p2.getDepth(1), 77.7387313, 6)
        self.assertAlmostEqual(p2.getDepth(2), 85.6622314, 6)

        expected = (0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(p2[i][0], expected[i])

        # hits 2 boxes then ground plane
        p3 = reader.readPixel(195, 225)
        self.assertEqual(p3.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(p3.numSamples(), 5)
        self.assertAlmostEqual(p3.getDepth(0), 68.6177368, 6)
        self.assertAlmostEqual(p3.getDepth(1), 75.3023605, 6)
        self.assertAlmostEqual(p3.getDepth(2), 77.4083328, 6)
        self.assertAlmostEqual(p3.getDepth(3), 80.0680771, 6)
        self.assertAlmostEqual(p3.getDepth(4), 88.8455811, 6)

        expected = (0.5, 0.75, 0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(p3[i][0], expected[i])

        writer.writePixel(0, 0, p)
        writer.writePixel(0, 1, p2)
        writer.writePixel(1, 1, p3)
        del writer

        reader = IECoreRI.SHWDeepImageReader(TestSHWDeepImageWriter.__output)
        self.assertEqual(reader.dataWindow().size() + IECore.V2i(1),
                         IECore.V2i(2, 2))
        self.assertEqual(reader.channelNames(), IECore.StringVectorData(["A"]))
        self.failUnless(reader.worldToCameraMatrix().equalWithAbsError(
            wToC, 1e-6))
        self.failUnless(reader.worldToNDCMatrix().equalWithAbsError(
            cToS, 1e-6))

        # hits ground plane only
        rp = reader.readPixel(0, 0)
        self.assertEqual(rp.channelNames(), ("A", ))
        self.assertEqual(rp.numSamples(), 1)
        self.assertAlmostEqual(rp.getDepth(0), 102.17636108, 4)
        self.assertAlmostEqual(rp[0][0], 1.0, 6)

        # hits one box then ground plane
        rp2 = reader.readPixel(0, 1)
        self.assertEqual(rp2.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(rp2.numSamples(), 3)
        self.assertAlmostEqual(rp2.getDepth(0), 72.6087493, 4)
        self.assertAlmostEqual(rp2.getDepth(1), 77.7387313, 4)
        self.assertAlmostEqual(rp2.getDepth(2), 85.6622314, 4)

        expected = (0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(rp2[i][0], expected[i])

        # hits 2 boxes then ground plane
        rp3 = reader.readPixel(1, 1)
        self.assertEqual(rp3.channelNames(), tuple(reader.channelNames()))
        self.assertEqual(rp3.numSamples(), 5)
        self.assertAlmostEqual(rp3.getDepth(0), 68.6177368, 6)
        self.assertAlmostEqual(rp3.getDepth(1), 75.3023605, 6)
        self.assertAlmostEqual(rp3.getDepth(2), 77.4083328, 6)
        self.assertAlmostEqual(rp3.getDepth(3), 80.0680771, 6)
        self.assertAlmostEqual(rp3.getDepth(4), 88.8455811, 6)

        expected = (0.5, 0.75, 0.5, 0.5, 1.0)
        for i in range(0, len(expected)):
            self.assertEqual(rp3[i][0], expected[i])

        self.failUnless(reader.readPixel(1, 0) is None)