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、如何创建多段线,利用多段线对象来创建正多边形、矩形、圆、圆弧(关键点在于顶点坐标的计算和顶点凸度的概念的掌握)。如果对凸度概念不是很清楚,自己可以用代码来验证。

原文地址:https://www.cnblogs.com/mjgw/p/12347890.html

时间: 2024-08-27 15:28:47

4、c++ Arx二次开发创建多段线的相关文章

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

一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2.如何应用C++ ARX二次开发创建样条曲线(对AcDbSpline类的构造函数的直接封装) 三.具体内容 1.创建椭圆的思路 有参数构造函数:AcDbEllipse( const AcGePoint3d& center, const AcGeVector3d& unitNormal, con

C++ CAD Arx二次开发用户交互

展开一.本节课程Arx二次开发用户交互二.本节要讲解的知识点1.用户交互的一些函数:acedGetXXX(acedGetString.acedGetPoint.acedGetInt acedGetKword.acedGetReal). 2.动态创建多段线的实现. 3.acedGetPoint函数中使用关键字. 三.具体内容1.acedGetString:获取用户输入的字符串 acedGetPoint:获取用户输入的点 acedGetInt:获取用户输入的整型 acedGetKword:获取用户输

手机,平板当中浏览和编辑DWG的CAD控件出来啦!支持ARX二次开发

控件2014.06.30 安卓开发最新更新 发布时间:2014-06-30 22:22:42 开发包下载地址:http://www.mxdraw.com/MxDraw6.0Android(20140630)TryVersion.exe 安卓手机上的apk安装包: http://www.mxdraw.com/MxDrawApp60.apk 安卓快速入门文档: http://www.mxdraw.com/AndroidDev.doc 1. 优化dwg显示速度,现在可以极速显示dwg,比市面上的任何软

NX二次开发-创建一个3 x 3矩阵UF_CSYS_create_matrix

1 NX9+VS2012 2 3 4 #include <uf.h> 5 #include <uf_csys.h> 6 #include <uf_mtx.h> 7 8 9 10 UF_initialize(); 11 12 //输入X向量Y向量输出一个3*3矩阵 13 double XVec[3] = {0.0, 0.0, 1.0}; 14 double YVec[3] = {0.0, 1.0, 0.0}; 15 double Mtx[9]; 16 UF_MTX3_in

NX二次开发-创建临时坐标系UF_CSYS_create_temp_csys

1 NX9+VS2012 2 3 4 #include <uf.h> 5 #include <uf_csys.h> 6 #include <uf_mtx.h> 7 8 9 UF_initialize(); 10 11 //输入X向量Y向量输出一个3*3矩阵 12 double XVec[3] = {0.0, 0.0, 1.0}; 13 double YVec[3] = {0.0, 1.0, 0.0}; 14 double Mtx[9]; 15 UF_MTX3_initi

NX二次开发-创建CSYS坐标系UF_CSYS_create_csys

1 NX9+VS2012 2 3 4 #include <uf.h> 5 #include <uf_csys.h> 6 #include <uf_mtx.h> 7 8 9 UF_initialize(); 10 11 //输入X向量Y向量输出一个3*3矩阵 12 double XVec[3] = {0.0, 0.0, 1.0}; 13 double YVec[3] = {0.0, 1.0, 0.0}; 14 double Mtx[9]; 15 UF_MTX3_initi

创建多段线

1.创建一个工具类CTool. Tool.h: static ads_real GetWidth(); static int GetColorIndex(); Tool.cpp ads_real CTool::GetWidth() { ads_real width = 0; if(acedGetReal(_T("\n输入线宽:"), &width)==RTNORM) { return width; } else { return 0; } } int CTool::GetCol

3、ObjectARX开发创建直线、圆、圆弧和修改对象属性

一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ ARX二次开发创建圆弧. 4.如何修改对象的属性. 5.腾讯课堂云幽学院详细的内容讲解. 三.具体内容 1.创建一条直线,直线的起点是(0,0,0),直线的终点(100,100,0). 2.表:表是数据库的组成单位,一个数据库至少含有一个表. 3.记录:记录是表的组成单位,一个表可能含有多个记录,也可能

IOS开发创建开发证书及发布App应用(二)——创建证书

源于:http://www.jkqnb.com/ydkf/article/27 预览图 2. 创建证书 证书分为两种, 一种是开发者证书,主要是用来真机调试的 另一种就是发布证书,就是用来发布应用的, 最好是两种都要下载,不然编译时候可能报错,我猜想可能苹果怕你没用真机调试 创建证书分为两个步骤: 在苹果电脑生成证书签名公钥 提交证书公钥文件到开发者网站 1)  创建开发者证书  1.生成证书签名公钥 在有Mac OS X的操作系统中打开"应用程序" -- "实用工具&quo