1. 说明

        多线在用于创建一组直线时特别有用,例如绘制建筑平面图时的墙线和轴线就可以用一条多线来表示。在创建程序时,某些情况下就有必要创建新的多线样式,本节的实例演示多线样式的创建和删除。
2. 思路
        多线样式在图形数据库中同样是通过有名对象字典保存,其对应的是有名对象字典中的“ACAD_MLINESTYLE”字典。除了 AcDbMlineStyle 对象的创建,使用有名对象字典保存多线样式的方法与创建组类似,因此这里把注意力放在 AcDbMlineStyle 对象的创建方面。
        要创建一个 AcDbMlineStyle 对象(多线样式),至少需要下面的四个步骤:
        (1)创建新的对象,并且用指针指向分配的内存空间:
                                AcDbMlineStyle *pMlStyle = new AcDbMlineStyle;
        (2)使用 initMlineStyle 函数初始化多线样式。
        (3)使用 setName 函数设置多线样式的名称。
        (4)使用 addElement 函数添加新的元素,该函数被定义为:
Acad::ErrorStatus addElement( int& index,              //index 返回从0开始的元素索引double offset,           //offset 指定添加的元素的偏移量const AcCmColor & color, //color 指定元素的颜色AcDbObjectId linetypeId, //linetypeId 指定添加元素的线型bool checkIfReferenced = true);//checkIfReferenced 在帮助文档中并未说明其含义,可以不必考虑 
        此外,还可以使用 AcDbMlineStyle 类的其他成员函数对多线样式进行修改,例如 setElement 函数用于修改元素的样式,setFillColor 函数用于设置多线内部的填充颜色。
3. 步骤
(1) 添加一个新的多线样式
        由于在向多线样式添加元素时需要指定其线型,因此首先要加载用到的两个线型,使用全局函数 acdbLoadLineTypeFile 或者 AcDbDatabase 类的 loadLineTypeFile 函数均可以完成线型的加载。
    // 添加一个新的多线样式static void AddMlineStyle();// 添加一个新的多线样式// 根据输入的线型名称获得其 ObjectIdstatic Acad::ErrorStatus GetLinetypeId(const TCHAR *linetype, AcDbObjectId &linetypeId); // 根据输入的线型名称获得其 ObjectId
// 添加一个新的多线样式
void CXData::AddMlineStyle()
{// 加载线型(两种方法)Acad::ErrorStatus es;es = acdbHostApplicationServices()->workingDatabase()->loadLineTypeFile(_T("CENTER"), _T("acadiso.lin"));es = acdbLoadLineTypeFile(_T("HIDDEN"), _T("acadiso.lin"), acdbHostApplicationServices()->workingDatabase());// 创建新的AcDbMlineStyle对象AcDbMlineStyle *pMlStyle = new AcDbMlineStyle;pMlStyle->initMlineStyle();pMlStyle->setName(_T("NewStyle"));int index; // 多线样式中的元素索引AcCmColor color; // 颜色AcDbObjectId linetypeId; // 线型的ID // 添加第一个元素(红色的中心线)color.setColorIndex(1); // 红色GetLinetypeId(_T("CENTER"), linetypeId);pMlStyle->addElement(index, 0, color, linetypeId);// 添加第二个元素(蓝色的虚线)color.setColorIndex(5); // 蓝色GetLinetypeId(_T("HIDDEN"), linetypeId);pMlStyle->addElement(index, 0.5, color, linetypeId);// 添加第三个元素(蓝色的虚线)pMlStyle->addElement(index, -0.5, color, linetypeId);// 将多线样式添加到多线样式字典中AcDbDictionary *pDict;acdbHostApplicationServices()->workingDatabase()->getMLStyleDictionary(pDict, AcDb::kForWrite);AcDbObjectId mlStyleId;es = pDict->setAt(_T("NewStyle"), pMlStyle, mlStyleId);pDict->close();pMlStyle->close();
}// 根据输入的线型名称获得其 ObjectId
Acad::ErrorStatus CXData::GetLinetypeId(const TCHAR *linetype, AcDbObjectId &linetypeId)
{AcDbLinetypeTable *pLtpTbl;acdbHostApplicationServices()->workingDatabase()->getLinetypeTable(pLtpTbl, AcDb::kForRead);if (!pLtpTbl->has(linetype)){pLtpTbl->close();return Acad::eBadLinetypeName;}pLtpTbl->getAt(linetype, linetypeId);pLtpTbl->close();return Acad::eOk;
}

(2)  用于删除 AddMlStyle 命令创建的多线样式

    // 用于删除 AddMlStyle 命令创建的多线样式static void DelMlineStyle(); // 用于删除 AddMlStyle 命令创建的多线样式
// 用于删除 AddMlStyle 命令创建的多线样式
void CXData::DelMlineStyle()
{// 获得多线样式字典AcDbDictionary *pDict;acdbHostApplicationServices()->workingDatabase()->getGroupDictionary(pDict, AcDb::kForWrite);if (pDict->has(_T("NewStyle"))){pDict->remove(_T("NewStyle"));}pDict->close();
}

(3) 在acrxEntryPoint.cpp中
ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyAddMlineStyle, MyAddMlineStyle, ACRX_CMD_MODAL, NULL) //添加多线样式
ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyDelMlineStyle, MyDelMlineStyle, ACRX_CMD_MODAL, NULL) //删除多线样式
    //当前项目中注册命令 AddMlineStyle(添加多线样式)static void MidasMyGroupMyAddMlineStyle(){CXData::AddMlineStyle();}//当前项目中注册命令 DelMlineStyle(删除多线样式)static void MidasMyGroupMyDelMlineStyle(){CXData::DelMlineStyle();}

效果展示:

(35)ObjectARX2015 + vs2012多线样式字典相关推荐

  1. (24)ObjectARX2015 + vs2012创建字体样式

    1. 说明         AutoCAD 中可以使用 STYLE 命令创建新的字体样式,包括                 设置样式名.                 选择字体文件.       ...

  2. (7)ObjectARX2015 + vs2012创建多段线以及实体的旋转移动放缩

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  3. (33)ObjectARX2015 + vs2012扩展字典和有名对象字典

    1. 说明         扩展记录与扩展数据类似,但是其数据存储量和能够存储的数据类型都要多于扩展数据.扩展记录可以保存在实体的扩展字典或有名对象字典中.         扩展字典隶属于特定的实体, ...

  4. (15)ObjectARX2015 + vs2012创建三维实体

    1. 说明         ObjectARX 中提供了三类创建三维实体的方法:                 (1)创建标准形状的实体                 (2)拉伸面域创建实体    ...

  5. (9)ObjectARX2015 + vs2012创建面域

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  6. (12)ObjectARX2015 + vs2012创建尺寸标注

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  7. QCustomPlot使用心得三:线样式,点样式

    一.线宽.样式.颜色 通过画笔QPen设置线的线宽.样式和颜色,线样式Qt::PenStyle有几个枚举值,实线虚线等. 代码例子: QPen pen;pen.setWidth(3);//线宽// 添 ...

  8. (14)ObjectARX2015 + vs2012创建和编辑对象时的动态拖动技术

    提示:看之前的博客(1)(4)和(12),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线 ...

  9. QCustomPlot 线样式,点样式

    一.线宽.样式.颜色 通过画笔QPen设置线的线宽.样式和颜色,线样式Qt::PenStyle有几个枚举值,实线虚线等. 代码例子: QPen pen; pen.setWidth(3);//线宽 // ...

最新文章

  1. 大哥你怕是没听过:头上没毛,代码不牢!
  2. P2801 教主的魔法(分块入门)
  3. 内存管理单元MMU学习
  4. python基础之python中if __name__ == '__main__': 的解析
  5. 前端er怎样操作剪切复制以及禁止复制+破解等
  6. 高性能Mysql数据库表设计原则
  7. Synergy,一个软件团队质量改进之路之一 --- 规划
  8. 软件_迅速增加博客友情链接[博]
  9. 爬虫笔记1-Requests库的基本方法
  10. 【C语言】冒泡排序法
  11. 自学android编程教程,安卓编程入门教程 安卓编程如何自学
  12. 使用python实现深度神经网络--学习笔记
  13. 【黑苹果】戴尔DELL Vostro 14 5490+i5-10210U和i7-10510U+OpenCore+macos 10.15.4 efi文件下载
  14. 通达OA与触点通RTC的集成插件
  15. tomcat禁止外网访问,允许locat访问
  16. 关于MP4视频在浏览器上无法播放的问题(没有找到支持的视频格式和mime类型)
  17. proe5.0插件在windows7 64系统预览模型
  18. Java HashMap的put方法
  19. 小孔成像总结_每天一个小实验|小孔成像
  20. MySQL开启定时任务

热门文章

  1. 内含JAVA简单概括和JAVA所需安装的软件和详细教程,想学习JAVA无从下手,这篇文章带你迈出第一步
  2. [贝聊科技]iOS 代码架构(一)如何创建一个易复用的组件
  3. ccxprocess启动项可以禁用么_Mac使用技巧:提高系统运行速度 可以禁止Adobe自启动...
  4. ccxprocess启动项可以禁用么_Mac怎么禁用Adobe无用自启动项 Mac禁用Adobe无用自启动项方法...
  5. 【进击的CMMI】组织过程资产与持续改进
  6. Vmware 占用宿主机硬盘空间只增不减
  7. tomcat启动失败,报A child container failed during start
  8. Redis的日志级别
  9. spring事务注解@Transactional不生效、不回滚原因
  10. 2018 年度 ML、NLP 会议论文大盘点:周明、张潼、孙茂松数据亮眼