quad.py 26 KB

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