開発者は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();
}
}
}