AutoCad形文件和缩略图格式Word格式.docx
- 文档编号:354975
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:20
- 大小:64.87KB
AutoCad形文件和缩略图格式Word格式.docx
《AutoCad形文件和缩略图格式Word格式.docx》由会员分享,可在线阅读,更多相关《AutoCad形文件和缩略图格式Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
(2)特殊代码:
矢量长度和方向代码所定义的长度和方向仅为十几种,为了创建更丰富的形,AutoCAD提供了14种特殊代码(可使用十六进制或十进制),用于创建其他格式或指定特定操作。
特殊代码的具体种类和意义如表1-1所示。
表33-1特殊代码及意义
代码(十六进制)
代码(十进制)
意义
000
0
表示形定义结束
001
1
表示激活绘图模式(落笔)
002
2
表示停止绘图模式(提笔)
003
3
表示用代码的下一字节去除矢量长度,即比例缩小
004
4
表示用代码的下一字节去乘矢量长度,即比例放大
005
5
将当前位置压入堆栈,即保存当前位置
006
6
从堆栈弹出当前位置,即恢复由代码005保存的最后一个位置
007
7
引用其它形,代码的下一字节指定了被引形的编号
008
8
由当前位置绘制线段,代码的下两个字节指定了线段在X、Y方向上的相对位移
009
9
由当前位置开始绘制一系列的线段,代码后面的字节分别指定了各个线段在X、Y方向上的相对位移,最后以(0,0)为结束符
00A
10
绘制八分圆弧
00B
11
绘制分数圆弧
00C
12
根据由X、Y位移和凸度绘制圆弧
00D
13
多个指定凸度的圆弧
00E
14
仅适用于垂直文字,用来将下一个字符绘制在前一个字符的下面
提示在形定义的代码中可使用括号来增强可读性。
33.1.3形的创建与使用
形的定义文件是ASCII格式的,因此,可以使用任一文本编辑器直接打开或创建填充图案文件,并对其内容进行补充和修改。
实例1创建名为“TRIANGLE”的形
(1)使用Windows附件中的“记事本”程序创建一个新的文本文件。
(2)在该文件中添加如下内容,如图33-2所示。
;
user.shp-userdefinedshapes
*1,4,TRAINGLE
020,016,01A,0
警告文件中最后一行要回车,否自编译出错。
(3)保存该文件,并命名为“user.shp”。
(4)进入AutoCAD2002,在命令行输入:
compile,弹出“SelectShapeofFontFile”对话框,选中“user.shp”文件后单击键返回。
如图33-3所示。
系统给出如下提示信息:
Compilingshape/fontdescriptionfile
Compilationsuccessful.OutputfileD:
\Program
Files\AutoCAD2002\Fonts\user.shxcontains50bytes.
表明“user.shp”文件编译成功,生成了名为“user.shx”的形文件;
(5)在命令行输入:
load,弹出“SelectShapeFontFile”对话框,选中“user.shx”文件后单击Open键返回。
如图33-4所示。
(6)在命令行输入:
shape,并根据提示输入:
Entershapenameor[?
]:
triangleEnter(指定形名)
Specifyinsertionpoint:
0,0Enter(指定插入点)
Specifyheight<
1.0000>
:
Enter(指定形的比例系数)
Specifyrotationangle<
0>
Enter(指定形与水平方向的夹角)
此时我们所定义的形“TRIANGLE”即被绘制在屏幕上。
下面我们来做一个复杂一点的例子,该实例中引用了形“TRAINGLE”。
实例2创建名为“MARK”的形
(1)使用Windows附件中的“记事本”打开实例一中创建的“user.shp”文件,在文件中添加如下内容:
*2,11,MARK
082,10,4,050,002,008,1,2,007,1,0
保存该文件。
(2)在AutoCAD2002中对该文件重新进行编译和载入,具体步骤同实例一。
(3)在AutoCAD2002中插入形“MARK”,结果如图33-5所示。
下面是ACAD帮助中的内容
每个形或字符的形说明语法都不考虑形说明的最后用法(用作形或字体)。
如果形定义文件被用作字体文件,则文件中的第一个条目必须描述字体本身,而不是该文件中的形;
如果第一个条目描述一个形,则该文件被用作形文件。
能够创建自己的形定义是非常有价值的。
但是,要知道,这是一个非常复杂的学习课题,而且需要有耐心。
形定义文件的每一行最多可包含128个字符。
超过此长度的行不能编译。
由于AutoCAD忽略空行和分号右边的文字,所以可以在形定义文件中嵌入注释。
每个形说明都有一个标题行(格式如下),以及一行或多行定义字节。
这些定义字节之间以逗号分隔,最后以0结束。
*shapenumber,defbytes,shapename
specbyte1,specbyte2,specbyte3,...,0
下表描述了形说明的各个字段:
shapenumber
文件中唯一的一个1到258(对于Unicode字体,最多为32768)之间的数字,带前缀星号(*)。
对于非Unicode字体文件,用256、257和258分别作为符号标识符Degree_Sign、Plus_Or_Minus_Sign和Diameter_Symbol的形编号。
对Unicode字体,这些字形以U+00B0、U+00B1和U+2205作为形编号并且是“LatinExtended-A”子集的一部分。
字体(包含每个字符的形定义的文件)的编号要与每个字符的ASCII码对应;
其他形可指定任意数字。
defbytes
用于描述形的数据字节(specbytes)的数目,包括末尾的零。
每个形最多可有2,000个字节。
shapename
形的名称。
形的名称必须大写,以便于区分。
包含小写字符的名称被忽略,并且通常用作字体形定义的标签。
specbyte
形定义字节。
每个定义字节都是一个代码,或者定义矢量长度和方向,或者是特殊代码的对应值之一。
在形定义文件中,定义字节可以用十进制或十六进制值表示。
与许多形定义文件一样,本节样例中同时使用了十进制和十六进制定义字节值。
如果形定义字节的第一个字符为0(零),则后面的两个字符解释为十六进制值。
简单的形定义字节在一个定义字节(一个specbyte字段)中包含矢量长度和方向的编码。
每个矢量的长度和方向代码是一个三字符的字符串。
第一个字符必须为0,用于指示AutoCAD将后面的两个字符解释为十六进制值。
第二个字符指定矢量的长度。
有效的十六进制值的范围是从1(1个单位长度)到F(15个单位长度)。
第三个字符指定矢量的方向。
下图展示了方向代码。
上图中的所有矢量都按同样的长度定义绘制。
对角矢量长度延长,以匹配最接近的正交矢量的X或Y位移。
这与AutoCAD中的捕捉栅格操作相似。
下例构造名为DBOX的形,指定形的编号为230。
*230,6,DBOX
014,010,01C,018,012,0
上述定义字节序列定义了一个单位长度、一个单位宽度的方框,以及从左下角到右上角的对角线。
将文件保存为dbox.shp后,使用COMPILE命令生成dbox.shx文件。
使用LOAD命令加载包含此定义的形文件,然后按照如下方式使用SHAPE命令:
命令:
shape
输入形名称(或?
):
dbox
指定插入点:
1,1
指定高度<
当前值>
:
2
指定旋转角度<
0
结果形如下图所示:
代码0标识形定义结束。
代码1和2控制绘制模式。
绘图模式在绘制每个形的开始时激活。
当绘图模式打开(代码1)时,一个矢量说明将绘制一条直线;
当绘图模式关闭(代码2)时,矢量说明只移到新位置,而不绘制直线。
代码3和4控制每个矢量的相对尺寸。
SHAPE命令指定的高度最初被当作单个正交矢量(方向为0、4、8或C)的长度。
代码3将矢量长度除以下一个字节。
代码4将矢量长度乘以下一个字节。
代码3和4后跟一个定义字节,该字节包含一个整数缩放比例(1到255)。
如果要用形高度来指定整个形的尺寸,并要用矢量长度10绘制,则可用3,10缩放高度定义。
缩放比例在同一形中是累计的,即,乘以2后再乘以6,结果缩放比例为12。
通常用户需要在形的结尾恢复原缩放比例,尤其是对子形和字体形。
AutoCAD不会为用户自动重置缩放比例。
代码5和6在绘制形时压入(保存)和弹出(恢复)当前坐标位置,这样就可从后面的点返回该点。
可以弹出所压入的任何值。
位置堆栈只能保存四个位置值。
如果由于过多的压入操作或弹出丢失而造成堆栈溢出,则在绘制形时将显示如下信息:
位置堆栈上溢,位于形nnn中
与此类似,如果试图从堆栈中弹出过多的位置值,则在绘制形时将显示如下信息:
位置堆栈下溢,位于形nnn中
代码7绘制编号由下一个字节指定的子形。
对于非Unicode字体,代码7后面的定义字节是1到255之间的形数字编号。
对于Unicode字体,代码7后面的定义字节是1到65535之间的形数字编号。
Unicode形数字编号以两个字节计数(关于Unicode字体与非Unicode字体之间的差别的详细信息,请参见Unicode字体说明)。
此编号的形(在同一形文件中)在此时绘制。
绘图模式不会为新形重置。
当子形绘制结束后,继续绘制当前形。
法向矢量定义字节只能在十六个预定义的方向上绘制,并且最大长度为15。
这些限制使形定义更为有效,但有时会变得过于局限。
通过代码8和9可用XY位移绘制非标准矢量。
代码8指定由下两个字节指定的X-Y位移。
代码8后必须跟两个定义字节:
8,X-displacement,Y-displacement
XY位移范围为-128到+127。
前面的+可选,并且可用括号增强可读性。
下例中的矢量向左绘制(或移动)10个单位,再向上绘制(或移动)3个单位。
8,(-10,3)
在两个位移定义字节之后,形返回法向矢量模式。
用代码9可绘制一系列非标准矢量。
代码9可指定任意数量的XY位移对。
由(0,0)对终止。
下例绘制三个非标准矢量后返回法向矢量模式。
9,(3,1),(3,2),(2,-3),(0,0)
必须用(0,0)对终止XY位移对序列,使AutoCAD能识别后面的法向矢量或特殊代码。
特殊代码00A(或10)用下两个定义字节定义一个圆弧。
此圆弧称为八分圆弧,因为它跨越一个或多个45度的八分圆,起点和终点都在八分圆边界上。
八分圆从三点的位置逆时针编号,如下图所示:
圆弧定义为:
10,radius,(-)0SC
半径可以是1到255之间的任意值。
第二个定义字节指定圆弧的方向(如果为正,则为逆时针;
如果为负,则为顺时针)、开始八分圆(s,0到7之间的任意值)和跨越的八分圆数(c,0到7之间的任意值。
其中,0指八个八分圆或整个圆)。
可用括号增强可读性。
例如,考虑如下形定义片段:
...012,10,(1,-032),01E,...
此代码依次分别绘制:
向右上的一个单位矢量、从八分圆3开始的顺时针圆弧(半径为一个单位,跨越两个八分圆)和向右下的一个单位矢量,如下图所示:
特殊代码00B(11)绘制的圆弧,其起点和终点不一定在八分圆边界上。
其定义使用五个定义字节:
11,start_offset,end_offset,high_radius,radius,(-)0SC
start_offset和end_offset表示与圆弧起点和终点所在的八分圆边界的距离。
high_radius表示半径的高八位有效数字,当radius不大于255时其值为0。
将high_radius值与256相乘并加上radius值,可生成大于255的圆弧半径。
radius和最后的定义字节与八分圆弧的定义(代码00A,如前所述)一样。
计算起点八分圆边界(45度的倍数)与圆弧起点之间所差的度数,再将其乘以256,除以45,即得到start
offset。
如果圆弧从八分圆边界开始,则其startoffset为0。
endoffset的计算方式是相似的,但必须用最后一个八分圆边界与圆弧终点之间所差的度数进行计算。
如果圆弧在八分圆边界终止,则其endoffset为0。
例如,从55度到95度,半径为3个单位的特殊圆弧编码如下:
11,(56,28,0,3,012)
解释如下:
start_offset
=56因为((55-45)*256/45)=56
end_offset
=28因为((95-90)*256/45)=28
high_radius
=0
因为(radius<
255)
radius
=3
startingoctant
=1
因为圆弧起点在45度八分圆中
endingoctant
=2
因为圆弧终点在90度八分圆中
特殊代码00C和00D(12和13)提供另一种在形说明中包括圆弧的机制。
它们与代码8和9相似,在代码8和9中通过指定XY位移来绘制圆弧,而在代码00C和00D中通过将凸度因子应用到位移矢量来绘制圆弧。
代码00C绘制一段圆弧,而代码00D绘制多段圆弧(polyarcs),直到该圆弧被(0,0)位移终止为止。
代码00C后必须跟上三个描述圆弧的字节:
0C,X-displacement,Y-displacement,Bulge
X、Y位移和凸度(指定圆弧的曲率)的取值范围为-127到+127。
如果位移指定的线段长度为D,垂直于该线段中点的距离为H,则凸度的幅值为((2*H/D)*127)。
如果圆弧从当前位置到新位置是顺时针走向的,则符号为负。
半圆的凸度为127(或-127),是用这种编码所能表示的最大的单段圆弧(用两个连续的圆弧段表示更大的圆弧)。
凸度定义可以为0,表示直线段。
请注意,用代码8表示直线段在形说明中只占用一个字节。
多段圆弧代码(00D或13)后面可跟0或多个圆弧段定义,最后被(0,0)位移终止。
请注意,最后一个位移之后不能再指定凸度。
例如,字母S可以如下定义:
13,(0,5,127),(0,5,-127),(0,0)
零凸度线段用于在多段圆弧中表示直线段,它们相当有用。
与终止多段圆弧、插入直线段后再开始另一多段圆弧这种方法相比,其效率要高得多。
在单段圆弧和多段圆弧定义中不能使用数字-128。
特殊代码00E(14)仅用于双向字体说明中。
双向字体说明中的字体在水平和垂直两个方向上使用。
在字符定义中遇到此特殊代码时,下一代码是否进行处理由该字符的方向决定。
如果方向为垂直的,则下一代码被处理;
如果方向为水平的,则下一代码被忽略。
在水平文字中,每个字符的起点是基线的左端;
在垂直文字中,起点为字符上方正中。
在每个字符的结尾,通常需要用提笔线段绘至下个字符的起点。
对水平文字,该线段是向右绘制的;
而对垂直文字,该线段是向下绘制的。
特殊代码00E(14)主要用于调整不同的起点和终点,使同一字符形定义可用于水平文字,也可用于垂直文字。
例如,如下对大写D的定义可用于水平文字,也可用于垂直文字。
*68,22,ucd
2,14,8,(-2,6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0
呵呵,给老大讲的再加一个方法哦,我也曾经查找能浏览并更改DWG文件数据的控件,偶然间发现以下代码,可以在不加任何控件的情况下浏览DWG的缩略图,这个是在搞明白了DWG的文件格式的情况下编写的,就是用一个FORM和一个PICTUREBOX再加一个BUTTON,我也是从网上搜索的,另外大家也可以到GOOGLE上搜一下,贴下来供大家参考:
Pr
在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上浏览。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
namespace浏览dwg
{
publicpartialclassForm1:
Form
{
publicForm1()
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
ViewDWGviewDwg=newViewDWG();
pictureBox1.Image=viewDwg.GetDwgImage("
c:
\\1.dwg"
);
classViewDWG
structBITMAPFILEHEADER
publicshortbfType;
publicintbfSize;
publicshortbfReserved1;
publicshortbfReserved2;
publicintbfOffBits;
publicImageGetDwgImage(stringFileName)
if(!
(File.Exists(FileName)))
thrownewFileNotFoundException("
文件没有被找到"
FileStreamDwgF;
//文件流
intPosSentinel;
//文件描述块的位置
BinaryReaderbr;
//读取二进制文件
intTypePreview;
//缩略图格式
intPosBMP;
//缩略图位置
intLenBMP;
//缩略图大小
shortbiBitCount;
//缩略图比特深度
BITMAPFILEHEADERbiH;
//BMP文件头,DWG文件中不包含位图文件头,要自行加上去
byte[]BMPInfo;
//包含在DWG文件中的BMP文件体
MemoryStreamBMPF=newMemoryStream();
//保存位图的内存文件流
BinaryWriterbmpr=newBinaryWriter(BMPF);
//写二进制文件类
ImagemyImg=null;
try
DwgF=newFileStream(FileName,FileMode.Open,FileAccess.Read);
br=newBi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AutoCad 文件 缩略图 格式