You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:45:38