def OnBaseInertialParams(self, event): model_symo, base_robo = self.robo.compute_baseparams() out_file_path = self.prompt_file_save(model_symo) self.model_success(out_file_path) parfile.writepar(base_robo) msg = ("A new robot with the Base Inertial Parameters was\n") msg = msg + ("created and the corresponding PAR file is ") msg = msg + ("saved at:\n\n") msg = msg + base_robo.par_file_path self.message_info(msg)
def test_readwrite(self): parfile.writepar(self.orig_robo) fname = filemgr.get_clean_name(self.orig_robo.name) + ".par" file_path = os.path.join(self.orig_robo.directory, fname) new_robo, flag = parfile.readpar(self.orig_robo.name, file_path) self.assertEqual(flag, tools.OK) l1 = self.orig_robo.get_geom_head() l2 = self.orig_robo.get_dynam_head() l3 = self.orig_robo.get_ext_dynam_head() for name in l3[1:]+l2[1:]+l1[1:]: for i in xrange(1, self.orig_robo.NL): self.assertEqual(self.orig_robo.get_val(i, name), new_robo.get_val(i, name))
def OnSaveAs(self, event): dialog = wx.FileDialog(self, message="Save PAR file", defaultFile=self.robo.name + '.par', defaultDir=self.robo.directory, wildcard='*.par') if dialog.ShowModal() == wx.ID_CANCEL: return tools.FAIL self.robo.directory = dialog.GetDirectory() self.robo.name = dialog.GetFilename()[:-4] parfile.writepar(self.robo) self.widgets['name'].SetLabel(self.robo.name) self.changed = False
def OnSaveAs(self, event): dialog = wx.FileDialog( self, message="Save PAR file", defaultFile=self.robo.name+'.par', defaultDir=self.robo.directory, wildcard='*.par' ) if dialog.ShowModal() == wx.ID_CANCEL: return tools.FAIL self.robo.directory = dialog.GetDirectory() self.robo.name = dialog.GetFilename()[:-4] parfile.writepar(self.robo) self.widgets['name'].SetLabel(self.robo.name) self.changed = False
def OnSaveAs(self, event): result_msg = "The PAR file has been saved at:\n" # prompt dialog box for new robot name txtdlg = wx.TextEntryDialog( self, caption="Save As New Robot", message="Enter a name for the new robot:", style=wx.OK | wx.CANCEL ) if txtdlg.ShowModal() == wx.ID_OK and \ str(txtdlg.GetValue()).strip(): # when OK button and user input isn't an empty string # save as new robot self.robo.name = str(txtdlg.GetValue()).strip() self.robo.set_directory() self.robo.set_par_file_path() parfile.writepar(self.robo) self.widgets['name'].SetLabel(self.robo.name) self.changed = False result_msg = result_msg + self.robo.par_file_path self.message_info(result_msg) else: # prompt message box msg = "Do you want to save the PAR file with a new name?" msgdlg = wx.MessageDialog( self, message=msg, style=wx.YES_NO | wx.YES_DEFAULT ) if msgdlg.ShowModal() == wx.ID_NO: return tools.FAIL else: # prompt file dialog filedlg = wx.FileDialog( self, message="Save PAR file", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT, defaultDir=self.robo.directory, defaultFile=self.robo.par_file_name, wildcard='*.par' ) if filedlg.ShowModal() == wx.ID_CANCEL: return tools.FAIL self.robo.set_directory(filedlg.GetDirectory()) self.robo.set_par_file_path(filedlg.GetPath()) parfile.writepar(self.robo) self.changed = False result_msg = result_msg + self.robo.par_file_path self.message_info(result_msg)
def OnSave(self, event): parfile.writepar(self.robo) self.changed = False
def Export(self, name): NJ = len([i for i in self.elements if (isinstance(i, SuperRevoluteJoint) or isinstance(i, SuperPrismaticJoint)) and not i.virtual_joint] ) NL = len([i for i in self.elements if isinstance(i, Point) and not i.virtual_joint] )-1 NF = NL+2*(NJ-NL) if not self.structure: return if not self.structure[0]-self.structure[1]: structure = SIMPLE elif not NJ-NL: structure = TREE else: structure = CLOSED_LOOP robot = Robot(name, NJ=NJ, NL=NL, NF=NF, is_mobile=False, structure=structure) robot.G = Matrix([var('G1'), var('G2'), var('G3')]) if self.structure[4][0]: robot.Z = transpose(self.elements[self.structure[4][0]-1].T) frames = [] end = [] cut = [] for branch in self.branches[self.structure[0]:self.structure[1]+1]: frames += [i for i in branch[1:-2] if not isinstance(self.elements[i-1], Point)] if not self.elements[branch[-2]-1].virtual_joint: end.append(branch[-2]) else: cut.append(branch[-2]) frames = [ i for i in frames if not i in end and not i in cut] frames += end + cut sigma, mu, theta, alpha, gamma, d, r, b, ant = [],[],[],[],[],[],[],[],[] for frame in frames: ## if isinstance(self.elements[frame-1], SuperPrismaticJoint): sigma.append(1) elif isinstance(self.elements[frame-1], SuperRevoluteJoint): sigma.append(0) else: sigma.append(2) i = [i for i in range(len(frames)) if frames[i] == self.elements[frame-1].ant] if len(i)==0 and self.elements[frame-1].ant==self.structure[4][0]: ant.append(0) elif len(i)>0: ant.append(i[0]+1) else: msg = wx.MessageDialog (None, 'Export error, cannot deifne the parameters.', style=wx.OK|wx.CENTRE) msg.ShowModal() return if self.elements[frame-1].active and not self.elements[frame-1].cut_joint: mu.append(1) else: mu.append(0) if isinstance(self.elements[frame-1], SuperRevoluteJoint) and not self.elements[frame-1].virtual_joint: theta.append(var('th%s' % (len(theta)+1))) else: theta.append(self.elements[frame-1].theta) if isinstance(self.elements[frame-1], SuperPrismaticJoint) and not self.elements[frame-1].virtual_joint: r.append(var('r%s' % (len(theta)+1))) else: r.append(self.elements[frame-1].r) alpha.append(self.elements[frame-1].alpha) d.append(self.elements[frame-1].d) gamma.append(self.elements[frame-1].gamma) b.append(self.elements[frame-1].b) robot.sigma[1:] = sigma robot.theta[1:] = theta robot.alpha[1:] = alpha robot.gamma[1:] = gamma robot.d[1:] = d robot.r[1:] = r robot.b[1:] = b robot.ant[1:] = ant robot.mu[1:] = mu parfile.writepar(robot)