ACIS SAT 文件格式详解及其解析
目录[*]SAT 文件格式概述
[*]文件结构与版本
[*]核心解析类设计
[*]几何实体解析
[*]拓扑实体解析
[*]NURBS 曲线与曲面解析
[*]错误处理与容错机制
SAT 文件格式概述
什么是 SAT 文件?
ACIS SAT(Standard ACIS Text)文件是由 Spatial 公司开发的 ACIS 几何建模内核使用的标准文件格式。它是一种文本格式,用于存储三维几何模型的边界表示(B-Rep)数据,包括:
[*]几何信息:点、线、面、体等几何实体的数学定义
[*]拓扑信息:顶点、边、环、面、壳等拓扑实体及其连接关系
[*]属性信息:颜色、名称、图层等附加属性
[*]NURBS 支持:完整的 NURBS(非均匀有理 B 样条)曲线和曲面表示
SAT 文件的特点
[*]文本格式:人可读,便于调试和分析
[*]版本号标识:文件开头明确标注 ACIS 版本
[*]实体编号系统:每个实体有唯一的 ID 和引用计数
[*]前向引用:支持实体间的相互引用
[*]灵活的扩展性:支持自定义属性和扩展字段
文件结构与版本
文件头格式
ACIS 100 ACIS Verifier status: 0
[*]ACIS:固定标识符
[*]100:主版本号(如 700 表示 v7.0,3300 表示 v33.0)
[*]ACIS Verifier status: 0:验证状态
实体记录格式
每个实体记录遵循以下格式:
<count> <entity-type> <ref1> <ref2> ... <data-fields> { <nested-data> }示例:
-40 intcurve-curve $-1 -1 -1 $-1 forward { exactcur 6 full nurbs 3 open 2 ... }字段说明:
[*]-40:实体编号(负数表示引用计数)
[*]intcurve-curve:实体类型(相交曲线)
[*]$-1 -1 -1 $-1:前置引用($ 表示向前引用)
[*]forward:方向标志
[*]{ ... }:嵌套数据块
主要实体类型
几何实体
[*]point - 点
[*]straight-curve - 直线
[*]circle-curve - 圆
[*]ellipse-curve - 椭圆
[*]intcurve-curve - 参数曲线(含 NURBS)
[*]plane-surface - 平面
[*]cylinder-surface - 圆柱面
[*]cone-surface - 圆锥面
[*]exactsur - 精确曲面(含 NURBS)
拓扑实体
[*]vertex - 顶点
[*]edge - 边
[*]coedge - 协同边(有向边)
[*]loop - 环
[*]face - 面
[*]shell - 壳
[*]lump - 体块
[*]body - 实体
核心解析类设计
类图概览
classDiagram %% 核心流类 class SATInputStream { +std::istream& stream +size_t lineNumber +peekToken() String +nextToken() String +readInt() int +readDouble() double +readString() String +readEntityRef() int +readFlagsUntilNumber() List~String~ +static IsNumber(token) bool +static hasFlag(flags, flag) bool } %% 基础实体类 class SATEntity { #int m_satId #int m_refCount #SATEntityType m_type +getSatId() int +getRefCount() int +getType() SATEntityType +virtual Import(stm) void +virtual ResolvePointers() void } class SATFactory { +static createEntity(type, id) SATEntity* +static registerType(type, factory) void } %% 几何实体层次 class SATGeometry { +virtual GetCurve() Geom_Curve +virtual GetSurface() Geom_Surface } class SATPoint { -double m_x, m_y, m_z +Import(stm) void +GetPoint() gp_Pnt } class SATCurve { #Handle(Geom_Curve) m_curve +GetCurve() Geom_Curve } class SATIntersectionCurve { -int m_degree -bool m_isRational -List~double~ m_knots -List~int~ m_multiplicities -List~gp_Pnt~ m_controlPoints -List~double~ m_weights +Import(stm) void +buildBSplineCurve() void } class SATSurface { #Handle(Geom_Surface) m_surface +GetSurface() Geom_Surface } class SATExactSurface { -int m_uDegree, m_vDegree -bool m_isRational -List~List~gp_Pnt~ m_controlPoints -List~List~double~ m_weights +Import(stm) void +buildBSplineSurface() void } %% 拓扑实体层次 class SATTopology { +TopoDS_Shape GetShape() } class SATVertex { -SATPoint* m_point +ResolvePointers() void +GetShape() TopoDS_Vertex } class SATEdge { -SATCurve* m_curve -SATVertex* m_start, *m_end +ResolvePointers() void +GetShape() TopoDS_Edge } class SATFace { -SATSurface* m_surface -List~SATLoop~ m_loops +ResolvePointers() void +GetShape() TopoDS_Face } %% 文件解析器 class SATFile { -String filename -Map~int, SATEntity~ entities -Load() bool -BuildTopology() TopoDS_Shape -ExportBREP(shape, file) bool } %% 关系定义 SATInputStream --> SATEntity : 读取数据 SATFactory --> SATEntity : 创建实例 SATEntity
页:
[1]