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

📄 jointstreeview.cpp

📁 3D仿真组实物机器人环境下的机器人模型的设计工具。可以查看和修改现有模型的详细参数
💻 CPP
字号:
/***********************************************************************************                            In the name of Almighty                            **                                                                               **     JointTreeView.cpp : Robocup Soccer Simulator Developement Team: Zigorat   **                                                                               **  Date: 07/08/2007                                                             **  Author: Mahdi Hamdarsi                                                       **  Research Coordinator: Amin Mohammadi                                         **  Comments: Joint specific operations and view interface                       **                                                                               ***********************************************************************************//*! \file JointTreeView.cpp<pre><b>File:</b>          JointTreeView.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>      Joint specific operations and view interface<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 <gtk/gtk.h>#include <iostream>using namespace std;#include "RubySceneGraph.h"extern TRubySceneGraph * RubySceneGraph;#include "Parse.h"#include "Editor.h"#include "support.h"GtkWidget *m_Joints_Treeview;GtkTreeModel *m_Joints_items_model;extern GtkWidget *m_MainWindow;enum{  COLUMN_JOINT_NUMBER,  COLUMN_JOINT_TYPE,  COLUMN_JOINT_PARENT,  COLUMN_JOINT_CHILD,  NUM_JOINTS_COLUMNS};enum{  COLUMN_NUMBER_TEXT,  NUM_NUMBER_COLUMNS};gchar *getGtkString( TJoint joint ){  if( joint == JOINT_FIXED )    return g_strdup( "Fixed" );  if( joint == JOINT_HINGE )    return g_strdup( "Hinge" );  if( joint == JOINT_HINGE2 )    return g_strdup( "Hinge2" );  if( joint == JOINT_UNIVERSAL )    return g_strdup( "Universal" );  return g_strdup( "Illegal joint" );}void UpdateJointsList(){  GtkTreeIter iter;  while( gtk_tree_model_get_iter_first(GTK_TREE_MODEL(m_Joints_items_model), &iter) == TRUE )    gtk_list_store_remove(GTK_LIST_STORE(m_Joints_items_model), &iter);  for( int i = 0; i < RubySceneGraph->getJointCount(); i++)    {      string par = RubySceneGraph->getJoint( i )->getParrent() == NULL ? "Unknown" :                                                   RubySceneGraph->getJoint( i )->getParrent()->getName();      string chd = RubySceneGraph->getJoint( i )->getChild()   == NULL ? "Unknown" :                                                   RubySceneGraph->getJoint( i )->getChild()->getName();      gtk_list_store_append(GTK_LIST_STORE(m_Joints_items_model), &iter);      gtk_list_store_set( GTK_LIST_STORE(m_Joints_items_model), &iter,                          COLUMN_JOINT_NUMBER,getGtkString( RubySceneGraph->getJoint( i )->getNumber() ),                          COLUMN_JOINT_TYPE,  getGtkString( RubySceneGraph->getJoint( i )->getType() ),                          COLUMN_JOINT_PARENT, getGtkString( par ),                          COLUMN_JOINT_CHILD, getGtkString( chd ),                          -1);    }}void create_joints_model(){  m_Joints_items_model = GTK_TREE_MODEL(           gtk_list_store_new(NUM_JOINTS_COLUMNS, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ) );}GtkTreeModel * CreateTypeMenu(){  const char *str[] = { "Fixed", "Hinge", "Hinge2", "Universal" };  GtkListStore *model;  GtkTreeIter iter;  model = gtk_list_store_new(NUM_NUMBER_COLUMNS, G_TYPE_STRING, G_TYPE_INT);  for( int i = 0; i < 4; i++)    {      gtk_list_store_append (model, &iter);      gtk_list_store_set (model, &iter, COLUMN_NUMBER_TEXT, str[i], -1);    }  return GTK_TREE_MODEL(model);}void AddJoint(int type){  TMessage msg;  msg.m_Command = CMD_JOINT_CREATE;  msg.m_Shape = (TJoint)type;  msg.m_Position = VecPosition(0,0,0);  UpdateLists( msg );}int GetCurrentJointIndex(){  GtkTreeIter iter;  GtkTreeView *tree = (GtkTreeView *)m_Joints_Treeview;  GtkTreeModel *model = gtk_tree_view_get_model(tree);  GtkTreeSelection *selection = gtk_tree_view_get_selection(tree);  if(!gtk_tree_selection_get_selected(selection, NULL, &iter))    return -1;  gint i;  GtkTreePath *path;  path = gtk_tree_model_get_path (model, &iter);  i = gtk_tree_path_get_indices(path)[0];  gtk_tree_path_free (path);    return i;}void RemoveCurrentJoint(){  int index = GetCurrentJointIndex();  if( index == -1 )    return;  TMessage msg;  msg.m_Command = CMD_JOINT_DELETE;  msg.m_Index = index;  UpdateLists( msg );}void OnJointCellEdited(GtkCellRendererText *cell, const gchar *path_string,const gchar *new_text,gpointer data){  GtkTreeModel *model = (GtkTreeModel *)data;  GtkTreePath *path = gtk_tree_path_new_from_string (path_string);  GtkTreeIter iter;  gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "column"));  gtk_tree_model_get_iter (model, &iter, path);  gchar *old_text;  gtk_tree_model_get (model, &iter, column, &old_text, -1);  gtk_tree_path_free(path);               if( column != COLUMN_JOINT_TYPE )    return;  if( strcmp(old_text, new_text) == 0 )    return;  TMessage msg;  msg.m_Index = GetCurrentNodeIndex();  if( column == COLUMN_JOINT_TYPE )  {    msg.m_Command = CMD_JOINT_RETYPE;    if( strcmp( new_text, "Fixed" ) == 0 )      msg.m_Shape = JOINT_FIXED;    else if( strcmp( new_text, "Hinge" ) == 0 )      msg.m_Shape = JOINT_HINGE;    else if( strcmp( new_text, "Universal" ) == 0 )      msg.m_Shape = JOINT_UNIVERSAL;  }  UpdateLists( msg );}void UpdateJointInfo(){  int index = GetCurrentJointIndex();  if( index == -1 )    return;  const TSceneJoint *joint = RubySceneGraph->getJoint(index);  if(joint == NULL)    return;  GtkWidget *temp;    temp = lookup_widget(m_MainWindow, "txtJointParent");  if( temp && joint->getParrent() )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getParrent()->getName()) );    temp = lookup_widget(m_MainWindow, "txtJointChild");  if( temp && joint->getChild() )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getChild()->getName()) );    temp = lookup_widget(m_MainWindow, "txtJointAnchorX");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAnchor().getX()) );    temp = lookup_widget(m_MainWindow, "txtJointAnchorY");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAnchor().getY()) );    temp = lookup_widget(m_MainWindow, "txtJointAnchorZ");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAnchor().getZ()) );    temp = lookup_widget(m_MainWindow, "txtJointMotor1");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getMaxMotorForce(0)) );    temp = lookup_widget(m_MainWindow, "txtJointMotor2");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getMaxMotorForce(1)) );    temp = lookup_widget(m_MainWindow, "txtJointPerceptor");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getPerceptorName()) );    temp = lookup_widget(m_MainWindow, "txtJointEffector");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getEffectorName()) );  temp = lookup_widget(m_MainWindow, "txtJointAxis1X");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAxis(0).getX()) );    temp = lookup_widget(m_MainWindow, "txtJointAxis1Y");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAxis(0).getY()) );    temp = lookup_widget(m_MainWindow, "txtJointAxis1Z");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAxis(0).getZ()) );    temp = lookup_widget(m_MainWindow, "txtJointAxis2X");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAxis(1).getX()) );    temp = lookup_widget(m_MainWindow, "txtJointAxis2Y");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAxis(1).getY()) );    temp = lookup_widget(m_MainWindow, "txtJointAxis2Z");  if( temp )    gtk_entry_set_text(GTK_ENTRY(temp), getGtkString(joint->getAxis(1).getZ()) );}void InitializeJointsColoumns(GtkTreeView  *treeview, GtkTreeModel *items_model, GtkTreeModel *types_model){  GtkCellRenderer *renderer;    renderer = gtk_cell_renderer_combo_new ();  g_object_set(renderer, "model", types_model, "text-column", COLUMN_NUMBER_TEXT, "has-entry", FALSE, "editable", TRUE, NULL);  g_signal_connect(renderer, "edited", G_CALLBACK (OnJointCellEdited), items_model);  g_object_set_data(G_OBJECT (renderer), "column", GINT_TO_POINTER(COLUMN_JOINT_TYPE));  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, "Type", renderer, "text", COLUMN_JOINT_TYPE, NULL);    /* parent column */  renderer = gtk_cell_renderer_text_new ();  g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_JOINT_PARENT));  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, "Parrent", renderer, "text", COLUMN_JOINT_PARENT, NULL);    /* child column */  renderer = gtk_cell_renderer_text_new ();  g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER(COLUMN_JOINT_CHILD));  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, "Child", renderer, "text", COLUMN_JOINT_CHILD, NULL);}void OnJointsCursorChange(GtkTreeView *treeview, gpointer user_data){  UpdateJointInfo();}GtkWidget* InitJointsTreeView(){  GtkTreeModel *type_menu;  GtkWidget *sw;  /* create models */  create_joints_model();  type_menu = CreateTypeMenu();  /* create tree view */  m_Joints_Treeview = gtk_tree_view_new_with_model (m_Joints_items_model);  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (m_Joints_Treeview), TRUE);  gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (m_Joints_Treeview)), GTK_SELECTION_SINGLE);  InitializeJointsColoumns(GTK_TREE_VIEW (m_Joints_Treeview), m_Joints_items_model, type_menu);  g_object_unref (type_menu);  g_object_unref (m_Joints_items_model);    g_signal_connect ((gpointer) m_Joints_Treeview, "cursor_changed", G_CALLBACK(OnJointsCursorChange), NULL);  sw = gtk_scrolled_window_new (NULL, NULL);  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);  gtk_container_add(GTK_CONTAINER (sw), m_Joints_Treeview);    return sw;}

⌨️ 快捷键说明

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