| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #################################################################
- # duplicateWindow.py
- # Written by Yi-Hong Lin, [email protected], 2004
- #################################################################
- from direct.tkwidgets.AppShell import *
- from direct.showbase.TkGlobal import *
- import seSceneGraphExplorer
- class duplicateWindow(AppShell):
- #################################################################
- # duplicateWindow(AppShell)
- # This class is used to create a dialog window
- # for handling the "dupicate" command from the sceneEditor
- #
- # Notice!
- # The actual duplicating process is not happending here!
- # The one handle the process is dataHolder...
- #################################################################
- appversion = '1.0'
- appname = 'Duplication'
- frameWidth = 450
- frameHeight = 320
- frameIniPosX = 250
- frameIniPosY = 250
- padx = 0
- pady = 0
-
- def __init__(self, parent = None, nodePath = None, **kw):
- # Define the megawidget options.
- optiondefs = (
- ('title', self.appname, None),
- )
- self.defineoptions(kw, optiondefs)
- if parent == None:
- self.parent = Toplevel()
- AppShell.__init__(self, self.parent)
- self.parent.geometry('%dx%d+%d+%d' % (self.frameWidth, self.frameHeight,self.frameIniPosX,self.frameIniPosY))
- self.nodePath = nodePath
- self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
-
- def appInit(self):
- print '----SideWindow is Initialized!!'
-
- def createInterface(self):
- # The interior of the toplevel panel
- interior = self.interior()
- mainFrame = Frame(interior)
- self.inputZone = Pmw.Group(mainFrame, tag_text='Offset setting')
- self.inputZone.pack(fill='both',expand=1)
- settingFrame = self.inputZone.interior()
- Label(settingFrame,text=' X ').place(anchor=NW,x=110,y=15)
- Label(settingFrame,text=' Y ').place(anchor=NW,x=205,y=15)
- Label(settingFrame,text=' Z ').place(anchor=NW,x=295,y=15)
- self.move_x = Pmw.EntryField(settingFrame,label_text='Move :',labelpos='w',value='0.0', validate=Pmw.realvalidator)
- self.move_x.component('entry').config(width=10)
- self.move_y = Pmw.EntryField(settingFrame,value='0.0', validate=Pmw.realvalidator)
- self.move_y.component('entry').config(width=10)
- self.move_z = Pmw.EntryField(settingFrame, value='0.0', validate=Pmw.realvalidator)
- self.move_z.component('entry').config(width=10)
- self.move_x.place(anchor=NW,x=50,y=40)
- self.move_y.place(anchor=NW,x=185,y=40)
- self.move_z.place(anchor=NW,x=275,y=40)
- self.rotate_x = Pmw.EntryField(settingFrame,label_text='Rotate:',labelpos='w',value='0.0', validate=Pmw.realvalidator)
- self.rotate_x.component('entry').config(width=10)
- self.rotate_y = Pmw.EntryField(settingFrame,value='0.0', validate=Pmw.realvalidator)
- self.rotate_y.component('entry').config(width=10)
- self.rotate_z = Pmw.EntryField(settingFrame, value='0.0', validate=Pmw.realvalidator)
- self.rotate_z.component('entry').config(width=10)
- self.rotate_x.place(anchor=NW,x=50,y=70)
- self.rotate_y.place(anchor=NW,x=185,y=70)
- self.rotate_z.place(anchor=NW,x=275,y=70)
- self.scale_x = Pmw.EntryField(settingFrame,label_text='Scale :',labelpos='w',value='1.0', validate=Pmw.realvalidator)
- self.scale_x.component('entry').config(width=10)
- self.scale_y = Pmw.EntryField(settingFrame,value='1.0', validate=Pmw.realvalidator)
- self.scale_y.component('entry').config(width=10)
- self.scale_z = Pmw.EntryField(settingFrame, value='1.0', validate=Pmw.realvalidator)
- self.scale_z.component('entry').config(width=10)
- self.scale_x.place(anchor=NW,x=52,y=100)
- self.scale_y.place(anchor=NW,x=185,y=100)
- self.scale_z.place(anchor=NW,x=275,y=100)
- self.numberOfCopy = Pmw.EntryField(settingFrame,label_text='Number of Copy :',labelpos='w',value='1', validate=Pmw.integervalidator)
- self.numberOfCopy.component('entry').config(width=15)
- self.numberOfCopy.place(anchor=NW,x=52,y=150)
-
- settingFrame.pack(fill=BOTH,expand=1,padx=7,pady=7)
- self.button_ok = Button(mainFrame, text="OK", command=self.ok_press,width=10)
- self.button_ok.pack(fill=BOTH,expand=0,side=RIGHT)
-
- mainFrame.pack(fill = 'both', expand = 1,padx=7,pady=7)
-
- def createMenuBar(self):
- self.menuBar.destroy()
-
- def onDestroy(self, event):
- messenger.send('DW_close')
- '''
- If you have open any thing, please rewrite here!
- '''
- pass
- ###############################
-
- def ok_press(self):
- #################################################################
- # ok_press(self)
- # Callback function
- # This function will be called when user click on the "OK" button on the window.
- # After collect all data we need for the duplication process,
- # this function will send out a message with all data.
- # 'DW_duplicating'
- # This message will be caught by sceneEditor.
- #################################################################
- if not self.allEntryValid():
- print '---- Duplication Window: Invalid value!!'
- return
- x = self.move_x.getvalue()
- y = self.move_y.getvalue()
- z = self.move_z.getvalue()
- pos=Vec3(FloatType(x),FloatType(y),FloatType(z))
- x = self.rotate_x.getvalue()
- y = self.rotate_y.getvalue()
- z = self.rotate_z.getvalue()
- hpr=Vec3(FloatType(x),FloatType(y),FloatType(z))
- x = self.scale_x.getvalue()
- y = self.scale_y.getvalue()
- z = self.scale_z.getvalue()
- scale=Vec3(FloatType(x),FloatType(y),FloatType(z))
- num = int(self.numberOfCopy.getvalue())
- messenger.send('DW_duplicating',[self.nodePath,pos,hpr,scale,num])
- self.quit()
- def allEntryValid(self):
- #################################################################
- # allEntryValid(self)
- # This function is used to check all data in the input entries are valid.
- #
- # For example, none of entries contains blank data.
- #
- #################################################################
- if not self.move_x.valid():
- return False
- elif not self.move_y.valid():
- return False
- elif not self.move_z.valid():
- return False
- elif not self.rotate_x.valid():
- return False
- elif not self.rotate_y.valid():
- return False
- elif not self.rotate_z.valid():
- return False
- elif not self.scale_x.valid():
- return False
- elif not self.scale_y.valid():
- return False
- elif not self.scale_z.valid():
- return False
- elif not self.numberOfCopy.valid():
- return False
- return True
|