除了最后一个输出面积到excel没做,其他都是做了的。只支持AcDbPolyline和AcDbCircle。这是我模仿网上的动态图做的,主要是为了练习。下面我把自己的一些心得分享出来。使用到的一些帮助内可以在张帆、朱文俊的书《AutoCAD ObjectARX(VC)开发基础与实例教程 》找到,csdn有源码,不过大多要积分,我这有源码,可以留言,我发邮箱。这个插件我分享在了明经论坛上了。

我首页就有地址。不过需要的,我也可以发邮件。

开发的时候,一定要在最开始建立一个ErrorStatus 的变量,一般在操作实体的时候都会返回这个类型的值,调试的时候发现哪出错了,可以通过它来知道错误的详细信息,然后在百度上一搜就有解决办法了。

做这个插件的时候,感觉使用了MFC,在打开实体时,如果不对文档进行加锁,打开实体的步骤直接报错,返回Acad::eLockViolation,这时就需要这样做:

acDocManager->lockDocument(acDocManager->curDocument());
//.....操作
acDocManager->unlockDocument(acDocManager->curDocument());

加锁和解锁一定是成对出现的。大概意思就是文档管理器对当前文档加锁和解锁。

在标注面积的时候发现,面积过大,标注面积所用的字体如果不按比例变化,就有可能会很小不方便看,所以,我这里采用了按面积比例的方式改变字体高度。

double area = 0.0;
pl->getArea(area);
if (textHeight <= 0.0) {
textHeight = (int)sqrt(area) / ;
}

在做面积求和的时候,使用到了acedSSGet,这个方法用法多的很,我主要是想实现框选,然后遍历出选择的实体。这个开发文档里面有详细介绍,第一个参数表示:操作类型,二三个是点,第四个是过滤器。
通过acedSSLength(ssName, &length);得到所选实体集合的长度。
通过acedSSName(ssName, i, ent);遍历实体得到实体。
最后通过acdbGetObjectId(oId, ent)得到实体id。

ads_name ssName;
if (acedSSGet(NULL, NULL, NULL, NULL, ssName) != RTNORM) {
return;
} int length;
acedSSLength(ssName, &length); for (int i = ; i < length; i++)
{
ads_name ent;
acedSSName(ssName, i, ent);
AcDbObjectId oId;
if (acdbGetObjectId(oId, ent) == ErrorStatus::eOk) {
AcDbEntity * pEnt = NULL;
ErrorStatus es; es = acdbOpenObject(pEnt, oId, AcDb::OpenMode::kForWrite); if (es == ErrorStatus::eOk)
{
vecEnts.push_back(pEnt); }
}
}

在做统计面积到cad表格中时,用到了acedTraceBoundary这个命令,这个方法是高版本cad才有,
它也有替代方法,我在另一篇博客写过的https://www.cnblogs.com/HelloQLQ/p/12228308.html。
在封闭区间按点的时候,有可能会报错说eInvalidInput,这个时候把图形放大了在点,就准确些。
要实现点一个封闭图形,就在表格添加一行的功能,那就必须先添加好表个的头部,记录这个表格的id,用while循环点击,每点一次就打开关闭一次表格就可以了。
我遇到的问题有CString转ACHAR*,这样可以解决:

ACHAR* ach1=strIndex.AllocSysString();

在做输入面积到txt文档时,用到了c++的流对象:

ofstream  myfile(chPath, ofstream::trunc);

这个对象操作的时char*对象,把CString转成char*的方法:

USES_CONVERSION;
char *chPath= T2A(fpath);
保存文件时弹出对话框的方法:acedGetFileNavDialog。
以上就时我的总结。

objectarx 统计面积的更多相关文章

  1. HDU 1542:Atlantis(扫描线+线段树 矩形面积并)***

    题目链接 题意 给出n个矩形,求面积并. 思路 使用扫描线,我这里离散化y轴,按照x坐标从左往右扫过去.离散化后的y轴可以用线段树维护整个y上面的线段总长度,当碰到扫描线的时候,就可以统计面积.这里要 ...

  2. poj 3675 Telescope (圆与多边形面积交)

    3675 -- Telescope 再来一题.这题的代码还是继续完全不看模板重写的. 题意不解释了,反正就是一个单纯的圆与多边形的交面积. 这题的精度有点搞笑.我用比较高的精度来统计面积,居然wa了. ...

  3. C++ 矩形交集和并集的面积-离散化

    //离散化,x,y坐标分别按从小到大排序 //离散化 //1.首先分离出所有的横坐标和纵坐标分别按升序存入数组X[ ]和Y[ ]中. //2. 设数组XY[ ][ ].对于每个矩形(x1,y1)(x2 ...

  4. | 线段树-地平线horizon

    [题目描述]:在地平线上有n个建筑物.每个建筑物在地平线上可以看成一个下边界和地平线重合的矩形.每个建筑物有三个描述(Li ,Ri,Hi),分别表示该建筑物的左边界,右边界,高度.输出输出这些建筑物在 ...

  5. RaPC栅格化多边形裁剪之——进化0.1

    采用整数二维数组进行cell的归属标记,将所有符合条件的cell输出,不进行整体多边形重构,用以统计面积. 上图: INTERSECT: 网格区域为离散化的空间范围,黄色部分为求交结果. differ ...

  6. 【bzoj5110】[CodePlus2017]Yazid 的新生舞会 Treap

    题目描述 求一个序列所有的子区间,满足区间众数的出现次数大于区间长度的一半. 输入 第一行2个用空格隔开的非负整数n,type,表示序列的长度和数据类型.数据类型的作用将在子任务中说明. 第二行n个用 ...

  7. Atlantis(hdu1542)

    题意:求n个矩阵的面积并. /* 线段树维护扫描线 把每个矩形看成两条线段,从左到右添加线段,如果是矩形左边的线段,那就给线段所在的区间(y值)cover+1,反之则cover-1. 并且如果这条线段 ...

  8. 【LeetCode】695. Max Area of Island 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 日期 题目地址:ht ...

  9. 计算照片的面积(WPF篇)

    昨天,老周突发其想地给大伙伴们说了一下UWP应用中计算照片面积的玩法,而且老周也表示会提供WPF版本的示例.所以,今天就给大伙们补上吧. WPF是集成在.net框架中,属于.net的一部分,千万不要跟 ...

随机推荐

  1. js中getBoundingClientrRect()方法的详解

    getBoundingClientRect(): 这个方法返回一个矩形对象,包含四个属性:left.top.right和buttom.分别表示元素各边与页面各边的距离 例如: var boxPosit ...

  2. overflow:hidden的使用

    (1)overflow:hidden可以用来隐藏溢出的文本内容 给定内容的大小(宽高)超出后自动隐藏 <body>     <div class="box"> ...

  3. 欧拉-拉格朗日方程 The Euler-Lagrange Equation

    在 paper: Bounded Biharmonic Weights for Real-Time Deformation 中第一次接触到 Euler-Lagrange 方程,简单记录一下. 泛函的定 ...

  4. Scala实践6

    1  if表达式 Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型. scala> val a3=10 a3: Int = 10 sca ...

  5. Spirng Boot2 系列教程(二十二)| 启动原理

    一个读者,也是我的好朋友投稿的一篇关于 SpringBoot 启动原理的文章,才大二就如此优秀,未来可期. 我一直想了解一下 SpirngBoot 的是如何启动的,我想就来写一篇关于 SpirngBo ...

  6. 两个关于 Java 面试的 Github 项目

    哈喽,大家好.相信大家都知道金九银十,在人才市场上是指每年的 9 月和 10 月是企业的招聘高峰期.这个时候企业往往有大量招聘需求,求职者在这个时候就找工作无疑是最适合的.需求大,谈工资什么的就更容易 ...

  7. Babel+vscode实现APICloud开发中兼容ES6及以上代码

    本文出自APICloud官方论坛, 感谢论坛版主 penghuoyan 的分享.   使用APICloud开发时,考虑到兼容问题一直使用ES5开发,时间越久感觉越落后,整理了一个兼容ES6的开发环境, ...

  8. Spring-cloud微服务实战【二】:eureka注册中心(上)

    ## 前言   本系列教程旨在为大家演示如何一步一步构建一整套微服务系统,至于其中的数据库用什么,订单ID如何保持唯一,分布式相关问题等等不在我们讨论范围内,本教程为了方便大家后续下载代码运行测试,不 ...

  9. Android权限系统

    Android系统为每个应用程序提供了一个安全的运行环境,不同程序间相互隔离,应用程序的数据等私有资源,外界无法访问.这个安全的运行环境由Android的权限系统(可称为沙箱系统)来提供.本文简单记录 ...

  10. 使用 OAS(OpenAPI标准)来描述 Web API

    无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多 ...