紫云飞 发表于 2005-3-30 13:35:00

能否生成这种线型?

<FONT face=宋体 size=2>请各位帮忙,我想生成这样一种线型:此线型的列表信息与line线类似,有起始点和结束点,但它同时要具有多线线型的外观,有上中下三条线,且有封闭的端口。</FONT>

pandoram 发表于 2005-3-30 15:10:00

用多线线型+扩展数据, 或者直接从AcDbMline派生新类.

紫云飞 发表于 2005-3-31 14:00:00

哦,直接从AcDbMline派生新类的想法好像很适合生成这种线型,但是三条线之间的距离如何控制呢?要想通过输入数值来确定线与线之间的偏移距离。请详细说明一下,谢谢!

pandoram 发表于 2005-3-31 14:50:00

线型的具体样式不由AcDbMline直接控制, 是由AcDbMlineStyle生成, 然后加载给AcDbMline实体. 生成所需线型的各种参数(偏移, 端口等等)和mline style对话框参数一样, 只是在ARX里不用对话框用函数控制了. 这些函数的使用都可以参考ARX帮助.


AcDbMline只是没有起始和结束点的数据, 如果要用派生类做, 基本思想还是从AcDbMline派生新类, 继承AcDbMline的所有功能(包括加载用AcDbMlineStyle生成的线型样式)        , 再在新类里加入两个变量存储起始点和结束点(点数据可以直接从CAD获得).

紫云飞 发表于 2005-4-4 10:08:00

如果想通过用户的输入获得线与线间的偏移量,那AcDbMlineStyle应该怎样写呢?


在CAD中同一种AcDbMline线型,允许它们有不同的线间偏移量吗?


有AcDbMlineStyle生成的线型的代码样例吗?提供一下吧,我是初学者,有点无从下手的感觉,先谢啦!

pandoram 发表于 2005-4-5 09:57:00

&gt; 在CAD中同一种AcDbMline线型,允许它们有不同的线间偏移量吗?


没有看懂..'它们'是谁们啊..


一个线型里的几条线之间的偏移量的话, 当然可以不一样啊..


用户输入是另外一回事, 输入值用一个变量存起来再给AcDbMlingStyle用..


还是干脆自己写一个样版得了..


void command()<BR>{<BR>       AcDbDatabase *pCurDb;


       AcDbDictionary *pMDict;<BR>       AcDbObjectId dMstyleId; // 多线线型字典


       AcDbLinetypeTable *pLTtable;<BR>       AcDbObjectId dLinetypeId; // 线样表


       AcCmColor cMlingColor; // CAD颜色


       AcDbMlineStyle *pMStyle = new AcDbMlineStyle;<BR>       int lineIndex = 0;<BR>       double offset; // 新线型


       pCurDb = acdbHostApplicationServices()-&gt;workingDatabase();


       pCurDb-&gt;getLinetypeTable(pLTtable, AcDb::kForRead);<BR>       pLTtable-&gt;getAt("CONTINUOUS", dLinetypeId);<BR>       pLTtable-&gt;close();<BR>       // 新线型中的线将使用的线样式. 这里是从数据库本身的线样表读取, 可以获得系统已经加载的任意样式. 也可以自己制作.


       cMlineColor.setColorIndex(256);<BR>        // CAD的颜色是一种结构, 用0-256的数字表示CAD内部承认的颜色. 256表示ByLayer颜色.


       for (int i = 0; i &lt; 3; i++)<BR>       {<BR>                       acedGetReal("\nInput offset for element: ", &amp;offset); // 用户输入偏移量<BR>                       pMStyle-&gt;addElement(lineIndex, offset, cMlineColor, dLinetypeId);<BR>                       // 将一条线加入多线样式<BR>       }


       pMStyle-&gt;setStartRoundCap(TRUE);<BR>       pMStyle-&gt;setEndRoundCap(TRUE);<BR>       pMStyle-&gt;setStartSquareCap(FALSE);<BR>       pMStyle-&gt;setEndSquareCap(FALSE); // 定义两头圆端口, 不使用方端口<BR>       pMStyle-&gt;setName("NEW");<BR>       pMStyle-&gt;setDescription ("new multi line style created by ARX);


       pCurDb-&gt;getMLStyleDictionary(pMDict, AcDb::kForWrite);<BR>       pMDict-&gt;setAt("NEW", pMStyle, dMstyleId);<BR>       // 将新线型加入线型字典, CAD中才能用Format-&gt;Mline Style看到已加载线型列表下出现NEW项目


       pMStyle-&gt;close();<BR>       pMDict-&gt;close();<BR>}


如果是做Mline实体, 新做的线型生成后加载给实体, 然后把Mline实体加入block table就可以了.

pandoram 发表于 2005-4-5 09:59:00

注: 此为不检查任何读写错误的懒人版本..

紫云飞 发表于 2005-4-5 10:41:00

不好意思,语言未表达清楚。


“在CAD中同一种AcDbMline线型,允许它们有不同的线间偏移量吗?”


译文如下:在同一幅cad图中,绘制两条线型样式名称相同的mline线,第一条线内部子线间的偏移量 可以与 第二条线内部子线间的偏移量不同吗?

pandoram 发表于 2005-4-5 14:16:00

如果线型生成之后不允许修改, 答案是不能. 子线偏移量不是线的属性, 而是线型的属性.

紫云飞 发表于 2005-4-6 11:32:00

噢,明白了,谢谢!!!!
页: [1]
查看完整版本: 能否生成这种线型?