⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editor.cpp

📁 3D仿真组实物机器人环境下的机器人模型的设计工具。可以查看和修改现有模型的详细参数
💻 CPP
字号:
/***********************************************************************************                            In the name of Almighty                            **                                                                               **       Editor.cpp : Robocup Soccer Simulator Developement Team: Zigorat        **                                                                               **  Date: 07/08/2007                                                             **  Author: Mahdi Hamdarsi                                                       **  Research Coordinator: Amin Mohammadi                                         **  Comments: Generic edit routines like adding node and joint                   **                                                                               ***********************************************************************************//*! \file Editor.cpp<pre><b>File:</b>          Editor.cpp<b>Project:</b>       Robocup Soccer Simulator Developement Team: Zigorat<b>Authors:</b>       Mahdi Hamdarsi, Amin Mohammadi<b>Created:</b>       12/02/2001<b>Last Revision:</b> $ID$<b>Contents:</b>      Generic edit routines like adding node and joint<hr size=2><h2><b>Changes</b></h2><b>Date</b>             <b>Author</b>          <b>Comment</b>07/08/2007       Mahdi Hamdarsi       Initial version created</pre>*/#include "Editor.h"#include "interface.h"#include "RubySceneGraph.h"#include "support.h"#include <gtk/gtk.h>extern GtkWidget *m_AboutWin;extern GtkWidget *m_MainWindow;extern GtkWidget *m_SaveDialog;extern TRubySceneGraph * RubySceneGraph;extern GtkWidget *m_MyEventHandlerButton;GtkWidget *m_FileOpen = NULL;GtkWidget *m_FileSave = NULL;/** * JobT is an enumeration to handle different kinds of things that * application can do like saving, quiting, opening */enum JobT{  JT_ILLEGAL,  JT_OPEN,  JT_SAVE,  JT_NEW,  JT_QUIT};/** * Job is a structure to handle different kinds of things that this application does */struct Job{  JobT   m_Job;  string m_FileName;} e_Job;/** * This method clears information window of the properties */void ClearGTKWindow(){  GtkWidget *temp;    temp = lookup_widget(m_MainWindow, "txtNodeName");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeX");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeY");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeZ");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeLength");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeWidth");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeHeight");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtNodeParent");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );  temp = lookup_widget(m_MainWindow, "txtNodeMass");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" ); temp = lookup_widget(m_MainWindow, "txtJointParent");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointChild");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAnchorX");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAnchorY");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAnchorZ");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointMotor1");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointMotor2");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointPerceptor");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointEffector");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );  temp = lookup_widget(m_MainWindow, "txtJointAxis1X");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAxis1Y");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAxis1Z");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAxis2X");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAxis2Y");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );    temp = lookup_widget(m_MainWindow, "txtJointAxis2Z");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), "" );}/** * This method updates treeview of nodes and joints to reflect the changes done internal * @param message Message to update scene graph with */void UpdateLists( TMessage message ){  if( message.m_Command != CMD_ILLEGAL && !RubySceneGraph->respondToCommand( message ) )    cerr << "UpdateLists: Scene update failed" << endl;  ClearGTKWindow();  UpdateNodesTree();  UpdateJointsList();}/** * This method returns a string known by gtk internals from the values given * @param value Value to change to gtk string * @return String that can be used in gtk framework */gchar * getGtkString( double value ){  char str[128];  sprintf( str, "%2.3f", value );  return g_strdup( str );}/** * This method returns a string known by gtk internals from the values given * @param value Value to change to gtk string * @return String that can be used in gtk framework */gchar * getGtkString( string value ){  return g_strdup( value.c_str() );}/** * This method checks for scene changes and prompts user to save scene if changed * @return indicates that scene has been changed or not */bool SceneChanged(){  if( !RubySceneGraph->changed() )    return false;  m_SaveDialog = create_dlgSaveChanges();  gtk_widget_show( m_SaveDialog );  return true;}/** * This method resumes what was going to be done */void ResumeJob(){  g_signal_emit_by_name( m_MyEventHandlerButton, "clicked", NULL );}/** * This method resumes what was going to be done for scene, wheather * it was a new action or an open or save action. * @param button Button that emitted this signal * @param user_data Data associated with this signal */void onMyEvent(GtkButton *button, gpointer user_data){  if( e_Job.m_Job == JT_ILLEGAL )    return;  TMessage msg;  if( e_Job.m_Job == JT_OPEN )  {    RubySceneGraph->LoadScene( e_Job.m_FileName.c_str() );    UpdateLists( msg );  }  else if( e_Job.m_Job == JT_SAVE )  {    RubySceneGraph->SaveScene( e_Job.m_FileName.c_str() );    UpdateLists( msg );  }  else if( e_Job.m_Job == JT_NEW )  {    RubySceneGraph->clearScene();    UpdateLists( msg );  }  else if( e_Job.m_Job == JT_QUIT )    gtk_main_quit();}/** * This method opens a file chosen with the opendialog * @param button Button which is pressed * @param user_data Data associated with button */void OpenFile(GtkButton *button, gpointer user_data){  e_Job.m_FileName = gtk_file_selection_get_filename(GTK_FILE_SELECTION(m_FileOpen) );  e_Job.m_Job = JT_OPEN;  if( !SceneChanged() )    ResumeJob();  gtk_widget_destroy( m_FileOpen );}/** * This method saves a file chosen with the savedialog * @param button Button which is pressed * @param user_data Data associated with button */void SaveFile(){  if( RubySceneGraph->getSceneName() == "" )  {    ShowFileSaveAs();    return;  }  e_Job.m_FileName = RubySceneGraph->getSceneName();  e_Job.m_Job = JT_SAVE;  ResumeJob();}/** * This method saves a file chosen with the savedialog * @param button Button which is pressed * @param user_data Data associated with button */void SaveFileAs(GtkButton *button, gpointer user_data){  e_Job.m_FileName = gtk_file_selection_get_filename(GTK_FILE_SELECTION(m_FileSave) );  e_Job.m_Job = JT_SAVE;  ResumeJob();  gtk_widget_destroy( m_FileSave );}/** * This method cancels the fileopen dialog * @param button Button which is pressed * @param user_data Data associated with button */void CancelFileOpen(GtkButton *button, gpointer user_data){  gtk_widget_destroy( m_FileOpen );}/** * This method cancels the filesave dialog * @param button Button which is pressed * @param user_data Data associated with button */void CancelFileSave(GtkButton *button, gpointer user_data){  gtk_widget_destroy( m_FileSave );}/** * This method show a fileopen dialog on screen to choose a scene */void ShowFileOpen(){  m_FileOpen = gtk_file_selection_new("select scene to load");  g_signal_connect (G_OBJECT (GTK_FILE_SELECTION(m_FileOpen)->ok_button), "clicked",                               G_CALLBACK(OpenFile), (gpointer)m_FileOpen);  g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION(m_FileOpen)->cancel_button), "clicked",                               G_CALLBACK(CancelFileOpen), G_OBJECT(m_FileOpen));  gtk_file_selection_set_filename(GTK_FILE_SELECTION(m_FileOpen), "*.rsg");  gtk_widget_show(m_FileOpen);}/** * This method show a fileopen dialog on screen to choose a scene */void ShowFileSaveAs(){  m_FileSave = gtk_file_selection_new("select scene name to save");  g_signal_connect (G_OBJECT (GTK_FILE_SELECTION(m_FileSave)->ok_button), "clicked",                               G_CALLBACK(SaveFileAs), (gpointer)m_FileSave);  g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(m_FileSave)->cancel_button), "clicked",                               G_CALLBACK(CancelFileSave), G_OBJECT(m_FileSave));  gtk_file_selection_set_filename(GTK_FILE_SELECTION(m_FileSave), "*.rsg");  gtk_widget_show(m_FileSave);}/** * This method is called when 'no' button is clicked on checkscene dialog */void onSaveNoClicked(){  gtk_widget_destroy( m_SaveDialog );  ResumeJob();}/** * This method is called when 'yes' button is clicked on checkscene dialog */void onSaveYesClicked(){  gtk_widget_destroy( m_SaveDialog );  Job t_Job = e_Job;  SaveFile();  e_Job = t_Job;  ResumeJob();}/** * This method is called whenever menu "open project" or "toolOpenProject" is clicked */void CreateNewProject(){  e_Job.m_FileName = "";  e_Job.m_Job = JT_NEW;  if( !SceneChanged() )    ResumeJob();}/** * This method checks for scene changes and prompts to save, then exists application */void Quit(){/*  e_Job.m_FileName = "";  e_Job.m_Job = JT_QUIT;  if( !SceneChanged() )    ResumeJob();*/  gtk_main_quit();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -