AlignTool.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #################################################################
  2. # AlignTool.py
  3. # Written by Yi-Hong Lin, [email protected], 2004
  4. #################################################################
  5. from direct.tkwidgets.AppShell import *
  6. from direct.showbase.TkGlobal import *
  7. class AlignTool(AppShell):
  8. #################################################################
  9. # AlignTool(AppShell)
  10. #################################################################
  11. appversion = '1.0'
  12. appname = 'Align Tool'
  13. frameWidth = 220
  14. frameHeight = 330
  15. frameIniPosX = 250
  16. frameIniPosY = 250
  17. padx = 0
  18. pady = 0
  19. def __init__(self, list = [], parent = None, nodePath = None, **kw):
  20. # Keep nodePath Data
  21. self.nodePath = nodePath
  22. self.targetList = list
  23. self.targetName = None
  24. # Rename App
  25. self.appname += (' '+self.nodePath.getName())
  26. # Define the megawidget options.
  27. optiondefs = (
  28. ('title', self.appname, None),
  29. )
  30. self.defineoptions(kw, optiondefs)
  31. if parent == None:
  32. self.parent = Toplevel()
  33. AppShell.__init__(self, self.parent)
  34. self.parent.geometry('%dx%d+%d+%d' % (self.frameWidth, self.frameHeight,self.frameIniPosX,self.frameIniPosY))
  35. self.initialiseoptions(AlignTool)
  36. self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
  37. def appInit(self):
  38. return
  39. def createInterface(self):
  40. # The interior of the toplevel panel
  41. interior = self.interior()
  42. mainFrame = Frame(interior)
  43. frame = Frame(mainFrame)
  44. self.nameBox = self.createcomponent(
  45. 'Align Target', (), None,
  46. Pmw.ComboBox, (frame,),
  47. labelpos = W, label_text='Target Node:', entry_width = 20, entry_state = DISABLED,
  48. selectioncommand = self.setTargetNode,
  49. scrolledlist_items = self.targetList)
  50. self.nameBox.pack(side=LEFT)
  51. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  52. group = Pmw.Group(mainFrame, tag_text = 'Setting')
  53. group.pack(side=TOP, fill = 'both', expand = 1,pady=5)
  54. groupFrame = group.interior()
  55. # X and H checkbox
  56. frame = Frame(groupFrame)
  57. self.alignXVar = IntVar()
  58. self.alignXVar.set(False)
  59. self.alignXButton = Checkbutton(
  60. frame,
  61. text = ': Align X',
  62. variable = self.alignXVar)
  63. self.alignXButton.pack(side=LEFT, expand=False)
  64. self.alignHVar = IntVar()
  65. self.alignHVar.set(False)
  66. self.alignHButton = Checkbutton(
  67. frame,
  68. text = ': Align H',
  69. variable = self.alignHVar)
  70. self.alignHButton.pack(side=RIGHT, expand=False)
  71. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  72. groupFrame.pack(side=TOP, fill = 'both', expand = 1,padx=5,pady=5)
  73. frame = Frame(mainFrame)
  74. Button(frame, text='Align', width = 13, command=self.Align_press).pack(side=LEFT)
  75. Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=RIGHT)
  76. frame.pack(side=BOTTOM, fill = X, expand = 1,pady=5)
  77. # Y and P checkbox
  78. frame = Frame(groupFrame)
  79. self.alignYVar = IntVar()
  80. self.alignYVar.set(False)
  81. self.alignYButton = Checkbutton(
  82. frame,
  83. text = ': Align Y',
  84. variable = self.alignYVar)
  85. self.alignYButton.pack(side=LEFT, expand=False)
  86. self.alignPVar = IntVar()
  87. self.alignPVar.set(False)
  88. self.alignPButton = Checkbutton(
  89. frame,
  90. text = ': Align P',
  91. variable = self.alignPVar)
  92. self.alignPButton.pack(side=RIGHT, expand=False)
  93. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  94. # Z and R checkbox
  95. frame = Frame(groupFrame)
  96. self.alignZVar = IntVar()
  97. self.alignZVar.set(False)
  98. self.alignZButton = Checkbutton(
  99. frame,
  100. text = ': Align Z',
  101. variable = self.alignZVar)
  102. self.alignZButton.pack(side=LEFT, expand=False)
  103. self.alignRVar = IntVar()
  104. self.alignRVar.set(False)
  105. self.alignRButton = Checkbutton(
  106. frame,
  107. text = ': Align R',
  108. variable = self.alignRVar)
  109. self.alignRButton.pack(side=RIGHT, expand=False)
  110. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  111. # Scale
  112. frame = Frame(groupFrame)
  113. Label(frame,text='Align Scale:').pack(side=LEFT)
  114. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  115. frame = Frame(groupFrame)
  116. self.alignSXVar = IntVar()
  117. self.alignSXVar.set(False)
  118. self.alignSXButton = Checkbutton(
  119. frame,
  120. text = ': X',
  121. variable = self.alignSXVar)
  122. self.alignSXButton.pack(side=LEFT, expand=False)
  123. self.alignSYVar = IntVar()
  124. self.alignSYVar.set(False)
  125. self.alignSYButton = Checkbutton(
  126. frame,
  127. text = ': Y',
  128. variable = self.alignSYVar)
  129. self.alignSYButton.pack(side=LEFT, expand=False)
  130. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  131. self.alignSZVar = IntVar()
  132. self.alignSZVar.set(False)
  133. self.alignSZButton = Checkbutton(
  134. frame,
  135. text = ': Z',
  136. variable = self.alignSZVar)
  137. self.alignSZButton.pack(side=LEFT, expand=False)
  138. frame.pack(side=TOP, fill = X, expand = 1,pady=5)
  139. mainFrame.pack(fill = 'both', expand = 1,padx=7,pady=7)
  140. def createMenuBar(self):
  141. self.menuBar.destroy()
  142. def onDestroy(self, event):
  143. messenger.send('ALW_close', [self.nodePath.getName()])
  144. '''
  145. If you have open any thing, please rewrite here!
  146. '''
  147. pass
  148. ###############################
  149. def ok_press(self):
  150. #################################################################
  151. # ok_press(self)
  152. # Callback function
  153. # This function will be called when user click on the "OK" button on the window.
  154. #################################################################
  155. self.quit()
  156. def Align_press(self):
  157. list = [self.alignXVar.get(), self.alignYVar.get(), self.alignZVar.get(),
  158. self.alignHVar.get(), self.alignPVar.get(), self.alignRVar.get(),
  159. self.alignSXVar.get(), self.alignSYVar.get(), self.alignSZVar.get()]
  160. if self.targetName != None:
  161. messenger.send('ALW_align', [self.nodePath, self.targetName, list])
  162. return
  163. def setTargetNode(self,name=None):
  164. self.targetName = name
  165. return