一、本节课程

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二次开发创建多段线的更多相关文章

  1. c++ Arx二次开发创建椭圆和样条曲线

    一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2 ...

  2. 2、Arx二次开发创建第一个应用程序

    一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...

  3. Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点

    这一小节,我们创建派生于CivilCreateEntityDemo的类CivilCreateCogoPoint,来创建几何空间点. 1 创建类并添加字段及方法 首先在项目资源管理器中向本项目中添加类, ...

  4. Civil 3D 二次开发 创建AutoCAD对象—— 00 ——

    不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...

  5. ObjectARX二次开发创建自己的静态库,如同objectARX库一样

    objectARX二次开发的时候,经常会用到一些重复使用的类,如果类已经足够的好,那么我们可以编译成静态库,加快开发和编译的速度,提高工作效率. 环境vs2010+objectARX2012wizar ...

  6. NX二次开发-创建(临时)坐标系

    函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...

  7. NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板

    这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...

  8. Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——

    本节中我们通过创建几何空间点.曲面和采样线了解Civil 3D对象的创建方法.因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没 ...

  9. Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线

    在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...

随机推荐

  1. alsa声卡分析alsa-utils调用过程(一)-tinyplay

    如何分析tinyplay 播放音频和tinymix的过程?需要相应的工具来支持追查: 一.分析tinyplay和tinymix: 1.1 利用strace工具: strace -o tinyplay. ...

  2. C#演化过程--各个版本新增加特性

  3. Spark项目之电商用户行为分析大数据平台之(五)实时数据采集

  4. docker swarm英文文档学习-4-swarm模式如何运行

    1)How nodes work Docker引擎1.12引入了集群模式,使你能够创建一个由一个或多个Docker引擎组成的集群,称为集群.集群由一个或多个节点组成:在群模式下运行Docker引擎1. ...

  5. pycharm同步

    只有专业版的才能同步服务器 按照这个来:https://zhuanlan.zhihu.com/p/35067462 3.然后配置映射信息 local path是自己的工程的本地目录路径, Deploy ...

  6. 11.C++和C的区别,什么是面向对象

    c++封装更好,调用接口,c调用子函数 1.首先C和C++在基础语句上没有太大区别,c++在c基础上改进,兼容大部分c的语法结构.c++面向对象,c面向过程. 2.新增new和delete的语法,引用 ...

  7. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...

  8. Python2.7-string模块

    string模块 1.模块内定义的常数 字母(ascii_letters.letters),数字(digits.hexdigits.octdigits),空格(whitespace),大小写(asci ...

  9. Python2.7-anydbm

    anydbm模块,把各种数据库模块(dbhash (requires bsddb), gdbm, or dbm)的接口进行了统一.打开后返回的对象操作和字典类似 模块方法: anydbm.open(f ...

  10. python 爬虫--同花顺-使用代理

    1.http://www.goubanjia.com/  在上面获取 使用http协议的公网IP和端口 参考:https://blog.csdn.net/qq_23934063/article/det ...