一、本节课程

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. NXlog配置

    NXlog文档: http://nxlog.org/docs/nxlog-ce/nxlog-reference-manual.html https://nxlog.org/documentation/ ...

  2. SSH批量分发管理

    ssh服务认证类型主要有两个: 基于口令的安全验证: 基于口令的安全验证的方式就是大家一直在用的,只要知道服务器的ssh连接账户.口令.IP及开发的端口,默认22,就可以通过ssh客户端登陆到这台远程 ...

  3. css基础内容

    css基础内容 CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中,是为了解决内容与表现分离 ...

  4. 3.Dubbo2.5.3快速启动Hello World

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.服务提供者 (1)工程目录 (2)接口代码 HelloService.java package cn.lj ...

  5. 8.3Solr API使用(StatsComponent聚合统计)

    转载请出自出处:http://eksliang.iteye.com/blog/2169134 一.概述 Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min.max.a ...

  6. pstools工具使用

    该工具的目的:批量远程操作windows服务器, 个人实验的方法步骤: 1.在被远程的电脑上开通139,445端口 2.建立ipc$链接, 格式:Net use \\目标ip\ipc$ 密码 /use ...

  7. oracle 查看删除重复数据

    1.查询重复数据select * from 表名 where 重复字段(一般为主键)in (select 重复字段 from 表名 group by 重复字段 having count(WF_OID) ...

  8. 理解RHEL上安装oracle的配置参数 :/etc/security/limits.conf, /etc/profile, /etc/pam.d/login

    无论安装什么版本的Oracle,在安装之前,都需要配置 /etc/pam.d/login   /etc/profile   /etc/security/limits.conf这三个文件 那这三个文件究 ...

  9. 如何快速找到某个研究领域的所有SCI期刊

    https://www.toutiao.com/a6624332265285485060/?tt_from=dingtalk&utm_campaign=client_share&tim ...

  10. leetcode242—Valid Anagram

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...