Opencascade.js如何获取TCollection_ExtendedString中的实际字符串
解决OpenCASCADE JS绑定中获取TCollection_ExtendedString字符串的问题
针对你遇到的TCollection_ExtendedString方法调用绑定错误,以及索引越界的问题,有以下可行的解决办法:
方法1:修正索引并循环提取字符
OpenCASCADE的字符串类(包括TCollection_ExtendedString)的索引从1开始,你之前使用Value(0)会直接导致越界错误。结合循环逐个提取字符可以绕过ToExtString()的绑定问题:
assembly.GetShapes(labels); var freeShape = labels.First(); var components = new oc.TDF_LabelSequence_1(); oc.XCAFDoc_ShapeTool.GetComponents(freeShape, components, true); var compLabel = components.First(); var name = new oc.Handle_TDF_Attribute_1(); compLabel.FindAttribute_1(oc.TDataStd_Name.GetID(), name); // 获取ExtendedString对象 const extStr = name.get().Get(); let nameString = ''; const strLength = extStr.Length(); // 从索引1开始循环提取每个字符 for (let i = 1; i <= strLength; i++) { nameString += String.fromCharCode(extStr.Value(i)); } console.log(nameString); // 输出部件名称
方法2:直接使用XCAFDoc_ShapeTool获取名称
可以绕过直接处理TCollection_ExtendedString的步骤,用XCAFDoc_ShapeTool的GetName方法直接获取部件名称,简化操作:
assembly.GetShapes(labels); var freeShape = labels.First(); var components = new oc.TDF_LabelSequence_1(); oc.XCAFDoc_ShapeTool.GetComponents(freeShape, components, true); var compLabel = components.First(); // 获取文档的ShapeTool const shapeTool = oc.XCAFDoc_DocumentTool.ShapeTool(assembly.Main()); // 创建ExtendedString对象接收名称 const nameExtStr = new oc.TCollection_ExtendedString_1(); shapeTool.GetName(compLabel, nameExtStr); // 转换为JS字符串 let nameString = ''; const strLength = nameExtStr.Length(); for (let i = 1; i <= strLength; i++) { nameString += String.fromCharCode(nameExtStr.Value(i)); } console.log(nameString);
额外提示
如果使用的是较新版本的OpenCASCADE JS绑定,可以尝试直接调用toString()方法(部分绑定版本已实现该转换):
const nameString = extStr.toString();
内容的提问来源于stack exchange,提问作者Felix 129480
相关产品推荐
相关产品推荐

