中望CAD字形与字体编码及SHP文件格式

2021-05-07 61 0

CAD 的形(Shape)是一种特殊实体,可用线、弧及圆来定义。相较于块,形在存储和绘图方面更为高效,适用于需频繁插入简单零件且对速度要求较高的场合;其变种用于确定文本字体。

1. 形的基本概念。形由简单对象组成,即单一的直线、圆弧和圆。指定方向与距离时不能使用小数与建筑单位,只能使用整数及整型分数,例如一条线的距离等于 1/√2(约 0.7071068),可用分数 70/99(约 0.7070707)近似代替。形与字体以相同方式编写,保存在扩展名为 .SHP 的文件中;SHP 文件必须编译为 SHX 文件才能被调用,即由 CAD 将文本格式的 SHP 编译为二进制 SHX,以便排列组织形式定义、加速存取。

形文件实际分为三种:形、ASCII 字型及大字型文件,三者设计时唯一差别在于文件头的声明行,使用时主要区别在于调用命令不同。形以 SHAPE 命令经形名称调用;字体在插入文本时才被调用,如执行 TEXT 和 DIM 命令。ASCII 字型文件以 1 字节字形码调用(即英文字型文件),大字型文件以 2 字节字形码调用(即中文字型文件)。不论形或字符,形名均可大写或小写。

2. SHP 文件格式。三种 SHP 形文件格式相近,差异在文件头声明行。

2.1 形文件的形定义格式:单个字符以 ASCII 码形式编写保存。.SHP/.SHX 文件可含 255 个字符,每个字符定义有标题行,形如“*形编号,字节数,形名称”。标题行下一行以一行或多行代码定义字符。标题行各项含义:形编号从 1 到 255 且不可重复,编码数值不可为 0(特殊码);字节数定义一形使用的字节数,含结尾的 0(表示定义结束),最多不超过 2000,字节间以逗号分隔,可用括号增强可读性(不占字节)。形以名称调用,形名必须大写。

2.2 ASCII 字形文件在形基础上增加文件头声明“*0,4,字符集名称”,后接“上高,下高,种类,0”。含义:0 为特殊字型码,声明此为字型文件头;4 为固定长度值;字符集名称为任意字符串;上高为文字基准线上方可允许的高度,下高为下方高度;种类中 0 为仅供横向书写、1 为仅供竖向书写、2 为横竖两向皆可。ASCII 字型文件的形名称可用小写,编译保存内存时 CAD 将忽略这些名称以节约空间;同形文件一样,ASCII 形文件仅含 255 个字符。

2.3 大字型文件用于日语、朝鲜语等数千非 ASCII 字符的文字。除与 ASCII 字型一样拥有特殊码 0 外,文件第一行必须有“*BIGFONT 字数,字码区间数,区间一,区间二,……”声明。字样:字数约为文件内字数(与实际误差小于 10%);字符区间数以 High Byte 为主划分数个区间,区间一、区间二给出各 High Byte 的上下范围。

3. 形文件的编码。SHP 文件采用一系列形状描述字与专用码编码,程序员以文本编辑程序输入。

3.1 形状描述字:由一个字节的笔运动矢量长度和方向代码组成。每个二进制代码是一个字节,代码 0 至 16 用作编写形定义的专用代码(非矢量-方向代码)。CAD的字体与字库的介绍与设置(二) 每个矢量的长度与方向代码是三字符字符串:首字符为 0,第二字符指定矢量长度(相对形“高度”而言,受到比例因子影响,其积为实际距离),第三字符指定矢量方向,共 16 个标准方向可选,CAD的字体与字库的介绍与设置(二)3533.png。图中对角线矢量被“延长”以匹配最接近正交矢量 X 或 Y 的位移量。例如定义命名为 DBOX、形状号 230 的形,其描述码“014,010,01C,018,012,0”。除矢量-方向代码外,还可使用特殊代码 8、9 定义由 X、Y 增量组成的位移值。

3.2 专用代码:可为十进制或十六进制,代码 0 至 16 或 000 至 00E。以 0 开头的三位二进制数是十六进制特殊代码。各专用代码含义:代码 0 为形定义的结束标记;代码 1、2 分别为抬笔和落笔(绘图)模式,绘图模式在绘制每形时激活,打开时矢量说明绘制直线、关闭时仅移动位置不绘线;代码 3、4 为按整数因子放大或缩小矢量的比例因子,代码 3 用紧随后的比例因子除矢量尺寸、代码 4 则乘,比例因子在同一形中累计;代码 5、6 为保存和恢复位置,即将当前位置压入或弹出堆栈,堆栈最多保存四个位置,弹出顺序与压入相反,且压入必须对应弹出,若溢出将显示错误;代码 7 为子形,可将同一形文件中另一形定义纳入当前形,代码 7 后紧跟插入形的编号;代码 8、9 为 X-Y 位移,用于绘制非标准矢量,代码 8 后跟 X 位移与 Y 位移两个定义字节(如 8,(7,-8)),代码 9 后可跟任意数量 X-Y 位移对并以 (0,0) 终止;代码 00A 为八分圆弧,其格式为“10,半径,(-)0SC”,半径可取 1 至 255,第 3 字节指定方向(顺时针对负、逆时针对正)、起始八分圆 S 与跨越八分圆数 C(0 至 7,0 表示整圆或八个八分圆),,例如 10,(2,-043) 表示半径 2、自八分圆 4 处顺时针旋转 135°(跨三个八分圆);代码 00B 为不规则圆弧,格式“11,start_offset,end_offset,high_radius,low_radius,(-)0SC”,可绘制起终不在八分圆边界的弧;代码 00C、00D 为指定凸度的圆弧,通过凸度因子应用于位移矢量绘制,凸度取值范围 -127 至 +127,最大最小值定义半个圆,小值对应小角度弧,凸度值乘以 180 再除以 127 即得角度,凸度 0 表示直线;代码 00E 为正文垂直标记命令,仅用于双向文字字体描述(文字可水平和垂直表示),用于调整起点终点差别使同一字形可用于横竖两向。

4. SHX 文件的存储格式。ASCII 字体文件与大字体文件的 SHX 格式各有规定(见表 2-1、表 2-2)。ASCII 字体文件存储格式依次为:版本标识字符串“CAD-86 shapes 1.0”;CR+LF+EOF(十六进制 0D 0A 1A);最小的字型码(0);最大的字型码;字型码总数 N(含字符集声明 Code 0);每四字节一项的字型码与字型定义长度;依长度摆放各字型定义。大字体文件格式以“CAD-86 bigfont 1.0”为版本标识,随后依次为 CR+LF+EOF、(08 00)、字型码总数 N、字型码区间数 K、区间起始结尾字码组,以及各字型码、长度与定义地址等数据。

相关文章

中望CAD旋转命令:由面域快速生成三维实体
中望CAD画三维垂线:利用三视图思路
中望CAD旋转网格不圆:线框密度(SURFTAB)设置
中望CAD剖切实体:SLICE命令三种剖切方式
中望CAD发布LISP程序:整理、加密与备份要点
中望CAD的EDGEMODE命令:含义与取值说明

发布评论