Parasolid v30 的新嵌入式架构格式?

New embedded schema format for Parasolid v30?

我有两个来自 v30 的二进制 Parasolid 文件(内部建模器字符串是 3000226,模式字符串是 SCH_3000226_30000_13006)。其中,旧类型的嵌入式架构信息在我拥有的 Parasolid XT 格式参考的最新副本中定义。但是,对于实体类型 204(在 28101 架构之后引入),嵌入式架构格式完全不同。幸运的是,它里面有很多字符串,所以很容易对它的基本形式进行逆向工程:

unsigned byte: number of fields
short string: nodename
short string: description

then for each field
  short string: fieldname
  five bytes: maybe somehow correspond to <transmit 1/0> <node class> <n_elements> ?
  byte: (field) type

byte: possibly <variable 1/0> ?

然后实体本身按预期开始。

问题是,这似乎是对二进制版本的可行解析,但不知道五个神秘字节实际对应的是什么,我不知道如何在 Parasolid 文本文件中实现对此的支持。它可能是两个短整数和一个无符号字符,也可能是一个 4 字节整数和一个无符号字符。哎呀,因为在这两个例子中我的前三个神秘字节都是零,所以那里甚至可能有某种字符串,在这种情况下恰好是 0 长度,在这种情况下,当然,它不是真正的五个字节总是,但在我的两个示例中恰好是五个字节。

有人知道神秘字节中发生了什么吗?

此外,我假设此方案将对实体类型 204 及更高版本有效。我不知道的是实体类型 203。我相信我从未见过包含该类型的 Parasolid 文件。

(此外,是否有人知道为什么他们会对仅用于支持向后兼容性的功能进行非向后兼容更改?)

偶然发现了自己问题的答案。事实证明我应该意识到他们不会在这里进行向后不兼容的更改。事实上,我 运行 的内容已经记录在案,只是非常糟糕。以下是我想出来的规则:

这种 "new" 形式的嵌入式模式是当您拥有模式 13006 中不存在的实体类型时得到的。(我相信类型为 185 及以上。)在这种情况下,格式是

unsigned byte: number of fields
short string: type name (aka nodename)
short string: description

then for each field
    short string: name
    short int: ptr_class
    positive integer: n_elts
    if ptr_class == 0
        short string: type
    if n_elts == 2
        logical: xmt_code

备注:

  • "for each field"代码与合并的字段数据相同 在编辑序列中插入和附加(I 和 A)代码 版本。
  • 二进制中的"positive integer"类型就像指针 索引类型,如果整数小于 32767 则为 2 个字节,并且 否则为 4 个字节。因为我在这里从未见过高于 2 的值, 并且无法开始想象什么样的实体会有固定的 size 和超过 2 到第 15 个元素,我还没有实现这个 还没有。
  • 而且这个 n_elts 字段似乎比 在标准架构中找到的等效 n_elements 字段。 (这是 在上面的 n_elts == 2 测试中清晰可见——根据 文件格式规范,它应该是 n_elts == 1,但这在 全部。)

减去我在这里的警告,这些基本说明确实出现在 2016 版文件格式,第 14 页。但是, 格式完全损坏,与 旧的V15版本文档——应该有两层 要点,不是一个,并且 table 的第一行是错误的 变成了header!

我还必须注意,虽然我的代码适用于实体类型 204,但我之前似乎从未在 X_T 文件中看到过新类型,这就是我从未注意到这一点的原因我的代码中的漏洞。所以我不能保证这在一般情况下有效——我所知道的是它在 204 类型的情况下有效。