如何用代码动态生成线型?
www.dimcax.com
如何用代码动态生成线型?
如何用代码动态生成线型?比如我想生成一种文字线型或符号线型?大体思路......
你可以动态写一个文件,以lin控展名(.lin)保存,文件格式以cad自定义线型中的文字的规则[quote]线型中可以包含字体中的字符。 以下是cad的帮助文件 线型中可以包含字体中的字符。 线型中可以包含字体中的字符。包含嵌入字符的线型可以表示实用程序、边界、轮廓等等。指定顶点时将动态绘制直线,就象使用简单线型一样。嵌入直线的字符始终完整显示,不会被截断。 嵌入的文字字符与图形中的文字样式相关。加载线型之前,图形中必须存在与线型相关联的文字样式。 包含嵌入字符的线型格式与简单线型格式类似,因为它是一列由逗号分隔的图案描述符。 字符描述符格式在线型说明中添加文字字符的格式如下所示: ["text",textstylename,scale,rotation,xoffset,yoffset] 这种格式被作为描述符添加到简单线型。例如,名为 hot_water_supply 的线型定义为 *hot_water_supply,---- hw ---- hw ---- hw ---- hw ---- hw ---- a,.5,-.2,["hw",standard,s=.1,r=0.0,x=-0.1,y=-.05],-.2 这表示一种重复图案,以 0.5 个图形单位长度的划线开头,然后是 0.2 个图形单位长度的空移、具有一定缩放比例和位置参数的字符 hw 以及另一个 0.2 个图形单位长度的空移。文字字符来自指定给 standard 文字样式的文字字体,缩放比例为 0.1、相对旋转角度为 0 度、x 偏移为 -0.1、y 偏移为 -0.05。该图案继续直线长度,以长度为 0.5 个图形单位的划线结束。该线型如下所示。 请注意,向右上挑的总长为 0.2 + 0.2 = 0.4,文字原点在 x 方向上相对于首次向右上挑的端点偏移 -.01 个单位。等价线型为 *hot_water_supply,---- hw ---- hw ---- hw ---- hw ---- hw ---- a,.5,-.1,["hw",standard,s=.1,r=0.0,x=0.0,y=-.05],-.3 整个向右上挑仍然是 0.1 + 0.3 = 0.4,但是文字原点在 x 方向上未发生偏移。下面介绍了有关字符描述符中每个字段的附加信息。要使用的值是带符号的十进制数字,例如 1、-17 和 0.01。 text 要在线型中使用的字符。 text style name 要使用的文字样式的名称。如果未指定文字样式,autocad 将使用当前定义的样式。 scale s=值。要用于文字样式的缩放比例与线型的比例相关。文字样式的高度需乘以缩放比例。如果高度为 0,则 s=值的值本身用作高度。 rotation r=值或 a=值。r= 指定相对于直线的相对或相切旋转。a= 指定文字相对于原点的绝对旋转;即所有文字不论其相对于直线的位置如何,都将进行相同的旋转。可以在值后附加 d 表示度(度为默认值),附加 r 表示弧度,或者附加 g 表示百分度。如果省略旋转,则相对旋转为 0。 旋转是围绕基线和实际大写高度之间的中点进行的。 xoffset x=值。文字在线型的 x 轴方向上沿直线的移动。如果省略 xoffset 或者将其设置为 0,则文字将没有偏移,并且会变得复杂。使用该字段控制文字与前面提笔或落笔笔划间的距离。该值不能按照 s=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放。 yoffset y=值。文字在线型的 y 轴方向垂直于该直线的移动。如果省略 yoffset 或者将其设置为 0,则文字将没有偏移,并且会变得复杂。使用此字段控制文字相对于直线的垂直对齐。该值不能按照 s=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放。 [
模具相关绿色软件
皆唯网
调用过程
''' <summary>加载线型。</summary>
''' <param name="linetypename">线型名称.</param>
public shared function loadlinetype(byval linetypename as string) as objectid
dim id as objectid
'dim linetypename as string
dim db as database = hostapplicationservices.workingdatabase
using trans as transaction = db.transactionmanager.starttransaction()
dim lt as linetypetable = trans.getobject(db.linetypetableid, openmode.forread)
if not lt.has(linetypename) then
db.loadlinetypefile(linetypename, "acadiso.lin")
end if
id = lt.item(linetypename)
trans.commit()
end using
return id
end function
复制代码
模具相关绿色软件
皆唯网
原帖由 moon2524 于 如何用代码动态生成线型?比如我想生成一种文字线型或符号线型?大体思路......
请看这两篇帖子:
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
谢谢才鸟的指导! 以前我对这个问题一直没有解决,问题是创建包括文字和形的复杂线型,需要编辑形文件\字体文件等,十分麻烦.而字体形文件的编辑我也没有找到相关的资料.这下好了,呵呵,多谢!
总能把手机放到我自己找不到的地方...