4、c++ Arx二次开发创建多段线
一、本节课程
c++ Arx二次开发创建多段线
二、本节要讲解的知识点
如何应用C++ ARX二次开发创建多段线(AcDbPolyline、AcDb2dPolyLine、AcDb3dPolyline的使用)
三、具体内容
1、ARX提供了三种多段线相关的类:AcDbPolyline、AcDb2dPolyLine、AcDb3dPolyline。PLINE 创建的是AcDbPolyline,3DPOLY创建AcDb3dPolyline。创建一般的轻量多段线只需要调用AcDbPolyline的构造函数即可,创建矩形、正多边形、圆形、圆环对象,关键在于顶点和凸度的确定。
2、添加多段线对象的函数实现:
|
AcDbObjectId CPolylineUtil::Add(const AcGePoint2dArray &points,double width) { int numVertices=points.length(); AcDbPolyline *pPoly=new AcDbPolyline(numVertices); for (int i=0;i<numVertices;i++) { pPoly->addVertexAt(i,points.at(i),0,width,width); } return CDwgDatabaseUtil::PostToModelSpace(pPoly); } AcDbObjectId CPolylineUtil::Add(const AcGePoint2d &ptStart,const AcGePoint2d &ptEnd,double width) { AcGePoint2dArray points; points.append(ptStart); points.append(ptEnd); return Add(points,width); } AcDbObjectId CPolylineUtil::Add3dPolyline(const AcGePoint3dArray &points) { AcGePoint3dArray verts=points; AcDb3dPolyline *pPoly3d=new AcDb3dPolyline(AcDb::k3dSimplePoly,verts); return CDwgDatabaseUtil::PostToModelSpace(pPoly3d); } AcDbObjectId CPolylineUtil::AddPolygon(const AcGePoint2d &ptCenter,int number,double radius,double rotation,double width) { double angle=2*CMathUtil::PI()/(double)number; AcGePoint2dArray points; for (int i=0;i<number;i++) { AcGePoint2d pt; pt.x=ptCenter.x+radius*cos(i*angle); pt.y=ptCenter.y+radius*sin(i*angle); points.append(pt); } AcDbObjectId polyId=Add(points,width); AcDbEntity *pEnt=NULL; if (acdbOpenObject(pEnt,polyId,AcDb::kForWrite)==Acad::eOk) { AcDbPolyline *pPoly=AcDbPolyline::cast(pEnt); if (pPoly!=NULL) { pPoly->setClosed(Adesk::kTrue); } pEnt->close(); } EntityUtil::Rotate(polyId,ptCenter,rotation); return polyId; } AcDbObjectId CPolylineUtil::AddRectangle(const AcGePoint2d &pt1,const AcGePoint2d &pt2,double width) { double x1=pt1.x,x2=pt2.x; double y1=pt1.y,y2=pt2.y; AcGePoint2d ptLeftBottom(min(x1,x2),min(y1,y2)); AcGePoint2d ptRightBottom(max(x1,x2),min(y1,y2)); AcGePoint2d ptRightTop(max(x1,x2),max(y1,y2)); AcGePoint2d ptLeftTop(min(x1,x2),max(y1,y2)); AcDbPolyline *pPoly=new AcDbPolyline(4); pPoly->addVertexAt(0,ptLeftBottom,0,width,width); pPoly->addVertexAt(1,ptRightBottom,0,width,width); pPoly->addVertexAt(2,ptRightTop,0,width,width); pPoly->addVertexAt(3,ptLeftTop,0,width,width); pPoly->setClosed(true); return CDwgDatabaseUtil::PostToModelSpace(pPoly); } AcDbObjectId CPolylineUtil::AddPolyCircle(const AcGePoint2d &ptCenter,double radius,double width) { AcGePoint2d pt1,pt2,pt3; pt1.x=ptCenter.x+radius; pt1.y=ptCenter.y; pt2.x=ptCenter.x-radius; pt2.y=ptCenter.y; pt3.x=ptCenter.x+radius; pt3.y=ptCenter.y; AcDbPolyline *pPoly=new AcDbPolyline(3); pPoly->addVertexAt(0,pt1,1,width,width); pPoly->addVertexAt(1,pt2,1,width,width); pPoly->addVertexAt(2,pt3,1,width,width); pPoly->setClosed(Adesk::kTrue); return CDwgDatabaseUtil::PostToModelSpace(pPoly); } |

四、总结
1、AUTOCAD的三种多段线对象:AcDbPolyline、AcDb2dPolyline、AcDb3dPolyline,我们重点实现了AcDbPolyline、AcDb3dPolyline。
2、如何创建多段线,利用多段线对象来创建正多边形、矩形、圆、圆弧(关键点在于顶点坐标的计算和顶点凸度的概念的掌握)。如果对凸度概念不是很清楚,自己可以用代码来验证。
3、腾讯课堂搜索云幽学院贡献相应的公开课和报名的收费课的上课源代码、上课笔记技术咨询指导。
4、c++ Arx二次开发创建多段线的更多相关文章
- c++ Arx二次开发创建椭圆和样条曲线
一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2 ...
- 2、Arx二次开发创建第一个应用程序
一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...
- Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
这一小节,我们创建派生于CivilCreateEntityDemo的类CivilCreateCogoPoint,来创建几何空间点. 1 创建类并添加字段及方法 首先在项目资源管理器中向本项目中添加类, ...
- Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...
- ObjectARX二次开发创建自己的静态库,如同objectARX库一样
objectARX二次开发的时候,经常会用到一些重复使用的类,如果类已经足够的好,那么我们可以编译成静态库,加快开发和编译的速度,提高工作效率. 环境vs2010+objectARX2012wizar ...
- NX二次开发-创建(临时)坐标系
函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...
- NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板
这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...
- Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
本节中我们通过创建几何空间点.曲面和采样线了解Civil 3D对象的创建方法.因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没 ...
- Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...
随机推荐
- js 排序,去重
前几天 有一个需求要做一个 勾选的按钮 ,用的前端框架时 extjs . 需求是这样的:选择数据后点击勾选 会把数据 放到一个全局变量里,然后点击另外一个提交按钮 弹出一个窗口 加载这些已经勾选的 ...
- Beta阶段第四次冲刺
Beta阶段第四次冲刺 严格按照Git标准来,组员有上传Git的才有贡献分没有的为0 代码签入图 1.part1 -站立式会议照片 2.part2 -项目燃尽图 3.part3 -项目进展 1.正在进 ...
- [测试] Markdown+Latex
标题 标题 标题 标题 标题 标题 #include <cstdio> #define R register int #define I inline void #define IL in ...
- 【转】使用程序修改系统(IE)代理设置
文章都是发布在github再转到这边的,这边格式可能会乱掉.博客地址:benqy.com 这是本人在做的一个前端开发调试工具(HttpMock),功能是web服务器+http日记+http代理(类似f ...
- 修改Centos7的网卡ens32 改为eth0
1. 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-eno16777984 修改下面两个配置项 NAME=ens32 DEVICE=ens32 改 ...
- dubbo接口访问控制
微服务背景下,一个web应用都可能不再service依赖,而是通过RPC调用远端服务器上的服务.这些服务里,就包括了一些不能轻易暴露的后台功能接口.暴露出去的dubbo接口注册到某一个zk上后,该du ...
- Python2.7-sqlite3
sqlite3模块,SQLite 是用 C 写的轻量级的数据库,sqlite3 模块提供了对数据库的接口,要使用必须首先创建一个 Connection 对象,代表连接至数据库,然后才能继续操作,操作数 ...
- 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告
2018-2019-2-20175308 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 (一)使用JDk编译.运行简单的Java程序 输入cd Code命令进入Code目 ...
- 如何优雅的使用mybatis
原文:https://blog.csdn.net/gebitan505/article/details/54929287 这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较 ...
- 大数据入门第二十二天——spark(一)入门与安装
一.概述 1.什么是spark 从官网http://spark.apache.org/可以得知: Apache Spark™ is a fast and general engine for larg ...