当前位置: 首页 > news >正文

NX二次开发 Block UI 指定方位控件的应用

一、概述

         NX二次开发中一般都是多个控件的组合,这里我首先对指定方位控件进行说明并结合选择对象控件,具体如下图所示。

二、实现功能获取方位其在选择面上原点的目标

2.1 在initialize_cb()函数中进行初始化,实现对象选择过滤面

//过滤平面
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 = SelectPoint->GetProperties();//selComp为对象收集器的ID
selComponentProps->SetSelectionFilter("SelectionFilter", action, selectionMask_array);
delete selComponentProps;
selComponentProps = NULL;

2.2在update_cb函数中通过选择面获得面上点击屏幕点将其设置为指定方位控件的原点,并通过输入面的TAG值,获得选择平面X、Y的向量值设置为指定方位控件的X、Y向量。

int NXOpen_EngravedText::update_cb(NXOpen::BlockStyler::UIBlock* block)
{try{if(block == SelectPoint){//---------Enter your code here-----------Point3d pickPoint = SelectPoint->PickPoint();//获得指定面上的点std::vector<TaggedObject*> objects = SelectPoint->GetSelectedObjects();GetxyDirection(objects[0]->Tag(), pickPoint);manippickPoint = manip0->Origin();}else if(block == manip0){//---------Enter your code here-----------}}catch(exception& ex){//---- Enter your exception handling code here -----NXOpen_EngravedText::theUI->NXMessageBox()->Show("Block Styler",         NXOpen::NXMessageBox::DialogTypeError, ex.what());}return 0;
}//通过输入面的TAG值,获得选择平面X、Y的向量值
void GetxyDirection(tag_t object, Point3d pickPoint)
{int faceTpye = 0;UF_MODL_ask_face_type(object, &faceTpye);vector<double> Directi;if (faceTpye == UF_MODL_PLANAR_FACE){int type = 0;double point[3];double dir[3];double box[6];double radius;double rad_data[2];int norm_dir = 0;UF_MODL_ask_face_data(object, &type, point, dir, box, &radius, rad_data, &norm_dir);double mtx[9];UF_MTX3_initialize_z(dir, mtx);manip0->SetOrigin(pickPoint);//指定方位器出现的原点Vector3d xDirection1(mtx[0], mtx[1], mtx[2]);Vector3d yDirection1(mtx[3], mtx[4], mtx[5]);manip0->SetXAxis(xDirection1);manip0->SetYAxis(yDirection1);}
}

2.3打印坐标,在void GetxyDirection(tag_t object, Point3d pickPoint)函数中只需将mtx按照X、Y、Z每个三个值分好分别进行打印即可,这里不提供代码。

http://www.lryc.cn/news/276615.html

相关文章:

  • 2024年【R2移动式压力容器充装】模拟考试及R2移动式压力容器充装实操考试视频
  • 数仓工具—Hive进阶之StorageHandler(23)
  • 科技创新创业
  • 高校电力能耗监测精细化管理系统,提升能源利用效率的利器
  • Java_Swing程序设计
  • ZeroBind:DTI零样本预测器
  • Win10子系统Ubuntu实战(一)
  • [足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-2(3) 质量刚体的在坐标系下运动
  • 云计算历年题整理
  • 2401vim,vim重要修改更新大全
  • 安卓多用户管理之Userinfo
  • JavaScript-流程控制-笔记
  • springboot + vue3实现增删改查分页操作
  • leetcode01-重复的子字符串
  • 目标检测数据集 - 夜间行人检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 【YOLO系列】 YOLOv4思想详解
  • 查询json数组
  • Docker mysql 主从复制
  • 第7章-第1节-Java中的异常处理
  • 使用python生成一个月度账单消费金额柱状图表
  • 将一个独立的磁盘添加到已有的 `/` 分区
  • AI智能电销器人需要注意哪些问题呢
  • 呼叫中心研究分析:到2027年市场规模预计将达4966亿美元
  • 工业数据采集分析——工厂大脑 提升综合经济效益
  • python系列教程218——生成器表达式
  • jquery 实现简单的标签页效果
  • C++ Web框架Drogon初体验笔记
  • x-cmd pkg | busybox - 嵌入式 Linux 的瑞士军刀
  • Java异常简单介绍
  • ocrmypdf_pdf识别