C # Создание программного представления дерева для структуры продукта Catia - PullRequest
0 голосов
/ 29 января 2019

У меня есть сомнения в программировании со структурами catia и создании структуры в виде дерева.Мне удалось создать до 2-х уровней, но они ломаются, когда есть больше уровней.Хотелось бы узнать, как я могу сделать это рекурсивным.Разместить часть моего кода ниже.Спасибо!

private void GetLinks(ProductStructureTypeLib.Product ProdPar, TreeNode rootnode)
    {

            MytreeView.Nodes.Add(rootnode);
            MytreeView.Nodes.Add(rootnode);
if (ProdPar.Products.Count > 0)
                {
                foreach (ProductStructureTypeLib.Product child in ProdPar.Products)
                {
                    INFITF.Document childDoc = (INFITF.Document)child.ReferenceProduct.Parent;

                    TreeNode childnode = new TreeNode();
                    childnode.Text = childDoc.get_Name();
                    treeList.Add(childDoc.get_Name());

                    rootnode.Nodes.Add(childnode);//childnode added--level 1                       

                    if (!IsDocumentAPart(childDoc))
                    {
                        ProductStructureTypeLib.Product prodRoot;
                        ProductStructureTypeLib.ProductDocument prodDoc;
                        prodDoc = (ProductStructureTypeLib.ProductDocument)childDoc;
                        prodRoot = prodDoc.Product;

                        if (prodRoot.Products.Count > 0)
                        {
                            ReadLinksChild(prodRoot, childnode);
                        }
                    }
                }
            }

private void ReadLinksChild(ProductStructureTypeLib.Product ProdPar, TreeNode node)
    {
        try
        {
            foreach (ProductStructureTypeLib.Product child in ProdPar.Products)
            {
                INFITF.Document childDoc = (INFITF.Document)child.ReferenceProduct.Parent;

                TreeNode childnode = new TreeNode();
                childnode.Text = childDoc.get_Name();

                node.Nodes.Add(childnode);//childnode added--level 1 

                if (!IsDocumentAPart(childDoc))
                {
                    ProductStructureTypeLib.Product prodRoot;
                    ProductStructureTypeLib.ProductDocument prodDoc;
                    prodDoc = (ProductStructureTypeLib.ProductDocument)childDoc;
                    prodRoot = prodDoc.Product;

                    if (prodRoot.Products.Count > 0)
                    {
                        ReadLinkedDocsProductChild(prodRoot, childnode);
                    }
                }
            }

        }
        catch (Exception ex)
        {
            logs.Info(ex.ToString());
        }
    }
...