quad.py 26 KB

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