AutoCad ObjectARX编程
zeqi1991
这个作者很懒,什么都没留下…
展开
-
RegionProp
【代码】RegionProp。原创 2023-05-29 15:05:47 · 166 阅读 · 0 评论 -
arx绘制临时图像
有时候需要绘制临时图像,这些图像不能被选中等属性static AcArray<AcDbEntity*> _markers;static AcArray<int> viewportNumbers;static void ClearTransientGraphics(){ AcGiTransientManager* pTransientManager = acgiGetTransientManager(); int numOfMarkers = _marker原创 2022-04-21 09:10:57 · 1035 阅读 · 0 评论 -
arx开发版本对照表
原创 2022-04-06 09:50:46 · 879 阅读 · 0 评论 -
acedGrRead用法
acedGrRead函数的定义形式为:int acedGrRead(int track,int * type,struct resbuf * result);第一个参数:track:控制位;第二个参数:type:返回输入设备及其种类;第三个参数:result:从用户获得返回拖动的坐标:track为Bit 0(1):当用户移动鼠标或其它顶点设备时, type 设置为 5,result 设置为(X,Y)坐标。返回所有的关键值:track为Bit 1(2) :包括函数和光标的所有代码。控制光标的显示:原创 2021-12-16 22:20:03 · 832 阅读 · 0 评论 -
cad加载菜单
//获得菜单路径 TCHAR szFilePath[MAX_PATH+1]; memset(szFilePath, 0, MAX_PATH+1); GetModuleFileName(_hdllInstance, szFilePath, MAX_PATH); CString strPath(szFilePath); CLayerSelDlg dlg; dlg.GetParentPath(strPath); dlg.GetParentPath(strPath); strPath = str原创 2021-12-16 22:19:24 · 871 阅读 · 0 评论 -
CAD事务操作
cad事务机制实体的操作方式 对于cad的实体而言,一般有两种操作方式。一种是open/close方式,一种是通过事务的方式。open/close方式假定现在需要选中一个实体,并把它改为红色ads_name en;ads_point pnt;acedEntSel(_T("\n选择需要改为红色的实体:"), en, pnt);AcDbObjectId id;acdbGetObjectId(id, en);AcDbEntity* pEnt = NULL;//openif (A原创 2021-12-16 22:18:04 · 754 阅读 · 0 评论 -
CAD命令
cad命令写插件的时候,加入命令的过程:Acad::ErrorStatus addCommand(const char* cmdGroupName, const char* cmdGlobalName, const char* cmdLocalName, Adesk::Int32 commandFlags, AcRxFunctionPtr FunctionAddr, AcEdUIContext* UIContext = NULL, int fcode = -1, HINSTANCE hRes = NUL原创 2021-12-16 22:17:25 · 546 阅读 · 0 评论 -
CAD修改鼠标捕捉模式
CAD修改鼠标捕捉模式代码捕捉类型0不捕捉任何类型的对象1线段和圆弧的端点2线段和圆弧的中点4圆,圆弧,椭圆的中心8用point命令生成的点16圆,圆弧,椭圆的象限点32线段和圆弧的交点64块或字符串的插入点128垂足256切点512对象上距离光标的最近点1024无2048外观交点,实际不一定相交4096延长线上的点8192所选对象平行的点struct resbuf原创 2021-12-16 22:16:05 · 442 阅读 · 0 评论 -
ObjectARX中屏蔽掉某个命令 或者给某个命令重命名
//命令屏蔽class CEditReactor : public ACEditorReactor{ virtual void commandWillStart(const ACHAR* cmdStr) { if (CString(_T("MOVE")) == cmdStr) acedPostCommand(_T("CANCELCMD")); }}//重命名 AcEdCommand* pCmd = acedRegCmds->lookupGlobalCmd(_T("defau原创 2021-12-11 11:03:41 · 536 阅读 · 0 评论 -
ARX清理layout
void ClearLayout(){ CString msLayoutName; CStringArray layoutNames; AcDbObjectId msID = acdbSymUtil()->blockModelSpaceId(m_pDatabase); AcDbObjectId dictId = m_pDatabase->layoutDictionaryId(); AcDbDictionary* pDict = NULL; if原创 2021-09-08 21:48:32 · 333 阅读 · 0 评论 -
ObjectARX实现CAD截图
最近有个人在群里面提出了一个需求,在cad中框选实体,然后将框选的内容截图,并且将框选的实体导出到一张dwg中实现过程如下://框选区域ads_point p1, p2;if (RTNORM != ads_getpoint(NULL, _T("\n第一角点"), p1)) return;if (RTNORM != ads_getcorner(p1, _T("\n第二角点"), p2)) return;AcGePoint3d pt1, pt2;pt1 = asPnt3d(p1);原创 2021-08-23 14:38:05 · 1045 阅读 · 0 评论 -
获取当前视图范围内的所有实体,用于局部选择时提前筛选
void PluginCommand::Test(){ struct resbuf sysVar; acedGetVar(_T("SCREENSIZE"), &sysVar); int nScreenX = (short)sysVar.resval.rpoint[0]; int nScreenY = (short)sysVar.resval.rpoint[1]; acedGetVar(_T("VIEWSIZE"), &sysVar); dou原创 2021-04-02 15:16:38 · 575 阅读 · 0 评论 -
ARX实现Z轴归零
ARX实现Z轴归0有时候dwg图纸画的不规整,导致很多实体不在同一平面上,这给绘图带来了很大的麻烦,因此就有将它们放在同一平面上的需求,理论上是在XY平面上 const TCHAR* prompt[2] = {_T("\n选择需要Z轴归0的实体<退出>:"), _T("")}; ads_name ssname; if (RTNORM != acedSSGet(_T(":$"), prompt, NULL, NULL, ssname)) return;原创 2021-01-26 19:51:07 · 537 阅读 · 2 评论 -
cad进度条使用
cad的进度条使用cad的进度条void TestAcadProgressBar(){ acutPrintf(_T("启动进度条...")); acedSetStatusBarProgressMeter(_T("测试"),0,100); for (int i = 0; i <= 100; ++i) { /*做一些比较耗时的操作*/ //TODO: int err = acedSetStatusBarProgressM原创 2021-01-09 10:48:44 · 1169 阅读 · 0 评论 -
遍历一个面域
Acad::ErrorStatus GetRegion(AcDbRegion* pRegion, AcGePoint3dArray& ptArray){ if (pRegion == NULL) return Acad::eNullObjectPointer; //构造brep AcBrBrep brep; AcBr::ErrorStatus es = brep.set(*pRegion); //构造brepface迭代器 AcBrB原创 2020-12-03 10:39:24 · 484 阅读 · 0 评论 -
一个很实用的工具栏控件
非cui上的工具栏调整工具栏大小//-----------------------------------------------------------------------------#include "StdAfx.h"#include "resource.h"#include "ArxMsgHandler.h"//-----------------------------------------------------------------------------#ifdef _原创 2020-10-12 10:06:34 · 621 阅读 · 0 评论 -
C#的cad二次开发
使用C#对cad进行二次开发最近所做项目暂时告一段落,有空闲了,就了解一下C#对cad二次开发的支持。由于最近做的项目都不是objectarx,转到其他平台了,会涉及到第三方库,包括不限于Fortran提供的第三方库,C#写的库(比如word,excel使用C#开发更好),看到了C#写的很优秀的代码,值得学习。首先,C++转C#问题不大,主要对C#独有的特性了解即可。其次,对于.NET API查看Autodesk给的官方文档,了解后还可以查看revit的二次开发文档。总得来说,C#对cad进行二次原创 2020-10-09 18:45:16 · 1344 阅读 · 0 评论 -
一个很简单的arx插件
今天有一个客户给我发了一个需求,对dwg中选中的块参照进行标记,标记位置在块参照的插入点,标记是一个圆或者矩形,可以调整圆和矩形的大小。成果如下:代码如下:static resbuf* AddBlockSymbolSelectCallback(const TCHAR* sz){ if (_tcscmp(sz, _T("S")) == 0 || _tcscmp(sz, _T("s")) == 0) { CAcModuleResourceOverride res;原创 2020-08-18 19:15:37 · 1195 阅读 · 0 评论 -
ObjectARX中制定快捷键
快捷键一般来说,使用简短的命令比长命令要好,这就需要用快捷键来处理。长命令一般是arx开发者定义的比较好记的或者带标识的acedRegCmds->addCommand(_T("PluginCommand"), _T("aaa_line"), _T("aaa_line"), ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET | ACRX_CMD_REDRAW, functionPtr);比如aaa_line就是一个命令,但是太长了,不好记忆。那么为了画图方便原创 2020-08-07 10:01:49 · 677 阅读 · 0 评论 -
ObjectARX修改cad的支持文件路径
在cad插件的开发过程中,有时候需要用到一些文件,比如dll和资源文件(字体,图片等),由于它们不能像插件直接添加到cad中,也不好将它们放在cad的安装路径下,这时候就需要用到cad的支持文件路径,手动添加一般是比较稳妥的方式,还有就是通过代码修改。通过代码修改一般有两种方法:如果是需求在不打开cad的条件下就可以修改,那只能使用修改注册表的方式。一般来说在路径HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.1\ACAD-6001:804\Prof原创 2020-08-05 13:59:45 · 1533 阅读 · 0 评论 -
关于AcDbHatch的关联
AcDbObjectIdArray internalIds, outerIds;AcDbObjectId internalCircleId = CBaseDwg::AddCircle(AcGePoint3d::kOrigin, 100);internalIds.append(internalCircleId);AcDbObjectId outerCircleId = CBaseDwg::AddCircle(AcGePoint3d::kOrigin, 200);outerIds.append(oute原创 2020-08-02 19:54:08 · 707 阅读 · 0 评论 -
CAD-动态图显示
动态图显示以前给别人做过一个插件,就是根据文字动态显示图。今天群里面一个哥们把这个需求发出来了,觉得比较有意思。cad上写了一些文字,这些文字一般会与一张图片对应,比如刘亦菲对应着一张她的照片,当鼠标移动到"刘亦菲"的文字上,就会出现她的照片。这个活是以前一个做家具的朋友让帮忙写的。比如一个"书桌AXZ2020-22",这个文字表示一个红色的,2m*1m的桌子,对应着一张效果图,当鼠标移动到...原创 2020-04-19 21:56:12 · 1099 阅读 · 1 评论 -
CAD-屏幕改字
前段时间,同事让我帮他写一个快速改文字的插件。需求大致这样:比如1234567的文字,选中了3,然后输入一个文字a,结束后,a就替换成3,变成12a4567,这个是单个的。然后还有多个的,比如1234567,选中345,输入a就变成12a67。还有一些其他需求,比如特殊文字,比如按下空格可以删除选中的文字字符等。这个可以加快他的改图速度,特别是配筋图。...原创 2020-04-10 19:07:08 · 2531 阅读 · 12 评论 -
CAD-菜单文件
菜单文件做菜单的时候,建议用mnu文件,然后通过cad转成cuix文件,用cui编辑器编辑,可添加图标等更多内容。这样的好处是不需要修改代码便可以添加新的命令项,比较方便,快捷。但是有时候有些插件发布者,是不希望别人随意修改菜单文件的,这就意味着有时候菜单容易写死。之前写了一个简单的菜单工具栏,它把命令集中在一起,同时希望cad的菜单上也有这些内容,和工具栏上的命令一致。工具栏上的菜单与mnu...原创 2020-04-10 09:06:54 · 1250 阅读 · 1 评论 -
CAD-工具栏
工具栏重写最近,重写了一个CMenu,比较花里胡哨,觉得之前写的那个工具栏可以重改,原来是用button模拟,现在是用CMenu重写,感觉好看多了。重写之后的工具栏:同样,它的内容和一个mnu文件关联:#顶部菜单专用#语法注意:[**]里面是菜单名#a=b:a名称,b命令#--表示的是分隔符#注意所有的非中文字符,用英文书写=,-,A,b,c...#最后,这个文本最好是ANS...原创 2020-04-09 13:30:46 · 721 阅读 · 0 评论 -
基于ObjectArx进行cad二次开发总结
最近有人问我ObjectArx怎么学?有c++的底子,懂一点MFC,会CAD的操作,基本上就可以了。写一些适合自己绘图的arx插件,很容易,也很方便。如果是想更深入的研究下去,那就需要更多的知识储备,包括计算机图形学,包括其他专业知识等等。以下是我当时跟他讲的一些我自己认为的CAD开发的知识点。老实说,一个人开发适合自己使用的工具集不难,难在大型商业,难在通用型软件。大型软件,自己一个人搞,太...原创 2020-03-08 13:29:31 · 2672 阅读 · 0 评论 -
自定义菜单
菜单对话框的系统菜单//预处理#define MENU_BUTTON_ID 10246CMenu systemMenu;systemMenu.CreateMenu();CMenu subPopupMenu;subPopupMenu.CreatePopupMenu();subPopupMenu.AppendMenu(MF_STRING, MENU_BUTTON_ID+20, _T(...原创 2020-02-08 17:08:17 · 1366 阅读 · 0 评论 -
cad常用符号
直径符号 %%cⅠ级钢筋 %%130Ⅱ级钢筋 %%131Ⅲ级钢筋 %%132Ⅳ级钢筋 %%1335号钢钢筋 %%134±号 %%p角钢 %%161工字钢 %%162槽钢 %%163方钢 %%164扁钢 %%165卷边角钢 %%166卷边槽钢 %%167卷边Z型钢 %%168钢轨 %%169圆钢 %%170%%p 正负号±%%c 直径符号%%d 温度符号%%u...原创 2020-01-10 22:47:08 · 3052 阅读 · 0 评论 -
cad图库
图库功能 之前做了一个小的图库,主要是使用cad自己的功能创建,优点是方便,不需要其他技巧,顶多就找个人帮忙写个lisp程序,插入dwg并拖动,一般来说很方便和简单。缺点是不清楚,不好看。最近,有朋友希望做一个比较好看的,用文件控制图库内容的东西,方便他自己修改。最近初步完成。 这个是之前的图库:&...原创 2019-10-30 14:41:02 · 1085 阅读 · 5 评论 -
cad---菜单,工具栏,屏幕菜单,增强工具栏
cad之辅助提示功能最近有个小老弟自己在网上找了一大堆插件,然后他想做一个类似菜单什么的去使用这些零碎的插件,想自定义一个工具集,然后就问我菜单,工具栏,屏幕菜单等等的做法,这里做一个总结,相关资料信息在XD论坛,明经通道都有。。。常见的cad辅助提示,包括菜单,工具栏,难度大的包括屏幕菜单,增强工具栏等等菜单cad的菜单比较常见,比如一般来说,给别人做插件的时候,如果做的是一个模块的...原创 2019-10-29 23:55:01 · 5402 阅读 · 0 评论 -
ARX中非模态对话框
ARX中非模态对话框的用法//类似一个全局变量CNoModalDlg* pDlg = nullptr;//资源切换CAcModuleResourceOverride myResource;CMDIFrameWnd* pCadWnd = acedGetAcadFrame();pDlg = new CNoModalDlg;pDlg->Create(IDD_DIALOG_TEST...原创 2019-07-04 10:21:18 · 1042 阅读 · 0 评论 -
设置cad进度条的arx代码
//测试进度条void TestAcadProgressBar(){ acutPrintf(_T("启动进度条...")); acedSetStatusBarProgressMeter(_T("测试"),0,100); for (int i = 0; i <= 100; ++i) { Sleep(100); acedSet...原创 2019-07-01 09:36:47 · 682 阅读 · 0 评论 -
创建cad菜单
cad菜单的创建办法使用cui自定义,这个是差不多最稳妥的办法了//创建一个test.mnu文本//使用时,直接用menuload命令加载即可,加载后可以得到test.cui文件***MENUGROUP=Polygon***POP3PolygonName [Polygon]Polygon-4 [Polygon-4]^C^C_polygon 4 \I 10Polygon-5 [Pol...原创 2019-07-01 14:06:24 · 1349 阅读 · 0 评论 -
ARX中自定义CDialog
定制对话框//自定义消息#define WM_ACAD_KEEPFOCUS WM_USER+0x1234class MyDialog : public CDialog{ DECLARE_DYNAMIC(MyDialog)public: afx_msg void OnPaint(); afx_msg LRESULT OnAcadKeepFocus(WPARAM...原创 2019-07-16 13:20:04 · 676 阅读 · 0 评论 -
cad自定义图库
sld文件前段时间,有网友委托我帮他做一个家具的图库。由于从来没有做过,看了一下相关方面的知识,就开始做了。首先,做图库的方法有很多,最简单的是MFC拖控件然后自己把做好的bmp图贴进去就可以了,麻烦一点的是sld文件,最麻烦是用blockview做。下面先说说这3中的区别:首先,如果用MFC拖控件的办法,最简单也最方便,用static或者用picture控件,把bmp贴进去就好了,双击控...原创 2019-07-30 21:31:06 · 2246 阅读 · 0 评论 -
关于Jig
cad中的JIG cad中经常会用到jig技术,主要是绘制某些定制实体的时候,有拖动效果,所见即所得,方便控制。在arx的二次开发中,一般是继承一个基类AcEdJig。//关于这个AcEdJigclass AcEdImpJig;class AcDbEntity;class AcEdJig: public AcRxObject{public: ACRX_DECLARE...原创 2019-07-27 13:56:29 · 2782 阅读 · 1 评论 -
arx出现的bug
转载arx出现的bug:添加链接描述1.修改了一个以前的arx程序,编译通过后,加载时出错,acad说它不是合法arx文件。但是因为还没走到DllMain(),所以vc也调试不了,不知道那里出错,毫无头绪。睡了一觉,觉得应该是全局变量或者类的静态成员初始化时出错。到网上搜了一下,有篇文章还行:http://blog.csdn.net/xingzihe/article/details/9032...转载 2019-08-25 21:40:01 · 919 阅读 · 2 评论 -
颜色选择框
cad二次开发的颜色选择框CAcUiColorComboBox的使用CAcUiColorComboBox m_combox;void CPreviewDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_COLOR, m_combox)...原创 2019-08-22 14:50:36 · 517 阅读 · 0 评论 -
加载arx的其它方式
使用lisp加载在.lsp中加入下面这句:(command "netload" "arc.dll")然后在autocad使用注册表加载非托管的ARX程序的加载非托管的ARX程序是指用C++编译的以.arx为后缀的动态链接库文件,实现方法很简单,只需在注册表中加入以下信息(示例):Windows Registry Editor Version 5.00[HKEY_LOCAL_MAC...转载 2018-12-27 20:47:54 · 1753 阅读 · 0 评论 -
vs和arx的版本对应关系
VC6.0 — VISUAL STUDIO 6.0 — R15 — 2000-2002 — objectarx 2000,2002VC7.0 — VISUAL STUDIO 2002/.net — R16 — 2004-2006 — objectarx 2004-2006VC8.0 — ...原创 2018-11-05 21:00:56 · 1481 阅读 · 0 评论