int main(int argc, char **argv) { program_name = argv[0]; static char stderr_buf[BUFSIZ]; setbuf(stderr, stderr_buf); assert(NCOMMANDS <= MAX_COMMANDS); string Pargs, Largs, Fargs; int vflag = 0; int Vflag = 0; int zflag = 0; int iflag = 0; int Xflag = 0; int oflag = 0; int safer_flag = 1; int opt; const char *command_prefix = getenv("GROFF_COMMAND_PREFIX"); if (!command_prefix) command_prefix = PROG_PREFIX; commands[TROFF_INDEX].set_name(command_prefix, "troff"); static const struct option long_options[] = { { "help", no_argument, 0, 'h' }, { "version", no_argument, 0, 'v' }, { NULL, 0, 0, 0 } }; while ((opt = getopt_long(argc, argv, "abcCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ", long_options, NULL)) != EOF) { char buf[3]; buf[0] = '-'; buf[1] = opt; buf[2] = '\0'; switch (opt) { case 'i': iflag = 1; break; case 'I': commands[SOELIM_INDEX].set_name(command_prefix, "soelim"); commands[SOELIM_INDEX].append_arg(buf, optarg); // .psbb may need to search for files commands[TROFF_INDEX].append_arg(buf, optarg); // \X'ps:import' may need to search for files Pargs += buf; Pargs += optarg; Pargs += '\0'; break; case 't': commands[TBL_INDEX].set_name(command_prefix, "tbl"); break; case 'p': commands[PIC_INDEX].set_name(command_prefix, "pic"); break; case 'g': commands[GRN_INDEX].set_name(command_prefix, "grn"); break; case 'G': commands[GRAP_INDEX].set_name(command_prefix, "grap"); break; case 'e': commands[EQN_INDEX].set_name(command_prefix, "eqn"); break; case 's': commands[SOELIM_INDEX].set_name(command_prefix, "soelim"); break; case 'R': commands[REFER_INDEX].set_name(command_prefix, "refer"); break; case 'z': case 'a': commands[TROFF_INDEX].append_arg(buf); // fall through case 'Z': zflag++; break; case 'l': lflag++; break; case 'V': Vflag++; break; case 'v': vflag = 1; { printf("GNU groff version %s\n", Version_string); printf("Copyright (C) 2004 Free Software Foundation, Inc.\n" "GNU groff comes with ABSOLUTELY NO WARRANTY.\n" "You may redistribute copies of groff and its subprograms\n" "under the terms of the GNU General Public License.\n" "For more information about these matters, see the file named COPYING.\n"); printf("\ncalled subprograms:\n\n"); fflush(stdout); } commands[POST_INDEX].append_arg(buf); // fall through case 'C': commands[SOELIM_INDEX].append_arg(buf); commands[REFER_INDEX].append_arg(buf); commands[PIC_INDEX].append_arg(buf); commands[GRAP_INDEX].append_arg(buf); commands[TBL_INDEX].append_arg(buf); commands[GRN_INDEX].append_arg(buf); commands[EQN_INDEX].append_arg(buf); commands[TROFF_INDEX].append_arg(buf); break; case 'N': commands[EQN_INDEX].append_arg(buf); break; case 'h': help(); break; case 'E': case 'b': commands[TROFF_INDEX].append_arg(buf); break; case 'c': commands[TROFF_INDEX].append_arg(buf); break; case 'S': safer_flag = 1; break; case 'U': safer_flag = 0; break; case 'T': if (strcmp(optarg, "html") == 0) { // force soelim to aid the html preprocessor commands[SOELIM_INDEX].set_name(command_prefix, "soelim"); } if (strcmp(optarg, "Xps") == 0) { warning("-TXps option is obsolete: use -X -Tps instead"); device = "ps"; Xflag++; } else device = optarg; break; case 'F': font::command_line_font_dir(optarg); if (Fargs.length() > 0) { Fargs += PATH_SEP_CHAR; Fargs += optarg; } else Fargs = optarg; break; case 'o': oflag = 1; case 'f': case 'm': case 'r': case 'd': case 'n': case 'w': case 'W': commands[TROFF_INDEX].append_arg(buf, optarg); break; case 'M': commands[EQN_INDEX].append_arg(buf, optarg); commands[GRAP_INDEX].append_arg(buf, optarg); commands[GRN_INDEX].append_arg(buf, optarg); commands[TROFF_INDEX].append_arg(buf, optarg); break; case 'P': Pargs += optarg; Pargs += '\0'; break; case 'L': append_arg_to_string(optarg, Largs); break; case 'X': Xflag++; break; case '?': usage(stderr); exit(1); break; default: assert(0); break; } } if (safer_flag) commands[PIC_INDEX].append_arg("-S"); else commands[TROFF_INDEX].insert_arg("-U"); font::set_unknown_desc_command_handler(handle_unknown_desc_command); if (!font::load_desc()) fatal("invalid device `%1'", device); if (!postdriver) fatal("no `postpro' command in DESC file for device `%1'", device); if (predriver && !zflag) { commands[TROFF_INDEX].insert_arg(commands[TROFF_INDEX].get_name()); commands[TROFF_INDEX].set_name(predriver); // pass the device arguments to the predrivers as well commands[TROFF_INDEX].insert_args(Pargs); if (vflag) commands[TROFF_INDEX].insert_arg("-v"); } const char *real_driver = 0; if (Xflag) { real_driver = postdriver; postdriver = (char *)GXDITVIEW; commands[TROFF_INDEX].append_arg("-r" XREG "=", "1"); } if (postdriver) commands[POST_INDEX].set_name(postdriver); int gxditview_flag = postdriver && strcmp(xbasename(postdriver), GXDITVIEW) == 0; if (gxditview_flag && argc - optind == 1) { commands[POST_INDEX].append_arg("-title"); commands[POST_INDEX].append_arg(argv[optind]); commands[POST_INDEX].append_arg("-xrm"); commands[POST_INDEX].append_arg("*iconName:", argv[optind]); string filename_string("|"); append_arg_to_string(argv[0], filename_string); append_arg_to_string("-Z", filename_string); for (int i = 1; i < argc; i++) append_arg_to_string(argv[i], filename_string); filename_string += '\0'; commands[POST_INDEX].append_arg("-filename"); commands[POST_INDEX].append_arg(filename_string.contents()); } if (gxditview_flag && Xflag) { string print_string(real_driver); if (spooler) { print_string += " | "; print_string += spooler; print_string += Largs; } print_string += '\0'; commands[POST_INDEX].append_arg("-printCommand"); commands[POST_INDEX].append_arg(print_string.contents()); } const char *p = Pargs.contents(); const char *end = p + Pargs.length(); while (p < end) { commands[POST_INDEX].append_arg(p); p = strchr(p, '\0') + 1; } if (gxditview_flag) commands[POST_INDEX].append_arg("-"); if (lflag && !vflag && !Xflag && spooler) { commands[SPOOL_INDEX].set_name(BSHELL); commands[SPOOL_INDEX].append_arg(BSHELL_DASH_C); Largs += '\0'; Largs = spooler + Largs; commands[SPOOL_INDEX].append_arg(Largs.contents()); } if (zflag) { commands[POST_INDEX].set_name(0); commands[SPOOL_INDEX].set_name(0); } commands[TROFF_INDEX].append_arg("-T", device); // html renders equations as images via ps if (strcmp(device, "html") == 0) { if (oflag) fatal("`-o' option is invalid with device `html'"); commands[EQN_INDEX].append_arg("-Tps:html"); } else commands[EQN_INDEX].append_arg("-T", device); commands[GRN_INDEX].append_arg("-T", device); int first_index; for (first_index = 0; first_index < TROFF_INDEX; first_index++) if (commands[first_index].get_name() != 0) break; if (optind < argc) { if (argv[optind][0] == '-' && argv[optind][1] != '\0') commands[first_index].append_arg("--"); for (int i = optind; i < argc; i++) commands[first_index].append_arg(argv[i]); if (iflag) commands[first_index].append_arg("-"); } if (Fargs.length() > 0) { string e = "GROFF_FONT_PATH"; e += '='; e += Fargs; char *fontpath = getenv("GROFF_FONT_PATH"); if (fontpath && *fontpath) { e += PATH_SEP_CHAR; e += fontpath; } e += '\0'; if (putenv(strsave(e.contents()))) fatal("putenv failed"); } { // we save the original path in GROFF_PATH__ and put it into the // environment -- troff will pick it up later. char *path = getenv("PATH"); string e = "GROFF_PATH__"; e += '='; if (path && *path) e += path; e += '\0'; if (putenv(strsave(e.contents()))) fatal("putenv failed"); char *binpath = getenv("GROFF_BIN_PATH"); string f = "PATH"; f += '='; if (binpath && *binpath) f += binpath; else f += BINPATH; if (path && *path) { f += PATH_SEP_CHAR; f += path; } f += '\0'; if (putenv(strsave(f.contents()))) fatal("putenv failed"); } if (Vflag) print_commands(Vflag == 1 ? stdout : stderr); if (Vflag == 1) exit(0); return run_commands(vflag); }
/** * @function DoLoad * @brief Load world from RSDH file */ void GRIPFrame::DoLoad(string filename, bool savelastload) { continueSimulation = false; size_t numPages = tabView->GetPageCount(); if (mWorld) { // fire SceneUnloaded hooks for(size_t i=0; i< numPages; i++) { GRIPTab* tab = (GRIPTab*)tabView->GetPage(i); tab->GRIPEventSceneUnloaded(); } // delete the world DeleteWorld(); } dart::utils::DartLoader dl; mWorld = dl.parseWorld( filename.c_str() ); // NULL World if( !mWorld ) { std::cout<< "[GRIP] World pointer null. Try again with a good URDF file"<<std::endl; return; } else if(mWorld->getNumSkeletons() == 0) { std::cout<< "[GRIP] Empty world? Neither robots nor objects loaded. Try again loading a world urdf"<< std::endl; return; } // Add floor dart::dynamics::Skeleton* ground = new dart::dynamics::Skeleton(); ground->setName("ground"); dart::dynamics::BodyNode* node = new dart::dynamics::BodyNode("ground"); node->setMass(1.0); dart::dynamics::Shape* shape = new dart::dynamics::BoxShape(Eigen::Vector3d(10.0, 10.0, 0.0001)); shape->setColor(Eigen::Vector3d(0.5, 0.5, 1.0)); node->addCollisionShape(shape); dart::dynamics::Joint* joint = new dart::dynamics::WeldJoint(); joint->setName("groundJoint"); joint->setTransformFromParentBodyNode(Eigen::Isometry3d::Identity()); joint->setTransformFromChildBodyNode(Eigen::Isometry3d::Identity()); node->setParentJoint(joint); ground->addBodyNode(node); ground->setMobile(false); mWorld->addSkeleton(ground); // Compile OpenGL displaylists for(int i=0; i < mWorld->getNumSkeletons(); i++) { viewer->renderer.compileList(mWorld->getSkeleton(i)); } // UpdateTreeView(); cout << "--(v) Done Parsing World information (v)--" << endl; treeView->CreateFromWorld(); cout << "--(v) Done Updating TreeView (v)--" << endl; SetStatusText(wxT("--(i) Done Loading and updating the View (i)--")); /// Extract path to executable & save "lastload" there if (savelastload) { cout << "--(i) Saving " << filename << " to .lastload file (i)--" << endl; wxString filename_string(filename.c_str(), wxConvUTF8); saveText(filename_string,".lastload"); } selectedTreeNode = 0; treeView->ExpandAll(); updateAllTabs(); // fire SceneLoaded hooks for(size_t i=0; i< numPages; i++) { GRIPTab* tab = (GRIPTab*)tabView->GetPage(i); tab->GRIPEventSceneLoaded(); } viewer->DrawGLScene(); }