Esempio n. 1
0
    def setCurrentPrimParms(self, isHandle, prim_num, prim_u):
        currentGlobalFrame = -1
        if isHandle:
            self._currentHandle = prim_num
            self._currentPrimU = -1
            self._currentPrim = -1
            point = self._geometryTimeHandles.point(prim_num)
            if point is not None:
                if self._geometryTimeHandles.findPointAttrib(
                        'primid') is not None:
                    self._currentPrim = point.attribValue("primid")

        else:
            self._currentPrim = prim_num
            self._currentHandle = -1
            self._currentPrimU = prim_u

            if prim_num > -1:
                self._currentPrimDist = self.readPointPrimDistAttrib(
                    self._geometryPosPaths, self._currentPoint)
                currentGlobalFrame = self.readGlobalFrameAttribAtInsertPoint()

        pu.setNodeParm(self._node, "activePoint", self._currentHandle)
        pu.setNodeParm(self._node, "activePrim", self._currentPrim)
        pu.setNodeParm(self._node, "activePrimU", self._currentPrimU)
        pu.setNodeParm(self._node, "currentPrimDist", self._currentPrimDist)
        pu.setNodeParm(self._node, "currentGlobalFrame", currentGlobalFrame)
Esempio n. 2
0
 def updateCurrentPrimParmsFromGeometry(self):
     activeTipPoint = self.readGeoDetailAttrib(self._geometry,
                                               "_lastActiveTipPoint")
     #if self._curre
     self.setActiveTipPoint(activeTipPoint, False, False)
     pu.setNodeParm(self._node, "activePoint", self._currentHandle)
     self.setCurrentPrimParms(False, -1, -1)
Esempio n. 3
0
 def opRemoveHandle(self):
     #self.setBrushOp('remove')
     self.setBrushMode('addremove')
     self.setAddRemoveOp('remove')
     self.setIsSelectionEvent(True)
     pu.setNodeParm(self._node, 'selectedPointsGroup',
                    str(self._currentHandle))
     self.stampBrushOp('remove')
Esempio n. 4
0
    def stashEditedPoints(self):
        stashPoints = self._stasherTimingPoints.geometry().freeze(True, True)
        pu.setNodeParm(self._node, 'stash_timing_points', stashPoints, True)
        #self.log(self._currentBrushOp)

        if self._isSelectionEvent:
            self.setIsSelectionEvent(False)
            pu.setNodeParm(self._node, 'selectedPointsGroup', "")
Esempio n. 5
0
    def stashEditedPoints(self):

        if pu.evalNodeParm(self._node, 'autoslideDist') == True:
            self._parent.timingStashEditedPoints()

        stashPoints = self._stasherAllPoints.geometry().freeze(True, True)
        pu.setNodeParm(self._node, 'stash_all_points', stashPoints, True)
        #self.log(self._currentBrushOp)

        if self._isSelectionEvent:
            self.setIsSelectionEvent(False)
            pu.setNodeParm(self._node, 'selectedPointsGroup', "")
Esempio n. 6
0
    def updateSustainedAction(self):
        #self.setBrushPosition(self._brushPosition)
        #self.setCursorScreenPos(self._lastMouseX, self._lastMouseY)

        #isAgentAnchor, isHandle, prim_num, prim_u, snap_pos = self.intersectExistingPrims(self._rayOrigin, self._rayDir)
        prim_num, snap_pos = ci.getNearestHandleToCursor(
            self._geometryAgentAnchors, self._rayOrigin, self._rayDir)
        if prim_num > -1:
            pu.setNodeParm(self._node, "snapPoint", prim_num)
            self._brushPosition = snap_pos
        else:
            pu.setNodeParm(self._node, "snapPoint", -1)

        self.setBrushPositionEnd(self._brushPosition)
        self.setCursorScreenPosEnd(self._lastMouseX, self._lastMouseY)
    def onSelection(self, kwargs):
        selection = kwargs["selection"]
        self.setIsSelectionEvent(True)

        ### Convert all selection types to Points Or set string to -1 for no selection
        if len(selection.selections()) > 0:
            selection.setGeometryType(hou.geometryType.Points)
            selectionString = selection.mergedSelectionString(
                empty_string_selects_all=False)
        else:
            selectionString = str(-1)
        pu.setNodeParm(self._node, 'selectedPointsGroup', selectionString,
                       True, 'brush: Change Selection')

        # Must return True to accept the selection?
        return False
Esempio n. 8
0
    def setActiveTipPoint(self, pointnum, ishandle, readfromprim):
        activeTip = pointnum

        if readfromprim:
            firstPoint = self.readGeoPrimAttrib(self._geometry, "_firstPoint",
                                                self._currentPrim)
            lastPoint = self.readGeoPrimAttrib(self._geometry, "_lastPoint",
                                               self._currentPrim)

            if ishandle and pointnum == firstPoint:
                activeTip = firstPoint
            else:
                activeTip = lastPoint

        pu.setNodeParm(self._node, "activeTipPoint", activeTip, True,
                       "brush: Set Tip Point")
    def setCurrentPrimParms(self, isHandle, prim_num, pt_num):
        currentGlobalFrame = -1
        if isHandle:
            self._currentHandle = prim_num
            self._currentPrim = -1
            point = self._geometryTrajHandles.point(prim_num)
            if point is not None:
                if self._geometryTrajHandles.findPointAttrib(
                        'primid') is not None:
                    self._currentPrim = point.attribValue("primid")

        else:
            self._currentPrim = prim_num
            self._currentHandle = pt_num

        pu.setNodeParm(self._node, "activePoint", self._currentHandle)
        pu.setNodeParm(self._node, "activePrim", self._currentPrim)
Esempio n. 10
0
    def setPathMode(self, modename):
        #self.log(typename)
        value = self.PATHMODES.index(modename)
        self._pathMode = modename
        pu.setNodeParm(self._node, 'path_mode', modename, onlyifchanged=True)

        if self._pathMode == 'position':
            self._classTiming.onInterrupt(kwargs={})
            self._classPosition.onResume(kwargs={})
            self._classTiming.showAgentGuides(False)

        elif self._pathMode == 'timing':
            self._classPosition.onInterrupt(kwargs={})
            self._classTiming.onResume(kwargs={})
            self._classTiming.showAgentGuides(True)

        else:
            self.log("pathMode not set")
Esempio n. 11
0
    def setCurrentPrimParms(self, isHandle, prim_num, prim_u):
        if isHandle:
            self._currentHandle = prim_num
            self._currentPrimU = -1
            #self.log(isHandle)
            #self.log(prim_num)
            self._currentPrim = -1
            point = self._geometry.point(prim_num)
            if point is not None:
                pointprim = point.prims()
                if len(pointprim) > 0:
                    self._currentPrim = pointprim[0].number()

        else:
            self._currentPrim = prim_num
            self._currentHandle = -1
            self._currentPrimU = prim_u

        pu.setNodeParm(self._node,
                       "activePoint",
                       self._currentHandle,
                       onlyifchanged=True)
        pu.setNodeParm(self._node,
                       "activePrim",
                       self._currentPrim,
                       onlyifchanged=True)
        pu.setNodeParm(self._node,
                       "activePrimU",
                       self._currentPrimU,
                       onlyifchanged=True)
Esempio n. 12
0
    def onMenuAction(self, kwargs):
        ### Define what to do when an item in the menu is pressed.
        menu_item = kwargs['menu_item']
        node = kwargs['node']

        ### Getting the dict entry of a radiogroup returns its string value
        #self.log(kwargs['radio_xformOp'])
        self.log(menu_item)
        if kwargs["menu_item"] == "radio_brushMode":
            self.setBrushMode(kwargs['radio_brushMode'])
        elif kwargs["menu_item"] == "radio_xformOp":
            self.setXformOp(kwargs['radio_xformOp'])
            self.setBrushMode('xform')

        elif kwargs["menu_item"] == "radio_brushType":
            self.setBrushType(kwargs['radio_brushType'])

        elif kwargs["menu_item"] == "action_lockPoints":
            self.opLockPoints()
        elif kwargs["menu_item"] == "action_unlockPoints":
            self.opUnlockPoints()

        elif kwargs["menu_item"] == "toggle_selectAllPrimPoints":
            pu.setNodeParm(self._node, 'selectAllPrimPoints',
                           kwargs['toggle_selectAllPrimPoints'], True,
                           'Invert Selection Mask')
        elif kwargs["menu_item"] == "toggle_affectAhead":
            pu.setNodeParm(self._node, 'affectAhead',
                           kwargs['toggle_affectAhead'], True,
                           'Toggle Affect Ahead')
        elif kwargs["menu_item"] == "toggle_affectBehind":
            pu.setNodeParm(self._node, 'affectBehind',
                           kwargs['toggle_affectBehind'], True,
                           'Toggle Affect Behind')
Esempio n. 13
0
 def setTimeOp(self, opname):
     value = self.TIMEOPS.index(opname)
     pu.setNodeParm(self._node, 'time_op', value)
Esempio n. 14
0
    def onMouseEvent(self, kwargs):

        ui_event = kwargs["ui_event"]
        device = ui_event.device()
        vp = ui_event.curViewport()

        #self.log(ui_event.reason())

        MOUSEUP = ui_event.reason() == hou.uiEventReason.Changed
        MOUSEDOWN = ui_event.reason() == hou.uiEventReason.Start
        PICKED = ui_event.reason() == hou.uiEventReason.Picked
        MOUSEDRAG = ui_event.reason() == hou.uiEventReason.Active
        MOVED = ui_event.reason() == hou.uiEventReason.Located
        SINGLECLICK = MOUSEDOWN or PICKED

        SHIFT = device.isShiftKey()
        CTRL = device.isCtrlKey()

        LEFT_BUTTON = device.isLeftButton()
        MIDDLE_BUTTON = device.isMiddleButton()
        RIGHT_BUTTON = device.isRightButton()
        #self.log("LEFT_BUTTON", LEFT_BUTTON)
        #self.log("MIDDLE_BUTTON", MIDDLE_BUTTON)

        MOUSEX = device.mouseX()
        MOUSEY = device.mouseY()

        BRUSHACTIVE = self._currentBrushMode == 'xform' and self._currentBrushType == 'circlebrush'

        (rayOrigin, rayDir) = ui_event.ray()
        self._rayOrigin = rayOrigin
        self._rayDir = rayDir
        self._brushPosition = ci.intersectOriginPlane(rayOrigin, rayDir)

        if RIGHT_BUTTON:
            return

        if not self._sustainedAction and SHIFT and BRUSHACTIVE:
            if LEFT_BUTTON:
                self.scaleBrushSize(MOUSEX)
            elif MIDDLE_BUTTON:
                self.incMouseBrushFalloff(MOUSEX)
            self._lastMouseX, self._lastMouseY = MOUSEX, MOUSEY
            return

        self._lastMouseX, self._lastMouseY = MOUSEX, MOUSEY

        if not self._sustainedAction:

            self.setBrushPosition(self._brushPosition)
            self.updateGuideTransform(vp)

            ### Don't do any snapping if we are in xform mode with circlebrush active
            isAgentAnchor = 0
            if BRUSHACTIVE:
                isPrimInterior, isHandle, prim_num, prim_u, snap_pos = False, False, -1, -1, (
                    0, 0, 0)
            else:

                isAgentAnchor, isHandle, prim_num, prim_u, snap_pos = self.intersectExistingPrims(
                    rayOrigin, rayDir)
                isPrimInterior = prim_num >= 0 and not isHandle

            ### Update NodeParm to drive sops
            self.setIsMouseDown((MOUSEDOWN or PICKED))
            pu.setNodeParm(self._node, "isShift", SHIFT, onlyifchanged=True)
            pu.setNodeParm(self._node, "isCtrl", CTRL, onlyifchanged=True)

            if isHandle or isAgentAnchor:
                self._brushPosition = snap_pos
                self.setBrushPosition(self._brushPosition)

            #if isHandle or isPrimInterior:
            self.setCurrentPrimParms(isHandle, prim_num, prim_u)

            self.setIsReadOnlyOp(False)

            if SINGLECLICK:
                if LEFT_BUTTON:
                    if self._currentBrushMode == 'addremove':

                        if CTRL:
                            if self._currentBrushMode == 'addremove':
                                if isHandle:
                                    self.opRemoveHandle()
                                else:
                                    self.opRemovePoints()
                        else:
                            if isPrimInterior:
                                self.opInsertPoint()
                            elif isHandle:
                                self.opMoveHandle()
                            else:
                                self.opAddPoint()

                    elif self._currentBrushMode == 'xform':

                        if self._currentXformOp == 'move':
                            if isHandle:
                                self.opMoveHandle()
                            else:
                                self.opMovePoints()

                        elif self._currentXformOp == 'rotate':
                            self.opRotatePoints()

                        elif self._currentXformOp == 'scale':
                            self.opScalePoints()

                    elif self._currentBrushMode == 'reverse':
                        self.opReversePrims()

                    elif self._currentBrushMode == 'clone':
                        self.opClonePrims()

                    elif self._currentBrushMode == 'join':
                        self.opJoinPrims()

                elif MIDDLE_BUTTON:
                    self.setIsReadOnlyOp(True)
                    if self._currentBrushMode == 'addremove':

                        if isHandle or isPrimInterior:
                            self.setActiveTipPoint(prim_num, isHandle, True)
                        else:
                            self.setActiveTipPoint(-1, False, False)

            ### Else not pressing, just holding keys
            else:
                if SHIFT:
                    pass

        if self._sustainedAction:
            self.updateSustainedAction()

            if MOUSEUP or PICKED:
                self.endSustainedAction()

        return False
Esempio n. 15
0
 def setIsReadOnlyOp(self, state):
     pu.setNodeParm(self._node, 'isReadOnlyOp', state)
Esempio n. 16
0
 def setBrushMode(self, modename):
     #self.log(modename)
     old = self._currentBrushMode
     self._currentBrushMode = modename
     pu.setNodeParm(self._node, 'brush_mode', self._currentBrushMode)
     self.updatePromptMessage()
Esempio n. 17
0
 def setBrushType(self, typename):
     #self.log(typename)
     value = self.BRUSHTYPES.index(typename)
     self._currentBrushType = typename
     pu.setNodeParm(self._node, 'brush_type', value)
     self.updateGuideTransform(self._scene_viewer)
Esempio n. 18
0
 def setAddRemoveOp(self, opname):
     value = self.ADDREMOVEOPS.index(opname)
     self._currentAddRemoveOp = opname
     pu.setNodeParm(self._node, 'addremove_op', value)
Esempio n. 19
0
 def setXformOp(self, opname):
     #self.log(opname)
     value = self.XFORMOPS.index(opname)
     self._currentXformOp = opname
     pu.setNodeParm(self._node, 'xform_op', value)
Esempio n. 20
0
 def opLockPoints(self):
     pu.setNodeParm(self._node, "isLockMode", True)
     pu.setNodeParm(self._node, "lock_op", 0)
     self.stampBrushOp('lock')
     pu.setNodeParm(self._node, "isLockMode", False)
 def setBrushOp(self, opname):
     value = self.BRUSHOPS.index(opname)
     pu.setNodeParm(self._node, 'brush_op', value)
 def stashEditedPoints(self):
     stashPoints = self._stasherTrajPoints.geometry().freeze(True, True)
     pu.setNodeParm(self._node, 'stash_traj_points', stashPoints, True)
    def onMouseEvent(self, kwargs):
        """ Computes the cursor text position and drawable geometry
        """
        #print 'timing on onMouseEvent'
        ui_event = kwargs["ui_event"]
        device = ui_event.device()
        vp = ui_event.curViewport()

        MOUSEUP = ui_event.reason() == hou.uiEventReason.Changed
        MOUSEDOWN = ui_event.reason() == hou.uiEventReason.Start
        PICKED = ui_event.reason() == hou.uiEventReason.Picked
        SINGLECLICK = MOUSEDOWN or PICKED
        SHIFT = device.isShiftKey()
        CTRL = device.isCtrlKey()
        LEFT_BUTTON = device.isLeftButton()
        MIDDLE_BUTTON = device.isMiddleButton()
        RIGHT_BUTTON = device.isRightButton()
        MOUSEX = device.mouseX()
        MOUSEY = device.mouseY()

        self._isShift = SHIFT

        if RIGHT_BUTTON:
            return

        (rayOrigin, rayDir) = ui_event.ray()
        self._brushPosition = ci.intersectOriginPlane(rayOrigin, rayDir)

        self._lastMouseX, self._lastMouseY = MOUSEX, MOUSEY

        if not self._sustainedAction:

            self.setBrushPosition(self._brushPosition)
            self.updateGuideTransform(vp)

            isHandle, prim_num, prim_u, snap_pos, pt_num = self.intersectExistingPrims(
                rayOrigin, rayDir)

            ### Update NodeParm to drive sops
            self.setIsMouseDown((MOUSEDOWN or PICKED))
            pu.setNodeParm(self._node, "isShift", SHIFT)
            pu.setNodeParm(self._node, "isCtrl", CTRL)

            self.setCurrentPrimParms(isHandle, prim_num, pt_num)

            if SINGLECLICK:
                if LEFT_BUTTON:

                    if CTRL and SHIFT:
                        self.opResetOffsetFrame()
                    elif CTRL:
                        self.opResetFrame()
                    elif SHIFT and not isHandle:
                        self.opEndFrame()
                    else:
                        self.opSlideFrame()

                elif MIDDLE_BUTTON:
                    if SHIFT and not isHandle:
                        self.opStartFrame()
                    elif CTRL:
                        self.opOffsetFrame()

        ### If active action update position offsets or end action on mouseup
        if self._sustainedAction:
            self.updateSustainedAction()
            self._drawTextGlobalFrame.updateTextPoints(
                self._geometryTrajHandles, "global_frame")
            self._drawTextGlobalFrame.show(True)

            if MOUSEUP or PICKED:
                self.endSustainedAction()

        return False
Esempio n. 24
0
 def opUnlockPoints(self):
     pu.setNodeParm(self._node, "isLockMode", True)
     pu.setNodeParm(self._node, "lock_op", 1)
     self.stampBrushOp('unlock')
     self.log('unlock')
     pu.setNodeParm(self._node, "isLockMode", False)
Esempio n. 25
0
 def setBrushSize(self, size):
     size = hou.hmath.clamp(size, 0.05, 10000000)
     self._brushSize = size
     pu.setNodeParm(self._node, 'brush_size', size)
Esempio n. 26
0
 def incMouseBrushFalloff(self, mouseX):
     value = pu.evalNodeParm(self._node, 'brush_falloff')
     value += self.getMouseDeltaX(mouseX) * -0.01
     value = hou.hmath.clamp(value, 0, 1)
     pu.setNodeParm(self._node, 'brush_falloff', value)
 def setIsMouseUp(self, state):
     pu.setNodeParm(self._node, 'isMouseUp', state, onlyifchanged=True)
Esempio n. 28
0
 def setCursorInViewport(self, state):
     pu.setNodeParm(self._node, 'isCursorInViewport', state)
 def setIsSelectionEvent(self, state):
     self._isSelectionEvent = state
     pu.setNodeParm(self._node, 'isSelectionEvent', state)
Esempio n. 30
0
    def onMouseEvent(self, kwargs):
        """ Computes the cursor text position and drawable geometry
        """
        #print 'timing on onMouseEvent'
        ui_event = kwargs["ui_event"]
        device = ui_event.device()
        vp = ui_event.curViewport()

        MOUSEUP = ui_event.reason() == hou.uiEventReason.Changed
        MOUSEDOWN = ui_event.reason() == hou.uiEventReason.Start
        PICKED = ui_event.reason() == hou.uiEventReason.Picked
        MOUSEDRAG = ui_event.reason() == hou.uiEventReason.Active
        MOVED = ui_event.reason() == hou.uiEventReason.Located
        SINGLECLICK = MOUSEDOWN or PICKED
        SHIFT = device.isShiftKey()
        CTRL = device.isCtrlKey()
        LEFT_BUTTON = device.isLeftButton()
        MIDDLE_BUTTON = device.isMiddleButton()
        RIGHT_BUTTON = device.isRightButton()
        MOUSEX = device.mouseX()
        MOUSEY = device.mouseY()

        if RIGHT_BUTTON:
            return

        (rayOrigin, rayDir) = ui_event.ray()
        self._brushPosition = ci.intersectOriginPlane(rayOrigin, rayDir)

        self._lastMouseX, self._lastMouseY = MOUSEX, MOUSEY

        if not self._sustainedAction:

            self.setBrushPosition(self._brushPosition)
            self.updateGuideTransform(vp)

            isHandle, prim_num, prim_u, snap_pos = self.intersectExistingPrims(
                rayOrigin, rayDir)
            isPrimInterior = prim_num >= 0 and not isHandle

            ### Update NodeParm to drive sops
            self.setIsMouseDown((MOUSEDOWN or PICKED))
            pu.setNodeParm(self._node, "isShift", SHIFT)
            pu.setNodeParm(self._node, "isCtrl", CTRL)

            self.setCurrentPrimParms(isHandle, prim_num, prim_u)

            if SINGLECLICK:
                if LEFT_BUTTON:
                    if CTRL:
                        self.opRemovePoints()
                    elif SHIFT:
                        self.opSlideDist()
                    else:
                        if prim_num > -1 and not isHandle:
                            self.opAddPoint()
                        else:
                            self.opSlideFrame()

                elif MIDDLE_BUTTON:
                    self.opSlideDist()
                    '''if isHandle:
                        self.opSlideDist()
                    else:
                        self.setIsReadOnlyOp(True)'''

        ### If active action update position offsets or end action on mouseup
        if self._sustainedAction:
            self.updateSustainedAction()

            if MOUSEUP or PICKED:
                self.endSustainedAction()

        return False