public void ExportLink(bool zIsUp) { CreateBaseRefOrigin(zIsUp); MathTransform coordSysTransform = ActiveSWModel.Extension.GetCoordinateSystemTransformByName("Origin_global"); Matrix <double> GlobalTransform = MathOps.GetTransformation(coordSysTransform); LocalizeLink(URDFRobot.BaseLink, GlobalTransform); //Creating package directories URDFPackage package = new URDFPackage(PackageName, SavePath); package.CreateDirectories(); string meshFileName = package.MeshesDirectory + URDFRobot.BaseLink.Name + ".STL"; string windowsMeshFileName = package.WindowsMeshesDirectory + URDFRobot.BaseLink.Name + ".STL"; string windowsURDFFileName = package.WindowsRobotsDirectory + URDFRobot.Name + ".urdf"; string windowsManifestFileName = package.WindowsPackageDirectory + "manifest.xml"; //Creating manifest file PackageXMLWriter manifestWriter = new PackageXMLWriter(windowsManifestFileName); PackageXML Manifest = new PackageXML(URDFRobot.Name); Manifest.WriteElement(manifestWriter); //Customizing STL preferences to how I want them SaveUserPreferences(); SetSTLExportPreferences(); SetLinkSpecificSTLPreferences("", URDFRobot.BaseLink.STLQualityFine, ActiveSWModel); int errors = 0; int warnings = 0; //Saving part as STL mesh ActiveSWModel.Extension.SaveAs(windowsMeshFileName, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref errors, ref warnings); URDFRobot.BaseLink.Visual.Geometry.Mesh.Filename = meshFileName; URDFRobot.BaseLink.Collision.Geometry.Mesh.Filename = meshFileName; URDFRobot.BaseLink.Visual.Material.Texture.Filename = package.TexturesDirectory + Path.GetFileName(URDFRobot.BaseLink.Visual.Material.Texture.wFilename); string textureSavePath = package.WindowsTexturesDirectory + Path.GetFileName(URDFRobot.BaseLink.Visual.Material.Texture.wFilename); if (!String.IsNullOrWhiteSpace(URDFRobot.BaseLink.Visual.Material.Texture.wFilename)) { File.Copy(URDFRobot.BaseLink.Visual.Material.Texture.wFilename, textureSavePath, true); } //Writing URDF to file URDFWriter uWriter = new URDFWriter(windowsURDFFileName); //mRobot.addLink(mLink); URDFRobot.WriteURDF(uWriter.writer); ResetUserPreferences(); }
// Beginning method for exporting the full package public void ExportRobot(bool exportSTL = true) { //Setting up the progress bar logger.Info("Beginning the export process"); int progressBarBound = Common.GetCount(URDFRobot.BaseLink); iSwApp.GetUserProgressBar(out progressBar); progressBar.Start(0, progressBarBound, "Creating package directories"); //Creating package directories logger.Info("Creating package directories with name " + PackageName + " and save path " + SavePath); URDFPackage package = new URDFPackage(PackageName, SavePath); package.CreateDirectories(); URDFRobot.Name = PackageName; string windowsURDFFileName = package.WindowsRobotsDirectory + URDFRobot.Name + ".urdf"; string windowsCSVFileName = package.WindowsRobotsDirectory + URDFRobot.Name + ".csv"; string windowsPackageXMLFileName = package.WindowsPackageDirectory + "package.xml"; //Create CMakeLists logger.Info("Creating CMakeLists.txt at " + package.WindowsCMakeLists); package.CreateCMakeLists(); //Create Config joint names, not sure how this is used... logger.Info("Creating joint names config at " + package.WindowsConfigYAML); package.CreateConfigYAML(URDFRobot.GetJointNames(false)); //Creating package.xml file logger.Info("Creating package.xml at " + windowsPackageXMLFileName); PackageXMLWriter packageXMLWriter = new PackageXMLWriter(windowsPackageXMLFileName); PackageXML packageXML = new PackageXML(PackageName); packageXML.WriteElement(packageXMLWriter); //Creating RVIZ launch file Rviz rviz = new Rviz(PackageName, URDFRobot.Name + ".urdf"); logger.Info("Creating RVIZ launch file in " + package.WindowsLaunchDirectory); rviz.WriteFiles(package.WindowsLaunchDirectory); //Creating Gazebo launch file Gazebo gazebo = new Gazebo(URDFRobot.Name, PackageName, URDFRobot.Name + ".urdf"); logger.Info("Creating Gazebo launch file in " + package.WindowsLaunchDirectory); gazebo.WriteFile(package.WindowsLaunchDirectory); //Customizing STL preferences to how I want them logger.Info("Saving existing STL preferences"); SaveUserPreferences(); logger.Info("Modifying STL preferences"); SetSTLExportPreferences(); //Saving part as STL mesh AssemblyDoc assyDoc = (AssemblyDoc)ActiveSWModel; List <string> hiddenComponents = Common.FindHiddenComponents(assyDoc.GetComponents(false)); logger.Info("Found " + hiddenComponents.Count + " hidden components " + String.Join(", ", hiddenComponents)); logger.Info("Hiding all components"); ActiveSWModel.Extension.SelectAll(); ActiveSWModel.HideComponent2(); bool success = false; try { logger.Info("Beginning individual files export"); ExportFiles(URDFRobot.BaseLink, package, 0, exportSTL); success = true; } catch (Exception e) { logger.Error("An exception was thrown attempting to export the URDF", e); } finally { logger.Info("Showing all components except previously hidden components"); Common.ShowAllComponents(ActiveSWModel, hiddenComponents); logger.Info("Resetting STL preferences"); ResetUserPreferences(); } if (!success) { MessageBox.Show("Exporting the URDF failed unexpectedly. Email your maintainer " + "with the log file found at " + Logger.GetFileName()); return; } logger.Info("Writing URDF file to " + windowsURDFFileName); URDFWriter uWriter = new URDFWriter(windowsURDFFileName); URDFRobot.WriteURDF(uWriter.writer); ImportExport.WriteRobotToCSV(URDFRobot, windowsCSVFileName); logger.Info("Copying log file"); CopyLogFile(package); logger.Info("Resetting STL preferences"); ResetUserPreferences(); progressBar.End(); }