Sat格式文件详解翻译

SAT Save File Format 7.0(Sat文件存储格式7.0)

译者:Mrzhu007
日期:2018年04月13日
博客地址:金色世界

ACIS can store modeling information in external files,called save files.
These files have an open format so that external applications, even those not based on ACIS,
can have access to the ACIS geometric model.

ACIS可以将建模信息存储在外部文件中,并从文件恢复。这些文件的格式是开放的,即使不是以几何造型ACIS为核心的应用程序。
也可以访问ACIS几何模型数据。

The basic information needed to understand the ACIS file format (focusing on the reading, or restore, operation),
includes the structure of the save file format, how data is encapsulated, the types of data written, and subtypes and references.

理解ACIS文件格式所需的基本信息(关注读,恢复,操作),包括保存文件格式的结构,数据如何封装,数据类型如何写入,以及子类型和引用。

Save File Types(文件类型)

ACIS supports two kinds of save files, SAT and SAB, which stand for “Standard ACIS Text” and “Standard ACIS Binary”,respectively. Although one is ASCII text and the other is binary data, the model data information stored in the two formats is identical, so the term SAT file is generally used to refer to either (when no distinction is needed).

ACIS支持两种方式来保存文件,分别是SAT和SAB,分别代表“标准ACIS文本”和“标准ACIS二进制”。虽然其中一个是ASCII文本,另一个是二进制数据,但存储在两种格式中的模型数据信息是相同的,因此通常使用术语“SAT”来表示ACIS格式文件(当不需要区分时)。

SAT files are ASCII text files that may be viewed with a simple text editor. A SAT file contains carriage returns, white space and other formatting that makes it readable to the human eye. A SAT file has a .sat file extension.

SAT文件是ASCII文本文件,可以用一个简单的文本编辑器来查看。SAT文件中包含回车,空白和其他格式,可以被我们识别。SAT文件的扩展名为.sat。

SAB files cannot be viewed with a simple text editor and are meant for compactness and not for human readability. A SAB file has a .sab file extension. A SAB file uses delimiters between elements and binary tags, without additional formatting. The binary formats supported are:

SAB文件不能用一个简单的文本编辑器来查看,它的目的是为了紧凑性,而不是为了人类的可读性。SAB文件具有.sab文件扩展名。SAB文件使用元素和二进制标记之间的分隔符,不需要额外的格式。支持的二进制格式为:

int . . . . . . . . . . 4--byte 2s complement (as long)
long . . . . . . . . . .4--byte 2s complement
double . . . . . . . . .8--byte IEEE
char . . . . . . . . . .1--byte ASCII

where “byte” is eight bits, and files are considered to be byte strings. For multi–byte data items, byte order normally just matches that of the processor being used, but a specific order may be imposed by compiling with the preprocessor macro BIG_ENDIAN or LITTLE_ENDIAN defined.

其中“字节”是8位,而文件被认为是字节字符串。对于多字节数据项,字节顺序通常只与正在使用的处理器相匹配,但是可以通过使用预处理器宏BIG_ENDIAN或LITTLE_ENDIAN来定义一个特定的顺序。(计算机数据存储有大端和小端区分)

Structure of the Save File(文件结构)

A save file contains(文件内容包括):

  • Three-line header(三行文件头信息)
  • Entity records, representing the bulk of the data(实体记录,这部分存储大部分数据)
  • [optional] Marker for begin history data(可选,历史数据开始标记)
  • [optional] Old entity records needed for history and rollback(可选,历史实体数据记录,给历史数据回溯需要)
  • [optional] Marker for end history data(可选,历史数据结束标记)
  • End marker(文件结束标记)

Beginning with ACIS Release 6.3, it is required that the product ID and units be populated for the file header (using class FileInfo) before you can save a SAT file. Refer to the reference templates for class FileInfo and function api_set_file_info for more information.

从ACIS发布版本6.3开始,需要在保存一个SAT文件之前,为文件头(使用类FileInfo)填充产品ID和单元。更多信息请参考类FileInfo和函数api_set_file_info的引用模板。

Reserved Characters in SAT Files(文件中的保留字符)

Several characters have special meaning when found in “unknown entity” string data in ACIS SAT (.sat) files.Therefore, these characters should not be contained in any user string data written to SAT files. This includes string data in attributes, but applies to string data in any unknown entities.

在ACIS SAT(.sat)文件中的“未知实体”字符串数据中,有几个字符具有特殊的意义。因此,这些字符不应该包含在写入到SAT文件的任何用户字符串数据中。这包括属性中的字符串数据,但适用于任何未知实体中的字符串数据。

Note This only applies to unknown entity string data written to text save files (.sat); binary files (.sab) are not affected.

注意,这只适用于写入文本保存文件的未知实体字符串数据(.sat);二进制文件(.sab)不受影响。

The portion of the ACIS save (.sat) file restore code that processes unknown entities reserves the following special characters (these are discussed elsewhere in this chapter):

ACIS(.sat)文件恢复处理未知实体的存储字段时。以下是特殊字符(本章将在其他地方讨论)

{ ->An opening (left) curly brace begins a subtype definition.(子类型定义开始)
} ->A closing (right) curly brace terminates a subtype definition.(子类型定义结束)
$ ->A dollar sign indicates a pointer definition.(指针定义)
# ->A pound sign terminates an entity record.(结束一个实体记录)
@ ->An at sign starts a string record.(开始一段字符串记录)

If these reserved characters are encountered in unknown entity string data when a .sat file is restored (read in), the unknown entity reader will not process the data correctly because these characters are interpreted as special tokens. Because this processing only applies to unknown entities, applications that “know about” entities containing these characters should be able to process the files. However, if the files are shared with other applications, problems may arise.

如果在恢复了.sat文件(读入)时,在未知的实体字符串数据中遇到这些保留字符,未知的实体读取器将不会正确处理数据,因为这些字符被解释为特殊的令牌。因为这个处理只适用于未知的实体,“知道”包含这些字符的实体的应用程序应该能够处理这些文件。但是,如果文件与其他应用程序共享,可能会出现问题。

Save File Header(文件头)

The first record of the ACIS save file is a header, such as:
首先存储的是文件头,如下:

712 0 4 0
11 Scheme AIDE 11 ACIS 7.0 NT 24 Mon Apr 09 16:44:18 2001
-1 9.9999999999999995e-007 1e-010
  • **Integer:**An encoded version number. In the example, this is “712”, which means the release is major release 7, minor release 1, and point release 2.(版本号数字。在这个例子中,这是“712”,这意味着主要版本号7,子版本号1和修正版本号2)
  • **Integer:**The total number of saved data records, or zero. If zero, then an end mark is
    required.(保存的数据记录的总数,可以为零。如果是零,必须有结束标记)
  • **Integer:**A count of the number of entities in the original entity list that were saved to
    the part file.(从原始实体数据中将要保存到文件中的实体的数量)
  • **Integer:**The least significant bit of this number is used to indicate whether or not history has been saved in this save file.(这个数字中的最低位用来表示这个文件中是否有历史数据)
  • **Integer:**String length for the product string: “11”.(产品名的字符串长度这里是11)
  • **String:**ID for the product which produced the file: “Scheme AIDE”.(保存这个文件的产品名称)
  • **Integer:**String length for the ACIS version string: “11”.(ACIS版本字符串长度)
  • **String:**ACIS version which produced the file: “ACIS 7.0 NT”. This may be different from the file version and can include the major release number, the minor release number, and the point release number. It also includes the platform on which it was produced.(生成该文件的ACIS版本:“ACIS 7.0 NT”。这可能与文件版本不同,可以包括主要版本号、次要版本号和修正版本号。它还包括其生产的平台)
  • **Integer:**String length for the date string: “24”.(日期字符串的长度)
  • **String:**Date file produced (in C ctime format): “Mon Apr 09 16:44:18 2001”.(文件创建日期(C风格))
  • **Double:**Number of millimeters represented by each unit in the model: “–1”.(模型中每个单元所代表的毫米数)
  • **Real:**Value of resabs when the file was produced: “9.9999999999999995e–007”.(单位长度)
  • **Real:**Value of resnor when the file was produced: “1e–10”.(模型中精度)

Version Numbers(版本号)

Spatial has always maintained the concept of a current version (release) number in ACIS, as well as a save version number. The save version allows one to create a SAT save file that can be read by a previous version of ACIS.

文件中始终保持ACIS中当前版本号的概念,以及保存版本号。保存版本允许创建一个SAT保存文件,该文件可以被以前版本的ACIS读取。

Beginning with ACIS Release 4.0, the SAT save file format does not change with minor releases, only with major releases. This allows applications that are based upon the same major version of ACIS to exchange data without being concerned about the save version. To provide this interoperability in a simple implementation, ACIS save files have contained a symbol that accurately identified the major version number, but not the minor version. This meant that applications created using the same major version of ACIS would produce compatible save files, regardless of their minor versions. This was accomplished by simply not incrementing the “internal” minor version number between major versions.

从ACIS发布版本4.0开始,SAT保存文件格式不会随着小版本的发布而改变,只有主要的版本才会改变。这允许基于ACIS的相同主要版本的应用程序交换数据,而不必关心保存版本。为了在一个简单的实现中提供这种互操作性,ACIS保存文件中包含了一个符号,它可以准确地标识主版本号,而不是小版本号。这意味着使用同一版本的ACIS创建的应用程序将产生兼容的保存文件,而不考虑它们的小版本。这是通过不增加主要版本之间的“内部”小版本号来完成的。

Beginning with Release 7.0, ACIS will again provide accurate major, minor, and point version numbers, which can be queried using the functions get_major_version, get_minor_version, and get_point_version. To summarize how release numbers and SAT changes are related:

从发布版本7.0开始,ACIS将再次提供准确的主要、次要和修正版本号,可以使用get_major_version、get_minor_version和get_point_version函数查询。总结发布数据和SAT变化的相关内容:

  • Major release: SAT file changes may be made; significant functionality changes likely; may require significant changes to existing applications(可能修改SAT文件;可能重要功能改变;可能现有应用程序进行重大更改)
  • Minor release: No SAT file changes are made; may provide new functionality; may require some minimal changes to existing applications(不更改任何SAT文件;可能提供新功能;可能需要对现有应用程序进行一些最小的更改)
  • Point release: Minor changes only (bug fixes)(仅更改(错误修复))

Entity Records(实体数据记录)

The header is followed by a sequence of entity records. Each entity record consists of a sequence number (optional), an entity type identifier, the entity data, and a terminator.

文件头后面跟着一个实体记录序列。每个实体记录由一个序列号(可选)、实体类型标识符、实体数据和终止符组成。

Pointers between entities are saved as integer index values, with NULL pointers represented by the value -1. ACIS pointer indices are preceded by $ in the SAT file, or by a binary Tag 12 in the SAB file.

实体之间的指针被保存为整型索引值,空指针由值-1表示。ACIS指针索引的前面是$在SAT文件,或者是SAB文件中的二进制标记12。

Top level entities (e.g., body entities) are always the first records in the save file. The rest of the data records are in no particular order.

顶级实体(例如物体实体)总是保存文件中的第一个记录。其余的数据记录并没有特别的顺序。

Beginning with ACIS Release 7.0, the format of ENTITY and HISTORY_STREAM records has been changed to accommodate the addition of entity IDs. A new integer field has been added to the entity record to hold the entity’s ID. A value of -1 indicates that an ID has not yet been requested for the ENTITY. This is field #2 in any entity record, where the entity type is field #0. A new integer field has been added to history stream records (part of the history data section) to hold the next available entity ID in that stream. This is field #3 in the history stream record, where “history_stream” is the first field.

从ACIS版本7.0开始,实体和历史数据记录的格式已经更改,以适应添加实体ID。将一个新的整数字段添加到实体记录中,以保存实体的ID。值-1表示该实体尚未请求ID。这是任何实体记录中的字段#2,实体类型为字段#0。将一个新的整数字段添加到历史流记录(历史数据段的一部分),以便在该流中保存下一个可用的实体ID。这是历史流记录中的字段#3,其中“history_stream”是第一个字段。

Optional Sequence Numbers(可选的序列号)

The indexing of the entity records depends on the active ACIS options when the model was saved. If they are indexed, the indexing is sequential starting at 0.

实体记录的索引依赖于模型保存时的活动ACIS选项。如果它们被索引,则索引从0开始顺序启动。

-0 body $1 $2 $-1 $-1 #
.
.
.
-25 point $-1 10 0 25 #

In this example from a SAT file, “–0” and “–25” are sequence numbers. In the first line, “ 1 1 2” happen to be pointers to records (not shown) with sequence numbers “-1” and “-2”, respectively.

在这个例子中,来自一个SAT文件,“- 0”和“- 25”是序号。在第一行中,“ 1 1 2”恰好是指向记录(未显示)的指针,它们的序列号分别为“-1”和“-2”。

Even when the sequence numbers are not written to the file, they are implied by the order of the records in the file. Pointers to other records correspond to these implied sequence numbers. If sequence numbers are turned off, a record cannot be simply moved or removed from the save file, because this will create invalid index referencing when the file is restored.

即使序列号没有写入文件,也会被文件中记录的顺序所暗示。指向其他记录的指针对应于这些隐含的序列号。如果序列号被关闭,记录不能简单地移动或从保存文件中删除,因为这将在文件恢复时创建无效的索引引用。

If sequence numbers are turned on, an entity may be deleted by simply removing its record from the save file. Any references to the removed record’s index become NULL pointers when the file is restored by ACIS. With sequence numbers on, records may also be rearranged within the file.

如果打开序列号,可以通过简单地从保存文件中删除它的记录来删除一个实体。当ACIS恢复文件时,对删除记录的索引的任何引用都将变为空指针。有了序列号,记录也可以重新排列在文件中。

Save Identifier(保存标识符)

A save identifier is unique, reader-friendly string which has a one-to-one correspondence with an ACIS class. For example, “body” is a save identifier for the BODY class, which is derived from ENTITY.

保存标识符是唯一的、与读者友好的字符串,它与ACIS类有一对一的通信。例如,“body”是body类的一个保存标识符,它派生自实体。

ACIS classes perform most of the work associated with reading and writing save files. The restore methods of a given class can make references to the restore methods of other classes. Class names do not appear in the save file, but the save identifiers do. Both class names and save identifiers are contained within the index.

ACIS类执行与读取和写入保存文件相关的大部分工作。给定类的恢复方法可以引用其他类的恢复方法。类名不会出现在保存文件中,但是保存标识符会出现。类名和保存标识符都包含在索引中。

The save file sometimes strings save identifiers together using a dash (“-”). This often reflects the ACIS class derivation. For example, the save identifiers “plane-surface” have a class derivation consisting of ENTITY, SURFACE, and PLANE. The save identifiers “colour–tsl–attrib” have the class derivation ENTITY, ATTRIB, ATTRIB_TSL, and ATTRIB_COL.

保存文件有时使用破折号(“-”)将标识符一起保存。这通常反映了ACIS类派生。例如,保存标识符“plane-surface”有一个由实体、表面和平面组成的类派生。保存标识符“colour—tsl—attrib”具有类派生实体,attrib、ATTRIB_TSL和ATTRIB_COL。

Unique save identifier strings are required for private attributes that a developer may create.This is achieved by deriving a private base class from ATTRIB and giving it a unique name.Developers may use any class name for their private attributes, yet the full identifiers are unique in the save file.

对于开发人员可能创建的私有属性,需要唯一的保存标识符字符串。这是通过从ATTRIB派生一个私有基类并赋予它一个惟一名称来实现的。开发人员可以为其私有属性使用任何类名,但是完整的标识符在保存文件中是惟一的。

If the save identifiers are not completely recognized by ACIS, a data structure from just the recognized classes is constructed and restored. The remaining data at the end of the record is remembered so that it is not lost by a later save. For unrecognized classes whose derivation is two or more levels removed from ENTITY, such as classes derived from CURVE, SURFACE,or ATTRIB, the minimum is to create a recognizable data structure so that references to the data structure are correct. For example, if a record from a derived class of ATTRIB is not recognized, an ATTRIB record is created in such a way that the chain of attributes remains connected for the entity owning the unrecognized attribute.

如果ACIS没有完全识别保存标识符,那么只构造和恢复被识别类的数据结构。记录末尾的其余数据将被记住,以便稍后保存。对于未被识别的类,其派生是来自实体的两个或多个级别,例如从曲线、表面或属性派生的类,最小值是创建一个可识别的数据结构,以便引用数据结构是正确的。例如,如果一个来自属性派生类的记录不被识别,那么就会创建一个属性记录,这样一来,属性的链就与拥有未识别属性的实体保持连接。

Character Sets Supported(字符集支持)

Beginning with ACIS Release 7.0, the SAT file will delimit strings using an @ sign. This allows SAT files to contain and support any character set, including Japanese or graphics characters. For backward compatibility, SAT files with strings that contain SAT delimiters will be modified when being saved in an earlier version. The SAT delimiters in the string will be replaced with underscores. This will insure that the file can be read in earlier versions of ACIS.

从ACIS版本7.0开始,SAT文件将使用@符号来分隔字符串。这允许SAT文件包含和支持任何字符集,包括日语或图形字符。对于向后兼容性,使用包含SAT分隔符的字符串的SAT文件将在保存在较早版本时进行修改。字符串中的SAT分隔符将用下划线替换。这将确保在ACIS的早期版本中可以读取该文件。

Entity Encapsulation in a Record(实体记录)

The data for an entity is encapsulated in the order of its derivation from the basic ENTITY, from left to right. This is in the opposite order of the derivation of the identifier. The data for ENTITY is written first, followed by the data for the class directly derived from ENTITY,continuing down to the leaf class. For readability in the SAT file, each data field is separated by white space: a space, carriage return, or new line.

实体的数据以其从基本实体(从左到右)的派生顺序封装。这与标识符的推导顺序相反。实体的数据是先写的,然后是直接从实体派生的类的数据,继续下到叶类。对于SAT文件中的可读性,每个数据字段由空格分隔:空格、回车或换行。

Because it is known that the encapsulation (and derivation) starts from ENTITY, the ENTITY save identifier is not written. In figure 2-1, this is shown in the middle by the empty double quotation marks, (“”).

因为我们知道封装(和派生)是从实体开始的,所以实体保存标识符不是写出来的。在图2-1中,这显示在中间的空双引号(“”)。

《Sat格式文件详解翻译》

Starting from inside and going out, the ENTITY data is preceded by identifiers and is followed by the data for the identifiers. The identifiers correspond to classes derived directly from ENTITY. This type of encapsulation continues for all class derivations until the leaf class is reached.

从内部和外部开始,实体数据前面是标识符,后面是标识符的数据。标识符对应于直接从实体派生的类。这种类型的封装继续为所有类派生,直到到达叶类为止。

In figure 2-1 for a SAT file, the class identifiers are separated from one another with dashes,while their data fields are separated with white space. The white space is typically a space, but may also be a new line. The last element of the record is the terminator character (#).

在图2-1中,在一个SAT文件中,类标识符用破折号分隔,而它们的数据字段用空白分隔。白空通常是一个空格,但也可能是一条新行。记录的最后一个元素是终止符(#)。

Terminator(终止符)

The pound sign (#) terminates the entity data in the SAT file. Tag 17 is the terminator in the SAB file. This allows unknown entities and attributes to be read and the start of the next entity to be located.

磅符号(#)终止了SAT文件中的实体数据。标记17是SAB文件中的终止符。这允许读取未知的实体和属性,以及下一个实体的开始位置。

Subtypes and References(子类型和引用)

Subtypes are frequently used in a save file in many of the entity records. Subtypes specify in more detail the characteristics of a geometry type. Interpolated curves (intcurve) and spline surfaces (spl_sur) are two of the major geometry types that make extensive use of subtypes.

在许多实体记录中,在保存文件中经常使用子类型。子类型更详细地指定了几何类型的特征。插值曲线(intcurve)和样条曲面(spl_sur)是广泛使用子类型的两种主要几何类型。

Subtype definitions contain the bulk of the geometry information of a model and generally span numerous lines within a record of a SAT file. The subtype definition can be preceded and followed by other data pertinent to that record, and subtypes can be nested.

子类型定义包含模型的大部分几何信息,并且通常在一个SAT文件的记录中跨越许多行。子类型定义可以在前面加上其他与该记录相关的数据,子类型可以嵌套。

When a subtype definition is created as part of a record in the save file, it is numbered in an index table starting with 0. Because entity elements within a model often share geometry, the subtype index numbers can be referenced by other entity element records. When a particular record uses a subtype object which has been defined by another record, the latter record simply references the index number of the subtype rather than writing the entire set of data out again. These references are written out as “ref n”. The ref indicates that this particular item has already been written out to the save file. The n stands for the subtype reference number, counting from the beginning of the file.

当在保存文件中创建一个子类型定义作为记录的一部分时,它在索引表中以0开头。由于模型中的实体元素经常共享几何,子类型索引号可以由其他实体元素记录引用。当一个特定的记录使用一个被另一个记录定义的子类型对象时,后一个记录只是引用子类型的索引号,而不是再次写入整个数据集。这些引用被写成“ref n”。ref指示此特定项已写入save文件。n代表子类型引用号,从文件的开头开始计数。

All subtype and reference designations are enclosed between subtype_start and subtype_end designators, which are curly braces “{ }” in a SAT file and Tag 15 and Tag 16 in a SAB file.

所有子类型和引用名称都包含在subtype_start和subtype_end designators之间,它们是一个SAT文件中的大括号“{}”,在SAB文件中标记为15和标记16

Geometry with Laws(几何与规则)

When a law is used to create geometry, as for curves, surfaces, a wire offsetting, and sweeping, the string denoting the law and any supporting data is saved to the save file.

当使用法则创建几何体时,如曲线,曲面,线偏移和扫描,表示规则和任何支持数据的字符串将保存到保存文件中。

A law is composed of one or more law symbol character strings. The law symbols are very similar to the adaptation of mathematical notation for use in computers. The valid syntax for the character strings is given in the law symbol templates. Laws support nesting of law symbols.

规则由一个或多个符号字符串组成。规则符号与计算机中使用的数学符号非常相似。字符字符串的有效语法是在规则符号模板中给出的。规则符号支持规则符号的嵌套。

Laws are most likely to appear in the save file as part of a curve or surface subtype definition in the form of a lawintcur or a lawsplsur. Typically, the subtype definition starts with generic geometry information. Then the law specific information is presented. The law itself can reference and/or define any number of other model geometric elements and subtypes using law data definitions. Following the law definition and all associated law data in the save file, other common subtype information can appear.

规则最可能出现在保存文件中,作为曲线或表面子类型定义的一部分,形式为lawintcur或lawsplsur。通常,子类型定义从通用的几何信息开始。然后给出了具体的规则信息。规则本身可以使用规则数据定义来引用和/或定义任意数量的其他模型几何元素和子类型。在保存文件中遵循规则定义和所有相关的规则数据之后,可以出现其他常见的子类型信息。

End Marker(结束标记)

The last entity record is followed by End-of-ACIS-data to mark the end of the ACIS save data.

最后一个实体记录后面是最后的ACIS数据,以标记ACIS保存数据的结束。

End-of-ACIS-data

If the history save/restore option is turned on, the Begin-of-ACIS-History-Data and End-of-ACIS-History-Section markers together with old entities are listed before the End-of-ACIS-data marker.

如果历史保存/恢复选项被打开,则在End-of-ACIS-data标记之前列出了Begin-of-ACIS-History-Datam标记和End-of-ACIS-History-Section标记以及之间的旧数据

History Markers(历史标记)

When the history save/restore option is turned on, a new section is added to the save file before the End-of-ACIS-data marker. This new section comes immediately after the information pertaining to the entities of the active model.

当历史保存/恢复选项打开时,保存文件时在End-of-ACIS-data之前添加一个数据标记。这个新部分是在与活动模型的实体相关的信息之后立即出现的。

Begin-of-ACIS-History-Data

The new history section starts with a marker Begin-of-ACIS-History-Data. Everything between this section marker and the End-of-ACIS-History-Section marker obeys the rules of history save.

新的历史部分以一个标志开始,即Begin-of-ACIS-History-Data。在这一节标记和结尾之间的所有东西End-of-ACIS-History-Section标记遵循历史保存的规则。

This section of the save file lists entities which may no longer exist at the active state.However, these entities did exist at some point during the creation of the current model and are necessary for roll back and roll forward operations. Entities that were part of pruned branches are not saved.

保存文件的这一部分列出了可能不再存在于活动状态的实体。但是,这些实体在创建当前模型时确实存在,并且对于回滚和滚转操作是必需的。那些属于修剪树枝的实体并没有被保存。

When the history save/restore option is turned on, the End-of-ACIS-History-Section marker immediately follows the history data. Between this marker and the Begin-of-ACIS-data marker are more entity records. These adhere to the entity record structure.

当历史保存/恢复选项被打开时,End-of-ACIS-History-Section标记会立即跟踪历史数据。在这个标记和 Begin-of-ACIS-data标记是更多的实体记录。这些都遵循实体记录结构。

End-of-ACIS-History-Section

The End-of–ACIS-History-Section marker is followed by the End-of-ACIS-data marker.
End-of-ACIS-History-Section标记后面是End-of-ACIS-data标记。

Class Restore Methods(类恢复方法)

Every ACIS class that can have information retrieved from a save file typically has a restore method. In most cases, this is either restore_common or restore_data.

每个可以从保存文件中获取信息的ACIS类通常都有一个还原方法。在大多数情况下,这要么是restore_common,要么是restore_data。

When the restore methods are documented for a given class, they contain a function prototype,a description, and some pseudo-code to describe the actual data that is retrieved from the SAT file. The pseudo-code can include references to other class restore functions or to other generic functions to handle known data types in the save file.

当为给定的类记录恢复方法时,它们包含一个函数原型、一个描述和一些伪代码来描述从SAT文件中检索到的实际数据。伪代码可以包括对其他类恢复函数的引用,也可以包含在保存文件中处理已知数据类型的其他泛型函数。

For example, when restoring a cone entity from a save file, the cone::restore_data method references the ellipse::restore_data method as well as the surface::restore_data method. It also references common input functions like read_real and read_logical. Likewise, the ellipse::restore_data method references the common input functions read_position, read_unit_vector, and read_vector.

例如,当从保存文件中恢复一个锥体实体时,cone::restore_data方法引用了ellipse::restore_data方法以及surface::restore_data方法。它还引用了常见的输入函数,如read_real和read_logical。同样,ellipse::restore_data方法引用公共输入函数read_position、read_unit_vector和read_vector。

Hence, finding out exactly all of the data associated with a given save identifier may involve tracing through several classes and common input functions.

因此,找到与给定的保存标识符关联的所有数据可能涉及到通过几个类和常见的输入函数进行跟踪。

Tracing SAT Data (SAT数据跟踪)

Using the ACIS online help “index search can speed the interpretation of the information in a SAT file. The index search lists both class names and save identifiers.

使用ACIS联机帮助“索引搜索可以加速对一个SAT文件中的信息的解释。索引搜索列出了类名和保存标识符。

  1. Locate the index entry for the save identifier of interest, for example, the class BODY.Follow the index entry to the class information, of which the save identifier is a part.(找到感兴趣的保存标识符的索引项,例如,类主体。跟踪类信息的索引项,其中保存标识符是其中的一部分。)
  2. The first three lines of the SAT file contain header information. Parse these lines for information of value, such as the modeling units. For more details about the header, refer to the section Save File Header.(SAT文件的前三行包含标题信息。解析这些行以获取值信息,例如建模单元。有关标题的更多细节,请参阅“保存文件头”节。)
  3. For an entity record within the SAT file, read the inner-most save identifier.(对于在SAT文件内的实体记录,读取最内部的保存标识符。)
    • For more details about entity records, refer to the section Entity Records.(有关实体记录的更多详细信息,请参阅“部分实体记录”。)
    • For more details about the save identifiers, refer to the section Save Identifiers.(有关保存标识符的详细信息,请参阅“保存标识符”节。)
    • For more details about finding the inner-most save identifiers, refer to the section Entity Encapsulation in a Record.(有关查找最内部的保存标识符的详细信息,请参阅记录中的节实体封装。)
  4. Locate the index entry for the save identifier.(找到保存标识符的索引项。)
  5. Follow the index entry for the save identifier to its owning class description in the documentation.(在文档中跟踪保存标识符的索引项,以便在文档中拥有它的类描述。)
  6. The restore methods of the class specify the data associated with that save identifier.This data begins just to the right of the inner-most save identifier of the SAT record. For more details about restore methods, refer to the section Class Restore Methods.(类的恢复方法指定与该保存标识符关联的数据。此数据仅开始于SAT记录的最内保存标识符的右侧。有关恢复方法的更多细节,请参阅节类恢复方法。)
  7. The data associated with the save identifier is represented by the pseudo code of the restore methods.(与保存标识符关联的数据由恢复方法的伪代码表示。)
  8. The restore methods may reference restore methods for other classes. If required, go to those classes and follow their restore methods. Be sure to keep track of the class restore stack so that tracing can pop back to the correct class restore method.(恢复方法可以引用其他类的恢复方法。如果需要,请访问这些类并遵循它们的恢复方法。确保跟踪类恢复堆栈,以便跟踪可以返回到正确的类恢复方法。)
  9. When finished with the data for the given save identifier, go to step 4. for the next inner-most save identifier, if applicable.(在完成给定保存标识符的数据之后,转到步骤4。对于下一个最内部的保存标识符,如果可以的话。)
  10. If there are no more save identifiers and the data portion has encountered the entity record terminator (“#”), go to step 3. for the next entity record.(如果没有更多的保存标识符,并且数据部分遇到了实体记录终止符(“#”),请转到步骤3。用于下一个实体记录。)

For example, assume the following line was found in a SAT file.

例如,假设在一个SAT文件中找到了下面一行。

cone-surface $-1 0 0 0 0 0 1 10 0 0 1 I I 0 1 forward I I I I #

The “surface” keyword is the inner-most save identifier which is next to the NULL ENTITY. pointer ($-1). The documentation index for the word “surface” leads to the SURFACE class. So, this is the place to start tracing.

“surface”关键字是保存的标识符下一个实体为null。指针($-1)。“surface”一词的文档索引导致了SURFACE类。这就是开始追踪的地方。

SURFACE Class

public: void SURFACE::restore_common ();
No data This class does not save any data 

In this case, the restore method of the SURFACE class does not read any data.
在这种情况下,SURFACE类的恢复方法不读取任何数据。

CONE Class

The “cone” keyword is the next inner-most save identifier. The documentation index for the word “cone” goes to the CONE class.
“cone”关键字是下一个的保存标识符。“cone”一词的文档索引进入CONE类。

public: void CONE::restore_common ();
cone::restore_data Cone data definition.

The restore method of the CONE class references the restore_data method of the cone class.
CONE类的恢复方法引用CONE类的restore_data方法。

cone Class

public: void cone::restore_data ();

ellipse::restore_data Restore the information for the base ellipse
read_real Sine of cone angle
read_real Cosine of cone angle
if (restore_version_number < CONE_SCALING_VERSION)
    // the u parameter scale is obtained from the ellipse major axis
else
    read_real u parameter scale
if (restore_version_number < SURFACE_VERSION)
    // the reverse u flag is set to FALSE
else
    read_logical u parameter reversed, either “forward” or reversed”
surface::restore_data Generic surface data

The restore method of the cone class references the restore_data method of the ellipse class.
cone类的恢复方法引用了ellipse类的restore_data方法。

ellipse Class

public: void ellipse::restore_data ();
read_position Position of the center of the ellipse.
read_unit_vector Unit vector that is normal to plane of the ellipse.
read_vector Major axis of the ellipse.
read_real Ratio of the radii.
curve::restore_data Restore the underlying curve of the ellipse.

The restore method of the ellipse class finally calls some input functions to retrieve information from the SAT file. Specifically, it reads the position of the base ellipse, which is the first “0 0 0” after the “$-1”. It reads a unit vector for the base normal, which is the next “0 0 1”. It reads a vector for the major axis of the ellipse, which is “10 0 0”. It reads a real, “1”, for the ratio of the ellipse major to minor axis. Then it accesses the restore method of the curve class.

ellipse类的恢复方法最后调用一些输入函数来从SAT文件中检索信息。具体地说,它读取基本椭圆的位置,这是“$-1”之后的第一个“0 0 0”。它读取基本法线的单位向量,即下一个“0 0 1”。它为椭圆的主轴读取一个向量,即“10 0 0”。它读的是一个实数,“1”,表示椭圆的大小与小轴的比值。然后访问曲线类的恢复方法。

curve Class

public: void curve::restore_data ();
if (restore_version_number >= BNDCUR_VERSION)
    read_interval Interval for the subset range.

The restore method of the curve class reads in an interval. The interval itself is made up of two logicals, which happen to be the next “I I”, for two infinite values.
曲线类的恢复方法在间隔中读取。间隔本身由两个“I I”组成,它们之后恰好是两个极值。

The curve::restore_data method returns to ellipse::restore_data, which then returns to cone::restore_data so that processing can resume. The next two values, “0 1”, represent the sine and cosine of the cone angle, respectively. The u parameter scale is obtained from the ellipse’s major axis. It reads the logical “forward” before accessing the restore method of the surface class.

该curve::restore_data方法返回到ellipse::restore_data,然后返回到cone::restore_data,以便处理可以恢复。下两个值“0 1”分别表示圆锥角的正弦和余弦。u参数的尺度是从椭圆的主轴得到的。在访问surface类的恢复方法之前,它会读取逻辑“forward”。

surface Class

public: void surface::restore_data ();
if (restore_version_number >= BNDSUR_VERSION)
    read_interval subset u interval
    read_interval subset v interval

The surface::restore_data method reads in two intervals which in this case are infinite, “I I I I”.
这个表面::restore_data方法以两个间隔读取,在这个例子中是无限的,“I I I I”。

There are no other save identifiers to parse and the “#” indicates that there is no more data associated with that record.
没有其他的保存标识符来解析,“#”表示没有与该记录关联的更多数据。

Save File Example(例子)

The following simple example shows a SAT file with topology and geometry. The first three lines are the header, followed by the entity records, and finally the end marker. Optional sequence numbers were included.
下面的简单示例展示了一个具有拓扑和几何的SAT文件。前三行是头,后面是实体记录,最后是结束标记。包括可选的序号。

Record lines “-0” and “-1” are explained in more detail following the full example to show exactly what each item is and where to locate that information in this manual.

记录行“-0”和“-1”在完整的示例后面会更详细地解释,以显示每个条目的确切位置以及在该手册中定位该信息的位置。

《Sat格式文件详解翻译》

400 0 1 0
11 Scheme AIDE 11 ACIS 4.0 NT 24 Mon Apr 12 13:59:03 1998
25.4 1e-06 1e-10
-0 body $1 $2 $-1 $3 #
-1 display_attribute-st-attrib $-1 $4 $-1 $0 1 #
-2 lump $-1 $-1 $5 $0 #
-3 transform $-1 1 0 0 0 0 -1 0 1 0 0 10 0 1 rotate no_reflect no_shear #
-4 rgb_color-st-attrib $-1 $6 $1 $0 0 1 0 #
-5 shell $-1 $-1 $-1 $7 $-1 $2 #
-6 id_attribute-st-attrib $-1 $-1 $4 $0 1 #
-7 face $-1 $8 $9 $5 $-1 $10 forward single #
-8 face $-1 $11 $12 $5 $-1 $13 forward single #
-9 loop $-1 $14 $15 $7 #
-10 cone-surface $-1 0 0 0 0 0 1 10 0 0 1 I I 0 1 forward I I I I #
-11 face $-1 $-1 $16 $5 $-1 $17 forward single #
-12 loop $-1 $-1 $18 $8 #
-13 plane-surface $-1 0 0 -10 0 0 -1 -1 0 0 forward_v I I I I #
-14 loop $-1 $-1 $19 $7 #
-15 coedge $-1 $15 $15 $18 $20 1 $9 $-1 #
-16 loop $-1 $-1 $21 $11 #
-17 plane-surface $-1 0 0 10 0 0 1 1 0 0 forward_v I I I I #
-18 coedge $-1 $18 $18 $15 $20 0 $12 $-1 #
-19 coedge $-1 $19 $19 $21 $22 1 $14 $-1 #
-20 edge $-1 $23 $23 $18 $24 forward #
-21 coedge $-1 $21 $21 $19 $22 0 $16 $-1 #
-22 edge $-1 $25 $25 $21 $26 forward #
-23 vertex $-1 $20 $27 #
-24 ellipse-curve $-1 0 0 -10 0 0 -1 10 0 0 1 I I #
-25 vertex $-1 $22 $28 #
-26 ellipse-curve $-1 0 0 10 0 0 1 10 0 0 1 I I #
-27 point $-1 10 0 -10 #
-28 point $-1 10 0 10 #
End-of-ACIS-data

The first three lines of the file are the header. The fourth line, shown below,describes a body entity.
文件的前三行是标题。第四行,如下所示,描述了一个实体实体。

-0 body $1 $2 $-1 $3 #

《Sat格式文件详解翻译》

Code OutputClassDescription
-0Sequence number 0; first data record of file.
bodyBODYident – (BODY derived from ENTITY)
$1ENTITYENTITY data – Pointer to its attribute
$2BODYBODY data – Pointer to body’s lump
$-1BODYBODY data – Pointer to body’s wire
$3BODYBODY data – Pointer to body’s transform
#Terminator

The fifth line of the file, shown below, describes a display attribute entity.
文件的第五行,如下所示,描述了一个显示属性实体。

-1 display_attribute-st-attrib $-1 $4 $-1 $0 1 #

《Sat格式文件详解翻译》

Code OutputClassDescription
-1ENTITY (implied)Sequence number 1;address for attribute pointer called out in sequence number 0. The double quotation marks(“”) are meant to signify that ENTITY is implied.
display_attribute-DISPLAY_ATTRIBsave identifier for the DISPLAY_ATTRIB
st-ATTRIB_STsave identifier for the ATTRIB_ST class
attribATTRIBUTEsave identifier for the ATTRIBUTE class
1|ENTITY|ENTITYdataAttribute − 1 | E N T I T Y | E N T I T Y d a t a − A t t r i b u t e rec_num
$4ATTRIBUTEPointer to the next attribute
$-1ATTRIBUTEPointer to the previous attribute
$0ATTRIBUTEPointer to owner
1DISPLAY_ATTRIBDisplay revision
#Terminator

Subtypes and References Example

As a more graphical illustration of how subtyping and referencing work in a save file, several Scheme commands and a resulting SAT file are presented. The Scheme commands generate a cylinder which has one end bounded by a spline face. Another cylinder intersects the cylinder along the spline face, forming a cylindrical groove in the spline face. The spline surface is used in the definition of several spline curves in this example.

作为一个更图形化的例子,说明了如何在保存文件中进行子类型和引用的工作,给出了几个Scheme命令和一个结果的SAT文件。该方案命令生成一个圆柱体,它的一端以花键面为界。另一个圆柱体沿着花键面与气缸相交,在花键面上形成一个圆柱形槽。在本例中,样条曲面在几个样条曲线的定义中使用。

《Sat格式文件详解翻译》

The following example is taken from the file exm_ref.sat created in the above Scheme code.It does not list all sequence numbers from 0 to 171, but rather only a portion of them. The highlighted entries for sequence numbers 17, 96, and 118 are explained in more detail following this listing.

400 0 1 0
11 Scheme AIDE 11 ACIS 4.0 NT 24 Mon Apr 12 13:59:03 1998
25.4 1e-06 1e-10
-0 body $1 $2 $-1 $3 #
-1 display_attribute-st-attrib $-1 $4 $-1 $0 3 #
-2 lump $-1 $-1 $5 $0 #
-3 transform $-1 1 0 0 0 1 0 0 0 1 0 0 10 1 rotate no_reflect no_shear #
-4 rgb_color-st-attrib $-1 $6 $1 $0 0 1 0 #
-5 shell $-1 $-1 $-1 $7 $-1 $2 #
-6 id_attribute-st-attrib $-1 $-1 $4 $0 35 #
-7 face $-1 $8 $9 $5 $-1 $10 reversed single #
-8 face $-1 $11 $12 $5 $-1 $13 forward single #
-9 loop $-1 $-1 $14 $7 #
-10 cone-surface $-1 0 0 10 1 0 0 0 0 -3 1 I I 0 1 forward I I I I #
-11 face $-1 $15 $16 $5 $-1 $17 forward single #
-12 loop $-1 $-1 $18 $8 #
-13 plane-surface $-1 0 0 10 0 0 1 1 0 0 forward_v I I I I #
-14 coedge $-1 $19 $20 $21 $22 1 $9 $-1 #
-15 face $-1 $23 $24 $5 $-1 $25 forward single #
-16 loop $-1 $-1 $26 $11 #
-17 spline-surface $-1 forward { exactsur nubs 3 3 open
    .   open none none 3 2
    .
    .   [Data not shown; this is subtype number 0]
    .
    } I I I I #
-18 coedge $-1 $27 $28 $29 $30 0 $12 $-1 #
    .
    . [Sequence entries 19 through 94 not shown]
    .
-95 vertex $-1 $93 $138 #
-96 intcurve-curve $-1 forward { surfintcur nubs 3 open 4
    .
    . [Data not shown; this is subtype number 8]
    .
    spline forward { exactsur nubs 3 3 open open none none 3 3
    .
    . [Data not shown; this is subtype number 9]
    .
    } I I I I
    plane 0 0 10 0 0 1 1 0 0 forward_v I I I I
    .
    . [Data not shown]
    .
    nullbs
    F 0 F 4.1671539659088168 } I I #
-97 coedge $-1 $64 $54 $134 $139 1 $65 $-1 #
    .
    . [Sequence entries 98 through 116 not shown]
    .
-117 vertex $-1 $73 $152 #
-118 intcurve-curve $-1 forward { surfintcur nubs 3 open 4
    .
    . [Data not shown; this is subtype number 10
    . and makes a reference to subtype number 8]
    spline forward { ref 8 } I I I I
    .
    . [Data not shown]
    .
    F 3.2425629808368615 F 7.4005854616279674 } I I #
-119 vertex $-1 $115 $153 #
    .
    . [Sequence entries 120 through 168 not shown]
    .
-169 vertex $-1 $164 $171 #
-170 ellipse-curve $-1 0 0 -10 0 0 -1 10 0 0 1 I I #
-171 point $-1 0 10 -10 #
End-of-ACIS-data

The first occurrence of a subtype definition for exactsur is on sequence number 17, and is numbered 0 in the subtype index table. This is explained in the following table.
对exactsur的子类型定义的第一次出现是在序号17上,在子类型索引表中编号为0。下面的表解释了这一点。

Code OutputClassDescription
17Sequence number 17.
spline-SPLINEsave identifier for the spline class
surfaceSURFACEsave identifier for the SURFACE class
$-1ENTITYPointer to the attribute record
forwardsplineParameter defining the sense direction for the spline curve.
{Start of the subtype definition. In this particular case, the subtype index number is 0.
exactsurexact_spl_surSubtype name is exactsur and uses data element spl_sur.
spl_surData element, which has a bs3 surface and a real used as the fit tolerance.
nubsbs3_surfaceIdent: used as part of B-spline curve definition.
3bs3_surfaceinteger, u-degree.
3bs3_surfaceinteger, v-degree.
openbs3_surfaceident: u-closure identifier.
openbs3_surfaceident: v-closure identifier.
nonebs3_surfaceident: u-singularity.
nonebs3_surfaceident: v-singularity.
3bs3_surfaceident: number of u-knots.
2bs3_surfaceident: number of v-knots.
[Data not shown]Data that was left out related to the u-knot values, their paired multiplicity, the v-knot values, their paired multiplicity, associated x, y, z coordinates, and a fit tolerance.
}End of the subtype definition. In this particular case, the subtype index number is 0.
I Isurfaceinterval – u-parameter range.
I Isurfaceinterval – v-parameter range.
#Terminator for sequence number 17.

The listing before the above table also has an example of a reference. Sequence number -118 has the text “{ ref 8 }” embedded within its information. This is a direct reference to subtype object 8.(This references the ninth subtype definition within the file, because the subtype index numbering begins with 0.)

上表前面的清单也有一个引用示例。序列号-118中包含文本“{ref 8}”。这是对子类型对象8的直接引用。(这里引用了文件中的第9个子类型定义,因为子类型索引编号以0开头。)

The subtype object with the index number 8 is defined on sequence number 96. Thus, that definition of a surfintcur is used as part of sequence number 118. Note that the reference to subtype 8 in sequence number 118 actually occurs during the definition of another subtype. Moreover, nested subtype definitions are also supported, as is seen within the subtype definition on sequence number 96.

下标为8的子类型对象定义在序号96上。因此,surfintcur的定义被用作第118个序列的一部分。注意,在第118层中,对子类型8的引用实际上发生在另一个子类型的定义中。此外,还支持嵌套的子类型定义,正如在第96个序列的子类型定义中所看到的那样。

Constant Definitions and #define

Constant definitions were often used during the evaluation of the data stored for a given save identifier. These are declared in #define statements in the file versions.hxx. This poses no problems for someone having ACIS. However, for those who do not have ACIS, the header declarations are listed below.

在对存储为给定保存标识符的数据进行评估时,经常使用常量定义。这些在#define语句中声明在文件版本中。这对有ACIS的人来说没有问题,对于那些没有ACIS的人,下面列出了标题声明。

The versions.hxx file contains a list of the ACIS version numbers where the format of save files changed. It is used in individual ENTITY (and other) “restore” routines to allow old save files to be restored into new ACIS programs.

versions.hxx文件包含ACIS版本号的列表,其中保存文件的格式发生了变化。它用于单个实体(和其他)“恢复”例程,以便将旧的保存文件恢复到新的ACIS程序中。

// This file contains a list of the version numbers of ACIS
// at which the format of ”save” files has changed. It is used
// in individual ENTITY (and other) ”restore” routines to allow
// old save files to be restored into new ACIS programs.
// First declare the variables which contain the version numbers
// of the current save file being restored. There is a major and
// minor component, and a portmanteau number which combines the
// two, and is the value actually placed in the save file.
#if !defined( VERSIONS_HDR_DEF )
#define VERSIONS_HDR_DEF
#include ”kernel/dcl_kern.h”
extern DECL_KERN int& get_restore_major_version();
extern DECL_KERN int& get_restore_minor_version();
// Combined version number.
extern DECL_KERN int& get_restore_version_number();
#ifndef restore_version_number
#define restore_version_number get_restore_version_number()
#endif

// Now the same for the current ”save” file. This is normally set
// to the version number of this version of ACIS, but can be set
// backwards by the application to cause backwards-compatible save
// files to be produced (provided the data structure is itself
// backwards-compatible).
extern DECL_KERN int& get_save_major_version();
extern DECL_KERN int& get_save_minor_version();
extern DECL_KERN int& get_save_version_number(); // Combined version number.
#ifndef save_version_number
#define save_version_number get_save_version_number()
#endif

// Macros to define the way the portmanteau version number is
// obtained from the major and minor versions.
#define PORTMANTEAU( maj, min ) (100 * maj + min)
#define MAJOR_VERSION( port ) (port / 100)
#define MINOR_VERSION( port ) (port % 100)

// Release version numbers.
// The version at which the start and end parameter values of
// edges were removed from the save file, and recomputed when
// required.
const int PARAM_MAJOR = 1;
const int PARAM_MINOR = 1;
const int PARAM_VERSION = PORTMANTEAU( PARAM_MAJOR, PARAM_MINOR );

// The version at which LUMPs were introduced, to subdivide bodies
// into disjoint connected regions.
const int LUMP_MAJOR = 1;
const int LUMP_MINOR = 1;
const int LUMP_VERSION = PORTMANTEAU( LUMP_MAJOR, LUMP_MINOR );

// The version at which curve types were first output to the save
// file as character strings instead of integers.
const int CURVE_MAJOR = 1;
const int CURVE_MINOR = 3;
const int CURVE_VERSION = PORTMANTEAU( CURVE_MAJOR, CURVE_MINOR );

// The version at which surface types were first output to the save
// file as character strings instead of integers.
const int SURFACE_MAJOR = 1;
const int SURFACE_MINOR = 3;
const int SURFACE_VERSION = PORTMANTEAU( SURFACE_MAJOR, SURFACE_MINOR );

// The version at which subtypes of intcurves were defined requiring
// classification in the save file.
const int INTCURVE_MAJOR = 1;
const int INTCURVE_MINOR = 3;
const int INTCURVE_VERSION = PORTMANTEAU( INTCURVE_MAJOR, INTCURVE_MINOR );

// The version at which subtypes of splines were defined requiring
// classification in the save file.
const int SPLINE_MAJOR = 1;
const int SPLINE_MINOR = 3;
const int SPLINE_VERSION = PORTMANTEAU( SPLINE_MAJOR, SPLINE_MINOR );

// The version at which pointers were first distinguished from integers
// in text files by a dollar sign.
const int DOLLAR_MAJOR = 1;
const int DOLLAR_MINOR = 3;
const int DOLLAR_VERSION = PORTMANTEAU( DOLLAR_MAJOR, DOLLAR_MINOR );

// The version at which sharable objects like int_cur and spl_sur
// were first surrounded by curly braces, and could be shared in the
// save file.
const int SHARABLE_MAJOR = 1;
const int SHARABLE_MINOR = 4;
const int SHARABLE_VERSION = PORTMANTEAU( SHARABLE_MAJOR, SHARABLE_MINOR );

// The version at which blend attributes lost their ”form” integer
// value (which was always zero, and so redundant).
const int BLEND_MAJOR = 1;
const int BLEND_MINOR = 5;
const int BLEND_VERSION = PORTMANTEAU( BLEND_MAJOR, BLEND_MINOR );

// The version at which parameter curves may have the defining
// parameter curve and surface in either slot 1 or 2.
const int PARCUR_MAJOR = 1;
const int PARCUR_MINOR = 5;
const int PARCUR_VERSION = PORTMANTEAU( PARCUR_MAJOR, PARCUR_MINOR );

// The version at which pcurves may have different subtypes, and so
// need a type code.
const int PCURVE_MAJOR = 1;
const int PCURVE_MINOR = 5;
const int PCURVE_VERSION = PORTMANTEAU( PCURVE_MAJOR, PCURVE_MINOR );

// The version at which faces may be double-sided, either free sheets
// or embedded in material.
const int TWOSIDE_MAJOR = 1;
const int TWOSIDE_MINOR = 5;
const int TWOSIDE_VERSION = PORTMANTEAU( TWOSIDE_MAJOR, TWOSIDE_MINOR );

// The version at which logical values are written to the save file
// as ”T” or ”F” instead of as integers.
const int LOGIO_MAJOR = 1;
const int LOGIO_MINOR = 5;
const int LOGIO_VERSION = PORTMANTEAU( LOGIO_MAJOR, LOGIO_MINOR );

// The version at which coedges were first expected to be sorted clockwise
// around the edge.
const int SORTCOED_MAJOR = 1;
const int SORTCOED_MINOR = 5;
const int SORTCOED_VERSION = PORTMANTEAU( SORTCOED_MAJOR, SORTCOED_MINOR );

// The version at which intervals could be (semi-)infinite, and so require
// different save file format.
const int INFINT_MAJOR = 1;
const int INFINT_MINOR = 6;
const int INFINT_VERSION = PORTMANTEAU( INFINT_MAJOR, INFINT_MINOR );

// The version at which curves have a subset range to bound them within
// their natural range.
const int BNDCUR_MAJOR = 1;
const int BNDCUR_MINOR = 6;
const int BNDCUR_VERSION = PORTMANTEAU( BNDCUR_MAJOR, BNDCUR_MINOR );

// The version at which surfaces have a subset range to bound them within
// their natural range.
const int BNDSUR_MAJOR = 1;
const int BNDSUR_MINOR = 6;
const int BNDSUR_VERSION = PORTMANTEAU( BNDSUR_MAJOR, BNDSUR_MINOR );

// The version at which multiple entities can be saved into a single save
// file unit (as opposed to multiple self-contained sections of a file).
const int MULTSAV_MAJOR = 1;
const int MULTSAV_MINOR = 5;
const int MULTSAV_VERSION = PORTMANTEAU( MULTSAV_MAJOR, MULTSAV_MINOR );

// The version in which save and restore started using a FileInterface
// object to do the I/O.
const int FILEINTERFACE_MAJOR = 1;
const int FILEINTERFACE_MINOR = 6;
const int FILEINTERFACE_VERSION = PORTMANTEAU( FILEINTERFACE_MAJOR, FILEINTERFACE_MINOR );

// The version in which ”Wire Booleans” were implemented, requiring
// extensions to the data structure.
const int WIREBOOL_MAJOR = 1;
const int WIREBOOL_MINOR = 7;
const int WIREBOOL_VERSION = PORTMANTEAU( WIREBOOL_MAJOR, WIREBOOL_MINOR );

// The version in which ”3D eye refinements” were implemented.
const int THREEDEYE_REF_MAJOR = 1;
const int THREEDEYE_REF_MINOR = 7;
const int THREEDEYE_REF_VERSION = PORTMANTEAU(THREEDEYE_REF_MAJOR,THREEDEYE_REF_MINOR);

// STI jmb: Version in which the History Manager was introduced
const int HISTORY_MAJOR = 1;
const int HISTORY_MINOR = 7;
const int HISTORY_VERSION = PORTMANTEAU( HISTORY_MAJOR, HISTORY_MINOR);

// STI jmb: end
// The version in which ”Safe Ranges” for intcurves were implemented,
// requiring an extra field in the data structure.
const int SAFERANGE_MAJOR = 1;
const int SAFERANGE_MINOR = 7;
const int SAFERANGE_VERSION = PORTMANTEAU( SAFERANGE_MAJOR, SAFERANGE_MINOR );

// The version which introduced angled cross curves at the ends of
// face-face blends, requiring extra fields in ATTRIB_FFBLEND.
const int ANG_XCUR_MAJOR = 1;
const int ANG_XCUR_MINOR = 7;
const int ANG_XCUR_VERSION = PORTMANTEAU( ANG_XCUR_MAJOR, ANG_XCUR_MINOR );

// The version at which advanced blending facilities were first made
// available.
const int ADV_BL_MAJOR = 1;
const int ADV_BL_MINOR = 8;
const int ADV_BL_VERSION = PORTMANTEAU( ADV_BL_MAJOR, ADV_BL_MINOR );

// STI dgh - begin
// The version where the Intergraph spline library was first introduced.
//const int IGRSPLINE_MAJOR = 2;
//const int IGRSPLINE_MINOR = 0;
//const int IGRSPLINE_VERSION = PORTMANTEAU( IGRSPLINE_MAJOR, IGRSPLINE_MINOR);
// STI dgh - end

// The version where the save/restore of logicals, enums was made consistent
const int CONSISTENT_MAJOR = 2;
const int CONSISTENT_MINOR = 0;
const int CONSISTENT_VERSION = PORTMANTEAU(CONSISTENT_MAJOR,CONSISTENT_MINOR);

// The version where the additional header information was added
const int FILEINFO_MAJOR = 2;
const int FILEINFO_MINOR = 0;
const int FILEINFO_VERSION = PORTMANTEAU(FILEINFO_MAJOR, FILEINFO_MINOR);

// The version where the mesh classes were added
const int MESH_MAJOR = 2;
const int MESH_MINOR = 0;
const int MESH_VERSION = PORTMANTEAU(MESH_MAJOR, MESH_MINOR);

// The version where extended curves and surfaces were introduced.
const int EXT_CU_SF_MAJOR = 2;
const int EXT_CU_SF_MINOR = 1;
const int EXT_CU_SF_VERSION = PORTMANTEAU(EXT_CU_SF_MAJOR, EXT_CU_SF_MINOR);

// The version where coedges were given sense enumeration strings.
const int COEDGE_SENSE_MAJOR = 2;
const int COEDGE_SENSE_MINOR = 2;
const int COEDGE_SENSE_VERSION = PORTMANTEAU(COEDGE_SENSE_MAJOR, COEDGE_SENSE_MINOR);

// The version at which Skin/Loft surfaces have a subset range to bound them
// within their natural range.
const int ARCWISE_SKIN_MAJOR = 2;
const int ARCWISE_SKIN_MINOR = 2;
const int ARCWISE_SKIN_VERSION = PORTMANTEAU( ARCWISE_SKIN_MAJOR, ARCWISE_SKIN_MINOR );

// The version in which adv_var_blend attributes output a logical
// specifying if two radii functions are used
const int ADV_VAR_BLEND_TWO_RADII_MAJOR = 2;
const int ADV_VAR_BLEND_TWO_RADII_MINOR = 2;
const int ADV_VAR_BLEND_TWO_RADII_VERSION = PORTMANTEAU( ADV_VAR_BLEND_TWO_RADII_MAJOR,ADV_VAR_BLEND_TWO_RADII_MINOR);

// The version in which laws first where added to ACIS
const int LAW_MAJOR = 2;
const int LAW_MINOR = 2;
const int LAW_VERSION = PORTMANTEAU( LAW_MAJOR, LAW_MINOR );

// The version in which reflection of offset_spl_surs was handled
const int OFFSET_REV_MAJOR = 2;
const int OFFSET_REV_MINOR = 2;
const int OFFSET_REV_VERSION = PORTMANTEAU( OFFSET_REV_MAJOR,OFFSET_REV_MINOR);

// The version in which discontinuity information was stored in int_curs and
// spl_surs
const int DISCONTINUITY_MAJOR = 3;
const int DISCONTINUITY_MINOR = 0;
const int DISCONTINUITY_VERSION = PORTMANTEAU( DISCONTINUITY_MAJOR, DISCONTINUITY_MINOR);

// The version in which taper_spl_surs came into existence
const int TAPER_EXISTENCE_MAJOR = 2;
const int TAPER_EXISTENCE_MINOR = 1;
const int TAPER_EXISTENCE_VERSION = PORTMANTEAU( TAPER_EXISTENCE_MAJOR, TAPER_EXISTENCE_MINOR );

// The version in which taper_spl_surs were split into derived classes
const int TAPER_MAJOR = 3;
const int TAPER_MINOR = 0;
const int TAPER_VERSION = PORTMANTEAU( TAPER_MAJOR, TAPER_MINOR);

// The version in which net surface was added to ACIS
const int NET_SPL_MAJOR = 3;
const int NET_SPL_MINOR = 0;
const int NET_SPL_VERSION = PORTMANTEAU( NET_SPL_MAJOR, NET_SPL_MINOR );

// The version in which law curves and surfaces where added to ACIS
const int LAW_SPL_MAJOR = 4;
const int LAW_SPL_MINOR = 0;
const int LAW_SPL_VERSION = PORTMANTEAU( LAW_SPL_MAJOR, LAW_SPL_MINOR );

// The version at which cones have a new member, representing the
// scaling factor of the u parameter.
const int CONE_SCALING_MAJOR = 4;
const int CONE_SCALING_MINOR = 0;
const int CONE_SCALING_VERSION = PORTMANTEAU( CONE_SCALING_MAJOR, CONE_SCALING_MINOR );

// The version in which laws in lofts where added to ACIS
const int LOFT_LAW_MAJOR = 4;
const int LOFT_LAW_MINOR = 0;
const int LOFT_LAW_VERSION = PORTMANTEAU( LOFT_LAW_MAJOR, LOFT_LAW_MINOR );

// The version in which refinement ”min_u_grid_lines and min_v_grid_lines”
// were added.
const int REF_MIN_UV_GRID_MAJOR = 4;
const int REF_MIN_UV_GRID_MINOR = 0;
const int REF_MIN_UV_GRID_VERSION = PORTMANTEAU(REF_MIN_UV_GRID_MAJOR,REF_MIN_UV_GRID_MINOR);

// The version at which vertex blend attributes were given a new member
// describing the method of auto setback calculation, if any.
const int VBLEND_AUTO_MAJOR = 4;
const int VBLEND_AUTO_MINOR = 0;
const int VBLEND_AUTO_VERSION = PORTMANTEAU(VBLEND_AUTO_MAJOR,VBLEND_AUTO_MINOR);

// The version at which the true rolling-ball envelope surface was introduced
// for var_blend_spl_sur’s.
const int BL_ENV_SF_MAJOR = 4;
const int BL_ENV_SF_MINOR = 0;
const int BL_ENV_SF_VERSION = PORTMANTEAU(BL_ENV_SF_MAJOR,BL_ENV_SF_MINOR);

// The version in which ellipse offset with an ellipse base curve so that they
// will extend the ellipse and not linearly.
const int ELLIPSE_OFFSET_MAJOR = 5;
const int ELLIPSE_OFFSET_MINOR = 0;
const int ELLIPSE_OFFSET_VERSION = PORTMANTEAU( ELLIPSE_OFFSET_MAJOR,ELLIPSE_OFFSET_MINOR );

// The version at which Tolerant Modeling was introduced.
const int TOL_MODELING_MAJOR = 5;
const int TOL_MODELING_MINOR = 0;
const int TOL_MODELING_VERSION = PORTMANTEAU(TOL_MODELING_MAJOR,TOL_MODELING_MINOR);

// The version in which approximating geometry could be stored in summary
// form.
const int APPROX_SUMMARY_MAJOR = 5;
const int APPROX_SUMMARY_MINOR = 0;
const int APPROX_SUMMARY_VERSION = PORTMANTEAU( APPROX_SUMMARY_MAJOR, APPROX_SUMMARY_MINOR );

// The version at which a scaling factor was saved for tapers.
const int TAPER_SCALING_MAJOR = 5;
const int TAPER_SCALING_MINOR = 0;
const int TAPER_SCALING_VERSION = PORTMANTEAU(TAPER_SCALING_MAJOR,TAPER_SCALING_MINOR);

// The version at which a scaling factor was saved for tapers.
const int LAZY_B_SPLINE_MAJOR = 5;
const int LAZY_B_SPLINE_MINOR = 0;
const int LAZY_B_SPLINE_VERSION = PORTMANTEAU(LAZY_B_SPLINE_MAJOR,LAZY_B_SPLINE_MINOR);

// The version at which multi-surfaces were introduced to Deformable Modeling
const int DM_MULTI_SURF_MAJOR = 5;
const int DM_MULTI_SURF_MINOR = 0;
const int DM_MULTI_SURF_VERSION = PORTMANTEAU(DM_MULTI_SURF_MAJOR,DM_MULTI_SURF_MINOR);

// The version at which the copy_owner method was added to ATTRIB_GEN_NAME.
const int GA_COPY_ACTION_MAJOR = 6;
const int GA_COPY_ACTION_MINOR = 0;
const int GA_COPY_ACTION_VERSION = PORTMANTEAU(GA_COPY_ACTION_MAJOR,GA_COPY_ACTION_MINOR);

// The version at which link constraint color persistence was introduced to
// Deformable Modelling
const int DM_MULTI_SURF_COLOR_MAJOR = 6;
const int DM_MULTI_SURF_COLOR_MINOR = 0;
const int DM_MULTI_SURF_COLOR_VERSION = PORTMANTEAU(DM_MULTI_SURF_COLOR_MAJOR,DM_MULTI_SURF_COLOR_MINOR);

// The version at which Skin/Loft surfaces error should be recalculated
// so that the intersector will not box out valid skin intersections.
const int RECAL_SKIN_ERROR_MAJOR = 5;
const int RECAL_SKIN_ERROR_MINOR = 2;
const int RECAL_SKIN_ERROR_VERSION = PORTMANTEAU( RECAL_SKIN_ERROR_MAJOR, RECAL_SKIN_ERROR_MINOR );

// The version at which the fact whether the ruled taper was
// ruled in u or in v was saved for tapers.
const int TAPER_U_RULED_MAJOR = 6;
const int TAPER_U_RULED_MINOR = 0;
const int TAPER_U_RULED_VERSION = PORTMANTEAU(TAPER_U_RULED_MAJOR,TAPER_U_RULED_MINOR);

// Multiple changes to DM SAT file in 6.0
// including point tangent constraints
// and saving of default shapes
const int DM_60_MAJOR = 6;
const int DM_60_MINOR = 0;
const int DM_60_VERSION = PORTMANTEAU(DM_60_MAJOR,DM_60_MINOR);

// The version in which pcurves in lofts where added to ACIS
const int LOFT_PCURVE_MAJOR = 6;
const int LOFT_PCURVE_MINOR = 0;
const int LOFT_PCURVE_VERSION = PORTMANTEAU( LOFT_PCURVE_MAJOR, LOFT_PCURVE_MINOR );

// The version in which an EELIST saves its owner and ownership policy
const int EELIST_OWNER_MAJOR = 6;
const int EELIST_OWNER_MINOR = 0;
const int EELIST_OWNER_VERSION = PORTMANTEAU( EELIST_OWNER_MAJOR, EELIST_OWNER_MINOR );

// The version in which an ANNOTATION saves whether members are hooked
const int ANNO_HOOKED_MAJOR = 7;
const int ANNO_HOOKED_MINOR = 0;
const int ANNO_HOOKED_VERSION = PORTMANTEAU( ANNO_HOOKED_MAJOR, ANNO_HOOKED_MINOR );

// The version in which patterns were added to ACIS
const int PATTERN_MAJOR = 7;
const int PATTERN_MINOR = 0;
const int PATTERN_VERSION = PORTMANTEAU( PATTERN_MAJOR, PATTERN_MINOR );

// The version in which tags were added to ENTITYs
const int ENTITY_TAGS_MAJOR = 7;
const int ENTITY_TAGS_MINOR = 0;
const int ENTITY_TAGS_VERSION = PORTMANTEAU( ENTITY_TAGS_MAJOR, ENTITY_TAGS_MINOR );

// The version at which strings were first distinguished
// in text files by a @ sign.
const int AT_MAJOR = 7;
const int AT_MINOR = 0;
const int AT_VERSION = PORTMANTEAU( AT_MAJOR, AT_MINOR );

// The version in which net law surface were added to ACIS
const int NET_LAW_MAJOR = 7;
const int NET_LAW_MINOR = 0;
const int NET_LAW_VERSION = PORTMANTEAU( NET_LAW_MAJOR, NET_LAW_MINOR );

// The version in which the ”bulletin” and ”bulletin_board” strings
// were removed from the history portion of the save file.
const int STRINGLESS_HISTORY_MAJOR = 7;
const int STRINGLESS_HISTORY_MINOR = 0;
const int STRINGLESS_HISTORY_VERSION = PORTMANTEAU( STRINGLESS_HISTORY_MAJOR, STRINGLESS_HISTORY_MINOR );

#endif
    原文作者:金色世界
    原文地址: https://blog.csdn.net/zgl390963305/article/details/79937929
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞