最近在学习ObjectARX,于是想着把一些东西写到这里供个人和大家参考,博客中出现的问题我会尽快改正,全篇代码基于《[c++]ObjectARX开发实例教程》进行整理与扩展,至于能够做到哪一步,emmmm…
开发环境:VS2010 + ObjectARX2014 + AutoCAD2014 。环境搭建不再赘述,以下项目全部使用Objectarx向导进行创建,且全部放在一个项目当中,如果出现相同部分则不再重复。部分非重要代码可能在之前的博客中出现过,这里就不再出现,需要的可以翻之前的。注意:所有成员函数记得在头文件进行声明,以下不再进行赘述

创建圆

以下分别通过“圆心,半径”,“直径和两端点”和“三点法”创建圆
CreateEnt.h:

static AcDbObjectId CreateCircle(AcGePoint3d ptCenter,AcGeVector3d vec, double radius);//画圆
static AcDbObjectId CreateCircle(AcGePoint3d ptCenter, double radius);
static AcDbObjectId CreateCircle(AcGePoint2d pt1, AcGePoint2d pt2);//两点画圆
static AcDbObjectId CreateCircle(AcGePoint2d pt1, AcGePoint2d pt2,AcGePoint2d pt3);//三点画圆

CreateEnt.cpp:

//圆心,半径
AcDbObjectId CCreateEnt::CreateCircle(AcGePoint3d ptCenter,AcGeVector3d vec, double radius)
{ AcDbCircle *pCircle = new AcDbCircle(ptCenter, vec, radius); // 将实体添加到图形数据库AcDbObjectId circleId; circleId = CCreateEnt::PostToModelSpace(pCircle); return circleId;
}AcDbObjectId CCreateEnt::CreateCircle(AcGePoint3d ptCenter, double radius)
{ AcGeVector3d vec(0, 0, 1);return CCreateEnt::CreateCircle(ptCenter, vec, radius);
}//用两点画圆
AcDbObjectId CCreateEnt::CreateCircle(AcGePoint2d pt1,AcGePoint2d pt2){//计算圆心和半径AcGePoint2d pt=CCalculation::MiddlePoint(pt1,pt2);AcGePoint3d ptCenter(pt[X],pt[Y],0);//圆心double radius=pt1.distanceTo(pt2)/2;//创建圆return CCreateEnt::CreateCircle(ptCenter,radius)
}//三点画圆
AcDbObjectId CCreateEnt::CreateCircle(AcGePoint2d pt1,AcGePoint2d pt2, AcGePoint2d pt3){//使用几何类AcGeCircArc2d geArc(pt1,pt2,pt3);AcGePoint3d ptCenter(geArc.center().x,geArc.center().y,0);return CCreateEnt::CreateCircle(ptCenter,geArc.radius());
}
  • 在项目中添加一个新类 CCalculation,用于封装计算的相关函数,添加两个重载静态函数 MiddlePoint,用于计算两点连线的中点:
//获得两点连线的中点,也就是圆心
AcGePoint2d CCalculation::MiddlePoint(AcGePoint2d pt1, AcGePoint2d pt2)
{ AcGePoint2d pt; pt[X] = (pt1[X] + pt2[X]) / 2; pt[Y] = (pt1[Y] + pt2[Y]) / 2;return pt;
} #include "gearc3d.h"
AcGePoint3d CCalculation::MiddlePoint(AcGePoint3d pt1, AcGePoint3d pt2)
{AcGePoint3d pt;pt[X] = (pt1[X] + pt2[X]) / 2; pt[Y] = (pt1[Y] + pt2[Y]) / 2; pt[Z] = (pt1[Z] + pt2[Z]) / 2; return pt;
}
  • 在项目中注册一个新命令 AddCircle,对几个创建圆的函数进行测试
//acrxEntryPoint.cpp:
static void MLMyGroupAddCircle()
{ // “圆心、半径”法创建一个圆AcGePoint3d ptCenter(100, 100, 0); CCreateEnt::CreateCircle(ptCenter, 20); // 两点法创建一个圆AcGePoint2d pt1(70, 100); AcGePoint2d pt2(130, 100); CCreateEnt::CreateCircle(pt1, pt2);// 三点法创建一个圆pt1.set(60, 100); pt2.set(140, 100); AcGePoint2d pt3(100, 60);CCreateEnt::CreateCircle(pt1, pt2, pt3);
}ACED_ARXCOMMAND_ENTRY_AUTO(CArxProjectMLApp, MLMyGroup, AddCircle, CreateCircler, ACRX_CMD_MODAL, NULL)//画圆

实现效果

ObjectARX编程--圆相关推荐

  1. 用scratch编程圆内接三角形

    圆内接三角形是指圆的直径两端连接圆上任意一条边一定是一个直角,效果如下: 我们知道了它的效果,现在就来编程吧! 说先画出4个圆点: 圆点1和圆点2的代码: 圆点3的代码: 重复执行中的代码运行是不断地 ...

  2. ObjectARX编程(六) ------块和属性

    1. 块的新增 cstring blkname; //获取当前图形数据库 AcDbBlockTable* pBlkTbl = NULL; acdbHostApplicationServices()-& ...

  3. c语言for循环编程圆,如何用c语言程序画一个圆?

    以一个空心圆来举例. /* 判断是是否在圆上 */ int isAtCircle(int x, int y, int r) { /* 将(x, y)转换为相当圆心(r, r)的坐标 */ int rx ...

  4. ObjectARX编程--直线

    最近在学习ObjectARX,于是想着把一些东西写到这里供个人和大家参考,博客中出现的问题我会尽快改正,全篇代码基于<[c++]ObjectARX开发实例教程>进行整理与扩展,至于能够做到 ...

  5. ObjectARX编程工具所有版本下载地址(最新含ObjectARX 2017)

    2015 (32位和64位版本)下载: http://download.autodesk.com/esd ... n_64_and_32_Bit.exe 2016 (32位和64位版本)下载: htt ...

  6. ObjectARX编程--圆弧

    创建圆弧 CCalculation.cpp AcGePoint3d CCalculation::Pt2dTo3d(AcGePoint2d pt) { AcGePoint3d ptTemp(pt.x,p ...

  7. C++ CAD ObjectARX 2018介绍

    ObjectARX 2018目前最新的版本是ObjectARX2018.它是开发AutoCAD的核心,是最为高效的开发AutoCAD的工具.通过支持XML,为ObjectARX开发网络协作应用提供了有 ...

  8. VC6.0中ObjectARX应用程序的加载与运行

    使用  ObjectARX ,首先要确定你的目标平台,获得适当的开发环境.如果你是在 AutoCAD2002  平台上开发,你就需要具备下面的工具和软件: � AutoCAD 2002 中文版或英文版 ...

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

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

最新文章

  1. 关联规则概念、啤酒加尿布引出购物篮分析、频繁项集、支持度+置信度+提升度
  2. Python 列表 insert() 方法
  3. python turtle画气球-如何用python的装饰器定义一个像C++一样的强
  4. 行为型模式之责任链模式
  5. tomcat配置加密的连接器https
  6. 单片机按键软硬件设计技巧!
  7. 用 JavaScript 验证只能输入数字,并做数字加总
  8. python处理文本数据
  9. hibernate联合主键 注解方式
  10. upupw 安装thinkcmf 5.0白屏问题
  11. 三层架构+ajax分页实例,ASP.NET存储过程实现分页效果(三层架构)
  12. 从头开始学JavaScript (四)——操作符
  13. android swf游戏下载工具,安卓swf游戏播放器下载
  14. 2017年网易校招Java面试题
  15. STC89C516驱动DS12C887时钟模块
  16. 禁止小程序输入Emoji表情符
  17. 微软试图导演互联网版的“赤壁之战”?
  18. nginx实现https转发
  19. phpmailer报 You must provide at least one recipient email address.解决办法
  20. Python量化交易平台开发教程系列3-vn.py项目中API封装的编译

热门文章

  1. ProE二次开发 Creo二次开发 MCADEx Tools 免费工具QQ群 156242985
  2. 二阶振荡衰减 matlab,二阶系统的不同阻尼系数时单位阶跃响应时域分析
  3. 泛微表单添加水印效果
  4. Thinking in java 第13章 字符串 笔记+习题
  5. pxe指明下一跳服务器ip信息,pxe
  6. 嵌入式 - 宏内核和微内核
  7. html每页显示条数,在网页代码中设置调用显示条数
  8. 你永远不知道擦身而过的“耳机党”在做什么
  9. 计算机专业研究生热门和冷门专业,研究生热门专业排名前十名 2022报哪个比较好...
  10. Docker-高级篇(1)-Dockerfile(核心构建Redis构建JDK8)