NX二次开发UFUN方式一键去除所有参数

一、概述

        最近作了一个案例是通过遍历整个显示部件窗口的所有实体合并成一个部件,并且在导航器上也显示一个体,主要的思路是遍历当前所有实体,然后进行一键合并如图1所示,最后去除参数,这时导航器中显示一个体的记录。如下图2所示:

图1.一键合并

图2.一键去参

二、代码记录

注意:本次代码对遍历整个显示部件窗口实体函数进行封装,如需要优化代码,请自行封装。

    ///
	//一键合并
    ///
	NXOpen::Session *theSession = NXOpen::Session::GetSession();
	NXOpen::Part *workPart(theSession->Parts()->Work());
	NXOpen::Part *displayPart(theSession->Parts()->Display());

	vector<tag_t> thecycleTAG;

	//找到工作部件所有的体
	tag_t WorkPartTag1 = UF_PART_ask_display_part();
	tag_t objTag1 = NULL_TAG;
	UF_OBJ_cycle_objs_in_part1(WorkPartTag1, UF_solid_type, &objTag1);

	int type1;
	int subtype1;
	while (objTag1 != NULL_TAG)
	{
		UF_OBJ_ask_type_and_subtype(objTag1, &type1, &subtype1);
		if (!subtype1)
		{
			thecycleTAG.push_back(objTag1);
		}
		UF_OBJ_cycle_objs_in_part1(WorkPartTag1, UF_solid_type, &objTag1);
	}

	NXOpen::Features::BooleanFeature *nullNXOpen_Features_BooleanFeature(NULL);
	NXOpen::Features::BooleanBuilder *booleanBuilder1;
	booleanBuilder1 = workPart->Features()->CreateBooleanBuilderUsingCollector(nullNXOpen_Features_BooleanFeature);	
	//建模公差
	booleanBuilder1->SetTolerance(0.001);
	//选择布尔类型——求和BooleanTypeUnite
	booleanBuilder1->SetOperation(NXOpen::Features::Feature::BooleanTypeUnite);
	//目标体的设置
	NXOpen::Body *body1(dynamic_cast<NXOpen::Body *>(NXOpen::NXObjectManager::Get(thecycleTAG[0])));
	bool added1;
	added1 = booleanBuilder1->Targets()->Add(body1);
	//工具体设置	
	NXOpen::ScCollector *scCollector2;//定义一个工具收集器
	scCollector2 = workPart->ScCollectors()->CreateCollector();

	std::vector<NXOpen::Body *> bodies1;//获得工具体的body
	for (int i = 1; i < thecycleTAG.size(); i++)
	{
		NXOpen::Body *body(dynamic_cast<NXOpen::Body *>(NXOpen::NXObjectManager::Get(thecycleTAG[i])));
		bodies1.push_back(body);
	}

	NXOpen::BodyDumbRule *bodyDumbRule1;
	bodyDumbRule1 = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true);

	std::vector<NXOpen::SelectionIntentRule *> rules1(1);
	rules1[0] = bodyDumbRule1;
	scCollector2->ReplaceRules(rules1, false);
	//设置目标体
	booleanBuilder1->SetToolBodyCollector(scCollector2);

	//创建、销毁
	NXOpen::NXObject *nXObject1;
	nXObject1 = booleanBuilder1->Commit();
	booleanBuilder1->Destroy();
    //
	  //移除参数
    //
	UF_initialize();

	//找到工作部件所有的体
	tag_t WorkPartTag = UF_ASSEM_ask_work_part();
	tag_t objTag = NULL_TAG;
	UF_OBJ_cycle_objs_in_part1(WorkPartTag, UF_solid_type, &objTag);

	int type,subtype;

	//创建链表
	uf_list_p_t list;
	UF_MODL_create_list(&list);
	while (objTag != NULL_TAG)
	{
		UF_OBJ_ask_type_and_subtype(objTag, &type, &subtype);
		if (!subtype)
		{
			UF_MODL_put_list_item(list, objTag);
		}
		UF_OBJ_cycle_objs_in_part1(WorkPartTag, UF_solid_type, &objTag);
	}

	int count;
	UF_MODL_ask_list_count(list, &count);
	if (count>0)
	{
		//移除参数
		UF_MODL_delete_object_parms(list);

	}
	else
	{
		uc1601("温馨提示:未找到要移除参数对象。", 1);
	}

	//删除链表,释放内存
	UF_MODL_delete_list(&list);

	UF_terminate();

相关推荐

  1. NX开发(NXOpenC++) - 切换制图模块方法

    2024-01-02 10:10:05       54 阅读
  2. NX开发消息打印,可用于调试

    2024-01-02 10:10:05       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 10:10:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 10:10:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 10:10:05       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 10:10:05       20 阅读

热门阅读

  1. Sql优化

    Sql优化

    2024-01-02 10:10:05      29 阅读
  2. 腾讯云轻量应用服务器和CVM云服务器哪个好用?

    2024-01-02 10:10:05       44 阅读
  3. font-face和font-family不生效

    2024-01-02 10:10:05       44 阅读
  4. VCG 计算两点之间距离

    2024-01-02 10:10:05       41 阅读
  5. 基于bp神经网络变压器的故障分类

    2024-01-02 10:10:05       39 阅读
  6. 【AI】免费搭建一个属于自己的GeminiProGpt

    2024-01-02 10:10:05       39 阅读
  7. Linux高并发服务器开发之网络编程

    2024-01-02 10:10:05       39 阅读
  8. 离散优化模型的松弛模型

    2024-01-02 10:10:05       28 阅读
  9. STL——map/multimap容器

    2024-01-02 10:10:05       43 阅读
  10. 如何配置TensorRT版的Katago

    2024-01-02 10:10:05       44 阅读