NXの二次開発-UIStyler-ツリー(ツリー)アプリケーション(1)

開発者はUIStylerを使用して、NXスタイルと同じ操作インターフェイスを設計できます。「開発者」で、ブロックUIスタイルエディターを開きます。

UIStylerにボタンとツリーを追加して、モデルのボディ、面、エッジのツリー構造を実現します。

生成されたcsで、.SetOnSelectHandler()の行コメントを削除します。

 //------------------------------------------------------------------------------
                //Registration of Treelist specific callbacks
                //------------------------------------------------------------------------------
                //_ObjectsTree.SetOnExpandHandler(new NXOpen.BlockStyler.Tree.OnExpandCallback(OnExpandCallback));

                //_ObjectsTree.SetOnInsertColumnHandler(new NXOpen.BlockStyler.Tree.OnInsertColumnCallback(OnInsertColumnCallback));

                //_ObjectsTree.SetOnInsertNodeHandler(new NXOpen.BlockStyler.Tree.OnInsertNodeCallback(OnInsertNodecallback));

                //_ObjectsTree.SetOnDeleteNodeHandler(new NXOpen.BlockStyler.Tree.OnDeleteNodeCallback(OnDeleteNodecallback));

                //_ObjectsTree.SetOnPreSelectHandler(new NXOpen.BlockStyler.Tree.OnPreSelectCallback(OnPreSelectcallback));

                _ObjectsTree.SetOnSelectHandler(new NXOpen.BlockStyler.Tree.OnSelectCallback(OnSelectcallback));

                //_ObjectsTree.SetOnStateChangeHandler(new NXOpen.BlockStyler.Tree.OnStateChangeCallback(OnStateChangecallback));

同様に、コールバック関数onSelectcallback()の行コメントを削除して、ツリー選択操作を実現します。

        //------------------------------------------------------------------------------
        //Treelist specific callbacks
        //------------------------------------------------------------------------------
        //public void OnExpandCallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node)
        //{
        //}

        //public void OnInsertColumnCallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node, int columnID)
        //{
        //}

        //public void OnInsertNodecallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node)
        //{
        //}

        //public void OnDeleteNodecallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node)
        //{
        //}

        //public void OnPreSelectcallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node, int columnID, bool Selected)
        //{
        //}

        public void OnSelectcallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node, int columnID, bool Selected)

次に、ツリーに行を挿入します。

 public void dialogShown_cb()
        {
            try
            {
                //---- Enter your callback code here -----
                NXUtilityTools.AllObjectsUnhightlight();
                _ObjectsTree.InsertColumn(1,"模型对象",240);
            }
            catch (Exception ex)
            {
                //---- Enter your exception handling code here -----
                theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
            }
        }

ボタンで、オブジェクトを順番にトラバースし、ボリューム->サーフェス->の順序でオブジェクトツリーを形成します。

 if (block == _TravelAllObjectsButton)
                {
                    //---------Enter your code here-----------
                    //将所有的对象存储在tree中
                    BodyCollection bodyCollection = workPart.Bodies;
                    Body[] bodies = bodyCollection.ToArray();
                    foreach(var bd in bodies)
                    {
                        Node rootNode = _ObjectsTree.CreateNode("体(" + bd.Tag.ToString() + ")");
                        _ObjectsTree.InsertNode(rootNode,null,null,Tree.NodeInsertOption.Sort);
                        Face[] faces = bd.GetFaces();
                        foreach(var fc in faces)
                        {
                            Node faceRootNode = _ObjectsTree.CreateNode("面("+fc.Tag.ToString()+")");
                            _ObjectsTree.InsertNode(faceRootNode, rootNode, null, Tree.NodeInsertOption.Sort);
                            Edge[] edges = fc.GetEdges();
                            foreach(var eg in edges)
                            {
                                Node edgeRootNode = _ObjectsTree.CreateNode("边("+eg.Tag.ToString()+")");
                                _ObjectsTree.InsertNode(edgeRootNode,faceRootNode,null,Tree.NodeInsertOption.Sort);
                            }
                        }
                    }

                }

次の結果を取得します。

任意のオブジェクトを選択し、このオブジェクトを強調表示して、選択コールバック関数に次のコードを追加します。

public void OnSelectcallback(NXOpen.BlockStyler.Tree tree, NXOpen.BlockStyler.Node node, int columnID, bool Selected)
        {
            if(tree==_ObjectsTree)
            {                
                if(Selected==true)
                {
                    string tagString = node.DisplayText.Split('(')[1].Trim(')');
                    uint tagInt = (uint)int.Parse(tagString);
                                       

                    NXObjectManager nXObjectManager = new NXObjectManager();
                    TaggedObject taggedObject = NXObjectManager.GetObjectFromUInt(tagInt);

                    if(node.DisplayText.Contains("体"))
                    {
                        Body body = (Body)taggedObject;
                        body.Highlight();
                    }
                    else if(node.DisplayText.Contains("面"))
                    {
                        Face face = (Face)taggedObject;
                        face.Highlight();
                    }
                    else if (node.DisplayText.Contains("边"))
                    {
                        Edge edge = (Edge)taggedObject;
                        edge.Highlight();
                    }

                }
                else
                {
                    NXOPENTools.General.UtilityTools.NXUtilityTools.AllObjectsUnhightlight();
                }
            }
        }

 

おすすめ

転載: blog.csdn.net/yang19861007/article/details/109262214