def OnNew(self, event): dialog = ui_definition.DialogDefinition( ui_labels.MAIN_WIN['prog_name'], self.robo.name, self.robo.nl, self.robo.nj, self.robo.structure, self.robo.is_floating, self.robo.is_mobile ) if dialog.ShowModal() == wx.ID_OK: result = dialog.get_values() new_robo = Robot( name=result['name'], NL=result['num_links'], NJ=result['num_joints'], NF=result['num_frames'], structure=result['structure'], is_floating=result['is_floating'], is_mobile=result['is_mobile'] ) new_robo.set_defaults(base=True) if result['keep_geo']: nf = min(self.robo.NF, new_robo.NF) new_robo.ant[:nf] = self.robo.ant[:nf] new_robo.sigma[:nf] = self.robo.sigma[:nf] new_robo.mu[:nf] = self.robo.mu[:nf] new_robo.gamma[:nf] = self.robo.gamma[:nf] new_robo.alpha[:nf] = self.robo.alpha[:nf] new_robo.theta[:nf] = self.robo.theta[:nf] new_robo.b[:nf] = self.robo.b[:nf] new_robo.d[:nf] = self.robo.d[:nf] new_robo.r[:nf] = self.robo.r[:nf] if result['keep_dyn']: nl = min(self.robo.NL, new_robo.NL) new_robo.Nex[:nl] = self.robo.Nex[:nl] new_robo.Fex[:nl] = self.robo.Fex[:nl] new_robo.FS[:nl] = self.robo.FS[:nl] new_robo.IA[:nl] = self.robo.IA[:nl] new_robo.FV[:nl] = self.robo.FV[:nl] new_robo.MS[:nl] = self.robo.MS[:nl] new_robo.M[:nl] = self.robo.M[:nl] new_robo.J[:nl] = self.robo.J[:nl] if result['keep_joint']: nj = min(self.robo.NJ, new_robo.NJ) new_robo.eta[:nj] = self.robo.eta[:nj] new_robo.k[:nj] = self.robo.k[:nj] new_robo.qdot[:nj] = self.robo.qdot[:nj] new_robo.qddot[:nj] = self.robo.qddot[:nj] new_robo.GAM[:nj] = self.robo.GAM[:nj] if result['keep_base']: new_robo.Z = self.robo.Z new_robo.w0 = self.robo.w0 new_robo.wdot0 = self.robo.wdot0 new_robo.v0 = self.robo.v0 new_robo.vdot0 = self.robo.vdot0 new_robo.G = self.robo.G new_robo.set_defaults(joint=True) self.robo = new_robo self.robo.directory = filemgr.get_folder_path(self.robo.name) self.feed_data() dialog.Destroy()
def OnNew(self, event): dialog = ui_definition.DialogDefinition( ui_labels.MAIN_WIN['prog_name'], self.robo.name, self.robo.nl, self.robo.nj, self.robo.structure, self.robo.is_mobile ) if dialog.ShowModal() == wx.ID_OK: result = dialog.get_values() new_robo = Robot(*result['init_pars']) if result['keep_geo']: nf = min(self.robo.NF, new_robo.NF) new_robo.ant[:nf] = self.robo.ant[:nf] new_robo.sigma[:nf] = self.robo.sigma[:nf] new_robo.mu[:nf] = self.robo.mu[:nf] new_robo.gamma[:nf] = self.robo.gamma[:nf] new_robo.alpha[:nf] = self.robo.alpha[:nf] new_robo.theta[:nf] = self.robo.theta[:nf] new_robo.b[:nf] = self.robo.b[:nf] new_robo.d[:nf] = self.robo.d[:nf] new_robo.r[:nf] = self.robo.r[:nf] if result['keep_dyn']: nl = min(self.robo.NL, new_robo.NL) new_robo.Nex[:nl] = self.robo.Nex[:nl] new_robo.Fex[:nl] = self.robo.Fex[:nl] new_robo.FS[:nl] = self.robo.FS[:nl] new_robo.IA[:nl] = self.robo.IA[:nl] new_robo.FV[:nl] = self.robo.FV[:nl] new_robo.MS[:nl] = self.robo.MS[:nl] new_robo.M[:nl] = self.robo.M[:nl] new_robo.J[:nl] = self.robo.J[:nl] if result['keep_base']: new_robo.Z = self.robo.Z new_robo.w0 = self.robo.w0 new_robo.wdot0 = self.robo.wdot0 new_robo.v0 = self.robo.v0 new_robo.vdot0 = self.robo.vdot0 new_robo.G = self.robo.G self.robo = new_robo self.robo.directory = filemgr.get_folder_path(self.robo.name) self.feed_data() dialog.Destroy()
def OnNew(self, event): dialog = ui_definition.DialogDefinition( ui_labels.MAIN_WIN['prog_name'], self.robo.name, self.robo.nl, self.robo.nj, self.robo.structure, self.robo.is_mobile) if dialog.ShowModal() == wx.ID_OK: result = dialog.get_values() new_robo = Robot(*result['init_pars']) if result['keep_geo']: nf = min(self.robo.NF, new_robo.NF) new_robo.ant[:nf] = self.robo.ant[:nf] new_robo.sigma[:nf] = self.robo.sigma[:nf] new_robo.mu[:nf] = self.robo.mu[:nf] new_robo.gamma[:nf] = self.robo.gamma[:nf] new_robo.alpha[:nf] = self.robo.alpha[:nf] new_robo.theta[:nf] = self.robo.theta[:nf] new_robo.b[:nf] = self.robo.b[:nf] new_robo.d[:nf] = self.robo.d[:nf] new_robo.r[:nf] = self.robo.r[:nf] if result['keep_dyn']: nl = min(self.robo.NL, new_robo.NL) new_robo.Nex[:nl] = self.robo.Nex[:nl] new_robo.Fex[:nl] = self.robo.Fex[:nl] new_robo.FS[:nl] = self.robo.FS[:nl] new_robo.IA[:nl] = self.robo.IA[:nl] new_robo.FV[:nl] = self.robo.FV[:nl] new_robo.MS[:nl] = self.robo.MS[:nl] new_robo.M[:nl] = self.robo.M[:nl] new_robo.J[:nl] = self.robo.J[:nl] if result['keep_base']: new_robo.Z = self.robo.Z new_robo.w0 = self.robo.w0 new_robo.wdot0 = self.robo.wdot0 new_robo.v0 = self.robo.v0 new_robo.vdot0 = self.robo.vdot0 new_robo.G = self.robo.G self.robo = new_robo self.robo.directory = filemgr.get_folder_path(self.robo.name) self.feed_data() dialog.Destroy()
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)