示例#1
0
        public void checkIfJointNamesAreUnique(LinkNode basenode, LinkNode currentNode, List<List<string>> conflicts)
        {
            List<string> conflict = new List<string>();

            //Finds the conflicts of the currentNode with all the other nodes
            checkIfJointNamesAreUnique(basenode, currentNode.jointName, conflict);
            bool alreadyExists = false;
            foreach (List<string> existingConflict in conflicts)
            {
                if (conflict.Count > 0 && existingConflict.Contains(conflict[0]))
                {
                    alreadyExists = true;
                }
            }

            if (!alreadyExists)
            {
                conflicts.Add(conflict);
            }
            foreach (LinkNode child in currentNode.Nodes)
            {
                //Proceeds recursively through the children nodes and adds to the conflicts list of lists.
                checkIfJointNamesAreUnique(basenode, child, conflicts);
            }
        }
示例#2
0
 //As nodes are created and destroyed, this menu gets called a lot. It basically just adds the context menu (right-click menu)
 // to the node
 public void addDocMenu(LinkNode node)
 {
     node.ContextMenuStrip = docMenu;
     foreach (LinkNode child in node.Nodes)
     {
         addDocMenu(child);
     }
 }
示例#3
0
 public void checkIfJointNamesAreUnique(LinkNode node, string jointName, List<string> conflict)
 {
     if (node.jointName == jointName)
     {
         conflict.Add(node.linkName);
     }
     foreach (LinkNode child in node.Nodes)
     {
         checkIfLinkNamesAreUnique(child, jointName, conflict);
     }
 }
示例#4
0
        public AssemblyExportForm(ISldWorks iSwApp, LinkNode node)
        {
            InitializeComponent();
            swApp = iSwApp;
            BaseNode = node;
            ActiveSWModel = swApp.ActiveDoc;
            Exporter = new URDFExporter(iSwApp);
            AutoUpdatingForm = false;


            jointBoxes = new Control[] {
                textBox_joint_name, comboBox_axis, comboBox_joint_type,
                textBox_axis_x, textBox_axis_y, textBox_axis_z,
                textBox_joint_x, textBox_joint_y, textBox_joint_z, textBox_joint_pitch, textBox_joint_roll, textBox_joint_yaw,
                textBox_limit_lower, textBox_limit_upper, textBox_limit_effort, textBox_limit_velocity,
                textBox_damping, textBox_friction,
                textBox_calibration_falling, textBox_calibration_rising,
                textBox_soft_lower, textBox_soft_upper, textBox_k_position, textBox_k_velocity
            };
            linkBoxes = new Control[] {
                textBox_inertial_origin_x, textBox_inertial_origin_y, textBox_inertial_origin_z, textBox_inertial_origin_roll, textBox_inertial_origin_pitch, textBox_inertial_origin_yaw,
                textBox_visual_origin_x, textBox_visual_origin_y, textBox_visual_origin_z, textBox_visual_origin_roll, textBox_visual_origin_pitch, textBox_visual_origin_yaw,
                textBox_collision_origin_x, textBox_collision_origin_y, textBox_collision_origin_z, textBox_collision_origin_roll, textBox_collision_origin_pitch, textBox_collision_origin_yaw,
                textBox_ixx, textBox_ixy, textBox_ixz, textBox_iyy, textBox_iyz, textBox_izz,
                textBox_mass, 
                domainUpDown_red, domainUpDown_green, domainUpDown_blue, domainUpDown_alpha,
                comboBox_materials,
                textBox_texture
            };

            saveConfigurationAttributeDef = iSwApp.DefineAttribute("URDF Export Configuration");
            int Options = 0;

            saveConfigurationAttributeDef.AddParameter("data", (int)swParamType_e.swParamTypeString, 0, Options);
            saveConfigurationAttributeDef.AddParameter("name", (int)swParamType_e.swParamTypeString, 0, Options);
            saveConfigurationAttributeDef.AddParameter("date", (int)swParamType_e.swParamTypeString, 0, Options);
            saveConfigurationAttributeDef.AddParameter("exporterVersion", (int)swParamType_e.swParamTypeDouble, 1.0, Options);
            saveConfigurationAttributeDef.Register();
        }
示例#5
0
        private void button_joint_next_Click(object sender, EventArgs e)
        {
            if (!(previouslySelectedNode == null || previouslySelectedNode.Link.Joint == null))
            {
                 saveJointDataFromPropertyBoxes(previouslySelectedNode.Link.Joint);
            }
            previouslySelectedNode = null; // Need to clear this for the link properties page
            //treeView_linkProperties.Nodes.Clear();
            //Exporter.mRobot = createRobotFromTreeView(treeView_jointtree);
            //fillTreeViewFromRobot(Exporter.mRobot, treeView_linkProperties);

            while (treeView_jointtree.Nodes.Count > 0)
            {
                LinkNode node = (LinkNode)treeView_jointtree.Nodes[0];
                treeView_jointtree.Nodes.Remove(node);
                BaseNode.Nodes.Add(node);
            }
            changeAllNodeFont(BaseNode, new System.Drawing.Font(treeView_jointtree.Font, FontStyle.Regular));
            fillLinkTree();
            panel_link_properties.Visible = true;
            this.Focus();
        }
示例#6
0
        // Calls the Exporter loadConfigTree method and then populates the tree with the loaded config
        public void loadConfigTree()
        {
            Object[] objects = ActiveSWModel.FeatureManager.GetFeatures(true);
            string data = "";
            foreach (Object obj in objects)
            {
                Feature feat = (Feature)obj;
                string t = feat.GetTypeName2();
                if (feat.GetTypeName2() == "Attribute")
                {
                    SolidWorks.Interop.sldworks.Attribute att = (SolidWorks.Interop.sldworks.Attribute)feat.GetSpecificFeature2();
                    if (att.GetName() == "URDF Export Configuration")
                    {
                        Parameter param = att.GetParameter("data");
                        data = param.GetStringValue();
                    }
                }

            }
            LinkNode basenode = null;
            if (!data.Equals(""))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(SerialNode));
                XmlTextReader textReader = new XmlTextReader(new StringReader(data));
                SerialNode node = (SerialNode)serializer.Deserialize(textReader);
                basenode = new LinkNode(node);
                Common.loadSWComponents(ActiveSWModel, basenode);
                textReader.Close();
            }

            if (basenode == null)
            {
                basenode = createEmptyNode(null);
            }
            addDocMenu(basenode);

            tree.Nodes.Clear();
            tree.Nodes.Add(basenode);
            tree.ExpandAll();
            tree.SelectedNode = tree.Nodes[0];
        }
示例#7
0
 // Finds the next incomplete node and returns that
 public LinkNode findNextLinkToVisit(LinkNode nodeToCheck)
 {
     if (nodeToCheck.Link.isIncomplete)
     {
         return nodeToCheck;
     }
     foreach (LinkNode node in nodeToCheck.Nodes)
     {
         return findNextLinkToVisit(node);
     }
     return null;
 }
示例#8
0
        // The one used by the Assembly Exporter
        public void createRobotFromTreeView(LinkNode baseNode)
        {
            mRobot = new robot();

            progressBar.Start(0, Common.getCount(baseNode.Nodes) + 1, "Building links");
            int count = 0;

            progressBar.UpdateProgress(count);
            progressBar.UpdateTitle("Building link: " + baseNode.Name);
            count++;

            link BaseLink = createLink(baseNode, 1);
            mRobot.BaseLink = BaseLink;
            baseNode.Link = BaseLink;

            progressBar.End();
        }
示例#9
0
        //Populates the TreeView with the organized links from the robot
        public void fillTreeViewFromRobot(robot robot)
        {
            tree.Nodes.Clear();
            LinkNode baseNode = new LinkNode();
            link baseLink = robot.BaseLink;
            baseNode.Name = baseLink.name;
            baseNode.Text = baseLink.name;
            baseNode.Link = baseLink;
            baseNode.ContextMenuStrip = docMenu;

            foreach (link child in baseLink.Children)
            {
                baseNode.Nodes.Add(createLinkNodeFromLink(child));
            }
            tree.Nodes.Add(baseNode);
            tree.ExpandAll();
        }
示例#10
0
        //Method which builds an entire link and iterates through.
        public link createLink(LinkNode node, int count)
        {
            progressBar.UpdateTitle("Building link: " + node.Name);
            progressBar.UpdateProgress(count);
            link Link;
            if (node.isBaseNode)
            {

                createBaseLinkFromComponents(node);
                Link = mRobot.BaseLink;
            }
            else
            {
                LinkNode parentNode = (LinkNode)node.Parent;
                Link = createLinkFromComponents(parentNode.Link, node.Components, node);
            }
            node.Link = Link;
            foreach (LinkNode child in node.Nodes)
            {
                link childLink = createLink(child, count + 1);
                Link.Children.Add(childLink);
            }
            return Link;
        }
示例#11
0
 public void selectFeatures(LinkNode node)
 {
     ActiveSWModel.Extension.SelectByID2(node.coordsysName, "COORDSYS", 0, 0, 0, true, -1, null, 0);
     if (node.axisName != "None")
     {
         ActiveSWModel.Extension.SelectByID2(node.axisName, "AXIS", 0, 0, 0, true, -1, null, 0);
     }
     foreach (LinkNode child in node.Nodes)
     {
         selectFeatures(child);
     }
 }
示例#12
0
 public void checkRefGeometryExists(LinkNode node)
 {
     if (!checkRefCoordsysExists(node.coordsysName))
     {
         node.coordsysName = "Automatically Generate";
     }
     if (!checkRefAxisExists(node.axisName))
     {
         node.axisName = "Automatically Generate";
     }
 }
示例#13
0
        //Creates an Empty node when children are added to a link
        public LinkNode createEmptyNode(LinkNode Parent)
        {
            LinkNode node = new LinkNode();

            if (Parent == null)             //For the base_link node
            {
                node.linkName = "base_link";
                node.axisName = "";
                node.coordsysName = "Automatically Generate";
                node.Components = new List<Component2>();
                node.isBaseNode = true;
                node.isIncomplete = true;
            }
            else
            {
                node.isBaseNode = false;
                node.linkName = "Empty_Link";
                node.axisName = "Automatically Generate";
                node.coordsysName = "Automatically Generate";
                node.jointType = "Automatically Detect";
                node.Components = new List<Component2>();
                node.isBaseNode = false;
                node.isIncomplete = true;
            }
            node.Name = node.linkName;
            node.Text = node.linkName;
            node.ContextMenuStrip = docMenu;
            return node;
        }
示例#14
0
 //Recursive function to iterate though nodes and build a message containing those that are incomplete
 public string checkNodesComplete(LinkNode node, string incompleteNodes)
 {
     // Determine if the node is incomplete
     checkNodeComplete(node);
     if (node.isIncomplete)
     {
         incompleteNodes += "    '" + node.Text + "':\r\n" + node.whyIncomplete + "\r\n\r\n"; //Building the message
     }
     // Cycle through the rest of the nodes
     foreach (LinkNode child in node.Nodes)
     {
         incompleteNodes = checkNodesComplete(child, incompleteNodes);
     }
     return incompleteNodes;
 }
示例#15
0
 //Sets the node's isIncomplete flag if the node has key items that need to be completed
 public void checkNodeComplete(LinkNode node)
 {
     node.whyIncomplete = "";
     node.isIncomplete = false;
     if (node.linkName.Equals(""))
     {
         node.isIncomplete = true;
         node.whyIncomplete += "        Link name is empty. Fill in a unique link name\r\n";
     }
     if (node.Nodes.Count > 0 && node.Components.Count == 0)
     {
         node.isIncomplete = true;
         node.whyIncomplete += "        Links with children cannot be empty. Select its associated components\r\n";
     }
     if (node.Components.Count == 0 && node.coordsysName == "Automatically Generate")
     {
         node.isIncomplete = true;
         node.whyIncomplete += "        The origin reference coordinate system cannot be automatically generated\r\n";
         node.whyIncomplete += "        without components. Either select an origin or at least one component.";
     }
     if (node.jointName == "" && !node.isBaseNode)
     {
         node.isIncomplete = true;
         node.whyIncomplete += "        Joint name is empty. Fill in a unique joint name\r\n";
     }
 }
示例#16
0
        public bool checkIfNamesAreUnique(LinkNode node)
        {
            List<List<string>> linkConflicts = new List<List<string>>();
            List<List<string>> jointConflicts = new List<List<string>>();
            checkIfLinkNamesAreUnique(node, node, linkConflicts);
            checkIfJointNamesAreUnique(node, node, jointConflicts);

            string message = "\r\nPlease fix these errors before proceeding.";
            string specificErrors = "";
            bool displayInitialMessage = true;
            bool linkNamesInConflict = false;
            foreach (List<string> conflict in linkConflicts)
            {
                if (conflict.Count > 1)
                {
                    linkNamesInConflict = true;
                    if (displayInitialMessage)
                    {
                        specificErrors += "The following links have LINK names that conflict:\r\n\r\n";
                        displayInitialMessage = false;
                    }
                    bool isFirst = true;
                    foreach (string linkName in conflict)
                    {
                        specificErrors += (isFirst) ? "     " + linkName : ", " + linkName;
                        isFirst = false;
                    }
                    specificErrors += "\r\n";

                }

            }
            displayInitialMessage = true;
            foreach (List<string> conflict in jointConflicts)
            {
                if (conflict.Count > 1)
                {
                    linkNamesInConflict = true;
                    if (displayInitialMessage)
                    {
                        specificErrors += "The following links have JOINT names that conflict:\r\n\r\n";
                        displayInitialMessage = false;
                    }
                    bool isFirst = true;
                    foreach (string linkName in conflict)
                    {
                        specificErrors += (isFirst) ? "     " + linkName : ", " + linkName;
                        isFirst = false;
                    }
                    specificErrors += "\r\n";
                }
            }
            if (linkNamesInConflict)
            {
                MessageBox.Show(specificErrors + message);
                return false;
            }
            return true;
        }
示例#17
0
 // Captures which node was right clicked
 private void tree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
 {
     rightClickedNode = (LinkNode)e.Node;
 }
示例#18
0
        //Base method for constructing a joint from a parent link and child link.
        public void createJoint(link parent, link child, LinkNode node)
        {
            checkRefGeometryExists(node);

            string jointName = node.jointName;
            string coordSysName = node.coordsysName;
            string axisName = node.axisName;
            string jointType = node.jointType;

            List<Component2> componentsToFix = fixComponents(parent);
            AssemblyDoc assy = (AssemblyDoc)ActiveSWModel;

            child.Joint = new joint();
            child.Joint.name = jointName;
            child.Joint.Parent.name = parent.name;
            child.Joint.Child.name = child.name;

            if (child.isFixedFrame)
            {
                axisName = "";
                jointType = "fixed";
                child.Joint.type = jointType;
            }
            else if (coordSysName == "Automatically Generate" || axisName == "Automatically Generate" || jointType == "Automatically Detect")
            {
                // We have to estimate the joint if the user specifies automatic for either the reference coordinate system, the reference axis or the joint type.
                estimateGlobalJointFromComponents(assy, parent, child);
            }

            if (coordSysName == "Automatically Generate")
            {
                child.Joint.CoordinateSystemName = "Origin_" + child.Joint.name;
                ActiveSWModel.ClearSelection2(true);
                int i = 2;
                while (ActiveSWModel.Extension.SelectByID2(child.Joint.CoordinateSystemName, "COORDSYS", 0, 0, 0, false, 0, null, 0))
                {
                    ActiveSWModel.ClearSelection2(true);
                    child.Joint.CoordinateSystemName = "Origin_" + child.Joint.name + i.ToString();
                    i++;
                }
                createRefOrigin(child.Joint);
            }
            else
            {
                child.Joint.CoordinateSystemName = coordSysName;
            }
            if (axisName == "Automatically Generate")
            {
                child.Joint.AxisName = "Axis_" + child.Joint.name;
                ActiveSWModel.ClearSelection2(true);
                int i = 2;
                while (ActiveSWModel.Extension.SelectByID2(child.Joint.AxisName, "AXIS", 0, 0, 0, false, 0, null, 0))
                {
                    ActiveSWModel.ClearSelection2(true);
                    child.Joint.AxisName = "Axis_" + child.Joint.name + i.ToString();
                    i++;
                }
                if (child.Joint.type != "fixed")
                {
                    createRefAxis(child.Joint);
                }
            }
            else
            {
                child.Joint.AxisName = axisName;
            }
            if (jointType != "Automatically Detect")
            {
                child.Joint.type = jointType;
            }

            estimateGlobalJointFromRefGeometry(parent, child);

            coordSysName = (parent.Joint == null) ? parent.CoordSysName : parent.Joint.CoordinateSystemName;
            unFixComponents(componentsToFix);
            localizeJoint(child.Joint, coordSysName);
        }
示例#19
0
        //Method which builds a single link
        public link createLinkFromComponents(link parent, List<Component2> components, LinkNode node)
        {
            link child = new link();
            child.name = node.linkName;

            if (components.Count > 0)
            {
                child.isFixedFrame = false;
                child.Visual = new visual();
                child.Inertial = new inertial();
                child.Collision = new collision();
                child.SWMainComponent = components[0];
                child.SWcomponents.AddRange(components);
            }
            //Get link properties from SolidWorks part

            if (parent != null)
            {
                createJoint(parent, child, node);
            }

            string childCoordSysName = "";
            if (child.Joint == null)
            {
                childCoordSysName = node.coordsysName;
            }
            else
            {
                childCoordSysName = child.Joint.CoordinateSystemName;
            }

            // Get the SolidWorks MathTransform that corresponds to the child coordinate system
            MathTransform jointTransform = getCoordinateSystemTransform(childCoordSysName);

            if (!child.isFixedFrame)
            {
                //selectComponents(components, true);
                IMassProperty swMass = ActiveSWModel.Extension.CreateMassProperty();
                swMass.SetCoordinateSystem(jointTransform);

                Body2[] bodies = getBodies(components);
                bool addedBodies = swMass.AddBodies(bodies);
                child.Inertial.Mass.value = swMass.Mass;
                double[] moment = swMass.GetMomentOfInertia((int)swMassPropertyMoment_e.swMassPropertyMomentAboutCenterOfMass); // returned as double with values [Lxx, Lxy, Lxz, Lyx, Lyy, Lyz, Lzx, Lzy, Lzz]
                child.Inertial.Inertia.setMomentMatrix(moment);

                double[] centerOfMass = swMass.CenterOfMass;
                child.Inertial.Origin.xyz = centerOfMass;
                child.Inertial.Origin.rpy = new double[3] { 0, 0, 0 };

                // Will this ever not be zeros?
                child.Visual.Origin.xyz = new double[3] { 0, 0, 0 };
                child.Visual.Origin.rpy = new double[3] { 0, 0, 0 };
                child.Collision.Origin.xyz = new double[3] { 0, 0, 0 };
                child.Collision.Origin.rpy = new double[3] { 0, 0, 0 };

                // [ R, G, B, Ambient, Diffuse, Specular, Shininess, Transparency, Emission ]
                ModelDoc2 mainCompdoc = components[0].GetModelDoc2();
                double[] values = mainCompdoc.MaterialPropertyValues;
                child.Visual.Material.Color.Red = values[0];
                child.Visual.Material.Color.Green = values[1];
                child.Visual.Material.Color.Blue = values[2];
                child.Visual.Material.Color.Alpha = 1.0 - values[7];
                //child.Visual.Material.name = "material_" + child.name;

                //The part model doesn't actually know where the origin is, but the component does and this is important when exporting from assembly
                child.Visual.Origin.xyz = new double[] { 0, 0, 0 };
                child.Visual.Origin.rpy = new double[] { 0, 0, 0 };
                child.Collision.Origin.xyz = new double[] { 0, 0, 0 };
                child.Collision.Origin.rpy = new double[] { 0, 0, 0 };
            }

            //ActiveSWModel.ClearSelection2(true);
            return child;
        }
示例#20
0
 public void moveComponentsToFolder(LinkNode node)
 {
     bool needToCreateFolder = true;
     Object[] objects = ActiveSWModel.FeatureManager.GetFeatures(true);
     foreach (Object obj in objects)
     {
         Feature feat = (Feature)obj;
         if (feat.Name == "URDF Export Items")
         {
             needToCreateFolder = false;
         }
     }
     ActiveSWModel.ClearSelection2(true);
     ActiveSWModel.Extension.SelectByID2("Origin_global", "COORDSYS", 0, 0, 0, true, 0, null, 0);
     if (needToCreateFolder)
     {
         Feature folderFeature = ActiveSWModel.FeatureManager.InsertFeatureTreeFolder2((int)swFeatureTreeFolderType_e.swFeatureTreeFolder_Containing);
         folderFeature.Name = "URDF Export Items";
     }
     ActiveSWModel.Extension.SelectByID2("URDF Reference", "SKETCH", 0, 0, 0, true, 0, null, 0);
     ActiveSWModel.FeatureManager.MoveToFolder("URDF Export Items", "", false);
     ActiveSWModel.Extension.SelectByID2("URDF Export Configuration", "ATTRIBUTE", 0, 0, 0, true, 0, null, 0);
     ActiveSWModel.FeatureManager.MoveToFolder("URDF Export Items", "", false);
     selectFeatures(node);
     ActiveSWModel.FeatureManager.MoveToFolder("URDF Export Items", "", false);
 }
示例#21
0
 public void retrieveSWComponentPIDs(LinkNode node)
 {
     if (node.Components != null)
     {
         node.ComponentPIDs = new List<byte[]>();
         foreach (IComponent2 comp in node.Components)
         {
             byte[] PID = ActiveSWModel.Extension.GetPersistReference3(comp);
             node.ComponentPIDs.Add(PID);
         }
     }
     foreach (LinkNode child in node.Nodes)
     {
         retrieveSWComponentPIDs(child);
     }
 }
示例#22
0
 // Determines how many nodes need to be built, and they are added to the current node
 private void createNewNodes(LinkNode CurrentlySelectedNode)
 {
     int nodesToBuild = (int)pm_NumberBox_ChildCount.Value - CurrentlySelectedNode.Nodes.Count;
     createNewNodes(CurrentlySelectedNode, nodesToBuild);
 }
示例#23
0
        public void saveConfigTree(ModelDoc2 model, LinkNode BaseNode, bool warnUser)
        {
            Object[] objects = model.FeatureManager.GetFeatures(true);
            string oldData = "";
            Parameter param;
            foreach (Object obj in objects)
            {
                Feature feat = (Feature)obj;
                string t = feat.GetTypeName2();
                if (feat.GetTypeName2() == "Attribute")
                {
                    SolidWorks.Interop.sldworks.Attribute att = (SolidWorks.Interop.sldworks.Attribute)feat.GetSpecificFeature2();
                    if (att.GetName() == "URDF Export Configuration")
                    {
                        param = att.GetParameter("data");
                        oldData = param.GetStringValue();
                    }
                }
            }
            //moveComponentsToFolder((LinkNode)tree.Nodes[0]);
            retrieveSWComponentPIDs(BaseNode);
            SerialNode sNode = new SerialNode(BaseNode);
            StringWriter stringWriter;
            XmlSerializer serializer = new XmlSerializer(typeof(SerialNode));
            stringWriter = new StringWriter();
            serializer.Serialize(stringWriter, sNode);
            stringWriter.Flush();
            stringWriter.Close();

            string newData = stringWriter.ToString();
            if (oldData != newData)
            {
                if (!warnUser || (warnUser && MessageBox.Show("The configuration has changed, would you like to save?", "Save Export Configuration", MessageBoxButtons.YesNo) == DialogResult.Yes))
                {
                    int ConfigurationOptions = (int)swInConfigurationOpts_e.swAllConfiguration;
                    SolidWorks.Interop.sldworks.Attribute saveExporterAttribute = createSWSaveAttribute("URDF Export Configuration");
                    param = saveExporterAttribute.GetParameter("data");
                    param.SetStringValue2(stringWriter.ToString(), ConfigurationOptions, "");
                    param = saveExporterAttribute.GetParameter("name");
                    param.SetStringValue2("config1", ConfigurationOptions, "");
                    param = saveExporterAttribute.GetParameter("date");
                    param.SetStringValue2(DateTime.Now.ToString(), ConfigurationOptions, "");
                    param = saveExporterAttribute.GetParameter("exporterVersion");
                    param.SetStringValue2("1.1", ConfigurationOptions, "");
                }
            }
        }
示例#24
0
 // Adds an asterix to the node text if it is incomplete (not currently used)
 private void updateNodeNames(LinkNode node)
 {
     if (node.isIncomplete)
     {
         node.Text = node.linkName + "*";
     }
     foreach (LinkNode child in node.Nodes)
     {
         updateNodeNames(child);
     }
 }
示例#25
0
        // When a new node is selected or another node is found that needs to be visited, this method saves the previously
        // active node and fills in the property mananger with the new one
        public void switchActiveNodes(LinkNode node)
        {
            saveActiveNode();

            Font fontRegular = new Font(tree.Font, FontStyle.Regular);
            Font fontBold = new Font(tree.Font, FontStyle.Bold);
            if (previouslySelectedNode != null)
            {
                previouslySelectedNode.NodeFont = fontRegular;
            }
            fillPropertyManager(node);

            //If this flag is set to true, it prevents this method from getting called again when changing the selected node
            automaticallySwitched = true;

            //Change the selected node to the argument node. This highlights the newly activated node
            tree.SelectedNode = node;

            node.NodeFont = fontBold;
            node.Text = node.Text;
            previouslySelectedNode = node;
            checkNodeComplete(node);
        }
示例#26
0
 public void createBaseLinkFromComponents(LinkNode node)
 {
     // Build the link from the partdoc
     link Link = createLinkFromComponents(null, node.Components, node);
     if (node.coordsysName == "Automatically Generate")
     {
         createBaseRefOrigin(true);
         node.coordsysName = "Origin_global";
         Link.CoordSysName = node.coordsysName;
     }
     else
     {
         Link.CoordSysName = node.coordsysName;
     }
     mRobot.BaseLink = Link;
 }
示例#27
0
        // 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 = Common.getCount(tree.Nodes);
            int itemHeight = 1 + itemsCount * tree.ItemHeight;
            int min = 163;
            int max = 600;

            int height = ops.envelope(itemHeight, min, max);
            tree.Height = height;
            pm_tree.Height = height;
            currentNode.ExpandAll();
        }
示例#28
0
        // Similar to the AssemblyExportForm method. It creates a LinkNode from a Link object
        public LinkNode createLinkNodeFromLink(link Link)
        {
            LinkNode node = new LinkNode();
            node.Name = Link.name;
            node.Text = Link.name;
            node.Link = Link;
            node.ContextMenuStrip = docMenu;

            foreach (link child in Link.Children)
            {
                node.Nodes.Add(createLinkNodeFromLink(child));
            }
            node.Link.Children.Clear(); // Need to erase the children from the embedded link because they may be rearranged later.
            return node;
        }
示例#29
0
文件: URDF.cs 项目: chlai/sw2urdf
        public SerialNode(LinkNode node)
        {
            Nodes = new List<SerialNode>();
            if (node.Link == null)
            {
                linkName = node.linkName;
                jointName = node.jointName;
                axisName = node.axisName;
                coordsysName = node.coordsysName;
                componentPIDs = node.ComponentPIDs;
                jointType = node.jointType;
                isBaseNode = node.isBaseNode;
                isIncomplete = node.isIncomplete;
            }
            else
            {
                linkName = (string)node.Link.name;
                
                componentPIDs = node.ComponentPIDs;
                if (node.Link.Joint != null)
                {
                    jointName = (string)node.Link.Joint.name;

                    if (node.Link.Joint.Axis.X == 0 && node.Link.Joint.Axis.Y == 0 && node.Link.Joint.Axis.Z == 0)
                    {
                        axisName = "None";
                    }
                    else
                    {
                        axisName = node.Link.Joint.AxisName;
                    }
                    coordsysName = node.Link.Joint.CoordinateSystemName;
                    jointType = (string)node.Link.Joint.type;
                }
                else
                {
                    coordsysName = node.coordsysName;
                }

                isBaseNode = node.isBaseNode;
                isIncomplete = node.isIncomplete;
            }
            //Proceed recursively through the nodes
            foreach (LinkNode child in node.Nodes)
            {
                Nodes.Add(new SerialNode(child));
            }
        }
示例#30
0
        //Sets all the controls in the Property Manager from the Selected Node
        public void fillPropertyManager(LinkNode node)
        {
            pm_TextBox_LinkName.Text = node.linkName;
            pm_NumberBox_ChildCount.Value = node.Nodes.Count;

            //Selecting the associated link components
            Common.selectComponents(ActiveSWModel, node.Components, true, pm_Selection.Mark);

            //Setting joint properties
            if (!node.isBaseNode && node.Parent != null)
            {
                //Combobox needs to be blanked before de-activating
                selectComboBox(pm_ComboBox_GlobalCoordsys, "");

                //Labels need to be activated before changing them
                enableControls(!node.isBaseNode);
                pm_TextBox_JointName.Text = node.jointName;
                pm_Label_ParentLink.Caption = node.Parent.Name;

                updateComboBoxFromFeatures(pm_ComboBox_CoordSys, "CoordSys");
                //checkTransforms(ActiveSWModel);

                updateComboBoxFromFeatures(pm_ComboBox_Axes, "RefAxis");
                pm_ComboBox_Axes.AddItems("None");
                selectComboBox(pm_ComboBox_CoordSys, node.coordsysName);
                selectComboBox(pm_ComboBox_Axes, node.axisName);
                selectComboBox(pm_ComboBox_JointType, node.jointType);
            }
            else
            {
                //Labels and text box have be blanked before de-activating them
                pm_Label_ParentLink.Caption = " ";
                selectComboBox(pm_ComboBox_CoordSys, "");
                selectComboBox(pm_ComboBox_Axes, "");
                selectComboBox(pm_ComboBox_JointType, "");

                //Activate controls before changing them
                enableControls(!node.isBaseNode);
                updateComboBoxFromFeatures(pm_ComboBox_GlobalCoordsys, "CoordSys");
                selectComboBox(pm_ComboBox_GlobalCoordsys, node.coordsysName);
            }
        }