def testFilmOffset(self):

        for x in [-0.5, -0.25, 0, 0.25, 0.5]:

            maya.cmds.setAttr("perspShape.horizontalFilmOffset", x)
            self.assertNotAlmostEqual(
                maya.cmds.getAttr("frontShape.horizontalFilmOffset"),
                maya.cmds.getAttr("perspShape.horizontalFilmOffset"))

            for y in [-0.5, -0.25, 0, 0.25, 0.5]:

                maya.cmds.setAttr("perspShape.verticalFilmOffset", y)
                self.assertNotAlmostEqual(
                    maya.cmds.getAttr("frontShape.verticalFilmOffset"),
                    maya.cmds.getAttr("perspShape.verticalFilmOffset"))

                front = IECoreMaya.FromMayaCameraConverter(
                    "frontShape").convert()
                persp = IECoreMaya.FromMayaCameraConverter(
                    "perspShape").convert()
                self.assertIECoreCamsNotEqual(front, persp)

                self.failUnless(
                    IECoreMaya.ToMayaCameraConverter(persp).convert("front"))
                self.assertMayaCamsEqual("frontShape", "perspShape")
                self.assertIECoreCamAndMayaCamEqual(persp, "frontShape")

                newFront = IECoreMaya.FromMayaCameraConverter(
                    "frontShape").convert()
                self.assertIECoreCamsEqual(persp, newFront)
	def testNewCam( self ) :

		persp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()

		parent = maya.cmds.createNode( "transform" )
		self.assertTrue( IECoreMaya.ToMayaCameraConverter( persp ).convert( parent ) )

		cams = maya.cmds.listRelatives( parent, children=True, fullPath=True, type="camera" )
		self.assertEqual( len(cams), 1 )
		self.assertMayaCamsEqual( "|persp|perspShape", cams[0] )
		self.assertIECoreCamAndMayaCamEqual( persp, cams[0] )

		newCam = IECoreMaya.FromMayaCameraConverter( cams[0] ).convert()
		self.assertEqual( persp.parameters(), newCam.parameters() )
    def testCustomResolution(self):

        converter = IECoreMaya.FromMayaCameraConverter("perspShape")
        converter.parameters()["resolutionMode"].setValue("specified")
        converter.parameters()["resolution"].setValue("1K")
        camera = converter.convert()

        self.assertEqual(camera.getName(), "perspShape")
        self.assertEqual(
            camera.getTransform().transform(),
            imath.M44f(*maya.cmds.getAttr("persp.worldMatrix[0]")))
        self.assertEqual(camera.parameters()["resolution"].value,
                         imath.V2i(1024, 778))
        self.assertEqual(
            camera.parameters()["clippingPlanes"].value,
            imath.V2f(maya.cmds.getAttr("perspShape.nearClipPlane"),
                      maya.cmds.getAttr("perspShape.farClipPlane")))
        self.assertEqual(camera.parameters()["projection"].value,
                         "perspective")
        self.assertEqual(
            camera.blindData()["maya"]["aperture"].value,
            imath.V2f(maya.cmds.getAttr("perspShape.horizontalFilmAperture"),
                      maya.cmds.getAttr("perspShape.verticalFilmAperture")))

        sel = maya.OpenMaya.MSelectionList()
        sel.add("perspShape")
        dag = maya.OpenMaya.MDagPath()
        sel.getDagPath(0, dag)
        fn = maya.OpenMaya.MFnCamera(dag)
        self.assertAlmostEqual(
            camera.parameters()["projection:fov"].value,
            IECore.radiansToDegrees(fn.horizontalFieldOfView()), 5)
    def testOrthographic(self):

        camera = IECoreMaya.FromMayaCameraConverter("topShape").convert()

        self.assertEqual(camera.getName(), "topShape")
        self.assertEqual(camera.getTransform().transform(),
                         IECore.M44f(maya.cmds.getAttr("top.worldMatrix[0]")))
        self.assertEqual(
            camera.parameters()["resolution"].value,
            IECore.V2i(maya.cmds.getAttr("defaultResolution.width"),
                       maya.cmds.getAttr("defaultResolution.height")))
        self.assertEqual(
            camera.parameters()["clippingPlanes"].value,
            IECore.V2f(maya.cmds.getAttr("topShape.nearClipPlane"),
                       maya.cmds.getAttr("topShape.farClipPlane")))
        self.assertEqual(camera.parameters()["projection"].value,
                         "orthographic")
        self.assertEqual(
            camera.parameters()["screenWindow"].value.max.x -
            camera.parameters()["screenWindow"].value.min.x,
            maya.cmds.getAttr("topShape.orthographicWidth"))
        self.assertEqual(
            camera.blindData()["maya"]["aperture"].value,
            IECore.V2f(maya.cmds.getAttr("topShape.horizontalFilmAperture"),
                       maya.cmds.getAttr("topShape.verticalFilmAperture")))
    def testPerspective(self):

        camera = IECoreMaya.FromMayaCameraConverter("perspShape").convert()

        self.assertEqual(camera.getName(), "perspShape")
        self.assertEqual(
            camera.getTransform().transform(),
            IECore.M44f(maya.cmds.getAttr("persp.worldMatrix[0]")))
        self.assertEqual(
            camera.parameters()["resolution"].value,
            IECore.V2i(maya.cmds.getAttr("defaultResolution.width"),
                       maya.cmds.getAttr("defaultResolution.height")))
        self.assertEqual(
            camera.parameters()["clippingPlanes"].value,
            IECore.V2f(maya.cmds.getAttr("perspShape.nearClipPlane"),
                       maya.cmds.getAttr("perspShape.farClipPlane")))
        self.assertEqual(camera.parameters()["projection"].value,
                         "perspective")
        self.assertEqual(
            camera.blindData()["maya"]["aperture"].value,
            IECore.V2f(maya.cmds.getAttr("perspShape.horizontalFilmAperture"),
                       maya.cmds.getAttr("perspShape.verticalFilmAperture")))

        sel = maya.OpenMaya.MSelectionList()
        sel.add("perspShape")
        dag = maya.OpenMaya.MDagPath()
        sel.getDagPath(0, dag)
        fn = maya.OpenMaya.MFnCamera(dag)
        self.assertAlmostEqual(
            camera.parameters()["projection:fov"].value,
            IECore.radiansToDegrees(fn.horizontalFieldOfView()), 5)
	def testRandomCameras( self ) :

		random.seed( 42 )
		for i in range( 40 ):
			randomCamera = maya.cmds.camera()[0]
			cortexCamera = IECoreScene.Camera()
			projection = "orthographic" if random.random() > 0.5 else "perspective"
			cortexCamera.setProjection( projection )
			cortexCamera.setAperture( imath.V2f( random.uniform( 1, 20 ), random.uniform( 1, 20 ) ) )
			cortexCamera.setApertureOffset( imath.V2f( random.uniform( -10, 10 ), random.uniform( -10, 10 ) ) )
			if projection != "orthographic":
				cortexCamera.setFocalLength( random.uniform( 2.5, 200 ) )

			cortexCamera.setClippingPlanes( random.uniform( 1, 1000 ) + imath.V2f( 0, random.uniform( 1, 1000 ) ) )

			cortexCamera.setFStop( random.uniform( 1, 10 ) )
			cortexCamera.setFocusDistance( random.uniform( 0, 1000 ) )

			if cortexCamera.getProjection() == "orthographic":
				# Remove settings which we know will fail on ortho cameras in Maya ( see test below )
				del cortexCamera.parameters()["apertureOffset"]

				# Only square apertures supported
				cortexCamera.setAperture( imath.V2f( cortexCamera.getAperture()[0] ) )

			self.assertTrue( IECoreMaya.ToMayaCameraConverter( cortexCamera ).convert( randomCamera ) )
			self.assertIECoreCamAndMayaCamEqual( cortexCamera, randomCamera )
			roundTrip = IECoreMaya.FromMayaCameraConverter( randomCamera ).convert()
			self.assertIECoreCamsAlmostEqual( cortexCamera, roundTrip )

			maya.cmds.delete( randomCamera )
示例#7
0
    def testFilmOffset(self):

        for x in [-0.5, -0.25, 0, 0.25, 0.5]:

            for y in [-0.5, -0.25, 0, 0.25, 0.5]:

                maya.cmds.setAttr("perspShape.horizontalFilmOffset", x)
                maya.cmds.setAttr("perspShape.verticalFilmOffset", y)
                camera = IECoreMaya.FromMayaCameraConverter(
                    "perspShape").convert()

                self.assertFalse(camera.hasResolution())
                self.assertEqual(
                    camera.getClippingPlanes(),
                    imath.V2f(maya.cmds.getAttr("perspShape.nearClipPlane"),
                              maya.cmds.getAttr("perspShape.farClipPlane")))
                self.assertEqual(camera.getProjection(), "perspective")
                self.assertEqual(
                    camera.getAperture(),
                    INCH_TO_MM * imath.V2f(
                        maya.cmds.getAttr("perspShape.horizontalFilmAperture"),
                        maya.cmds.getAttr("perspShape.verticalFilmAperture")))
                self.assertEqual(
                    camera.getApertureOffset(),
                    INCH_TO_MM * imath.V2f(
                        maya.cmds.getAttr("perspShape.horizontalFilmOffset"),
                        maya.cmds.getAttr("perspShape.verticalFilmOffset")))
                self.assertIECoreCamAndMayaCamEqual(camera, "perspShape")
	def testExistingCamParent( self ) :

		maya.cmds.setAttr( "frontShape.nearClipPlane", 1 )
		maya.cmds.setAttr( "frontShape.farClipPlane", 1000 )
		maya.cmds.setAttr( "frontShape.orthographicWidth", 2 )

		self.assertMayaCamsNotEqual( "frontShape", "perspShape" )

		front = IECoreMaya.FromMayaCameraConverter( "frontShape" ).convert()
		persp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertNotEqual( front, persp )

		self.assertTrue( IECoreMaya.ToMayaCameraConverter( front ).convert( "persp" ) )
		self.assertMayaCamsEqual( "frontShape", "perspShape" )
		self.assertIECoreCamAndMayaCamEqual( front, "perspShape" )

		newPersp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertEqual( front.parameters(), newPersp.parameters() )
示例#9
0
	def testOrthographic( self ) :

		camera = IECoreMaya.FromMayaCameraConverter( "topShape" ).convert()

		self.assertFalse( camera.hasResolution() )
		self.assertEqual( camera.getClippingPlanes(), imath.V2f( maya.cmds.getAttr( "topShape.nearClipPlane" ), maya.cmds.getAttr( "topShape.farClipPlane" ) ) )
		self.assertEqual( camera.getProjection(), "orthographic" )
		self.assertEqual( camera.getAperture(), imath.V2f( maya.cmds.getAttr( "topShape.orthographicWidth" ) ) )
		self.assertIECoreCamAndMayaCamEqual( camera, "topShape" )
示例#10
0
	def testExistingCamParent( self ) :

		maya.cmds.setAttr( "frontShape.nearClipPlane", 1 )
		maya.cmds.setAttr( "frontShape.farClipPlane", 1000 )
		maya.cmds.setAttr( "frontShape.horizontalFilmAperture", 2 )
		maya.cmds.setAttr( "frontShape.verticalFilmAperture", 1 )

		self.assertMayaCamsNotEqual( "frontShape", "perspShape" )

		front = IECoreMaya.FromMayaCameraConverter( "frontShape" ).convert()
		persp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertIECoreCamsNotEqual( front, persp )

		self.failUnless( IECoreMaya.ToMayaCameraConverter( front ).convert( "persp" ) )
		self.assertMayaCamsEqual( "frontShape", "perspShape" )
		self.assertIECoreCamAndMayaCamEqual( front, "perspShape" )

		newPersp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertIECoreCamsEqual( front, newPersp )
示例#11
0
	def testPerspective( self ) :

		camera = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()

		self.assertFalse( camera.hasResolution() )
		self.assertEqual( camera.getClippingPlanes(), imath.V2f( maya.cmds.getAttr( "perspShape.nearClipPlane" ), maya.cmds.getAttr( "perspShape.farClipPlane" ) ) )
		self.assertEqual( camera.getProjection(), "perspective" )
		self.assertEqual( camera.getAperture(), imath.V2f( maya.cmds.getAttr( "perspShape.horizontalFilmAperture" ), maya.cmds.getAttr( "perspShape.verticalFilmAperture" ) ) * INCH_TO_MM )
		self.assertAlmostEqual( camera.getFocalLength(), maya.cmds.getAttr( "perspShape.focalLength" ) )
		self.assertIECoreCamAndMayaCamEqual( camera, "perspShape" )
示例#12
0
	def testExistingCam( self ) :

		maya.cmds.setAttr( "topShape.nearClipPlane", 1 )
		maya.cmds.setAttr( "topShape.farClipPlane", 1000 )
		maya.cmds.setAttr( "topShape.horizontalFilmAperture", 2 )
		maya.cmds.setAttr( "topShape.verticalFilmAperture", 1 )

		self.assertMayaCamsNotEqual( "perspShape", "topShape" )

		persp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		top = IECoreMaya.FromMayaCameraConverter( "topShape" ).convert()
		self.assertIECoreCamsNotEqual( persp, top )

		self.failUnless( IECoreMaya.ToMayaCameraConverter( persp ).convert( "topShape" ) )
		self.assertMayaCamsEqual( "perspShape", "topShape" )
		self.assertIECoreCamAndMayaCamEqual( persp, "topShape" )

		newTop = IECoreMaya.FromMayaCameraConverter( "topShape" ).convert()
		self.assertIECoreCamsEqual( persp, newTop )
示例#13
0
	def testOverrideResolution( self ) :

		camera = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertFalse( camera.hasResolution() )
		self.assertFalse( camera.hasFilmFit() )
		self.assertFalse( camera.hasPixelAspectRatio() )

		maya.cmds.addAttr( "perspShape", ln="ieCamera_overrideResolution", at="long2" )
		maya.cmds.addAttr( "perspShape", ln="ieCamera_overrideResolutionX", at="long", p = "ieCamera_overrideResolution", dv = 1024 )
		maya.cmds.addAttr( "perspShape", ln="ieCamera_overrideResolutionY", at="long", p = "ieCamera_overrideResolution", dv = 778 )
		camera = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertTrue( camera.hasResolution() )
		self.assertEqual( camera.getResolution(), imath.V2i( 1024, 778 ) )
		self.assertFalse( camera.hasPixelAspectRatio() )
		self.assertFalse( camera.hasFilmFit() )

		maya.cmds.deleteAttr( "perspShape", attribute= "ieCamera_overrideResolution" )
		maya.cmds.addAttr( "perspShape", ln= "ieCamera_overridePixelAspectRatio", at="float", dv=2.0 )
		camera = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertFalse( camera.hasResolution() )
		self.assertTrue( camera.hasPixelAspectRatio() )
		self.assertEqual( camera.getPixelAspectRatio(), 2.0 )
		self.assertFalse( camera.hasFilmFit() )

		maya.cmds.deleteAttr( "perspShape", attribute= "ieCamera_overridePixelAspectRatio" )
		fitModeNames = IECoreScene.Camera.FilmFit.names.keys()
		maya.cmds.addAttr( "perspShape", ln= "ieCamera_overrideFilmFit", at="enum", en=":".join( fitModeNames ) )


		for i in range( len( fitModeNames ) ):
			maya.cmds.setAttr( "perspShape.ieCamera_overrideFilmFit", i )
			camera = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
			self.assertFalse( camera.hasResolution() )
			self.assertFalse( camera.hasPixelAspectRatio() )
			self.assertTrue( camera.hasFilmFit() )
			self.assertEqual( camera.getFilmFit(), IECoreScene.Camera.FilmFit.names[ fitModeNames[i] ] )

		maya.cmds.deleteAttr( "perspShape", attribute= "ieCamera_overrideFilmFit" )
		camera = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		self.assertFalse( camera.hasResolution() )
		self.assertFalse( camera.hasFilmFit() )
		self.assertFalse( camera.hasPixelAspectRatio() )
	def testUnrepresentable( self ) :

			testCamera = maya.cmds.camera()[0]
			cortexCamera = IECoreScene.Camera()
			cortexCamera.setProjection( "orthographic" )
			cortexCamera.setAperture( imath.V2f( 1, 2 ) )
			cortexCamera.setClippingPlanes( imath.V2f( 1, 100 ) )

			self.assertTrue( IECoreMaya.ToMayaCameraConverter( cortexCamera ).convert( testCamera ) )
			self.assertIECoreCamAndMayaCamEqual( cortexCamera, testCamera )
			roundTrip = IECoreMaya.FromMayaCameraConverter( testCamera ).convert()
			self.assertIECoreCamsAlmostEqual( cortexCamera, roundTrip )

			cortexCamera.setApertureOffset( imath.V2f( 3, 4 ) )

			self.assertTrue( IECoreMaya.ToMayaCameraConverter( cortexCamera ).convert( testCamera ) )
			self.assertIECoreCamAndMayaCamEqual( cortexCamera, testCamera )
			roundTrip = IECoreMaya.FromMayaCameraConverter( testCamera ).convert()
			self.assertIECoreCamsAlmostEqual( cortexCamera, roundTrip )

			maya.cmds.delete( testCamera )
示例#15
0
	def testWrongMayaNode( self ) :

		maya.cmds.polySphere( name="pSphere" )
		persp = IECoreMaya.FromMayaCameraConverter( "perspShape" ).convert()
		converter = IECoreMaya.ToMayaCameraConverter( persp )

		messageHandler = IECore.CapturingMessageHandler()
		with messageHandler :
			self.assertFalse( converter.convert( "pSphereShape" ) )

		self.assertEqual( len( messageHandler.messages ), 1 )
		self.assertEqual( messageHandler.messages[0].level, IECore.MessageHandler.Level.Warning )
		self.assertEqual( messageHandler.messages[0].context, "ToMayaCameraConverter::doConversion" )
	def testFocalLengthWorldScale( self ) :

			testCamera = maya.cmds.camera()[0]
			cortexCamera = IECoreScene.Camera()
			cortexCamera.setProjection( "perspective" )
			cortexCamera.setAperture( imath.V2f( 36, 24 ) )
			cortexCamera.setFocalLength( 35 )
			cortexCamera.setClippingPlanes( imath.V2f( 1, 100 ) )
			cortexCamera.setApertureOffset( imath.V2f( 0 ) )
			cortexCamera.setFocusDistance( 1 )

			self.assertTrue( IECoreMaya.ToMayaCameraConverter( cortexCamera ).convert( testCamera ) )
			self.assertIECoreCamAndMayaCamEqual( cortexCamera, testCamera )
			roundTrip = IECoreMaya.FromMayaCameraConverter( testCamera ).convert()
			self.assertIECoreCamsAlmostEqual( cortexCamera, roundTrip )

			for scale in [ 1.0, 0.01 ]:
				cortexCamera.setFocalLengthWorldScale( scale )

				self.assertTrue( IECoreMaya.ToMayaCameraConverter( cortexCamera ).convert( testCamera ) )

				sel = maya.OpenMaya.MSelectionList()
				sel.add( testCamera )
				dag = maya.OpenMaya.MDagPath()
				sel.getDagPath( 0, dag )
				fn = maya.OpenMaya.MFnCamera( dag )
				self.assertAlmostEqual( fn.focalLength(), cortexCamera.getFocalLength() * scale / 0.1, places = 6 )

				roundTrip = IECoreMaya.FromMayaCameraConverter( testCamera ).convert()
				self.assertAlmostEqual( roundTrip.getFocalLength(), cortexCamera.getFocalLength() * scale / 0.1, places = 6 )

				# Check that despite using different units for focalLength and aperture, we still get the
				# same frustum
				self.assertEqual( roundTrip.frustum(), cortexCamera.frustum() )

			maya.cmds.delete( testCamera )
    def testConstructor(self):

        converter = IECoreMaya.FromMayaCameraConverter("perspShape")
        camera = converter.convert()
        self.assert_(camera.isInstanceOf(IECore.Camera.staticTypeId()))
    def testPixelAspectRatio(self):
        def verify(camera, resolution, pixelAspectRatio, expectedScreenWindow):

            self.assertEqual(camera.getName(), "perspShape")
            self.assertEqual(
                camera.getTransform().transform(),
                IECore.M44f(maya.cmds.getAttr("persp.worldMatrix[0]")))
            self.assertEqual(camera.parameters()["resolution"].value,
                             resolution)
            self.assertEqual(
                camera.parameters()["clippingPlanes"].value,
                IECore.V2f(maya.cmds.getAttr("perspShape.nearClipPlane"),
                           maya.cmds.getAttr("perspShape.farClipPlane")))
            self.assertEqual(camera.parameters()["projection"].value,
                             "perspective")
            self.assertTrue(camera.parameters()
                            ["screenWindow"].value.min.equalWithAbsError(
                                expectedScreenWindow.min, 1e-6))
            self.assertTrue(camera.parameters()
                            ["screenWindow"].value.max.equalWithAbsError(
                                expectedScreenWindow.max, 1e-6))
            self.assertEqual(
                camera.blindData()["maya"]["aperture"].value,
                IECore.V2f(
                    maya.cmds.getAttr("perspShape.horizontalFilmAperture"),
                    maya.cmds.getAttr("perspShape.verticalFilmAperture")))

            sel = maya.OpenMaya.MSelectionList()
            sel.add("perspShape")
            dag = maya.OpenMaya.MDagPath()
            sel.getDagPath(0, dag)
            fn = maya.OpenMaya.MFnCamera(dag)
            self.assertAlmostEqual(
                camera.parameters()["projection:fov"].value,
                IECore.radiansToDegrees(fn.horizontalFieldOfView()), 5)

        converter = IECoreMaya.FromMayaCameraConverter("perspShape")

        # from the render globals
        converter.parameters()["resolutionMode"].setValue("renderGlobals")

        # this crazy 3 step approach seem to be the only way to set
        # the pixel aspect ratio without altering the resolution
        # settings. this was essentially cribbed from Maya's
        # changeMayaSoftwareResolution() mel function.
        def setGlobalPixelAspectRatio(pixelAspectRatio):
            maya.cmds.setAttr(
                "defaultResolution.deviceAspectRatio",
                float(pixelAspectRatio) /
                (float(maya.cmds.getAttr("defaultResolution.height")) /
                 float(maya.cmds.getAttr("defaultResolution.width"))))
            maya.cmds.setAttr("defaultResolution.lockDeviceAspectRatio", 0)
            maya.cmds.setAttr("defaultResolution.pixelAspect",
                              pixelAspectRatio)

        globalRes = IECore.V2i(maya.cmds.getAttr("defaultResolution.width"),
                               maya.cmds.getAttr("defaultResolution.height"))
        self.assertEqual(globalRes, IECore.V2i(960, 540))
        globalScreenWindow = IECore.Box2f(IECore.V2f(-1, -0.5625),
                                          IECore.V2f(1, 0.5625))
        setGlobalPixelAspectRatio(1)
        verify(converter.convert(),
               resolution=globalRes,
               pixelAspectRatio=1,
               expectedScreenWindow=globalScreenWindow)
        setGlobalPixelAspectRatio(2)
        verify(converter.convert(),
               resolution=globalRes,
               pixelAspectRatio=2,
               expectedScreenWindow=IECore.Box2f(
                   globalScreenWindow.min / IECore.V2f(1, 2),
                   globalScreenWindow.max / IECore.V2f(1, 2)))
        setGlobalPixelAspectRatio(3)
        verify(converter.convert(),
               resolution=globalRes,
               pixelAspectRatio=3,
               expectedScreenWindow=IECore.Box2f(
                   globalScreenWindow.min / IECore.V2f(1, 3),
                   globalScreenWindow.max / IECore.V2f(1, 3)))

        # from the parameters
        customRes = IECore.V2i(1024, 778)
        customScreenWindow = IECore.Box2f(IECore.V2f(-1, -0.759765),
                                          IECore.V2f(1, 0.759765))
        converter.parameters()["resolutionMode"].setValue("specified")
        converter.parameters()["resolution"].setTypedValue(customRes)
        converter.parameters()["pixelAspectRatio"].setTypedValue(1)
        verify(converter.convert(),
               resolution=customRes,
               pixelAspectRatio=1,
               expectedScreenWindow=customScreenWindow)
        converter.parameters()["pixelAspectRatio"].setTypedValue(2)
        verify(converter.convert(),
               resolution=customRes,
               pixelAspectRatio=2,
               expectedScreenWindow=IECore.Box2f(
                   customScreenWindow.min / IECore.V2f(1, 2),
                   customScreenWindow.max / IECore.V2f(1, 2)))
        converter.parameters()["pixelAspectRatio"].setTypedValue(3)
        verify(converter.convert(),
               resolution=customRes,
               pixelAspectRatio=3,
               expectedScreenWindow=IECore.Box2f(
                   customScreenWindow.min / IECore.V2f(1, 3),
                   customScreenWindow.max / IECore.V2f(1, 3)))