列文章目录
前言
随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。
然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。
一、知识点提取
本案例实现了在尺寸标注前添加符号的功能,主要知识点如下:
1、选择尺寸标注,实现标注选择过滤器
2、在标注前添加直径符号
二、案例需求分析
1、效果图
2、需求分解
1、选择尺寸标注,实现标注选择过滤器
2、在标注前添加直径符号
三、程序分析
1、源码所在目录
UGOPEN\SampleNXOpenApplications\C++\DiameterSymbol
2、主要功能分析
1、选择尺寸标注,实现标注选择过滤器
int dimpref::filter_cb(NXOpen::BlockStyler::UIBlock* block, NXOpen::TaggedObject* selectedObject)
{
if (dynamic_cast<Annotations::Dimension*>(selectedObject) != NULL)
{
return UF_UI_SEL_ACCEPT;
}
return UF_UI_SEL_REJECT;
}
上一个案例也实现了一个注释选择过滤器,但是实现方法和我们这里不同,有兴趣的同学可以去对比一下,点击进入链接地址
selectNote->GetProperties()->SetSelectionFilter("SelectionFilter",action,selectionMask_array)
2、 在尺寸标注前添加直径符号
void dimpref::EditPrefix(std::vector<NXOpen::TaggedObject*>dimensions, NXString option)
{
Session* session = Session::GetSession();
Session::UndoMarkId mark = session->SetUndoMark(Session::MarkVisibilityInvisible, "Edit Appended Text");
for (int loop = 0; loop < (int)dimensions.size(); ++loop)
{
NXOpen::Annotations::Dimension* dimensionPt =
dynamic_cast<NXOpen::Annotations::Dimension*>(dimensions[loop]);
if (dimensionPt != NULL)
{
Annotations::AppendedText* appendedText = dimensionPt->GetAppendedText();
if(strcmp(option.GetText(), "Diameter Symbol") == 0)
{
std::vector<NXString> lines(1);
lines[0] = "<O>";
appendedText->SetBeforeText(lines);
}
else if (strcmp(option.GetText(), "None") == 0)
{
std::vector<NXString> lines(0);
appendedText->SetBeforeText(lines);
}
dimensionPt->SetAppendedText(appendedText);
delete appendedText;
}
}
session->UpdateManager()->DoUpdate(mark);
}
实现方法如下:
1、通过dimensionPt->GetAppendedText()方法获取选择的标注文本
2、添加直径符号appendedText->SetBeforeText(lines);
3、更新标注session->UpdateManager()->DoUpdate(mark);