找回密码
 立即注册
首页 业界区 安全 ACIS SAT 文件格式详解及其解析

ACIS SAT 文件格式详解及其解析

碛物 4 天前
目录


  • SAT 文件格式概述
  • 文件结构与版本
  • 核心解析类设计
  • 几何实体解析
  • 拓扑实体解析
  • NURBS 曲线与曲面解析
  • 错误处理与容错机制
SAT 文件格式概述

什么是 SAT 文件?

ACIS SAT(Standard ACIS Text)文件是由 Spatial 公司开发的 ACIS 几何建模内核使用的标准文件格式。它是一种文本格式,用于存储三维几何模型的边界表示(B-Rep)数据,包括:

  • 几何信息:点、线、面、体等几何实体的数学定义
  • 拓扑信息:顶点、边、环、面、壳等拓扑实体及其连接关系
  • 属性信息:颜色、名称、图层等附加属性
  • NURBS 支持:完整的 NURBS(非均匀有理 B 样条)曲线和曲面表示
SAT 文件的特点


  • 文本格式:人可读,便于调试和分析
  • 版本号标识:文件开头明确标注 ACIS 版本
  • 实体编号系统:每个实体有唯一的 ID 和引用计数
  • 前向引用:支持实体间的相互引用
  • 灵活的扩展性:支持自定义属性和扩展字段
文件结构与版本

文件头格式
  1. ACIS 100 ACIS Verifier status: 0
复制代码

  • ACIS:固定标识符
  • 100:主版本号(如 700 表示 v7.0,3300 表示 v33.0)
  • ACIS Verifier status: 0:验证状态
实体记录格式

每个实体记录遵循以下格式:
  1. <count> <entity-type> <ref1> <ref2> ... <data-fields> { <nested-data> }
复制代码
示例:
  1. -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
您需要登录后才可以回帖 登录 | 立即注册