objectarx 统计面积


除了最后一个输出面积到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);
objectarx 统计面积的更多相关文章
- HDU 1542:Atlantis(扫描线+线段树 矩形面积并)***
题目链接 题意 给出n个矩形,求面积并. 思路 使用扫描线,我这里离散化y轴,按照x坐标从左往右扫过去.离散化后的y轴可以用线段树维护整个y上面的线段总长度,当碰到扫描线的时候,就可以统计面积.这里要 ...
- poj 3675 Telescope (圆与多边形面积交)
3675 -- Telescope 再来一题.这题的代码还是继续完全不看模板重写的. 题意不解释了,反正就是一个单纯的圆与多边形的交面积. 这题的精度有点搞笑.我用比较高的精度来统计面积,居然wa了. ...
- C++ 矩形交集和并集的面积-离散化
//离散化,x,y坐标分别按从小到大排序 //离散化 //1.首先分离出所有的横坐标和纵坐标分别按升序存入数组X[ ]和Y[ ]中. //2. 设数组XY[ ][ ].对于每个矩形(x1,y1)(x2 ...
- | 线段树-地平线horizon
[题目描述]:在地平线上有n个建筑物.每个建筑物在地平线上可以看成一个下边界和地平线重合的矩形.每个建筑物有三个描述(Li ,Ri,Hi),分别表示该建筑物的左边界,右边界,高度.输出输出这些建筑物在 ...
- RaPC栅格化多边形裁剪之——进化0.1
采用整数二维数组进行cell的归属标记,将所有符合条件的cell输出,不进行整体多边形重构,用以统计面积. 上图: INTERSECT: 网格区域为离散化的空间范围,黄色部分为求交结果. differ ...
- 【bzoj5110】[CodePlus2017]Yazid 的新生舞会 Treap
题目描述 求一个序列所有的子区间,满足区间众数的出现次数大于区间长度的一半. 输入 第一行2个用空格隔开的非负整数n,type,表示序列的长度和数据类型.数据类型的作用将在子任务中说明. 第二行n个用 ...
- Atlantis(hdu1542)
题意:求n个矩阵的面积并. /* 线段树维护扫描线 把每个矩形看成两条线段,从左到右添加线段,如果是矩形左边的线段,那就给线段所在的区间(y值)cover+1,反之则cover-1. 并且如果这条线段 ...
- 【LeetCode】695. Max Area of Island 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 日期 题目地址:ht ...
- 计算照片的面积(WPF篇)
昨天,老周突发其想地给大伙伴们说了一下UWP应用中计算照片面积的玩法,而且老周也表示会提供WPF版本的示例.所以,今天就给大伙们补上吧. WPF是集成在.net框架中,属于.net的一部分,千万不要跟 ...
随机推荐
- 使用EF操作Docker中的Mysql实例
为啥我会选择mysql呢?因为我的服务器配置较低,而SqlServer在docker中的实例,服务器的运行内存应当保持在2G+,我没有这个条件,它会爆出这样的错误 sqlservr: This pro ...
- Jmeter-Ant 生成测试报告配置步骤
1.配置java环境变量(不会的可以自行百度) 2.安装jmeter 3.安装ant,配置ant环境变量 4.将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制 ...
- php strcmp函数漏洞
strcmp函数漏洞 适用5.3版本以前的php 函数作用:字符串比较 要求传入字符串.如果传入非字符串呢? 结果函数报错!但是函数返回“0” . 虽然报错了但函数的判断却是“相等” 如何传入非字符 ...
- 【一起学源码-微服务】Eureka+Ribbon+Feign阶段性总结
前言 想说的话 这里已经梳理完Eureka.Ribbon.Feign三大组件的基本原理了,今天做一个总结,里面会有一个比较详细的调用关系流程图. 说明 原创不易,如若转载 请标明来源! 博客地址:一枝 ...
- TensorFlow——MNIST手写数据集
MNIST数据集介绍 MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/mnist/index.html,我们可以从这里下载数据集. ...
- 通过例子进阶学习C++(四)计算2的64次方,不服写写看
本文是通过例子学习C++的第四篇,通过这个例子可以快速入门c++相关的语法. 1.乍一看题目非常简单,简单思考一下,可以通过for循环实现: #include <iostream> u ...
- Linux查看端口监听占用
# 查看所有 netstat -ntlp # 过滤PORT8080 netstat -ntlp | grep 8080 -t # 仅显示tcp相关选项 -u # 仅显示udp相关选项 -n # 拒绝显 ...
- SSM框架整合中,不报错,数据库只能存ID进去问题解决
嗯,这个错误其实不能算错误,是粗心造成的,在配置文件中对于传递的参数没有写#字符,直接写的的属性名.居然错了两次,哎!!! 嗯,还有一个问题,在动态SQL中,if标签中test属性中判断时,不能用大写 ...
- Docker 安装 Elasticsearch+kibana
1 下载镜像 docker pull elasticsearch:7.4.1 docker pull kibana:7.4.1 拉取的镜像如下: 2 创建network 创建一个网络,名字任意取,使得 ...
- 基于bootstrap和knockoutjs使用 mvc 查询
这是我摘抄的码 http://pan.baidu.com/s/1nvKWdsd