目录
NX中想要显示泡泡编号,会存在一些问题,这里提供一种方法来解决这个问题
1、效果展示
2、实现方法
泡泡编号①是基于Unicode编码才能显示的,实际要显示需要满足两个条件:
- 编码格式支持:文件或数据需使用支持 Unicode 的编码格式(如 UTF-8、UTF-16)存储,确保编码信息不丢失。
- 字体支持:显示所用的字体(如系统默认字体、Arial、微软雅黑等)需包含 “⑤” 对应的字形,若字体未收录该符号,可能会显示为方框 “□” 等占位符。
2.1、解决编码问题
我的代码使用的UTF8编码的,但是NX显示的时候是使用的windows系统的本地编码(一般是GBK),因此要在NX上显示需要调整编码,否则会出现乱码
//std::string 转 NXOpen::NXString
std::string stdStr = "①";
NXOpen::NXString nxStr(stdStr,NXOpen::NXString::UTF8);//如果编码使用的是本地,选Locale
//NXOpen::NXString 转 std::string
NXOpen::NXString nxStr = "①";
std::string stdStr = nxStr.GetUTF8Text();//如果编码使用的是本地,用GetLocaleText()
2.2、解决字体支持的问题
仅仅解决编码问题显示还是有问题,NX默认中文字体使用的是宋体,只支持10以内的泡泡编码显示,我找到了一个中文字体支持显示到50的,那就是“Yu Gothic”,选择这个以后原来显示“□”占位符的就会正常显示㊿,而且也可以正常显示中文

std::vector<NXOpen::DisplayableObject *> objects(1);
objects[0] = dimObj;
//创建附加文本编辑器
NXOpen::Annotations::EditSettingsBuilder *editSettingsBuilder = workPart->SettingsManager()->CreateAnnotationEditSettingsBuilder(objects);
if(editSettingsBuilder){
//获取字体索引,必须使用该方法,每次重启后索引值都不一样
int fontIndex = workPart->Fonts()->AddFont("Yu Gothic", NXOpen::FontCollection::TypeStandard);
//设置字体
editSettingsBuilder->AnnotationStyle()->LetteringStyle()->SetAppendedTextFont(fontIndex);
//应用更改
editSettingsBuilder->Commit();
editSettingsBuilder->Destroy();
}
3、如何获取1-50的泡泡编码
从网上搜索可以找到列表:
①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,⑪,⑫,⑬,⑭,⑮,⑯,⑰,⑱,⑲,⑳,㉑,㉒,㉓,㉔,㉕,㉖,㉗,㉘,㉙,㉚,㉛,㉜,㉝,㉞,㉟,㊱,㊲,㊳,㊴,㊵,㊶,㊷,㊸,㊹,㊺,㊻,㊼,㊽,㊾,㊿
然后可以在代码中直接通过数组查询即可
//提前存储列表
std::vector<std::string> g_bubbleNumStr = {"①","②","③","④","⑤","⑥","⑦","⑧","⑨","⑩","⑪","⑫","⑬","⑭","⑮","⑯","⑰","⑱","⑲","⑳","㉑","㉒","㉓","㉔","㉕","㉖","㉗","㉘","㉙","㉚","㉛","㉜","㉝","㉞","㉟","㊱","㊲","㊳","㊴","㊵","㊶","㊷","㊸","㊹","㊺","㊻","㊼","㊽","㊾","㊿"};
//设置标注名称
int code = dimCode->Value();
std::string codeStr = "";
if(code <= 50){
codeStr = g_bubbleNumStr[code-1];
}else{//超过50就用括号包裹
codeStr = "("+std::to_string(code)+")";
}
1万+

被折叠的 条评论
为什么被折叠?



