碛物 发表于 4 天前

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]
查看完整版本: ACIS SAT 文件格式详解及其解析