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

📄 callbacks.c

📁 3D仿真组实物机器人环境下的机器人模型的设计工具。可以查看和修改现有模型的详细参数
💻 C
字号:
#include "config.h"#include <gtk/gtk.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include "Editor.h"#include "Parse.h"#include "RubySceneGraph.h"extern GtkWidget *m_SaveDialog;extern GtkWidget *m_AboutWin;extern TRubySceneGraph *RubySceneGraph;voidonMenuNewProjectClick                  (GtkMenuItem     *menuitem,                                        gpointer         user_data){  CreateNewProject();}voidonMenuOpenProjectClick                 (GtkMenuItem     *menuitem,                                        gpointer         user_data){  ShowFileOpen();}voidonMenuSaveProjectClick                 (GtkMenuItem     *menuitem,                                        gpointer         user_data){  SaveFile();}voidonMenuSaveAsProject                    (GtkMenuItem     *menuitem,                                        gpointer         user_data){  ShowFileSaveAs();}voidonMenuExitClick                        (GtkMenuItem     *menuitem,                                        gpointer         user_data){  Quit();}voidonMenuFixedJointClick                  (GtkMenuItem     *menuitem,                                        gpointer         user_data){  AddJoint(JOINT_FIXED);}voidonMenuHingeJointClick                  (GtkMenuItem     *menuitem,                                        gpointer         user_data){  AddJoint(JOINT_HINGE);}voidonMenuUniversalJointClick              (GtkMenuItem     *menuitem,                                        gpointer         user_data){  AddJoint(JOINT_UNIVERSAL);}voidonMenuDeleteJointClick                 (GtkMenuItem     *menuitem,                                        gpointer         user_data){  RemoveCurrentJoint();}voidonMenuAddBoxClick                      (GtkMenuItem     *menuitem,                                        gpointer         user_data){  AddNode(SHAPE_BOX);}voidonMenuAddSphereClick                   (GtkMenuItem     *menuitem,                                        gpointer         user_data){  AddNode(SHAPE_SPHERE);}voidonMenuDeleteNodeClick                  (GtkMenuItem     *menuitem,                                        gpointer         user_data){  RemoveCurrentNode();}voidonMenuAboutClick                       (GtkMenuItem     *menuitem,                                        gpointer         user_data){  m_AboutWin = create_winAbout();  gtk_widget_show( m_AboutWin );}voidonToolFixedClick                       (GtkButton       *button,                                        gpointer         user_data){  AddJoint(JOINT_FIXED);}voidonToolHingeClick                       (GtkButton       *button,                                        gpointer         user_data){  AddJoint(JOINT_HINGE);}voidonToolJointUniversalclicked            (GtkButton       *button,                                        gpointer         user_data){  AddJoint(JOINT_UNIVERSAL);}voidonJointDeleteClick                     (GtkButton       *button,                                        gpointer         user_data){  RemoveCurrentJoint();}voidonToolNodeSphereClicked                (GtkButton       *button,                                        gpointer         user_data){  AddNode(SHAPE_SPHERE);}voidonToolNodeBoxClicked                   (GtkButton       *button,                                        gpointer         user_data){  AddNode(SHAPE_BOX);}voidonToolNodeDeleteClicked                (GtkButton       *button,                                        gpointer         user_data){  RemoveCurrentNode();}voidonComboChanged                         (GtkComboBox     *combobox,                                        gpointer         user_data){}voidonToolNewProjectClicked                (GtkButton       *button,                                        gpointer         user_data){  onMenuNewProjectClick( NULL, NULL );}voidonToolOpenProjectClicked               (GtkButton       *button,                                        gpointer         user_data){  onMenuOpenProjectClick( NULL, NULL );}voidonToolSaveProjectClicked               (GtkButton       *button,                                        gpointer         user_data){  onMenuSaveProjectClick( NULL, NULL );}voidonToolSaveAsProjectClicked             (GtkButton       *button,                                        gpointer         user_data){  onMenuSaveAsProject( NULL, NULL );}voidonAboutOkClicked                       (GtkButton       *button,                                        gpointer         user_data){  gtk_widget_destroy( m_AboutWin );}voidonSaveDialogCancelClicked              (GtkButton       *button,                                        gpointer         user_data){  gtk_widget_destroy( m_SaveDialog );}voidonSaveDialogNoClicked                  (GtkButton       *button,                                        gpointer         user_data){  onSaveNoClicked();}voidonSaveDialogYesClicked                 (GtkButton       *button,                                        gpointer         user_data){  onSaveYesClicked();}voidonTextBoxChange                        (GtkEntry        *entry,                                        gpointer         user_data){  string name = gtk_widget_get_name( GTK_WIDGET(user_data) );  TMessage data;    string param = gtk_entry_get_text( GTK_ENTRY( user_data ) );  if( name == "txtNodeName" || name == "txtNodeX" || name == "txtNodeY" || name == "txtNodeZ" ||      name == "txtNodeLength" || name == "txtNodeWidth" || name == "txtNodeHeight" ||      name == "txtNodeParent" || name == "txtNodeMass" )  {    /// Node Widgets    const int iCurrentNode = GetCurrentNodeIndex();    const TSceneNode *node = RubySceneGraph->getNodeWithID( iCurrentNode );    if( node == NULL )    {      cerr << "OnTextBoxChange: No node selected" << endl;      return;    }        if( name == "txtNodeName" )    {      data.m_Command = CMD_NODE_RENAME;      data.m_Index = iCurrentNode;      data.m_Name = param;    }    else if( name == "txtNodeX" )    {      data.m_Command = CMD_NODE_POSITION;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dx = Parse::parseFirstDouble( &s );      double dy = node->getPosition().getY();      double dz = node->getPosition().getZ();          data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtNodeY" )    {      data.m_Command = CMD_NODE_POSITION;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dx = node->getPosition().getX();      double dy = Parse::parseFirstDouble( &s );      double dz = node->getPosition().getZ();          data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtNodeZ" )    {      data.m_Command = CMD_NODE_POSITION;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dx = node->getPosition().getX();      double dy = node->getPosition().getY();      double dz = Parse::parseFirstDouble( &s );          data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtNodeLength" )    {      data.m_Command = CMD_NODE_RESIZE;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dx = Parse::parseFirstDouble( &s );      double dy = node->getWidth();      double dz = node->getHeight();          data.m_Size = VecPosition( dx, dy, dz );    }    else if( name == "txtNodeWidth" )    {      data.m_Command = CMD_NODE_RESIZE;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dx = node->getLength();      double dy = Parse::parseFirstDouble( &s );      double dz = node->getHeight();          data.m_Size = VecPosition( dx, dy, dz );    }    else if( name == "txtNodeHeight" )    {      data.m_Command = CMD_NODE_RESIZE;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dx = node->getLength();      double dy = node->getWidth();      double dz = Parse::parseFirstDouble( &s );      data.m_Size = VecPosition( dx, dy, dz );    }    else if( name == "txtNodeParent" )    {      data.m_Command = CMD_NODE_REPARRENT;      data.m_Index = iCurrentNode;      data.m_Name = param;    }    else if( name == "txtNodeMass" )    {      data.m_Command = CMD_NODE_MASS;      data.m_Index = iCurrentNode;      string ss = param;      char str[128];      strcpy( str, ss.c_str() );      char *s = str;      double dw = Parse::parseFirstDouble( &s );          data.m_Mass = dw;    }  }  else if( name == "txtJointParent" || name ==  "txtJointChild" || name == "txtJointAnchorX" || name == "txtJointAnchorY" ||           name == "txtJointAnchorZ"|| name == "txtJointMotor1" || name == "txtJointMotor2" || name == "txtJointPerceptor" ||           name == "txtJointEffector" || name == "txtJointAxis1X" || name == "txtJointAxis1Y" || name == "txtJointAxis1Z" ||           name == "txtJointAxis1X" || name == "txtJointAxis1X" || name == "txtJointAxis1X" )  {    const int iCurrentJoint = GetCurrentJointIndex();    const TSceneJoint * joint;    if( iCurrentJoint == -1 || (joint = RubySceneGraph->getJoint(iCurrentJoint)) == NULL )    {      cerr << "OnEntryChange: No joint selected" << endl;      return;    }    /// Joint widgets    if( name == "txtJointParent" )    {      data.m_Index = GetCurrentJointIndex();      data.m_Command = CMD_JOINT_REPARRENT;      data.m_Name = param;    }    else if( name == "txtJointChild" )    {      data.m_Index = iCurrentJoint;      data.m_Command = CMD_JOINT_RECHILD;      data.m_Name = param;    }    else if( name == "txtJointAnchorX" )    {      data.m_Command = CMD_JOINT_ANCHOR;      data.m_Index = iCurrentJoint;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = Parse::parseFirstDouble( &s );      double dy = joint->getAnchor().getY();      double dz = joint->getAnchor().getZ();            data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAnchorY" )    {      data.m_Command = CMD_JOINT_ANCHOR;      data.m_Index = iCurrentJoint;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = joint->getAnchor().getX();      double dy = Parse::parseFirstDouble( &s );      double dz = joint->getAnchor().getZ();           data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAnchorZ" )    {      data.m_Command = CMD_JOINT_ANCHOR;      data.m_Index = iCurrentJoint;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = joint->getAnchor().getX();      double dy = joint->getAnchor().getY();      double dz = Parse::parseFirstDouble( &s );            data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointMotor1" )    {      data.m_Command = CMD_JOINT_MOTOR;      data.m_Index = iCurrentJoint;      char str[128];      strcpy( str, param.c_str() );      char *s = str;            data.m_Force = Parse::parseFirstDouble( &s );      data.m_Number = 1;    }    else if( name == "txtJointMotor2" )    {      data.m_Command = CMD_JOINT_MOTOR;      data.m_Index = iCurrentJoint;      char str[128];      strcpy( str, param.c_str() );      char *s = str;            data.m_Force = Parse::parseFirstDouble( &s );      data.m_Number = 2;    }    else if( name == "txtJointPerceptor" )    {      data.m_Command = CMD_JOINT_PERCEPTOR;      data.m_Index = iCurrentJoint;      data.m_Name = param;    }    else if( name == "txtJointEffector" )    {      data.m_Command = CMD_JOINT_EFFECTOR;      data.m_Index = iCurrentJoint;      data.m_Name = param;    }    else if( name == "txtJointAxis1X" )    {      data.m_Command = CMD_JOINT_ANCHOR;      data.m_Index = iCurrentJoint;      data.m_Number = 0;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = Parse::parseFirstDouble( &s );      double dy = joint->getAnchor().getY();      double dz = joint->getAnchor().getZ();           data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAxis1Y" )    {      data.m_Command = CMD_JOINT_AXIS;      data.m_Index = iCurrentJoint;      data.m_Number = 0;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = joint->getAnchor().getX();      double dy = Parse::parseFirstDouble( &s );      double dz = joint->getAnchor().getZ();           data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAxis1Z" )    {      data.m_Command = CMD_JOINT_AXIS;      data.m_Index = iCurrentJoint;      data.m_Number = 0;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = joint->getAnchor().getX();      double dy = joint->getAnchor().getY();      double dz = Parse::parseFirstDouble( &s );           data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAxis2X" )    {      data.m_Command = CMD_JOINT_AXIS;      data.m_Index = iCurrentJoint;      data.m_Number = 1;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = Parse::parseFirstDouble( &s );      double dy = joint->getAnchor().getY();      double dz = joint->getAnchor().getZ();            data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAxis2Y" )    {      data.m_Command = CMD_JOINT_AXIS;      data.m_Index = iCurrentJoint;      data.m_Number = 1;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = joint->getAnchor().getX();      double dy = Parse::parseFirstDouble( &s );      double dz = joint->getAnchor().getZ();           data.m_Position = VecPosition( dx, dy, dz );    }    else if( name == "txtJointAxis2Z" )    {      data.m_Command = CMD_JOINT_AXIS;      data.m_Index = iCurrentJoint;      data.m_Number = 1;      char str[128];      strcpy( str, param.c_str() );      char *s = str;      double dx = joint->getAnchor().getX();      double dy = joint->getAnchor().getY();      double dz = Parse::parseFirstDouble( &s );           data.m_Position = VecPosition( dx, dy, dz );    }  }  else  /// Not a node, not a joint, What may be this widget?!   :-)  {    cerr << "OnTextBoxChange: Unknown textbox widget signal: '" << name << "'" << endl;    return;  }    UpdateLists( data );}

⌨️ 快捷键说明

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