Пример #1
0
    def testEditTransform(self):

        script = Gaffer.ScriptNode()
        script["camera"] = GafferScene.Camera()

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["camera"]["out"])

        view["camera"]["lookThroughEnabled"].setValue(True)
        view["camera"]["lookThroughCamera"].setValue("/camera")

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)

        view.viewportGadget().setCameraTransform(imath.M44f().translate(
            imath.V3f(1, 2, 3)))

        self.assertEqual(script.undoAvailable(), True)
        self.assertEqual(script["camera"]["transform"]["translate"].getValue(),
                         imath.V3f(1, 2, 3))

        script.undo()
        self.assertEqual(script.undoAvailable(), False)
        self.assertEqual(script["camera"]["transform"]["translate"].getValue(),
                         imath.V3f(0))

        script.redo()
        self.assertEqual(script.undoAvailable(), True)
        self.assertEqual(script["camera"]["transform"]["translate"].getValue(),
                         imath.V3f(1, 2, 3))
Пример #2
0
    def testNoUnecessaryHistoryCalls(self):

        script = Gaffer.ScriptNode()
        script["camera"] = GafferScene.Camera()

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["camera"]["out"])

        view["camera"]["lookThroughEnabled"].setValue(True)
        view["camera"]["lookThroughCamera"].setValue("/camera")

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)

        # Force CameraTool update, since it is done lazily just prior to render.
        view.viewportGadget().preRenderSignal()(view.viewportGadget())

        with Gaffer.ContextMonitor() as cm:

            view.viewportGadget().setCameraTransform(imath.M44f().translate(
                imath.V3f(1, 2, 3)))

            # Force update
            view.viewportGadget().preRenderSignal()(view.viewportGadget())

        # We do not want the CameraTool to have performed a `SceneAlgo::history`
        # query during the edit, as they can be expensive and aren't suitable
        # for repeated use during drags etc.
        self.assertNotIn(GafferScene.SceneAlgo.historyIDContextName(),
                         cm.combinedStatistics().variableNames())

        self.assertEqual(script["camera"]["transform"]["translate"].getValue(),
                         imath.V3f(1, 2, 3))
Пример #3
0
	def testNestedTransform( self ) :

		script = Gaffer.ScriptNode()
		script["camera"] = GafferScene.Camera()
		script["group"] = GafferScene.Group()
		script["group"]["in"][0].setInput( script["camera"]["out"] )
		script["group"]["transform"]["rotate"]["y"].setValue( 90 )

		view = GafferSceneUI.SceneView()
		view["in"].setInput( script["group"]["out"] )

		view["camera"]["lookThroughEnabled"].setValue( True )
		view["camera"]["lookThroughCamera"].setValue( "/group/camera" )

		tool = GafferSceneUI.CameraTool( view )
		tool["active"].setValue( True )

		cameraTransform = imath.M44f().translate( imath.V3f( 1, 2, 3 ) )
		view.viewportGadget().setCameraTransform( cameraTransform )

		self.assertTrue(
			cameraTransform.equalWithAbsError(
				script["group"]["out"].fullTransform( "/group/camera" ),
				0.00001
			)
		)
Пример #4
0
    def testEditScopes(self):

        script = Gaffer.ScriptNode()
        script["camera"] = GafferScene.Camera()

        script["editScope"] = Gaffer.EditScope()
        script["editScope"].setup(script["camera"]["out"])
        script["editScope"]["in"].setInput(script["camera"]["out"])

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["editScope"]["out"])

        view["camera"]["lookThroughEnabled"].setValue(True)
        view["camera"]["lookThroughCamera"].setValue("/camera")

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)

        script["camera"]["transform"]["translate"].setValue(imath.V3f(1, 2, 3))
        script["camera"]["transform"]["rotate"].setValue(imath.V3f(1, 2, 3))

        # Without EditScope, should edit Camera node directly.

        cameraTransform = imath.M44f().translate(imath.V3f(10, 5, 1)).rotate(
            imath.V3f(math.pi / 4))
        view.viewportGadget().setCameraTransform(cameraTransform)

        self.assertFalse(
            GafferScene.EditScopeAlgo.hasTransformEdit(script["editScope"],
                                                       "/camera"))
        self.assertTrue(
            script["camera"]["out"].transform("/camera").equalWithAbsError(
                cameraTransform, 0.00001), )

        # With EditScope

        view["editScope"].setInput(script["editScope"]["out"])

        cameraTransform.translate(imath.V3f(1, 2, 3))
        view.viewportGadget().setCameraTransform(cameraTransform)

        self.assertTrue(
            GafferScene.EditScopeAlgo.hasTransformEdit(script["editScope"],
                                                       "/camera"))
        self.assertTrue(
            script["editScope"]["out"].transform("/camera").equalWithAbsError(
                cameraTransform, 0.00001), )
        self.assertTrue(
            GafferScene.EditScopeAlgo.hasTransformEdit(script["editScope"],
                                                       "/camera"))
Пример #5
0
    def testSwitchBackToDefaultCamera(self):

        script = Gaffer.ScriptNode()
        script["camera"] = GafferScene.Camera()
        script["camera"]["fieldOfView"].setValue(15)

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["camera"]["out"])

        # Force update, since everything is done lazily in the SceneView
        view.viewportGadget().preRenderSignal()(view.viewportGadget())

        # Remember what the default camera looks like
        defaultCamera = view.viewportGadget().getCamera()
        defaultCameraTransform = imath.M44f().translate(imath.V3f(10, 11, 12))
        defaultCenterOfInterest = 2.5
        view.viewportGadget().setCameraTransform(defaultCameraTransform)
        view.viewportGadget().setCenterOfInterest(defaultCenterOfInterest)

        # Look through a scene camera
        view["camera"]["lookThroughCamera"].setValue("/camera")
        view["camera"]["lookThroughEnabled"].setValue(True)

        view.viewportGadget().preRenderSignal()(view.viewportGadget())
        self.assertNotEqual(view.viewportGadget().getCamera(), defaultCamera)
        self.assertEqual(view.viewportGadget().getCameraTransform(),
                         script["camera"]["out"].fullTransform("/camera"))

        # Make an edit with the CameraTool, and change the transform and
        # center of interest.

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)

        view.viewportGadget().frame(
            imath.Box3f(imath.V3f(-1000), imath.V3f(1000)))
        self.assertNotEqual(view.viewportGadget().getCenterOfInterest(),
                            defaultCenterOfInterest)

        # Switch back out of the tool and make sure the default camera
        # is restored.

        view["camera"]["lookThroughEnabled"].setValue(False)
        view.viewportGadget().preRenderSignal()(view.viewportGadget())

        self.assertEqual(view.viewportGadget().getCamera(), defaultCamera)
        self.assertEqual(view.viewportGadget().getCameraTransform(),
                         defaultCameraTransform)
        self.assertEqual(view.viewportGadget().getCenterOfInterest(),
                         defaultCenterOfInterest)
Пример #6
0
    def testCameraEditability(self):

        script = Gaffer.ScriptNode()
        script["camera"] = GafferScene.Camera()

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["camera"]["out"])

        def assertCameraEditable(cameraEditable):

            # Force update, since everything is done lazily in the SceneView
            view.viewportGadget().preRenderSignal()(view.viewportGadget())

            self.assertEqual(view.viewportGadget().getCameraEditable(),
                             cameraEditable)

        assertCameraEditable(True)

        view["camera"]["lookThroughEnabled"].setValue(True)
        view["camera"]["lookThroughCamera"].setValue("/camera")
        assertCameraEditable(False)

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)
        assertCameraEditable(True)

        tool["active"].setValue(False)
        assertCameraEditable(False)

        tool["active"].setValue(True)
        assertCameraEditable(True)

        Gaffer.MetadataAlgo.setReadOnly(script["camera"]["transform"]["scale"],
                                        True)
        assertCameraEditable(True)

        Gaffer.MetadataAlgo.setReadOnly(
            script["camera"]["transform"]["translate"]["x"], True)
        assertCameraEditable(False)
        Gaffer.MetadataAlgo.setReadOnly(
            script["camera"]["transform"]["translate"]["x"], False)
        assertCameraEditable(True)

        Gaffer.MetadataAlgo.setReadOnly(
            script["camera"]["transform"]["rotate"]["x"], True)
        assertCameraEditable(False)
        Gaffer.MetadataAlgo.setReadOnly(
            script["camera"]["transform"]["rotate"]["x"], False)
        assertCameraEditable(True)
Пример #7
0
    def testCenterOfInterestAndUndo(self):

        script = Gaffer.ScriptNode()
        script["camera"] = GafferScene.Camera()

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["camera"]["out"])
        view["camera"]["lookThroughCamera"].setValue("/camera")
        view["camera"]["lookThroughEnabled"].setValue(True)

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)

        centerOfInterest1 = view.viewportGadget().getCenterOfInterest()

        with Gaffer.UndoScope(script):
            view.viewportGadget().frame(imath.Box3f(imath.V3f(0),
                                                    imath.V3f(1)))

        centerOfInterest2 = view.viewportGadget().getCenterOfInterest()

        with Gaffer.UndoScope(script):
            view.viewportGadget().frame(
                imath.Box3f(imath.V3f(0), imath.V3f(10)))

        centerOfInterest3 = view.viewportGadget().getCenterOfInterest()

        def assertCenterOfInterestEqual(centerOfInterest):

            # Force update, since everything is done lazily in the SceneView
            view.viewportGadget().preRenderSignal()(view.viewportGadget())
            self.assertEqual(view.viewportGadget().getCenterOfInterest(),
                             centerOfInterest)

        script.undo()
        assertCenterOfInterestEqual(centerOfInterest2)

        script.undo()
        assertCenterOfInterestEqual(centerOfInterest1)

        script.redo()
        assertCenterOfInterestEqual(centerOfInterest2)

        script.redo()
        assertCenterOfInterestEqual(centerOfInterest3)
Пример #8
0
    def testTransformNode(self):

        script = Gaffer.ScriptNode()

        script["camera"] = GafferScene.Camera()
        script["camera"]["transform"]["translate"]["z"].setValue(1)
        script["camera"]["transform"]["rotate"]["y"].setValue(90)

        script["filter"] = GafferScene.PathFilter()
        script["filter"]["paths"].setValue(IECore.StringVectorData(["/camera"
                                                                    ]))

        script["transform"] = GafferScene.Transform()
        script["transform"]["in"].setInput(script["camera"]["out"])
        script["transform"]["filter"].setInput(script["filter"]["out"])

        view = GafferSceneUI.SceneView()
        view["in"].setInput(script["transform"]["out"])

        view["camera"]["lookThroughEnabled"].setValue(True)
        view["camera"]["lookThroughCamera"].setValue("/camera")

        tool = GafferSceneUI.CameraTool(view)
        tool["active"].setValue(True)

        cameraTransform = imath.M44f().translate(imath.V3f(
            1, 2, 3)) * imath.M44f().rotate(
                IECore.degreesToRadians(imath.V3f(15, 90, 0)))

        for space in GafferScene.Transform.Space.values.values():

            script["transform"]["space"].setValue(space)
            view.viewportGadget().preRenderSignal()(view.viewportGadget())
            view.viewportGadget().setCameraTransform(cameraTransform)

            self.assertTrue(
                cameraTransform.equalWithAbsError(
                    script["transform"]["out"].fullTransform("/camera"),
                    0.00001))