private void SetConfigTree(LinkNode baseNode) { if (baseNode == null) { logger.Info("Starting new configuration"); baseNode = CreateEmptyNode(null); } else { List <string> problemLinks = new List <string>(); CommonSwOperations.LoadSWComponents(ActiveSWModel, baseNode, problemLinks); if (problemLinks.Count > 0) { string msg = "The following links had issues loading their associated SolidWorks components. " + "Please inspect before exporting\r\n\r\n" + string.Join(", ", problemLinks); MessageBox.Show(msg); } } AddDocMenu(baseNode); Tree.Nodes.Clear(); Tree.Nodes.Add(baseNode); Tree.ExpandAll(); Tree.SelectedNode = Tree.Nodes[0]; }
//Sets all the controls in the Property Manager from the Selected Node public void FillPropertyManager(LinkNode node) { PMTextBoxLinkName.Text = node.Link.Name; PMNumberBoxChildCount.Value = node.Nodes.Count; //Selecting the associated link components CommonSwOperations.SelectComponents(ActiveSWModel, node.Link.SWComponents, true, PMSelection.Mark); //Setting joint properties if (!node.IsBaseNode && node.Parent != null) { //Combobox needs to be blanked before de-activating SelectComboBox(PMComboBoxGlobalCoordsys, ""); //Labels need to be activated before changing them EnableControls(!node.IsBaseNode); PMTextBoxJointName.Text = node.Link.Joint.Name; PMLabelParentLink.Caption = node.Parent.Name; FillComboBox(PMComboBoxCoordSys, Exporter.GetRefCoordinateSystems()); FillComboBox(PMComboBoxAxes, Exporter.GetRefAxes()); PMComboBoxAxes.AddItems("None"); SelectComboBox(PMComboBoxCoordSys, node.Link.Joint.CoordinateSystemName); SelectComboBox(PMComboBoxAxes, node.Link.Joint.AxisName); SelectComboBox(PMComboBoxJointType, node.Link.Joint.Type); } else { //Labels and text box have be blanked before de-activating them PMLabelParentLink.Caption = " "; SelectComboBox(PMComboBoxCoordSys, ""); SelectComboBox(PMComboBoxAxes, ""); SelectComboBox(PMComboBoxJointType, ""); //Activate controls before changing them EnableControls(!node.IsBaseNode); FillComboBox(PMComboBoxGlobalCoordsys, Exporter.GetRefCoordinateSystems()); SelectComboBox(PMComboBoxGlobalCoordsys, node.Link.Joint.CoordinateSystemName); } }
// When the selected node is changed, the previously active node needs to be saved public void SaveActiveNode() { if (previouslySelectedNode != null) { previouslySelectedNode.Link.Name = PMTextBoxLinkName.Text; if (!previouslySelectedNode.IsBaseNode) { previouslySelectedNode.Link.Joint.Name = PMTextBoxJointName.Text; previouslySelectedNode.Link.Joint.AxisName = PMComboBoxAxes.get_ItemText(-1); previouslySelectedNode.Link.Joint.CoordinateSystemName = PMComboBoxCoordSys.get_ItemText(-1); previouslySelectedNode.Link.Joint.Type = PMComboBoxJointType.get_ItemText(-1); } else { previouslySelectedNode.Link.Joint.CoordinateSystemName = PMComboBoxGlobalCoordsys.get_ItemText(-1); } CommonSwOperations.GetSelectedComponents( ActiveSWModel, previouslySelectedNode.Link.SWComponents, PMSelection.Mark); } }
private bool SaveSTL(Link link, string windowsMeshFilename) { int errors = 0; int warnings = 0; string coordsysName = link.Joint.CoordinateSystemName; logger.Info(link.Name + ": Exporting STL with coordinate frame " + coordsysName); Dictionary <string, string> names = GetComponentRefGeoNames(coordsysName); ModelDoc2 ActiveDoc = ActiveSWModel; logger.Info(link.Name + ": Reference geometry name " + names["component"]); CommonSwOperations.ShowComponents(ActiveSWModel, link.SWComponents); int saveOptions = (int)swSaveAsOptions_e.swSaveAsOptions_Silent | (int)swSaveAsOptions_e.swSaveAsOptions_Copy; SetLinkSpecificSTLPreferences(names["geo"], link.STLQualityFine, ActiveDoc); logger.Info("Saving STL to " + windowsMeshFilename); ActiveDoc.Extension.SaveAs(windowsMeshFilename, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, saveOptions, null, ref errors, ref warnings); if (errors + warnings != 0) { logger.Warn("Exporting STL for link " + link.Name + " failed with error " + errors + " or warnings " + warnings); } CommonSwOperations.HideComponents(ActiveSWModel, link.SWComponents); bool success = CorrectSTLMesh(windowsMeshFilename); if (!success) { logger.Warn("There was an issue exporting the STL for " + link.Name + ". It " + "may not be readable by CAD programs that aren't SolidWorks"); } return(success); }
// Adds the number of empty nodes to the currently active node private void CreateNewNodes(LinkNode currentNode, int number) { for (int i = 0; i < number; i++) { LinkNode node = CreateEmptyNode(currentNode); currentNode.Nodes.Add(node); } for (int i = 0; i < -number; i++) { currentNode.Nodes.RemoveAt(currentNode.Nodes.Count - 1); } int itemsCount = CommonSwOperations.GetCount(Tree.Nodes); int itemHeight = 1 + itemsCount * Tree.ItemHeight; int min = 163; int max = 600; int height = MathOps.Envelope(itemHeight, min, max); Tree.Height = height; PMTree.Height = height; currentNode.ExpandAll(); }
public void SaveConfigTree(ModelDoc2 model, LinkNode BaseNode, bool warnUser) { CommonSwOperations.RetrieveSWComponentPIDs(model, BaseNode); ConfigurationSerialization.SaveConfigTreeXML(swApp, model, BaseNode, warnUser); }
// 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 = CommonSwOperations.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 = CommonSwOperations.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"); CommonSwOperations.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(); }