예제 #1
0
 def OrthoTranslateTask(self, state):
     iRay = SelectionRay(base.direct.camera)
     iRay.collider.setFromLens(base.direct.camNode, base.direct.dr.mouseX,
                               base.direct.dr.mouseY)
     iRay.collideWithBitMask(BitMask32.bit(21))
     iRay.ct.traverse(base.direct.grid)
     entry = iRay.getEntry(0)
     hitPt = entry.getSurfacePoint(entry.getFromNodePath())
     iRay.collisionNodePath.removeNode()
     del iRay
     if hasattr(state, 'prevPt'):
         base.direct.camera.setPos(base.direct.camera, state.prevPt - hitPt)
     state.prevPt = hitPt
     return Task.cont
예제 #2
0
 def __init__(self, cam):
     self.cam = cam
     self.camNode = self.cam.node()
     self.camLens = self.camNode.getLens()
     # set lens change callback
     changeEvent = 'dr%d-change-event' % DisplayRegionContext.regionCount
     DisplayRegionContext.regionCount += 1
     self.camLens.setChangeEvent(changeEvent)
     self.accept(changeEvent, self.camUpdate)
     self.iRay = SelectionRay(self.cam)
     self.nearVec = Vec3(0)
     self.mouseX = 0.0
     self.mouseY = 0.0
     # A Camera node can have more than one display region
     # associated with it.  Here I assume that there is only
     # one display region per camera, since we are defining a
     # display region on a per-camera basis.  See note in
     # DisplayRegionList.__init__()
     try:
         self.dr = self.camNode.getDr(0)
     except:
         self.dr = self.camNode.getDisplayRegion(0)
     left = self.dr.getLeft()
     right = self.dr.getRight()
     bottom = self.dr.getBottom()
     top = self.dr.getTop()
     self.originX = left + right - 1
     self.originY = top + bottom - 1
     self.scaleX = 1.0 / (right - left)
     self.scaleY = 1.0 / (top - bottom)
     self.setOrientation()
     self.camUpdate()
    def OrthoTranslateTask(self, state):
        # create ray from the camera to detect 3d position
        iRay = SelectionRay(base.direct.camera)
        iRay.collider.setFromLens(base.direct.camNode, base.direct.dr.mouseX, base.direct.dr.mouseY)
        #iRay.collideWithBitMask(1)
        iRay.collideWithBitMask(BitMask32.bit(21))
        iRay.ct.traverse(base.direct.grid)

        entry = iRay.getEntry(0)
        hitPt = entry.getSurfacePoint(entry.getFromNodePath())
        iRay.collisionNodePath.removeNode()
        del iRay
        if hasattr(state, 'prevPt'):
            base.direct.camera.setPos(base.direct.camera, (state.prevPt - hitPt))
        state.prevPt = hitPt
        return Task.cont
예제 #4
0
    def __init__(self, cam):
        self.cam = cam
        self.camNode = self.cam.node()
        self.camLens = self.camNode.getLens()
        changeEvent = 'dr%d-change-event' % DisplayRegionContext.regionCount
        DisplayRegionContext.regionCount += 1
        self.camLens.setChangeEvent(changeEvent)
        self.accept(changeEvent, self.camUpdate)
        self.iRay = SelectionRay(self.cam)
        self.nearVec = Vec3(0)
        self.mouseX = 0.0
        self.mouseY = 0.0
        self.orthoFactor = 0.1
        try:
            self.dr = self.camNode.getDr(0)
        except:
            self.dr = self.camNode.getDisplayRegion(0)

        left = self.dr.getLeft()
        right = self.dr.getRight()
        bottom = self.dr.getBottom()
        top = self.dr.getTop()
        self.originX = left + right - 1
        self.originY = top + bottom - 1
        self.scaleX = 1.0 / (right - left)
        self.scaleY = 1.0 / (top - bottom)
        self.setOrientation()
        self.camUpdate()
예제 #5
0
    def spawnMouseRotateTask(self):
        taskMgr.remove('manipulateCamera')
        if self.perspCollPlane:
            iRay = SelectionRay(base.direct.camera)
            iRay.collider.setFromLens(base.direct.camNode, 0.0, 0.0)
            iRay.collideWithBitMask(1)
            if base.direct.camera.getPos().getZ() >= 0:
                iRay.ct.traverse(self.perspCollPlane)
            else:
                iRay.ct.traverse(self.perspCollPlane2)
            if iRay.getNumEntries() > 0:
                entry = iRay.getEntry(0)
                hitPt = entry.getSurfacePoint(entry.getFromNodePath())
                np = NodePath('temp')
                np.setPos(base.direct.camera, hitPt)
                self.coaMarkerPos = np.getPos()
                np.remove()
                self.coaMarker.setPos(self.coaMarkerPos)

            iRay.collisionNodePath.removeNode()
            del iRay

        self.camManipRef.setPos(self.coaMarkerPos)
        self.camManipRef.setHpr(base.direct.camera, ZERO_POINT)
        t = Task.Task(self.mouseRotateTask)
        if abs(base.direct.dr.mouseX) > 0.90000000000000002:
            t.constrainedDir = 'y'
        else:
            t.constrainedDir = 'x'
        taskMgr.add(t, 'manipulateCamera')
    def spawnMouseRotateTask(self):
        # Kill any existing tasks
        self.__stopManipulateCamera()
        if self.perspCollPlane:
            iRay = SelectionRay(base.direct.camera)
            iRay.collider.setFromLens(base.direct.camNode, 0.0, 0.0)
            iRay.collideWithBitMask(1)

            if base.direct.camera.getPos().getZ() >=0:
                iRay.ct.traverse(self.perspCollPlane)
            else:
                iRay.ct.traverse(self.perspCollPlane2)                

            if iRay.getNumEntries() > 0:
                entry = iRay.getEntry(0)
                hitPt = entry.getSurfacePoint(entry.getFromNodePath())

                # create a temp nodePath to get the position
                np = NodePath('temp')
                np.setPos(base.direct.camera, hitPt)
                self.coaMarkerPos = np.getPos()
                np.remove()
                self.coaMarker.setPos(self.coaMarkerPos)

            iRay.collisionNodePath.removeNode()
            del iRay

        # Set at markers position in render coordinates
        self.camManipRef.setPos(self.coaMarkerPos)
        self.camManipRef.setHpr(base.direct.camera, ZERO_POINT)
        t = Task.Task(self.mouseRotateTask)
        if abs(base.direct.dr.mouseX) > 0.9:
            t.constrainedDir = 'y'
        else:
            t.constrainedDir = 'x'
        self.__startManipulateCamera(task = t)
예제 #7
0
    def spawnMouseRotateTask(self):
        # Kill any existing tasks
        self.__stopManipulateCamera()
        if self.perspCollPlane:
            iRay = SelectionRay(base.direct.camera)
            iRay.collider.setFromLens(base.direct.camNode, 0.0, 0.0)
            iRay.collideWithBitMask(1)

            if base.direct.camera.getPos().getZ() >= 0:
                iRay.ct.traverse(self.perspCollPlane)
            else:
                iRay.ct.traverse(self.perspCollPlane2)

            if iRay.getNumEntries() > 0:
                entry = iRay.getEntry(0)
                hitPt = entry.getSurfacePoint(entry.getFromNodePath())

                # create a temp nodePath to get the position
                np = NodePath('temp')
                np.setPos(base.direct.camera, hitPt)
                self.coaMarkerPos = np.getPos()
                np.remove()
                self.coaMarker.setPos(self.coaMarkerPos)

            iRay.collisionNodePath.removeNode()
            del iRay

        # Set at markers position in render coordinates
        self.camManipRef.setPos(self.coaMarkerPos)
        self.camManipRef.setHpr(base.direct.camera, ZERO_POINT)
        t = Task.Task(self.mouseRotateTask)
        if abs(base.direct.dr.mouseX) > 0.9:
            t.constrainedDir = 'y'
        else:
            t.constrainedDir = 'x'
        self.__startManipulateCamera(task=t)