找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5249|回复: 2

[分享] AUTOCAD文字线型格式完全解读及C#实现方法

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2014-8-31 13:36:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
AUTOCAD文字线型格式完全解读及C#实现方法
在.lin线型文件中“;;”代表注释行。因此我们可以利用它来添加一些注释性文字,以增强文件的可读性。 每种线型都可以定义为两行,第一行定义线型的名称和线型说明。行首必须是以“*”开始,其后是线型名称。线型的描述也是起一个直观的注释作用,最好加上,不过这种描述 不能超过47个字符。第二行才是真正描述线型的代码。行首的“A”代表对齐方式。在这种对齐方式下,第一个参数的值应该大于或等于0,第二个参数的值应该小于0。简单地说 :正值表示落表,AutoCAD会画出一条相应长度的实线;0表示画一个点;负值则表示提笔,AutoCAD会提笔空出相应长度。我们可以想像成绘图笔的工作过程,就很容易理解 了。要注意的是,这些字符之间以半角的逗号隔开,每一行结束必须按回车键,最后一行也不例外。另外,在*.LIN文件中,每个线型文件最多可容纳280个字符。 *linetypeName,lineTypeDescription A,linelength,spacelength1,["text",textstylename,scale,rotation,xoffset,yoffset],spacelength2
下面介绍了有关字符描述符中每个字段的附加信息. 要使用的值是带符号的十进制数字,例如 1、-17 和 0.01.
1. text
要在线型中使用的字符.
2. text style name
要使用的文字样式的名称. 如果未指定文字样式,AutoCAD 将使用当前定义的样式.
3. scale
S=值. 要用于文字样式的缩放比例与线型的比例相关. 文字样式的高度需乘以缩放比例. 如果高度为 0,则 S=值的值本身用作高度.
4. rotation
R=值或A=值. R= 指定相对于直线的相对或相切旋转. A= 指定文字相对于原点的绝对旋转;即所有文字不论其相对于直线的位置如何,都将进行相同的旋转. 可以在值后附加 d 表示度(度为默认值),附加 r 表示弧度,或者附加 g 表示百分度. 如果省略旋转,则相对旋转为 0.
旋转是围绕基线和实际大写高度之间的中点进行的.
5. xoffset
X=值. 文字在线型的 X 轴方向上沿直线的移动. 如果省略 xoffset 或者将其设置为 0,则文字将没有偏移,并且会变得复杂. 使用该字段控制文字与前面提笔或落笔笔划间的距离. 该值不能按照 S=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放.
6. yoffset
Y=值. 文字在线型的 Y 轴方向垂直于该直线的移动. 如果省略 yoffset 或者将其设置为 0,则文字将没有偏移,并且会变得复杂. 使用此字段控制文字相对于直线的垂直对齐. 该值不能按照 S=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放.
热水线型的定义:
-------------------------------------------------------------------------------
*HOT_WATER_SUPPLY,Hot water supply ---- HW ---- HW ---- HW ----
A,.5,-.2,["HW",STANDARD,S=.1,R=0.0,X=-0.1,Y=-.05],-.2
--------------------------------------------------------------------------------
0.jpg
第一行没有什么特别的,跟简单线型定义一样,是线型名和线型的简单描述。
第二行的A当然是对齐符号,数字的意义仍然与前面一样。我们集中精力来看文本的嵌入。   “HW”是嵌入的文本,注意必须加上双引号。“STANDARD”是文本式样的名字,如果当前图形中没有该样式,则AutoCAD不允许使用该线型。   “S=.1”确定文本的比例系数为0.1。如果使用固定高度的文本,AutoCAD会将此高度乘以比例系统数;如果使用的是可变高度的文本,则AutoCAD会把比例系统数看成绝 对高度。   “R=0”表示文本相对于当前线段方向的转角。0表示文本与所给线段方向一致,这也是缺省值。   “X=-.1,Y=-.0.05”为可选项,它们确定相对于当前点的偏移量。缺省时AutoCAD将文本字符串的左下角点放在此当前点。X就是当前线段的方向,Y则是垂直于线段向上的 方向。这两个偏移量将使文本的定位更精确。  
以热水线型的定义过程为例:
线型定义:
-------------------------------------------------------------------------------
*HOT_WATER_SUPPLY,Hot water supply ---- HW ---- HW ---- HW ----
A,.5,-.2,["HW",STANDARD,S=.1,R=0.0,X=-0.1,Y=-.05],-.2
--------------------------------------------------------------------------------
c#实现定义过程:
LinetypeTableRecord ltr =new LinetypeTableRecord();
ltr.Name = "HOT_WATER_SUPPLY";(第一行*号后的部分)
ltr.AsciiDescription = "HOT_WATER_SUPPLY ---- HW ---- HW ---- HW ----";(第一行逗号后面的部分)
ltr.PatternLength = 0.9;(0.5+0.2+0.2=0.9)
ltr.NumDashes = 3(一段实线,两段留白);
// Dash #1
ltr.SetDashLengthAt(0, 0.5);(第一段为实线,长度0.5)
// Dash #2
ltr.SetDashLengthAt(1, -0.2);(第二段为留白,长度为0.2)
ltr.SetShapeStyleAt(1, tt["Standard"]);(在第二段处嵌入文字,注意:嵌入文字不影响任何尺寸的计算)
ltr.SetShapeNumberAt(1, 0);(嵌入文字,1表示dash的索引值,0表示文字的索引值??用于插入多行文字?)
ltr.SetShapeOffsetAt(1, new Vector2d(-0.1,-0.05));(设置文字的偏移量)
ltr.SetShapeScaleAt(1, 0.1);(设置文字的缩放,由于["Standard"]);是可变高度的文本,则AutoCAD会把比例系统数看成绝对高度,即文字高度为0.1) ltr.SetShapeRotationAt(1, 0);(设置文字的旋转角度)
ltr.SetTextAt(1, "CW");(设置文字的内容)
// Dash #3 ltr.SetDashLengthAt(2, -0.2);(第三段为留白,长度为0.2)
ObjectId ltId = lt.Add(ltr);
tr.AddNewlyCreatedDBObject(ltr, true);



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2015-1-29 20:28:20 | 显示全部楼层
感谢分享了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2015-3-19 21:27:59 | 显示全部楼层
楼主你好,正在学习这个,感谢楼主细致解答!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:47 , Processed in 0.168054 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表