NX2306 C++二次开发系列(八)在标注上显示泡泡编号①

       

目录

1、效果展示​编辑

2、实现方法

2.1、解决编码问题

2.2、解决字体支持的问题

3、如何获取1-50的泡泡编码


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)+")";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

守护暗神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值