mirror of
				https://github.com/panda3d/panda3d.git
				synced 2025-11-04 04:25:42 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			189 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#################################################################
 | 
						|
# AlignTool.py
 | 
						|
# Written by Yi-Hong Lin, yihhongl@andrew.cmu.edu, 2004
 | 
						|
#################################################################
 | 
						|
from direct.tkwidgets.AppShell import *
 | 
						|
from direct.showbase.TkGlobal import *
 | 
						|
 | 
						|
 | 
						|
class AlignTool(AppShell):
 | 
						|
    #################################################################
 | 
						|
    # AlignTool(AppShell)
 | 
						|
    #################################################################
 | 
						|
    appversion      = '1.0'
 | 
						|
    appname         = 'Align Tool'
 | 
						|
    frameWidth      = 220
 | 
						|
    frameHeight     = 330
 | 
						|
    frameIniPosX    = 250
 | 
						|
    frameIniPosY    = 250
 | 
						|
    padx            = 0
 | 
						|
    pady            = 0
 | 
						|
 | 
						|
    
 | 
						|
    def __init__(self, list = [], parent = None, nodePath = None, **kw):
 | 
						|
        # Keep nodePath Data
 | 
						|
        self.nodePath = nodePath
 | 
						|
        self.targetList = list
 | 
						|
        self.targetName = None
 | 
						|
        # Rename App
 | 
						|
        self.appname += (' '+self.nodePath.getName())
 | 
						|
        # 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.initialiseoptions(AlignTool)
 | 
						|
        
 | 
						|
        self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
 | 
						|
        
 | 
						|
    def appInit(self):
 | 
						|
        return
 | 
						|
        
 | 
						|
    def createInterface(self):
 | 
						|
        # The interior of the toplevel panel
 | 
						|
        interior = self.interior()
 | 
						|
        mainFrame = Frame(interior)
 | 
						|
        frame = Frame(mainFrame)
 | 
						|
        self.nameBox = self.createcomponent(
 | 
						|
            'Align Target', (), None,
 | 
						|
            Pmw.ComboBox, (frame,),
 | 
						|
            labelpos = W, label_text='Target Node:', entry_width = 20, entry_state = DISABLED,
 | 
						|
            selectioncommand = self.setTargetNode,
 | 
						|
            scrolledlist_items = self.targetList)
 | 
						|
        self.nameBox.pack(side=LEFT)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
        group = Pmw.Group(mainFrame, tag_text = 'Setting')
 | 
						|
        group.pack(side=TOP, fill = 'both', expand = 1,pady=5)
 | 
						|
        groupFrame = group.interior()
 | 
						|
        # X and H checkbox
 | 
						|
        frame = Frame(groupFrame)
 | 
						|
        self.alignXVar = IntVar()
 | 
						|
        self.alignXVar.set(False)
 | 
						|
        self.alignXButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Align X',
 | 
						|
            variable = self.alignXVar)
 | 
						|
        self.alignXButton.pack(side=LEFT, expand=False)
 | 
						|
        self.alignHVar = IntVar()
 | 
						|
        self.alignHVar.set(False)
 | 
						|
        self.alignHButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Align H',
 | 
						|
            variable = self.alignHVar)
 | 
						|
        self.alignHButton.pack(side=RIGHT, expand=False)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
        
 | 
						|
        groupFrame.pack(side=TOP, fill = 'both', expand = 1,padx=5,pady=5)
 | 
						|
        
 | 
						|
        frame = Frame(mainFrame)
 | 
						|
        Button(frame, text='Align', width = 13, command=self.Align_press).pack(side=LEFT)
 | 
						|
        Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=RIGHT)
 | 
						|
        frame.pack(side=BOTTOM, fill = X, expand = 1,pady=5)
 | 
						|
        
 | 
						|
        # Y and P checkbox
 | 
						|
        frame = Frame(groupFrame)
 | 
						|
        self.alignYVar = IntVar()
 | 
						|
        self.alignYVar.set(False)
 | 
						|
        self.alignYButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Align Y',
 | 
						|
            variable = self.alignYVar)
 | 
						|
        self.alignYButton.pack(side=LEFT, expand=False)
 | 
						|
        self.alignPVar = IntVar()
 | 
						|
        self.alignPVar.set(False)
 | 
						|
        self.alignPButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Align P',
 | 
						|
            variable = self.alignPVar)
 | 
						|
        self.alignPButton.pack(side=RIGHT, expand=False)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
 | 
						|
        # Z and R checkbox
 | 
						|
        frame = Frame(groupFrame)
 | 
						|
        self.alignZVar = IntVar()
 | 
						|
        self.alignZVar.set(False)
 | 
						|
        self.alignZButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Align Z',
 | 
						|
            variable = self.alignZVar)
 | 
						|
        self.alignZButton.pack(side=LEFT, expand=False)
 | 
						|
        self.alignRVar = IntVar()
 | 
						|
        self.alignRVar.set(False)
 | 
						|
        self.alignRButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Align R',
 | 
						|
            variable = self.alignRVar)
 | 
						|
        self.alignRButton.pack(side=RIGHT, expand=False)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
 | 
						|
        # Scale
 | 
						|
        frame = Frame(groupFrame)
 | 
						|
        Label(frame,text='Align Scale:').pack(side=LEFT)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
        frame = Frame(groupFrame)
 | 
						|
        self.alignSXVar = IntVar()
 | 
						|
        self.alignSXVar.set(False)
 | 
						|
        self.alignSXButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': X',
 | 
						|
            variable = self.alignSXVar)
 | 
						|
        self.alignSXButton.pack(side=LEFT, expand=False)
 | 
						|
        self.alignSYVar = IntVar()
 | 
						|
        self.alignSYVar.set(False)
 | 
						|
        self.alignSYButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Y',
 | 
						|
            variable = self.alignSYVar)
 | 
						|
        self.alignSYButton.pack(side=LEFT, expand=False)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
        self.alignSZVar = IntVar()
 | 
						|
        self.alignSZVar.set(False)
 | 
						|
        self.alignSZButton = Checkbutton(
 | 
						|
            frame,
 | 
						|
            text = ': Z',
 | 
						|
            variable = self.alignSZVar)
 | 
						|
        self.alignSZButton.pack(side=LEFT, expand=False)
 | 
						|
        frame.pack(side=TOP, fill = X, expand = 1,pady=5)
 | 
						|
        
 | 
						|
        
 | 
						|
        mainFrame.pack(fill = 'both', expand = 1,padx=7,pady=7)
 | 
						|
 | 
						|
    
 | 
						|
    def createMenuBar(self):
 | 
						|
        self.menuBar.destroy()
 | 
						|
        
 | 
						|
    def onDestroy(self, event):
 | 
						|
        messenger.send('ALW_close', [self.nodePath.getName()])
 | 
						|
        '''
 | 
						|
        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.
 | 
						|
        #################################################################
 | 
						|
        self.quit()
 | 
						|
 | 
						|
    def Align_press(self):
 | 
						|
        list = [self.alignXVar.get(), self.alignYVar.get(), self.alignZVar.get(),
 | 
						|
                self.alignHVar.get(), self.alignPVar.get(), self.alignRVar.get(),
 | 
						|
                self.alignSXVar.get(), self.alignSYVar.get(), self.alignSZVar.get()]
 | 
						|
        if self.targetName != None:
 | 
						|
            messenger.send('ALW_align', [self.nodePath, self.targetName, list])
 | 
						|
        return
 | 
						|
 | 
						|
    def setTargetNode(self,name=None):
 | 
						|
        self.targetName = name
 | 
						|
        return
 | 
						|
 |