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

能否生成这种线型?

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

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

> 在CAD中同一种AcDbMline线型,允许它们有不同的线间偏移量吗?
没有看懂..'它们'是谁们啊..
一个线型里的几条线之间的偏移量的话, 当然可以不一样啊..
用户输入是另外一回事, 输入值用一个变量存起来再给AcDbMlingStyle用..
还是干脆自己写一个样版得了..
void command()
{
       AcDbDatabase *pCurDb;
       AcDbDictionary *pMDict;
       AcDbObjectId dMstyleId; // 多线线型字典
       AcDbLinetypeTable *pLTtable;
       AcDbObjectId dLinetypeId; // 线样表
       AcCmColor cMlingColor; // CAD颜色
       AcDbMlineStyle *pMStyle = new AcDbMlineStyle;
       int lineIndex = 0;
       double offset; // 新线型
       pCurDb = acdbHostApplicationServices()->workingDatabase();
       pCurDb->getLinetypeTable(pLTtable, AcDb::kForRead);
       pLTtable->getAt("CONTINUOUS", dLinetypeId);
       pLTtable->close();
       // 新线型中的线将使用的线样式. 这里是从数据库本身的线样表读取, 可以获得系统已经加载的任意样式. 也可以自己制作.
       cMlineColor.setColorIndex(256);
        // CAD的颜色是一种结构, 用0-256的数字表示CAD内部承认的颜色. 256表示ByLayer颜色.
       for (int i = 0; i addElement(lineIndex, offset, cMlineColor, dLinetypeId);
                       // 将一条线加入多线样式
       }
       pMStyle->setStartRoundCap(TRUE);
       pMStyle->setEndRoundCap(TRUE);
       pMStyle->setStartSquareCap(FALSE);
       pMStyle->setEndSquareCap(FALSE); // 定义两头圆端口, 不使用方端口
       pMStyle->setName("NEW");
       pMStyle->setDescription ("new multi line style created by ARX);
       pCurDb->getMLStyleDictionary(pMDict, AcDb::kForWrite);
       pMDict->setAt("NEW", pMStyle, dMstyleId);
       // 将新线型加入线型字典, CAD中才能用Format->Mline Style看到已加载线型列表下出现NEW项目
       pMStyle->close();
       pMDict->close();
}
如果是做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]
查看完整版本: 能否生成这种线型?