NX二次开发中如何从对象选择控件中获得选中面的TAG值

发布时间:2024年01月05日

一、概述

????????在NX二次开发中所有的对象操作都是通过对对象的TAG值进行操作控制,如何结合BlockUI控件,得到对象的TAG值是十分重要的一步。今天就遇到了这个问题,其实不是不会,而是思维习惯,直接利用对象选择器->Tag(),这个是不对的。应该先利用对象选择器获得选择的对象,在通过对象获得对象的Tag。有时候往往是一个小问题,但是你就是不想起来,这里感谢那些NX二次开发大佬的答疑,同时感谢各位写的博客。

//selection0对象选择器的ID
std::vector<TaggedObject*>objects =selection0->GetSelectedObjects();
tag_t tag=objects[0]->Tag()

二、案例

通过选择对象收集器,进行判断收集到的面是否为平面。

UF_MODL_ask_face_data()和UF_MODL_ask_face_type()函数都可以判断面的类型

关键代码:

#include <uf_modl.h>

//在初始化中过滤
void text111::initialize_cb()
{
    try
    {
        group0 = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("group0"));
        selection0 = dynamic_cast<NXOpen::BlockStyler::SelectObject*>(theDialog->TopBlock()->FindBlock("selection0"));

		/
		//过滤平面
		NXOpen::Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
		std::vector<NXOpen::Selection::MaskTriple>selectionMask_array(1);//括号内数字:maskArray数组大小(有多少种选择就写多少)//具体用法参考MaskTriple
		selectionMask_array[0].Type = UF_solid_type;
		selectionMask_array[0].Subtype = UF_solid_face_subtype;
		selectionMask_array[0].SolidBodySubtype = UF_UI_SEL_FEATURE_ANY_FACE;

		NXOpen::BlockStyler::PropertyList *selComponentProps = selection0->GetProperties();//selComp为对象收集器的ID
		selComponentProps->SetSelectionFilter("SelectionFilter", action, selectionMask_array);
		delete selComponentProps;
		selComponentProps = NULL;

    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        text111::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
}

int text111::apply_cb()
{
    int errorCode = 0;
    try
    {
        //---- Enter your callback code here -----
		UF_initialize();
		std::vector<TaggedObject*> objects = selection0->GetSelectedObjects();
		int type = 0;
		double point[3];
		double dir[3];
		double box[6];
		double radius;
		double rad_data;
		int norm_dir=0;

		UF_MODL_ask_face_data(objects[0]->Tag(), &type, point, dir, box, &radius, &rad_data, &norm_dir);
		if (type == 22)
		{
			uc1601("温馨提示:选中结果为平面.", 1);
		}
		else
		{
			uc1601("温馨提示:请选择平面.", 1);
		}
		UF_terminate();
    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        errorCode = 1;
        text111::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return errorCode;
}


int text111::apply_cb()
{
    int errorCode = 0;
    try
    {
        //---- Enter your callback code here -----
		UF_initialize();
		std::vector<TaggedObject*> objects = selection0->GetSelectedObjects();

		int faceTpye = 0;
		UF_MODL_ask_face_type(objects[0]->Tag(), &faceTpye);
		if (faceTpye == UF_MODL_PLANAR_FACE)
		{
			uc1601("温馨提示:选中结果为平面.", 1);
		}
		else
		{
			uc1601("温馨提示:请选择平面.", 1);
		}
		UF_terminate();
    }
    catch(exception& ex)
    {
        //---- Enter your exception handling code here -----
        errorCode = 1;
        text111::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    }
    return errorCode;
}

文章来源:https://blog.csdn.net/weixin_47753171/article/details/135415921
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。