Made new object will be created at the cursor position

This commit is contained in:
Gyedo Jeon 2010-02-10 23:05:04 +00:00
parent ced029315a
commit a8e3a84af8

View File

@ -4,6 +4,7 @@ from wx.lib.agw import fourwaysplitter as FWS
from pandac.PandaModules import *
from direct.wxwidgets.WxAppShell import *
from direct.directtools.DirectSelection import SelectionRay
from ViewPort import *
from ObjectPaletteUI import *
@ -15,14 +16,44 @@ from ProtoPaletteUI import *
from ActionMgr import *
class PandaTextDropTarget(wx.TextDropTarget):
def __init__(self, editor):
def __init__(self, editor, view):
wx.TextDropTarget.__init__(self)
self.editor = editor
self.view = view
def OnDropText(self, x, y, text):
# create new object
action = ActionAddNewObj(self.editor, text)
self.editor.actionMgr.push(action)
newobj = action()
# change window coordinate to mouse coordinate
mx = 2 * (x/float(self.view.ClientSize.GetWidth()) - 0.5)
my = -2 * (y/float(self.view.ClientSize.GetHeight()) - 0.5)
# create ray from the camera to detect 3d position
iRay = SelectionRay(self.view.camera)
iRay.collider.setFromLens(self.view.camNode, mx, my)
iRay.collideWithGeom()
iRay.ct.traverse(self.view.grid)
entry = iRay.getEntry(0)
hitPt = entry.getSurfacePoint(entry.getFromNodePath())
# create a temp nodePath to get the position
np = hidden.attachNewNode('temp')
np.setPos(self.view.camera, hitPt)
# update temp nodePath's HPR and scale with newobj's
np.setHpr(newobj.getHpr())
np.setScale(newobj.getScale())
# transform newobj to cursor position
obj = self.editor.objectMgr.findObjectByNodePath(newobj)
action = ActionTransformObj(self.editor, obj[OG.OBJ_UID], Mat4(np.getMat()))
self.editor.actionMgr.push(action)
np.remove()
action()
del iRay
class LevelEditorUI(WxAppShell):
""" Class for Panda3D LevelEditor """
@ -112,8 +143,11 @@ class LevelEditorUI(WxAppShell):
self.mainFrame.SplitVertically(self.leftFrame, self.baseFrame, 200)
self.baseFrame.SplitVertically(self.viewFrame, self.rightFrame, 600)
self.viewFrame.SetDropTarget(PandaTextDropTarget(self.editor))
self.topView.SetDropTarget(PandaTextDropTarget(self.editor, self.topView))
self.frontView.SetDropTarget(PandaTextDropTarget(self.editor, self.frontView))
self.leftView.SetDropTarget(PandaTextDropTarget(self.editor, self.leftView))
self.perspView.SetDropTarget(PandaTextDropTarget(self.editor, self.perspView))
self.leftFrame.SetSashGravity(0.5)
self.leftBarUpFrame.SetSashGravity(0.5)
self.rightFrame.SetSashGravity(0.5)