ObjectArx
TXH0001
这个作者很懒,什么都没留下…
展开
-
在acad中建立一个层过滤器
添加下面代码向acad中添加一个层过滤器int CreateLayerFilter(LPTSTR filterName,LPTSTR layerNames){ AcDbSymbolTablePointer bp(acdbCurDwg(),AcDb::kForWr原创 2011-08-10 15:39:31 · 1839 阅读 · 0 评论 -
插入块参照后,将块内对象坐标换算为其当前dwg中的坐标
//以下代码通过选择一个块参照,将块内的圆对象的坐标转换为该圆在当前dwg中的坐标并输出。相当于炸开块参照后再读取圆对象坐标的效果 ads_name ObjName; ads_point pnt; AcDbObjectId objId; if (RTNORM != acedEntSel(_T(""),ObjName,pnt)) { return; }原创 2013-08-19 10:35:15 · 4276 阅读 · 0 评论 -
Acad多窗体并排展现
实现如下效果,任意摆放2个dwg文件窗体(不要用最大化)运行arx后变为如下效果 现在图纸比较工具都用预览功能,但是现在基于acad二次开发的专业软件多了,不定什么时候即就搞得acad崩溃,就算是autodesk自己的实例程序blockview也一样,没办法,先预一个双窗体功能,如果需要的话可以让它们进行比较。 注意:随着版本升级,CAD有可能窗口的组织方式......原创 2011-04-08 18:11:00 · 2219 阅读 · 7 评论 -
复制图纸空间的视口到另一个dwg文件中2(wblockcloneobjects方法)
上一次说wblockcloneobjcts方法不能写视口,又研究了一下,把“曲线救国”方法发挥到极致,终于有点收获了。试了N种方法,最后采用的是:先建立一个模板,把图纸空间初始化,然后wblockcloneobjects到模型空间(wblock命令也是把对象放到模型空间的,如果wblockcloneobjcts直接放图纸空间,打开视口时cad会崩溃)。然后再将视口deepclone到图原创 2011-08-14 12:15:48 · 6499 阅读 · 5 评论 -
给图纸中的光栅对象、外部参照重命名
给图纸中的光栅对象重命名,使其名称中带有引用它的dwg文件的名称,便于区分例如: 【a.dwg】 使用【b.jpg】,使用函数后【b.jpg】文件名变为【a.dwg-b.jpg】,这样复制a.dwg时,不用cad打开图纸也能知道【b.jpg】与【a.dwg】有关联void ReDefineRasterImg(AcDbDatabase *pDb){ CString s原创 2014-08-21 19:16:03 · 2397 阅读 · 0 评论 -
setPlotWindowArea函数使用问题的分析与解决
现象:使用AcDbDatabase readDwgFile dwg文件,然后使用setPlotWindowArea函数设置模型空间打印区域,保存退出。打开dwg后,预览发现设置的打印区域与实际需要的区域有偏移。 分析方法: 1、检查发现设置区域的min点和max点的x、y值均正确 2、执行图纸修复,无错误,问题依旧 3、调整setPlotWindow原创 2015-03-30 18:28:06 · 3663 阅读 · 2 评论 -
VS2010和VS2012在Microsoft.Cpp.Win32.user中设置VC++目录冲突的解决
网上常见的置VC目录的方法,例如http://blog.chinaunix.net/uid-21375345-id-2953297.html所提的,如果只用VS2010没有问题,但是在arx开发下,需要用到多个版本的VS。但是,这个方法修改的是“C:\Users\用户名\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32原创 2016-05-25 17:12:20 · 5292 阅读 · 0 评论 -
图形学算法1
一、 判断点是否在矩形内 计算机图形学和数学到底有什么关系?我们先来看几个例子,增加一些感性认识。首先是判断一个点是否在矩形内的算法,这是一个很简单的算法,但是却非常重要。比如你在一个按钮上点击鼠标,系统如何知道你要触发这个按钮对应的事件而不是另一个按钮?对了,就是一个点是否在矩形内的判断处理。Windows 的API提供了PtInRect()函数,实现...转载 2011-12-19 15:18:30 · 1980 阅读 · 0 评论 -
使用MFC为何要调用CAcModuleResourceOverride/试图执行系统不支持的操作
知道使用MFC窗体前都要调用 CAcModuleResourceOverride myResources;但是原因一直不是很理解,直到今天调试一个之前已经做好的界面时,提示“试图执行系统不支持的操作”,上网一查说是DDX_Control中使用resource.h的对应的控件被删除或者ID重复导致,后检查resource.h发现还真有重复,一发狠用excel表格累加让每个值都不一样了,但是依旧提示“...原创 2017-09-03 20:36:15 · 1601 阅读 · 0 评论 -
VC中Release版本调试及单步跟踪方法
VC6:选中菜单Project->Settings-> 打开窗口,选择Settings For:为ReleaseD 在C/C++ -> Category-> General 中 -> Optimization-> Disable(Debug) -> Debug Info-> Program DataBase 在-> Link---> Generate Debug转载 2011-11-30 11:06:26 · 2010 阅读 · 0 评论 -
对Arx的向量的体会
1、向量方向的确定和通过向量求点向量如何确定方向?向量就是一个坐标量的数值,向量本身与坐标系无关。一个坐标点通过与向量值进行计算,例如//代码1AcGePoint3d pnt1(20,20,0)AcGeVector3d v(20,20,0); AcGePoint3d pnt2(pnt1+v); //得到点(40,40,0)则可以得到另一个坐标点,两个点确定一条直线,根据直原创 2011-08-04 18:27:14 · 2466 阅读 · 0 评论 -
vs2010 调试快捷键
命令名 快捷键 说明 调试.应用代码更改Alt + F10启动生成操作,利用它可以通过“编辑并继续”功能应用对正在调试的代码所作的更改。调试.自动窗口Ctrl + D,Ctrl + A显示“自动”窗口,以查看在当前过程中,目前所执行中的变量的值。调试.全部中断转载 2012-11-26 09:47:33 · 1901 阅读 · 0 评论 -
图形学算法2
3.6 用矢量的叉积判断直线段是否有交 矢量叉积计算的另一个常用用途是直线段求交。求交算法是计算机图形学的核心算法,也是体现速度和稳定性的重要标志,高效并且稳定的求交算法是任何一个CAD软件都必需要重点关注的。求交包含两层概念,一个是判断是否相交,另一个是求出交点。直线(段)的求交算法相对来说是比较简单的,首先来看看如何判断两直线段是否相交。 常转载 2011-12-26 18:14:02 · 1905 阅读 · 0 评论 -
复制图纸空间的视口到另一个dwg文件中
复制图纸空间的视口到另一个dwg文件中,wblockcloneobjects对无法复制视口,原因还不清楚,只能用wblock,思想是将选定的视口wblock做块到一个中间database,然后再将块插入目的database的图纸空间,最后炸开即可AcDbDatabase *p原创 2011-08-11 18:41:03 · 5021 阅读 · 8 评论 -
坑爹的“模块计算机类型“x64”与目标计算机类型“X86”冲突”
这2天要升级一个arx程序到64位,在vs2008上编译的时候提示“模块计算机类型“x64”与目标计算机类型“X86”冲突”,google了好久,提供的无非都是“链接器-》高级-》目标计算机”之类的东东,试了也没用,最后在链接器的命令行里发现了这个:与原来的 /MACHINE:x64冲突了,最后删掉它就搞定了。估计是从vs的早期版本升上来的时候被添加的。郁闷死人了,耗了我几天原创 2011-11-28 12:30:56 · 14651 阅读 · 4 评论 -
在ARX打开文件
在AutoCAD中打开图形,并且显示在图形窗口中,可以使用acedSyncFileOpen()函数。需要注意的是,这个函数只能在单文档模式中工作,用户可以在AutoCAD“选项”对话框的“系统”选项卡中进行设置,或者在主函数中添加下面的语句:acrxDynamicLinker->registerAppNotMDIAware(pkt);具体的函数如下://加载模板文件vo转载 2011-12-19 11:32:44 · 4916 阅读 · 0 评论 -
关闭文档不提示保存
最近,有一个这样的需求,所以把解决方法给贴出来一下。首先,cad判断图纸是否被修改过,是根据一个变量的值来判断的,这个变量就是 DBMOD,很多人肯定会想到,那我把这个变量的值给修改成0或者是-1不就行了吗? 很不幸告诉你,这个变量是只读的。那么怎么办呢? 幸好桌子公司还挺厚道的,导出了一个接口给我们来修改database的这个flag,只不过是在官方的sdk文档里没有给出来而已,这个接口的原转载 2011-12-20 17:12:40 · 3143 阅读 · 0 评论 -
判断某个点是否在多边形内
在网上看见了一些判断的算法,都是通过射线判断与多段线的交点的个数计算的,不过没有考虑到射线正好通过多段线端点,即端点与交点重合的情况,这里对该算法进行完善//判断交点位于多段线端点上时,与其2个相邻点分别构成的直线是否都在射线的同一侧BOOL IsRemoveIntersectPnt(AcDbRay &pRay ,const AcDbPolyline &poly,int pntInde原创 2011-12-24 16:30:52 · 2472 阅读 · 0 评论 -
将当前dwg内的对象复制到另一个dwg文件中
//将当前dwg内的对象复制到另一个dwg文件中 AcDbDatabase * pDB=acdbHostApplicationServices()->workingDatabase(); AcDbBlockTable *pBT1; pDB->getBlockTable(pBT1,AcDb::kForRead); AcDbBlockTableRecord *pBTR1;原创 2011-05-02 12:05:00 · 5263 阅读 · 0 评论 -
Arx函数收集
//获取文件名intgetFile( // input: const char* pCmdAsk, // prompt for command line mode const char* pDiaAsk, // prompt for dialog box mode const char* pExt, // file extension转载 2011-02-27 13:30:00 · 5794 阅读 · 12 评论 -
arx选择集实例
大多数ObjectARX函数在处理选择集和实体时,都用名字来识别选择集或实体,该名字用一个长整型对来表示的,并对AutoCAD来维护。在ObjectARX中,该名字的类型为ads_name。在对选择集或实体进行操作之前,ObjectARX应用程序必须通过调用一个返回其名字的库函数来得到选择集或实体名字。注意:选择集和实体的名字是不稳定的,它们仅仅在AutoCAD当前图形工作时有效。如果从A转载 2012-01-15 14:37:29 · 8834 阅读 · 0 评论 -
arx注册命令导致acad崩溃一例
原因很简单,在arx加载时要注册命令,调用向导自动生成的InitApplication函数的AddCommand函数注册命令,后来发现两个不同的arx都使用了相同的命令组名,结果导致两个arx同时加载时有一个的命令用不了,修改了AddCommand中注册的命令组名,问题来了,加载一个arx,卸载后再加载一次,调用命令acad就崩溃了,开始还以为是资源或者调用没释放干净,搞了半天也没用,猛然发现Un原创 2012-04-29 22:44:19 · 1804 阅读 · 0 评论 -
使用AcDbEntity的Explode方法后分解对象的删除
如果使用explode方法炸开对象,但是又不需要炸开的对象放到块表中时,应调用delete方法将对象删除,代码如下:AcDbVoidPtrArray arr_ExplodeEnt;ent_ptr->explode(arr_ExplodeEnt);for (int i=0;i{.....//注意红色部分,必须转换为AcRxObject对象指针后在删除,原创 2017-12-21 22:35:28 · 1972 阅读 · 0 评论