quad.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. #########################################################################################################################################
  2. # This file implements a Quad View for the level editor
  3. # This feature is not yet enabled in the level editor because picking objects in quad view doesnt work
  4. # I have tried to send the picking function in seSelection.py the correct camera and mouse coordinates but something seems to be wron
  5. # There are two classes in this file..the QuadView and the viewPort...there are four instances of viewport, one for each view in QuadView
  6. #########################################################################################################################################
  7. from direct.showbase.ShowBaseGlobal import *
  8. from direct.interval.IntervalGlobal import *
  9. from direct.showbase import DirectObject
  10. import math
  11. #Manakel 2/12/2005: replace from pandac import by from pandac.PandaModules import
  12. from pandac.PandaModules import MouseWatcher
  13. class ViewPort:
  14. #########################################################################################################################################
  15. # The ViewPort class has the camera and associated display region set up for actually rendering the four sub-views
  16. # The constructor needs the bounds, window layer, camera, color, projection type, name and scene for the view
  17. #########################################################################################################################################
  18. def __init__(self,X1,X2,Y1,Y2,layer,cam,background=Vec4(0.3,0.3,0.3,1),projection="perspective",type="top",scene=render):
  19. self.VPType=type
  20. self.VP_X1=X1
  21. self.VP_Y1=Y1
  22. self.VP_X2=X2
  23. self.VP_Y2=Y2
  24. self.VP_width=self.VP_X2 - self.VP_X1
  25. self.VP_height=self.VP_Y2 - self.VP_Y1
  26. self.the_viewport=layer.makeDisplayRegion(self.VP_X1, self.VP_X2,self.VP_Y1, self.VP_Y2)
  27. self.the_viewport.setCamera(cam)
  28. self.the_viewport.setClearDepthActive(1)
  29. self.the_viewport.setClearColorActive(1)
  30. self.the_viewport.setClearColor(background)
  31. self.cam=cam
  32. # Set up the cameras to look in the right place.
  33. if(type=="top"):
  34. self.cam.setP(-90)
  35. self.cam.setZ(-40)
  36. elif(type=="left"):
  37. self.cam.setH(-90)
  38. self.cam.setX(10)
  39. elif(type=="front"):
  40. self.cam.setY(-10)
  41. elif(type=="perspective"):
  42. cam.setY(-100)
  43. #cam.setX(10)
  44. #cam.setZ(-10)
  45. #cam.setH(45)
  46. #cam.setP(-45)
  47. #print "aa"
  48. if(projection=="ortho"):
  49. self.lens=OrthographicLens()
  50. self.lens.setAspectRatio((self.VP_X2-self.VP_X1)/(self.VP_Y2-self.VP_Y1))
  51. self.lens.setFilmSize(self.VP_width*200,self.VP_height*200)
  52. #lens.setFilmOffset((self.VP_X2 + self.VP_X1) * 0.5, (self.VP_Y2 + self.VP_Y1) * 0.5)
  53. self.lens.setNearFar(-1000, 1000)
  54. self.cam.node().setLens(self.lens)
  55. self.cam.node().setScene(scene)
  56. elif(projection=="perspective"):
  57. self.lens=base.cam.node().getLens()
  58. self.lens.setAspectRatio((self.VP_X2-self.VP_X1)/(self.VP_Y2-self.VP_Y1))
  59. self.cam.node().setLens(self.lens)
  60. self.cam.node().setScene(scene)
  61. self.the_viewport.setCamera(self.cam)
  62. def resizeX(self,width_increment):
  63. if(self.VPType=="top" or self.VPType=="left"):
  64. self.the_viewport.setDimensions(self.VP_X1,self.VP_X2+width_increment,self.VP_Y1,self.VP_Y2)
  65. elif(self.VPType=="perspective" or self.VPType=="front"):
  66. self.the_viewport.setDimensions(self.VP_X1+width_increment,self.VP_X2,self.VP_Y1,self.VP_Y2)
  67. def resizeY(self,height_increment,direction):
  68. if(self.VPType=="left" or self.type=="perspective"):
  69. self.the_viewport.setDimensions(self.VP_X1,self.VP_X2,self.VP_Y1,self.VP_Y2+height_increment)
  70. else:
  71. self.the_viewport.setDimensions(self.VP_X1,self.VP_X2,self.VP_Y1+height_increment,self.VP_Y2)
  72. def AdjustAspect(self,x,y):
  73. if (y==0):
  74. y=1
  75. self.lens.setAspectRatio(x/y)
  76. self.cam.node().setLens(self.lens)
  77. def resize(self,x,y):
  78. if(self.VPType=="left"):
  79. self.the_viewport.setDimensions(0,x,0,y)
  80. w=abs(x-self.VP_X1)
  81. h=abs(y-self.VP_Y1)
  82. if(h==0):
  83. h=1
  84. self.lens.setAspectRatio(w/h)
  85. self.cam.node().setLens(self.lens)
  86. if(self.VPType=="top"):
  87. self.the_viewport.setDimensions(0,x,y,1)
  88. w=abs(x-self.VP_X1)
  89. h=abs(self.VP_Y2-y)
  90. if(h==0):
  91. h=1
  92. self.lens.setAspectRatio(w/h)
  93. self.cam.node().setLens(self.lens)
  94. if(self.VPType=="front"):
  95. self.the_viewport.setDimensions(x,1,y,1)
  96. w=abs(self.VP_X2-x)
  97. h=abs(self.VP_Y2-y)
  98. if(h==0):
  99. h=1
  100. self.lens.setAspectRatio(w/h)
  101. self.cam.node().setLens(self.lens)
  102. if(self.VPType=="perspective"):
  103. self.the_viewport.setDimensions(x,1,0,y)
  104. w=abs(self.VP_X2-x)
  105. h=abs(y-self.VP_Y1)
  106. if(h==0):
  107. h=1
  108. self.lens.setAspectRatio(w/h)
  109. self.cam.node().setLens(self.lens)
  110. def setScene(self,scene):
  111. self.cam.node().setScene(scene)
  112. def setDR(self,mouseWatcher):
  113. #mouseWatcher.setDisplayRegion(self.the_viewport)
  114. pass
  115. def setCam(self):
  116. #base.cam=self.cam
  117. #base.cam.node().setLens(self.cam.node().getLens())
  118. base.camNode=self.cam.node()
  119. #base.camNode.setLens(self.cam.node().getLens())
  120. #base.camLens=self.cam.node().getLens()
  121. def getCam(self):
  122. return self.cam
  123. class QuadView(DirectObject.DirectObject):
  124. #########################################################################################################################################
  125. # This class sets up four cameras for the scene (ideally we want four instances of render too)
  126. # and then instatiates a ViewPort class for each of them
  127. #
  128. #########################################################################################################################################
  129. def __init__(self):
  130. self.PTracker=1
  131. self.ControlPressed=0
  132. self.AltPressed=0
  133. self.PanConstantX=50
  134. self.PanConstantY=50
  135. self.ZoomConstant=1
  136. self.FrontWidth=100
  137. self.FrontHeight=100
  138. self.TopWidth=100
  139. self.TopHeight=100
  140. self.LeftWidth=100
  141. self.LeftHeight=100
  142. self.MouseButton=0
  143. self.CurrentQuad=4
  144. self.HorizontalAxis=0.0
  145. self.VerticalAxis=0.0
  146. #base.disableMouse()
  147. self.MouseDragging=0
  148. self.currX= 0
  149. self.oldX=self.currX
  150. self.currY= 0
  151. self.oldY=self.currY
  152. self.FrontTexture=1
  153. self.LeftTexture=1
  154. self.PerspectiveTexture=1
  155. self.TopTexture=1
  156. self.FrontWire=0
  157. self.LeftWire=0
  158. self.PerspectiveWire=0
  159. self.TopWire=0
  160. # Keep track of the currently selected window... values are 1-4 for four quadrants of a standard
  161. # Cartesian coordinate system
  162. # These are the orthographic cameras
  163. # They will be restricted to panning and zooming i.e. no rotation
  164. # Top could be flipped to back, left to right and front to back
  165. self.topCam= render.attachNewNode(Camera('topCam'))
  166. self.frontCam = render.attachNewNode(Camera('frontCam'))
  167. self.leftCam= render.attachNewNode(Camera('leftCam'))
  168. # This camera will have a trackball control since its perspective
  169. self.perspectiveCam = render.attachNewNode(Camera('perspectiveCam'))
  170. #self.toplens=OrthographicLens()
  171. #self.leftLens=OrthographicLens()
  172. #self.frontLens=OrthographicLens()
  173. #self.perspectiveLens=base.cam.node().getLens()
  174. # For now all lenses are same as that of base.cam
  175. #self.topCamLens=OrthographicLens()
  176. #self.frontCamLens= base.cam.node().getLens()
  177. #self.leftCamLens= base.cam.node().getLens()
  178. #self.perspectiveCamLens= base.cam.node().getLens()
  179. # Manipulate lenses here if need be
  180. #self.topCamLens.setFilmSize(250)
  181. # Set the Lenses
  182. #self.topCam.node().setLens(self.topCamLens)
  183. #self.frontCam.node().setLens(self.frontCamLens)
  184. #self.leftCam.node().setLens(self.leftCamLens)
  185. #self.perspectiveCam.node().setLens(self.perspectiveCamLens)
  186. #self.badwiz = loader.loadModel('badwizard1')
  187. #self.badwiz.reparentTo(render)
  188. # Create four separate display regions for the quad view.
  189. # These will overlap the main display region
  190. # To stack these overlapping DisplayRegions, we need a new layer. If
  191. # they didn't overlap, we could put them in the same layer.
  192. self.newLayer = base.win.getChannel(0).makeLayer()
  193. self.PerspectiveScene=NodePath('PerspectiveScene')
  194. self.FrontScene=NodePath('FrontScene')
  195. self.TopScene=NodePath('TopScene')
  196. self.LeftScene=NodePath('LeftScene')
  197. self.SceneParent=NodePath('SceneParent')
  198. #self.PerspectiveScene=render.copyTo(self.SceneParent)
  199. #self.FrontScene=render.copyTo(self.SceneParent)
  200. #self.TopScene=render.copyTo(self.SceneParent)
  201. #self.LeftScene=render.copyTo(self.SceneParent)
  202. self.PerspectiveScene=render
  203. self.FrontScene=render
  204. self.TopScene=render
  205. self.LeftScene=render
  206. #self.PerspectiveScene.reparentTo(self.SceneParent)
  207. #self.FrontScene.reparentTo(self.SceneParent)
  208. #self.TopScene.reparentTo(self.SceneParent)
  209. #self.LeftScene.reparentTo(self.SceneParent)
  210. self.Perspective=ViewPort(0.5,1.0,0.0,0.5,self.newLayer,self.perspectiveCam,Vec4(0.75,0.75,0.75,1),"perspective","perspective",self.PerspectiveScene)
  211. self.Top=ViewPort(0.0,0.5,0.5,1.0,self.newLayer,self.topCam,Vec4(0.80,0.80,0.80,1),"ortho","top",self.TopScene)
  212. self.Left=ViewPort(0.0,0.5,0.0,0.5,self.newLayer,self.leftCam,Vec4(0.85,0.85,0.85,1),"ortho","left",self.LeftScene)
  213. self.Front=ViewPort(0.5,1.0,0.5,1.0,self.newLayer,self.frontCam,Vec4(0.85,0.85,0.85,1),"ortho","front",self.FrontScene)
  214. #self.Perspective=None
  215. #self.Top=None
  216. #self.Front=None
  217. #self.Left=None
  218. #self.raycaster = RayCaster( camera )
  219. #self.lastPickPoint = None
  220. #base.useTrackball()
  221. #self.dataRoot = NodePath('dataRoot')
  222. # Cache the node so we do not ask for it every frame
  223. #self.dataRootNode = self.dataRoot.node()
  224. #self.dataUnused = NodePath('dataUnused')
  225. #self.mak=None
  226. #self.mak = self.dataRoot.attachNewNode(MouseAndKeyboard(base.win, 0, 'mak'))
  227. #self.mak.node().setSource(base.win, 0)
  228. self.mouseWatcherNode = MouseWatcher('mouseWatcher')
  229. self.mouseWatcher = base.mak.attachNewNode(self.mouseWatcherNode)
  230. #self.Perspective.setDR(self.mouseWatcherNode)
  231. self.buttonThrower = self.mouseWatcher.attachNewNode(ButtonThrower('buttons'))
  232. #ddr=DisplayRegionContext(self.Perspective.getCam())
  233. #base.setMouseOnNode(self.smiley.node()) # Let Mouse Control Perspective View for now
  234. #base.enableSoftwareMousePointer()
  235. # Message Handlers
  236. self.accept("a",self.setLeft)
  237. self.accept("q",self.setTop)
  238. self.accept("w",self.setFront)
  239. self.accept("s",self.setPerspective)
  240. self.accept("mouse1",self.MouseTell,[1])
  241. self.accept("mouse2",self.MouseTell,[2])
  242. self.accept("mouse3",self.MouseTell,[3])
  243. self.accept("mouse1-up",self.MouseTellUp,[4])
  244. self.accept("mouse2-up",self.MouseTellUp,[5])
  245. self.accept("mouse3-up",self.MouseTellUp,[6])
  246. self.accept("mouse2-scroll",self.resizedr)
  247. self.accept("r",self.resizedr)
  248. self.accept("alt",self.AltHandler)
  249. self.accept("alt-up",self.AltUpHandler)
  250. self.accept("alt-mouse1",self.AltDown)
  251. self.accept("alt-mouse1-up",self.AltUp)
  252. self.accept("control-mouse1",self.CtlDown)
  253. self.accept("control-mouse1-up",self.CtlUp)
  254. # Methods
  255. #def setLastPickPoint( self ):
  256. # mouseX, mouseY = self.mouseWatcherNode.getMouseX(), self.mouseWatcherNode.getMouseY()
  257. # self.lastPickPoint = self.raycaster.pick( mouseX, mouseY )
  258. # print self.lastPickPoint
  259. def AltDown(self):
  260. self.AltPressed=1
  261. def AltUp(self):
  262. self.AltPressed=0
  263. def CtlDown(self):
  264. self.ControlPressed=1
  265. def CtlUp(self):
  266. self.ControlPressed=0
  267. def ToggleWire(self):
  268. if (self.CurrentQuad==1): # Front View
  269. if(self.FrontWire): # Wireframe is On so turn it off
  270. self.FrontScene.setRenderModeWireframe(100)
  271. self.FrontScene.setTwoSided(1)
  272. self.FrontScene.setTextureOff(100)
  273. self.FrontWire=0
  274. else:
  275. self.FrontScene.clearRenderMode()
  276. #self.FrontScene.setTwoSided(not self.backfaceCullingEnabled)
  277. if(self.FrontTexture):
  278. self.FrontScene.clearTexture()
  279. self.FrontWire=1
  280. elif (self.CurrentQuad==2): # Front View
  281. if(self.TopWire): # Wireframe is On so turn it off
  282. self.TopScene.setRenderModeWireframe(100)
  283. self.TopScene.setTwoSided(1)
  284. self.TopScene.setTextureOff(100)
  285. self.TopWire=0
  286. else:
  287. self.TopScene.clearRenderMode()
  288. #self.TopScene.setTwoSided(not self.backfaceCullingEnabled)
  289. if(self.TopTexture):
  290. self.TopScene.clearTexture()
  291. self.TopWire=1
  292. elif (self.CurrentQuad==3): # Front View
  293. if(self.LeftWire): # Wireframe is On so turn it off
  294. self.LeftScene.setRenderModeWireframe(100)
  295. self.LeftScene.setTwoSided(1)
  296. self.LeftScene.setTextureOff(100)
  297. self.LeftWire=0
  298. else:
  299. self.LeftScene.clearRenderMode()
  300. #self.LeftScene.setTwoSided(not self.backfaceCullingEnabled)
  301. if(self.LeftTexture):
  302. self.LeftScene.clearTexture()
  303. self.LeftWire=1
  304. elif (self.CurrentQuad==4): # Front View
  305. if(self.PerspectiveWire): # Wireframe is On so turn it off
  306. self.PerspectiveScene.setRenderModeWireframe(100)
  307. self.PerspectiveScene.setTwoSided(1)
  308. self.PerspectiveScene.setTextureOff(100)
  309. self.PerspectiveWire=0
  310. else:
  311. self.PerspectiveScene.clearRenderMode()
  312. #self.PerspectiveScene.setTwoSided(not self.backfaceCullingEnabled)
  313. if(self.PerspectiveTexture):
  314. self.PerspectiveScene.clearTexture()
  315. self.PerspectiveWire=1
  316. def ToggleTexture(self):
  317. if (self.CurrentQuad==1): # Front View
  318. if(self.FrontTexture): # Texture is on so turn it off
  319. self.FrontScene.setTextureOff(100)
  320. self.FrontTexture=0
  321. else:
  322. self.FrontScene.clearTexture()
  323. self.FrontTexture=1
  324. elif (self.CurrentQuad==2): # Top View
  325. if(self.TopTexture): # Texture is on so turn it off
  326. self.TopScene.setTextureOff(100)
  327. self.TopTexture=0
  328. else:
  329. self.TopScene.clearTexture()
  330. self.TopTexture=1
  331. elif (self.CurrentQuad==3): # Left View
  332. if(self.LeftTexture): # Texture is on so turn it off
  333. self.LeftScene.setTextureOff(100)
  334. self.LeftTexture=0
  335. else:
  336. self.LeftScene.clearTexture()
  337. self.LeftTexture=1
  338. elif (self.CurrentQuad==4): # Perspective View
  339. if(self.PerspectiveTexture): # Texture is on so turn it off
  340. self.PerspectiveScene.setTextureOff(100)
  341. self.PerspectiveTexture=0
  342. else:
  343. self.PerspectiveScene.clearTexture()
  344. self.PerspectiveTexture=1
  345. def reparenter(self):
  346. #self.FrontScene.reparentTo(render)
  347. #self.Front.setScene(render)
  348. #self.Top.setScene(render)
  349. #self.Left.setScene(render)
  350. #self.Perspective.setScene(render)
  351. pass
  352. def unparenter(self):
  353. #self.PerspectiveScene=render.copyTo(render)
  354. #self.FrontScene=render.copyTo(render)
  355. #self.TopScene=render.copyTo(render)
  356. #self.LeftScene=render.copyTo(render)
  357. #self.SceneParent.reparentTo(render)
  358. #self.PerspectiveScene.reparentTo(self.SceneParent)
  359. #self.FrontScene.reparentTo(self.SceneParent)
  360. #self.TopScene.reparentTo(self.SceneParent)
  361. #self.LeftScene.reparentTo(self.SceneParent)
  362. pass
  363. def AltHandler(self):
  364. self.oldX=self.mouseWatcherNode.getMouseX()
  365. if(self.oldX<-1 or self.oldX>1):
  366. return
  367. self.oldY=self.mouseWatcherNode.getMouseY()
  368. if(self.oldY<-1 or self.oldY>1):
  369. return
  370. taskMgr.add(self.DragAction,'DragAction')
  371. def AltUpHandler(self):
  372. taskMgr.remove('DragAction')
  373. def gridtoggle(self):
  374. #grid=DirectGrid()
  375. #grid.enable()
  376. pass
  377. def resizedr(self,x,y):
  378. #print "X: " + str(x) + " Y: " + str(y)
  379. x=(x+1)/2.0
  380. y=(y+1)/2.0
  381. self.Perspective.resize(x,y)
  382. self.Top.resize(x,y)
  383. self.Front.resize(x,y)
  384. self.Left.resize(x,y)
  385. def setAppropriateViewPort(self,x,y):
  386. #print "SET APPROPRIATE:" + str(x) + " " + str(y)
  387. if(x<self.VerticalAxis):
  388. if(y<self.HorizontalAxis):
  389. self.setLeft()
  390. else:
  391. self.setTop()
  392. else:
  393. if(y<self.HorizontalAxis):
  394. self.setPerspective()
  395. else:
  396. self.setFront()
  397. def MouseTell(self,buttonCode):
  398. self.MouseButton=buttonCode
  399. self.setAppropriateViewPort(self.mouseWatcherNode.getMouseX(),self.mouseWatcherNode.getMouseY())
  400. x=base.mouseWatcherNode.getMouseX()
  401. y=base.mouseWatcherNode.getMouseY()
  402. #Perspective and Front
  403. if(self.CurrentQuad==4 or self.CurrentQuad==1):
  404. x1=abs(x-self.VerticalAxis)
  405. w1=abs(1-self.VerticalAxis)
  406. x2=x1*2.0/w1
  407. ansX=-1+x2
  408. #Left and top
  409. if(self.CurrentQuad==2 or self.CurrentQuad==3):
  410. x1=abs(x-(-1.0))
  411. w1=abs(self.VerticalAxis-(-1.0))
  412. x2=x1*2.0/w1
  413. ansX=-1.0+x2
  414. #Left and Perspective
  415. if(self.CurrentQuad==4 or self.CurrentQuad==3):
  416. y1=abs(y-(-1.0))
  417. h1=abs(self.HorizontalAxis-(-1.0))
  418. y2=y1*2.0/h1
  419. ansY=-1.0+y2
  420. #Front and top
  421. if(self.CurrentQuad==1 or self.CurrentQuad==2):
  422. y1=abs(y-self.HorizontalAxis)
  423. h1=abs(1.0-self.HorizontalAxis)
  424. y2=y1*2.0/h1
  425. ansY=-1.0+y2
  426. self.xy=[ansX,ansY]
  427. print "Sent X:%f Sent Y:%f"%(ansX,ansY)
  428. #SEditor.iRay.pick(render,self.xy)
  429. SEditor.manipulationControl.manipulationStop(self.xy)
  430. #print "MouseX " + str(base.mouseWatcherNode.getMouseX()) + "MouseY " + str(base.mouseWatcherNode.getMouseY()) + "\n"
  431. #print "MouseX " + str(self.mouseWatcherNode.getMouseX()) + "MouseY " + str(self.mouseWatcherNode.getMouseY()) + "\n"
  432. base.mouseWatcherNode=self.mouseWatcherNode
  433. self.oldX=self.mouseWatcherNode.getMouseX()
  434. if(self.oldX<-1 or self.oldX>1):
  435. return
  436. self.oldY=self.mouseWatcherNode.getMouseY()
  437. if(self.oldY<-1 or self.oldY>1):
  438. return
  439. self.Mouse_Dragging=1
  440. taskMgr.add(self.DragAction,'DragAction')
  441. def MouseTellUp(self,buttoncode):
  442. #self.MouseButton=0
  443. self.PanConstantX= 50
  444. self.PanConstantY= 50
  445. self.ZoomConstant=1
  446. taskMgr.remove('DragAction')
  447. self.Mouse_Draggin=0
  448. #print "Mouse Up"
  449. def Max_Style_Mouse_View(self,buttoncode):
  450. pass
  451. def ChangeBaseDR(self):
  452. dr=base.win.getDisplayRegion(0)
  453. if(self.CurrentQuad==1): #Front
  454. dr.setDimensions(0.5,1,0.5,1)
  455. elif(self.CurrentQuad==2): #Top
  456. dr.setDimensions(0,0.5,0.5,1)
  457. elif(self.CurrentQuad==3): #Left
  458. dr.setDimensions(0,0.5,0,0.5)
  459. elif(self.CurrentQuad==4): #Perspective
  460. dr.setDimensions(0.5,1,0,0.5)
  461. def setLeft(self):
  462. print "LEFT"
  463. self.CurrentQuad=3
  464. self.ChangeBaseDR()
  465. self.Left.setCam()
  466. #self.Left.setDR(self.mouseWatcherNode)
  467. def setTop(self):
  468. print "TOP"
  469. self.CurrentQuad=2
  470. self.ChangeBaseDR()
  471. self.Top.setCam()
  472. #self.Top.setDR(self.mouseWatcherNode)
  473. def setPerspective(self):
  474. print "PERSPECTIVE"
  475. self.CurrentQuad=4
  476. self.ChangeBaseDR()
  477. self.Perspective.setCam()
  478. #self.Perspective.setDR(self.mouseWatcherNode)
  479. def setFront(self):
  480. print "FRONT"
  481. self.CurrentQuad=1
  482. self.ChangeBaseDR()
  483. self.Front.setCam()
  484. #self.Front.setDR(self.mouseWatcherNode)
  485. def DragAction(self,task):
  486. #if(self.MouseDragging==1):
  487. self.currX= self.mouseWatcherNode.getMouseX()
  488. if(self.currX<-1 or self.currX>1):
  489. return
  490. self.currY= self.mouseWatcherNode.getMouseY()
  491. if(self.currY<-1 or self.currY>1):
  492. return
  493. self.diffX=self.currX-self.oldX
  494. self.diffY=self.currY-self.oldY
  495. if(self.ControlPressed): # Change Size of the ViewPorts
  496. #if(base.getControl()):
  497. self.VerticalAxis=self.currX
  498. self.HorizontalAxis=self.currY
  499. if(self.HorizontalAxis<-1 or self.HorizontalAxis>1 or self.VerticalAxis<-1 or self.VerticalAxis>1):
  500. return
  501. self.resizedr(self.VerticalAxis,self.HorizontalAxis)
  502. #if(self.AltPressed): # View Camera Transforms -> Maya style
  503. elif(1):
  504. #print "ALTPRESSED"
  505. if(self.PanConstantX<4096):
  506. self.PanConstantX= self.PanConstantX * 2
  507. self.PanConstantY= self.PanConstantY * 2
  508. self.ZoomConstant= self.ZoomConstant + 50
  509. if(self.MouseButton==1): # TrackBall rotation only for Perspective View
  510. if(self.CurrentQuad==4):
  511. pass
  512. elif(self.MouseButton==2): # Do Panning
  513. if(self.CurrentQuad==1): # Y and Z values change meanings for different cameras
  514. self.MoveCamera(-self.diffX*self.PanConstantX,0,-self.diffY*self.PanConstantY,self.CurrentQuad)
  515. elif(self.CurrentQuad==2):
  516. self.MoveCamera(-self.diffX*self.PanConstantX,-self.diffY*self.PanConstantY,0,self.CurrentQuad)
  517. elif(self.CurrentQuad==3):
  518. self.MoveCamera(0,self.diffX*self.PanConstantX,-self.diffY*self.PanConstantY,self.CurrentQuad)
  519. elif(self.CurrentQuad==4):
  520. pass
  521. elif(self.MouseButton==3): # Do Zoom
  522. if(self.CurrentQuad==1): # Y and Z values change meanings for different cameras
  523. #lens = OrthographicLens()
  524. #lens.setFilmSize(l,self.VP_height*200)
  525. #lens.setFilmOffset((self.VP_X2 + self.VP_X1) * 0.5, (self.VP_Y2 + self.VP_Y1) * 0.5)
  526. #lens.setNearFar(-1000, 1000)
  527. self.FrontWidth= self.FrontWidth + self.diffX
  528. self.FrontHeight= self.FrontHeight + self.diffX
  529. self.FrontWidth= self.FrontWidth + self.diffY
  530. self.FrontHeight= self.FrontHeight + self.diffY
  531. if(self.FrontWidth<=0):
  532. Frontwidth=1
  533. if(self.FrontHeight<=0):
  534. FrontHeight=1
  535. self.frontCam.node().getLens().setFilmSize(self.FrontWidth,self.FrontHeight)
  536. self.resizedr(self.VerticalAxis,self.HorizontalAxis)
  537. elif(self.CurrentQuad==2):
  538. self.TopWidth= self.TopWidth + self.diffX
  539. self.TopHeight= self.TopHeight + self.diffX
  540. self.TopWidth= self.TopWidth + self.diffY
  541. self.TopHeight= self.TopHeight + self.diffY
  542. self.topCam.node().getLens().setFilmSize(self.TopWidth,self.TopHeight)
  543. self.resizedr(self.VerticalAxis,self.HorizontalAxis)
  544. elif(self.CurrentQuad==3):
  545. self.LeftWidth= self.LeftWidth + self.diffX
  546. self.LeftHeight= self.LeftHeight + self.diffX
  547. self.LeftWidth= self.LeftWidth + self.diffY
  548. self.LeftHeight= self.LeftHeight + self.diffY
  549. self.leftCam.node().getLens().setFilmSize(self.LeftWidth,self.LeftHeight)
  550. self.resizedr(self.VerticalAxis,self.HorizontalAxis)
  551. elif(self.CurrentQuad==4):
  552. pass
  553. else:
  554. pass
  555. self.oldX=self.currX
  556. self.oldY=self.currY
  557. return Task.cont
  558. def MoveCamera(self,X_amt,Y_amt,Z_amt,quad):
  559. if(quad==1):
  560. self.frontCam.setPos(self.frontCam.getX()+X_amt,self.frontCam.getY()+Y_amt,self.frontCam.getZ()+Z_amt)
  561. elif(quad==2):
  562. self.topCam.setPos(self.topCam.getX()+X_amt,self.topCam.getY()+Y_amt,self.topCam.getZ()+Z_amt)
  563. elif(quad==3):
  564. self.leftCam.setPos(self.leftCam.getX()+X_amt,self.leftCam.getY()+Y_amt,self.leftCam.getZ()+Z_amt)
  565. elif(quad==4):
  566. self.perspectiveCam.setPos(self.perspectiveCam.getX()+X_amt,self.perspectiveCam.getY()+Y_amt,self.perspectiveCam.getZ()+Z_amt)
  567. #View=QuadView()
  568. #run()