列文章目录
UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer
UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection
列文章目录
文章目录
前言
一、知识点提取
二、案例需求分析
三、程序分析
总结
前言
随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。
然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。
一、知识点提取
这篇实例主要讲通过各种过滤方法来实现选择功能
1)全选(无过滤)
2)通过Datum Planes过滤选择
3)通过图层过滤选择
4)通过Display Attributes - Dashed, Thick Width过滤选择
5)通过Color过滤选择
二、案例需求分析
1、效果图
2、需求分解
这里给出了3个基准平面和3个基准轴,我们需要通过一下条件实现过滤选择
1)全选; 2)通过Datum Planes过滤选择 ; 3)通过图层过滤选择; 4)通过Display Attributes - Dashed, Thick Width过滤选择;5)通过Color过滤选择;
三、程序分析
1、源码所在目录
UGOPEN\SampleNXOpenApplications\C++\Selection
2、主要功能分析
1)全选,并隐藏
NXOpen::DatumCollection *part_datums = theSession->Parts()->Work()->Datums();
int i=0;
for(it = part_datums->begin();it!= part_datums->end();it++)
{
disp_objs.push_back(*it);
}
theSession->DisplayManager()->BlankObjects(disp_objs);
theSession->DisplayManager()->MakeUpToDate();
2)通过Datum Planes过滤选择,并隐藏
for(it = part_datums->begin();it!= part_datums->end();it++)
{
disp_objs.push_back(*it);
DatumPlane *datumPlane1(dynamic_cast<DatumPlane *> (disp_objs[i]));
if(datumPlane1 != NULL)
{
disp_objs[i]->Blank();
length++;
}
i++;
}
3)通过图层过滤选择,并隐藏
for(it = part_datums->begin();it!= part_datums->end();it++)
{
disp_objs.push_back(*it);
int layer_no;
layer_no = disp_objs[i]->Layer();
if(layer_no==10)
{
disp_objs[i]->Blank();
length++;
}
i++;
}
4)通过Display Attributes - Dashed, Thick Width过滤选择,并隐藏
for(it = part_datums->begin();it!= part_datums->end();it++)
{
disp_objs.push_back(*it);
if(disp_objs[i]->LineFont()== NXOpen::DisplayableObject::ObjectFontDashed && disp_objs[i]->LineWidth()== NXOpen::DisplayableObject::ObjectWidthThick )
{
disp_objs[i]->Blank();
length++;
}
i++;
}
5)通过Color过滤选择,并隐藏
for(it = part_datums->begin();it!= part_datums->end();it++)
{
disp_objs.push_back(*it);
if((disp_objs[i]->Color()) == 134 )
{
disp_objs[i]->Blank();
length++;
}
i++;
}
6)撤销操作命令
theSession->UndoLastNVisibleMarks(1, &marksRecycled1, &undoUnavailable1);