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
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
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()
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)
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)