NX二次开发—批量导出点工具
在NX上进行二次开发,设计一个UI界面,将选择的点导出
在NX上,进行UI样式编辑器
添加选择对象,修改标题,设置为多选
创建一个组,添加枚举,设置标题和枚举内容,不显示枚举标题LabelVisibility设置为false,更改枚举风格PresentationStyle设置为Radio Box
添加组,添加特殊里的选择浏览选择文件,设置标题,设置保存文件的类型
然后生成C++代码,保存。
第一步参考:
NX—UI界面生成的文件在VS上的设置
设置点的过滤器,在initialize_cb()里添加
//设置过滤
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
std::vector<Selection::MaskTriple>maskArray(1);
maskArray[0] = Selection::MaskTriple(UF_point_type, 0, 0);//点
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", action, maskArray);
设置当勾选显示在信息窗口时,下面的文件成灰色,勾选输出到本地文件时,下面的文件亮起,在update_cb(NXOpen::BlockStyler::UIBlock* block)和dialogShown_cb()添加
if (enum0->GetProperties()->GetEnum("Value")==0)
{
group1->SetEnable(false);
}
else
{
group1->SetEnable(true);
}
将选择的点要么显示在窗口,要么保存到本地,先进行判断是显示还是保存。
显示在窗口,选择点,获取点的坐标,将坐标显示在信息窗口
if (enum0->GetProperties()->GetEnum("Value") == 0)
{
//打印到信息窗口
//打开信息窗口
UF_UI_open_listing_window();
for (int i = 0; i < points.size(); i++)
{
UF_CURVE_ask_point_data(points[i]->Tag(), point_cords);//获取点的坐标
sprintf(msg, "%f\t %f\t %f\n", point_cords[0], point_cords[1], point_cords[2]);
UF_UI_write_listing_window(msg);
}
}
设置输出到本地文件,.dat文件需提前创建好
else
{
//输出到本地
int opendat = uc4504(nativeFileBrowser0->Path().GetLocaleText(), 3, 87);//打开.dat的文档
for (int i = 0; i < points.size(); i++)
{
UF_CURVE_ask_point_data(points[i]->Tag(), point_cords);
sprintf(msg, "%f\t %f\t %f", point_cords[0], point_cords[1], point_cords[2]);
uc4524(opendat, msg);//写入
}
uc4540(opendat, 0);//关闭文档
}