欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自定义含文字的线型

程序员文章站 2022-07-05 10:34:48
先看一下系统自带的线型文件acadiso.lin: 因为STANDARD是每个CAD文档必须要有的文字样式,同样的,如果想更改系统自定义的带文字的线型样式,需要更改STANDARD 需要注意的是,文字(管线)两侧的空白并不对称,这是因为文字(管线)或图形的长度实际是占用了下一个段落的长度, 这里就是 ......

先看一下系统自带的线型文件acadiso.lin:

*hot_water_supply,hot water supply ---- hw ---- hw ---- hw ----
a,12.7,-5.08,["hw",standard,s=2.54,u=0.0,x=-2.54,y=-1.27],-5.08
* 线型文件中,每种线型必须以(*)开头  
hot_water_supply 线型名称  
hot water supply ---- hw ---- hw ---- hw ---- 线型描述  
a 对齐方式,必须的,也是唯一的  
12.7 起始为12.7个单位长的实线  
-5.08 接上为长5.08的空白 可以看出:正数为实线,虚线为空白
[] 内为图案定义 这里是文字图案
“hw” 文字内容  
standard 文字样式,需要注意的是,如果文档中未发现文字样式,会发生错误(ekeynotfound),建议设置成standard

因为standard是每个cad文档必须要有的文字样式,同样的,如果想更改系统自定义的带文字的线型样式,需要更改standard

s=2.54 要用于文字样式的缩放比例与线型的比例相关。文字样式的高度需乘以缩放比例。如果高度为 0,则 s=值的值本身用作高度  
u=0.0 u = 值、r = 值或 a = 值。u= 指定正立或易于阅读的文字。r= 指定相对于直线的相对或相切旋转。a= 指定文字相对于原点的绝对旋转;即所有文字不论其相对于直线的位置如何,都将进行相同的旋转 旋转是围绕基线和实际大写高度之间的中点进行的
x=-2.54 文字在线型的 x 轴方向上沿直线的移动。使用该字段控制文字与前面提笔或落笔笔划间的距离 该值不能按照 s=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放
y=-1.27 文字在线型的 y 轴方向垂直于该直线的移动。使用此字段控制文字相对于直线的垂直对齐。 该值不能按照 s=值定义的缩放比例进行缩放,但是它可以根据线型进行缩放。
-5.08 以长5.08的空白结束

 

 

        [commandmethod("ctl")]
        public void createtextlinetype()
        {
            document doc = application.documentmanager.mdiactivedocument;
            database db = doc.database;
            editor ed = doc.editor;
            transaction tr = db.transactionmanager.starttransaction();
            using (tr)
            {
                textstyletable tt = (textstyletable)tr.getobject(db.textstyletableid, openmode.forread);
                linetypetable lt = (linetypetable)tr.getobject(db.linetypetableid, openmode.forwrite);
                linetypetablerecord ltr = new linetypetablerecord();

                ltr.name = "管线";
                ltr.asciidescription = "管线线型 ---- 管线 ---- 管线 ---- 管线 ----";
                ltr.patternlength = 1.3;//所有实线+空白的长度总和
                ltr.numdashes = 3;//所有实线+空白的段落总和
                //第一段
                ltr.setdashlengthat(0, 0.5);
                //第二段
                ltr.setdashlengthat(1, -0.4);
                ltr.setshapestyleat(1, tt["standard"]);
                ltr.setshapenumberat(1, 0);//图案在图形文件中的编号,由于这里是文字,可以省略该设置
                ltr.setshapescaleat(1, 0.1);
                ltr.settextat(1, "管线");
                ltr.setshaperotationat(1, 0);
                ltr.setshapeoffsetat(1, new vector2d(0, -0.05));//x轴不对,y轴向下移动0.05个单位
                //第三段
                ltr.setdashlengthat(2, -0.4);

                // 添加新线型到线型表
                objectid ltid = lt.add(ltr);
                tr.addnewlycreateddbobject(ltr, true);
                tr.commit();
            }
        }

自定义含文字的线型

需要注意的是,文字(管线)两侧的空白并不对称,这是因为文字(管线)或图形的长度实际是占用了下一个段落的长度,

这里就是占用了第三段空白0.4的长度一部分,所以该段空白长度实际小于0.4。

我们向来提倡对称美,那么应该怎么处理使文字两侧的空白看起来是对称的呢,思路是用包围圈计算出文字(管线)的单位长度,

然后第三段在0.4的基础上加上文字(管线)的长度即可。

改善后效果如下:

自定义含文字的线型