# ©2001 by Matthew D. Bennett # http://www.3dfuel.com # # 21-June-2003 # GUI elements added # by Clinton Reese # # from TSsupport import rand, randint import trueSpace import win32ui import win32con import string from dialog import Dialog import dialog doc = trueSpace.GetActiveDocument() doc.ClearOutTxt() dlgButton = 128 dlgEdit = 129 dlgStatic = 130 # define DLGTEMPLATE data structures def MakeDlgTemplate(title): style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT cs = win32con.WS_CHILD | win32con.WS_VISIBLE # window sizes are defined by (xstart, ystart, width, height) # Window frame and title dlg = [ [title, (0, 0, 225, 100), style, None, (8, "MS Sans Serif")], ] dlg.append([dlgStatic, "Num Frames ", -1, (7, 10, 69, 9), cs | win32con.SS_LEFT]) dlg.append([dlgStatic, "Time Increment", -1, (7, 30, 69, 9), cs | win32con.SS_LEFT]) dlg.append([dlgStatic, "Object Name ", -1, (7, 50, 69, 9), cs | win32con.SS_LEFT]) dlg.append([dlgStatic, "Scale ", -1, (7, 70, 69, 9), cs | win32con.SS_LEFT]) s = cs | win32con.WS_TABSTOP | win32con.WS_BORDER dlg.append([dlgEdit, None, win32ui.IDC_EDIT1, (70, 10, 60, 12), s]) dlg.append([dlgEdit, None, win32ui.IDC_EDIT2, (70, 30, 60, 12), s]) dlg.append([dlgEdit, None, win32ui.IDC_EDIT3, (70, 50, 60, 12), s]) dlg.append([dlgEdit, None, win32ui.IDC_EDIT4, (70, 70, 60, 12), s]) # OK/Cancel Buttons # set OK as default when press Enter key s = cs | win32con.WS_TABSTOP dlg.append([dlgButton, "OK", win32con.IDOK, (150, 10, 50, 14), s | win32con.BS_DEFPUSHBUTTON]) s = win32con.BS_PUSHBUTTON | s dlg.append([dlgButton, "Cancel", win32con.IDCANCEL, (150, 30, 50, 14), s]) return dlg class ParamsDlg(dialog.Dialog): Cancel = 0 def __init__(self): dialog.Dialog.__init__(self, MakeDlgTemplate("dummy title") ) # associate resources with variables self.AddDDX(win32ui.IDC_EDIT1,'DLGnum') self.AddDDX(win32ui.IDC_EDIT2,'DLGtime') self.AddDDX(win32ui.IDC_EDIT3,'DLGname') self.AddDDX(win32ui.IDC_EDIT4,'DLGscale') self.DoModal() def OnInitDialog(self): self.SetWindowText("Poser Auto Load") edittext=self.GetDlgItem(win32ui.IDC_EDIT1) edittext.SetWindowText("5") edittext=self.GetDlgItem(win32ui.IDC_EDIT2) edittext.SetWindowText("5") edittext=self.GetDlgItem(win32ui.IDC_EDIT3) edittext.SetWindowText("man") edittext=self.GetDlgItem(win32ui.IDC_EDIT4) edittext.SetWindowText("1") cancel=self.GetDlgItem(win32con.IDCANCEL) # the cancel button cancel.SetWindowText("Use Defaults") def OnCancel(self): self.Cancel = 1 self._obj_.OnCancel() def GetParams(): # define a dialog window with program variables associated to resources(edit text, buttons ...) d = ParamsDlg() if d.Cancel: return (None, None, None, None) else: return (d['DLGnum'], d['DLGtime'], d['DLGname'], d['DLGscale']) # # Main Program Starts here # # do file dialog flags = win32con.OFN_HIDEREADONLY | win32con.OFN_OVERWRITEPROMPT filter = "Wavefront Object Files (*.obj)|*.obj||" bFileOpen = 1 d=win32ui.CreateFileDialog(bFileOpen, None, None, flags, filter) d.DoModal() Myfilename = d.GetFileName() Mypath = d.GetPathName() myindex = string.find(Myfilename,"_") Bfilename = Myfilename[0:myindex] + "_" myindex = string.find(Mypath,Bfilename) mybasicpath = Mypath[0:myindex] Bfilepath = string.replace(mybasicpath,"\\","/") # get parameters rnum_objects, rtime_inc, objname, robjscale = GetParams() if rnum_objects == None: print "Using default values" num_objects = 3 time_inc = 5 objname = "man" objscale = 1 else: num_objects = int(rnum_objects) time_inc = int(rtime_inc) objscale = int(robjscale) # process obj files doc.ActiveTime = 0 for obj in range(0,num_objects): filename = Bfilename + str(obj) + ".obj" # print filename + "\n" part = doc.LoadObject(Bfilepath + Bfilename + str(obj) + ".obj") # print "part", part , " vertices: ", part.NbrVertices, "\n" part.Name = objname + str(obj) verts = part.NbrVertices doc.ActiveTime = 0 firstobj = objname + "0" part1 = doc.Object(firstobj) for poser in range(0,num_objects): part2 = doc.Object(objname + str(poser)) doc.ActiveTime = (poser)* time_inc for v in range(0,verts): vertex = part2.GetVertex(v) # anim_vert = part1.GetVertex(v) x = objscale*vertex[0] y = objscale*vertex[1] z = objscale*vertex[2] part1.AnimateVertex(v) part1.SetVertex(v,x,y,z) part1.AnimateVertex(v) doc.ActiveTime = 0 if part1.Name != part2.Name: part2.Visible = 0 doc.Draw() trueSpace.Stop()