ObjectArx开发常用资料
一、ADS函数与ARX函数对比
ADS原函数 | ARX后函数 | 函数功能 |
ads_agetcfg | acedGetCfg | |
ads_agetenv | acedGetEnv | |
ads_alert | acedAlert | 显示一个对话框,对话框中有用户指定的信息 |
ads_angle | acutAngle | 求出直线与当前X轴的夹角 |
ads_angtof | acdbAngToF | 将一个显示为角度值得字符串转化为实数(浮点数) |
ads_angtos | acdbAngToS | 把角度值转换为字符串 |
ads_arxload | acedArxLoad | 将ARX应用程序装载入CAD中 |
ads_arxloaded | acedArxLoaded | 以链表的方式返回当前装入的ARX应用程序 |
ads_arxunload | acedArxUnload | 将一个ARX应用程序从CAD中卸载出去 |
ads_asetcfg | acedSetCfg | |
ads_asetenv | acedSetEnv | |
ads_buildlist | acutBuildList | 创建结果缓冲区链表 |
ads_cmd | acedCmd | 借助一个结果缓冲区链表来执行CAD命令(有使用条件) |
ads_command | acedCommand | 执行CAD命令(有使用条件) |
ads_cvunit | acutCvUnit | 在各种单位制内进行转换 |
ads_defun | acedDefun | 定义一个外部函数 |
ads_dictadd | acdbDictAdd | 向指定字典中添加一个非图形对象 |
ads_dictnext | acdbDictNext | 使程序指针指向字典中的下一个实体,并返回这个指向它的指针 |
ads_dictremove | acdbDictRemove | 从指定字典中一走一个实体 |
ads_dictrname | acdbDictRename | 从命名一个字典条目 |
ads_dictsearch | acdbDictSearch | 对一个给定实体条目,寻找一个字典 |
ads_distance | acutDistance | 求出两点之间的距离 |
ads_distof | acdbDisToF | 将一个显示为实数的字符串转化为实数(浮点数) |
ads_draggen | acedDragGen | 提示用户动态拖动一个选择集 |
ads_entdel | acdbEntDel | 删除(或者取消删除)图形中的实体 |
ads_entget | acdbEntGet | 获得一个实体的定义数据 |
ads_entgetx | acdbEntGetX | 获得实体数据,包括应用程序注册的扩展数据 |
ads_entlast | acdbEntLast | 查找图形中最后一个实体 |
ads_entmake | acdbEntMake | 形成一个新的实体,并把这个实体的定义数据添加到数据库中去 |
ads_entmakex | acdbEntMakeX | 同acedEntMake()一样,但返回新的实体名称 |
ads_entmod | acdbEntMod | 修改一个实体的定义数据 |
ads_entnext | acdbEntNext | 查找图形中的下一个实体 |
ads_entsel | acdbEntSel | 提示用户以指定一点的方式来选择一个实体 |
ads_entupd | acdbEntUpd | 更新实体的屏幕显示 |
ads_fail | acdbFail | 简单的打印错误信息并把控制权返回给调用者 |
ads_findfile | acedFindFile | 寻找一个指定的文件 |
ads_fnsplit | acedFNSplit | |
ads_getangle | acedGetAngle | 提示用户输入一个角度,要考虑ANGBASE系统变量的当前值 |
ads_getappname | acedGetAppName | 获得当前ARX应用程序的文件名称 |
ads_getargs | acedGetArgs | 获得在调用外部函数时的命令行参数 |
ads_getcfg | acedGetCfg | |
ads_getcname | acedGetCName | 获取一个命令的本地名或与语言无关的名称 |
ads_getcorner | acedGetCorner | 提示用户输入一个矩形的顶点 |
ads_getdist | acedGetDist | 提示用户输入一个距离 |
ads_getenv | acedGetEnv | |
ads_getfiled | acedGetFileD | 用标准的CAD对话框提示用户输入要查找的文件名 |
ads_getfuncode | acedGetFunCode | 获得外部函数的码值 |
ads_getinput | acedGetInput | 提取传送用户输入函数acedGetXxx()的关键字(可以是任意字符) |
ads_getint | acedGetInt | 提示用户输入一个整数 |
ads_getkword | acedGetKword | 提示用户输入一个关键字 |
ads_getorient | acedGetOrient | 类似于acedGetAngle(),但零度方向总是向右 |
ads_getpoint | acedGetPoint | 提示用户输入一个点 |
ads_getreal | acedGetReal | 提示用户输入一个浮点数 |
ads_getstring | acedGetString | 提示用户输入一个字符串 |
ads_getstringb | acedGetStringB | |
ads_getsym | acedGetSym | 获取一个LISP符号的值(有使用条件) |
ads_getvar | acedGetVar | 获取一个系统变量的当前值 |
ads_graphscr | acedGraphScr | 显示当前图形屏幕 |
ads_grdraw | acedgrDraw | 在当前端口画一个矢量 |
ads_grread | acedGrRead | 读取输入设备 |
ads_grtext | acedGrText | 在屏幕的菜单区/模式区/或状态区显示文本 |
ads_grvecs | acedGrVecs | 在当前图形屏幕上画多个矢量 |
ads_handent | acdbHandEnt | 通过实体的句柄查找实体 |
ads_help | acedHelp | 调用帮助功能 |
ads_initget | acedInitGet | 次定用户响应下一次调用输入函数acedGetXxx()时那些值是有效的 |
ads_inters | acdbInters | 求出两直线的交点 |
ads_invoke | acedInvoke | 在ARX应用程序中调用外部函数 |
ads_isalnum | acutIsAlNum | 验证是否是字母或数字 |
ads_isalpha | acutIsAlpha | 验证是否是字母 |
ads_iscntrl | acutIsCntrl | 验证是否是一个控制字符 |
ads_isdigit | acutIsDigit | 验证是否是数字 |
ads_isgraph | acutIsGraph | 验证是否是一个图形字符 |
ads_islower | acutIsLower | 验证是否是小写字母 |
ads_isprint | acutIsPrint | 验证是否是一个可打印字符 |
ads_ispunct | acutIsPunct | 验证是否是一个标点符号 |
ads_isspace | acutIsSpace | 验证是否是一个空白字符 |
ads_isupper | acutIsUpper | 验证是否是一个大写字母 |
ads_isxdigit | acutIsXDigit | 验证是否是一个十六进制数字 |
ads_menucmd | acedMenuCmd | 显示并激活菜单 |
ads_name_clear | acdbNameClear | 可将ads_name型的数据赋值为空 |
ads_name_equal | acdbNameEqual | 可比较两个ads_name型的数据是否相同 |
ads_name_nil | acdbNameNil | 可以检测这个实体名或选择集名为空 |
ads_name_set | acdbNameSet | 可以复制一个实体名或选择集名 |
ads_namedobjdict | acdbNameObjDict | 返回图形字典的实体名 |
ads_nentsel | acedNEnrSel | 类似acedNEntSelp(),但使用4*3(而非4*4)作为变换矩阵,不能指定点 |
ads_nentselp | acedNEntSelp | 类似acedNEntSel(),但对于嵌套实体返回附加数据,并使程序能指定选择点 |
ads_newrb | acutNewRb | 创建一个新的结果缓冲区 |
ads_osnap | acedOsnap | 借助指定对象的捕捉方式来捕捉一个点 |
ads_point_set | acdbPointSet | 可以将一个点复制给另一个点 |
ads_polar | acutPolar | 通过极坐标求一点 |
ads_printf | acutPrintf | 在文本屏幕输出一条信息 |
ads_prompt | acedPrompt | 在提示行中显示一条信息 |
ads_putsym | acedPutsym | 设置LISP符号的值(有使用条件) |
ads_redraw | acedRedraw | 将当前图形屏幕做重画操作 |
ads_regapp | acdbRegApp | 注册应用程序的扩展实体数据 |
ads_regfunc | acdbRegFunc | 注册一个可以直接调用的外部函数 |
ads_relrb | acutRelRb | 释放分配给一个结果缓冲区或一个结果缓冲区链表内存 |
ads_retint | acedRetInt | 返回一个整数 |
ads_retlist | acedRetList | 返回一个表 |
ads_retname | acedRetName | 返回一个实体的名称或选择集的名称 |
ads_retnil | acedRetNil | 返回一个Nil值 |
ads_retpoint | acedRetPoint | 返回一个点 |
ads_retreal | acedRetReal | 返回一个浮点数 |
ads_retstr | acedRetStr | 返回一个字符串 |
ads_rett | acedRetT | 返回逻辑真 |
ads_retval | acedRetVal | 返回一个包含在结果缓冲区的值 |
ads_retvoid | acedRetVoid | 返回一个不显示的控制(void) |
ads_rtos | acdbRToS | 将一个实数(浮点数)转化为字符串 |
ads_setcfg | acedSetCfg | 添加应用程序数据到系统acad.cfg文件的应用程序数据部分 |
ads_setenv | acedSetEnv | |
ads_setfunhelp | acedSetFunHelp | 为一个通过命令行“C:外部函数名”方式启动的命令注册帮助信息 |
ads_setvar | acedSetVar | 设置CAD系统变量的值(有使用条件) |
ads_setview | acedSetView | 为指定端口建立一个3D视图 |
ads_snvalid | acdbSNValid | 检查一个符号表名称的合法性 |
ads_ssadd | acedSSAdd | 向选择集里添加新的实体(或创建新的选择集) |
ads_ssdel | acedSSDel | 从选择集里删除一个实体 |
ads_ssfree | acedSSFree | 释放一个选择集 |
ads_ssget | acedSSGet | 获得(生成)一个选择集 |
ads_ssgetfirst | acedSSGetFirst | 决定那个对象被选中或支持(grip) |
ads_sslength | acedSSLength | 返回一个选择集中的实体的数量 |
ads_ssmemb | acedSSMemb | 检测一个实体是否是选择集里的一个实体(属于选择集) |
ads_ssname | acedSSName | 返回选择集里一个实体的实体名 |
ads_ssnamex | acedSSNameX | 描述选择集中对象是如何选中的 |
ads_sssetfirst | acedSSSetFirst | 选择或夹持对象 |
ads_tablet | acedTablet | 控制数据化仪的标定 |
ads_tblnext | acdbTblNext | 扫描指定的符号表,并返回这个表的下一个条目 |
ads_tblobjname | acdbTblObjName | 返回一个可传送给acedEntGet()或acedEntMod()的实体标识符,以定位实际实体 |
ads_tblsearch | acdbTblSearch | 扫描指定符号表,并以结果缓冲区链表方式返回查找到的指定符号 |
ads_textbox | acedTextBox | 找出包含文本实体的矩形框的对角坐标 |
ads_textpage | acedTextPage | 显示当前文本屏幕,在显示前先清屏 |
ads_textscr | acedTextscr | 显示当前文本屏幕 |
ads_tolower | acutTolower | 将字符转为小写 |
ads_toupper | acutToUpper | 将字符转为大写 |
ads_trans | acedTrans | 降一个点或一个位移从一个坐标系转换到另一个坐标系 |
ads_undef | acedUndef | 取消一个外部函数的定义 |
ads_update | acedUpdate | |
ads_usrbrk | acedUsrBrk | 检查用户有没有按下ESC建 |
ads_vports | acedVports | 为当前端口配置,返回一个端口描述器表 |
ads_wcmatch | acutWcMatch | 检测一个字符串是否与一个通配符模式相匹配 |
ads_xdroom | acdbXdRoom | 返回一个实体还能容纳的扩展数据的内存,一个实体做多只能容纳16k |
ads_xdsize | acdbXdSize | 返回扩展数据链表将占用的内存空间(字节) |
ads_xfromss | acedXfromSS | 将一个指定矩阵应用到指定的选择集上 |
ads_xstrcase | acdbXStrCase | |
ads_xstrsave | acdbXStrSave | |
ads_ssGetKwordCallbackPtr | acedSSGetKwordCallbackPtr | 获得并保存指向回调函数的指针 |
acs_ssGetOtherCallbackPtr | acedSSGetKwordCallbackPtr | |
ads_ssSetKwordCallbackPtr | acedSSSetKwordCallbackPtr | 提供指向一个关键字回调函数的指针 |
ads_ssSetOtherCallbackPtr | acedSSSetOtherCallbackPtr | 提供指向“其他”的当前回调函数的指针 |
二、ARX里定义的数据类型
ads_real | typedef double ads_real | 下面这些宏全包含在头文件string.h中 |
ads_point | typedef ads_real ads_point[3] | ads_point_set()宏,可以将一个点复制给另一个点 |
ads_name | typedef long ads_name[2] |
ads_name_set()宏,可以复制一个实体名或选择集名 ads_name_equal()宏,可以比较两个ads_name型的数据是否相同 ads_name_char()宏,可以将ads_name型的数据赋值为空 ads_name_nil()宏,可以检测这个实体名或选择集名为空 |
ads_binary |
struct ads_binary{ short clen;//块的长度,单位为字节 char *buf;//字符指针,表二元数据 }; |
用于处理二元扩展数据(xdata),这些数据可组成不同长度的集合块(chunks) |
三、结果类型码
RTNONE | 无结果值 | RT3DPOINT | 3D点(X,Y,Z) |
RTREAL | 实数值 | RTLONG | 长整数(32位) |
RTPOINT | 2D点(X和Y;Z=0.0) | RTVOID | 空符号 |
RTSHORT | 短整数(16位) | RTLB | 序列起始(用于嵌套序列) |
RTANG | 角度 | RTLE | 序列结束(用于嵌套序列) |
RTSTR | 字符串 | RTDOTE | 点(用于点对) |
RTENAME | 实体名 | RTT | LISP中的T(代表真) |
REPICKS | 选择集名 | RTNIL | LISP中的nil(代表空) |
RTORINT | 方位 | RTDXF0 | 用于DFX的组码0(只与acutBulidList()一起) |
四、函数返回结果类型代码
RTNORM | 用户输入一个有效值,表示函数调用成功 |
RTERROR | 表示函数调用失败 |
RTCAN | 用户取消了当前函数的运行过程,即按下了ESC |
RTREJ | AutoCAD拒绝一无效的要求 |
RTFAIL | AutoLISP链接失败 |
RTKWORD | 用户输入一个关键字或任意文本 |
注:并不是全部ARX函数都如此,有特殊的函数值返回值不同(会有RTNONE或RTSTR返回值)
五、其他代码
#define TURE 1 | 表示为真 |
#define FALSE 0 | 表示为假 |
#define EOS | 表示字符中止的符号 |
#define PAUSE | 在命令参数中代表暂停 |
#define GOOD 1 | 表示真 |
#define BAD 0 | 表示假 |
六、用户输入控制位代码:由函数acedInitGet()先发控制
RSG_NUNULL | 不允许空输入 |
RSG_NOZERO | 不允许零值 |
RSG_NONEG | 不允许负值 |
RSG_OTHER | 允许任意输入 |
RSG_NOLIM | 不检测绘图界限,即使LIMCHECK为0 |
RSG_DASH | 当绘图带拖动功能的线或方框时,使用虚线 |
RSG_2D | 忽略3D点的Z坐标(只适用于acedGetDist()函数) |
七、对象捕捉编码及设置对象捕捉代码
// 获取捕捉模式 struct resbuf rb; acedGetVar(_T("osmode"), &rb) // 设置捕捉模式 struct resbuf *newsnap; newsnap = ads_bulidlist(RTSHORT, n, 0); acedSetVar(_T(osmode), newsnap); acutRelRb(newsnap);
acedSSGet函数的选择模式选项
值(选择模式) | 说明 |
NULL | 单点选择(如果制定了pt1)或者提示用户选择(如果pt1的值为NULL) |
# | 非集合选择模式(包括All、Last、和Previous选择模式) |
. | 用户选择模式 |
:? | 其他回调选择模式(Other callbacks) |
A | 全部选择 |
B | 框选模式 |
C | 窗交选择模式 |
CP | 圈交选择模式(选择多边形(通过在待选对象周围指定点来定义)内部或与之相交的多有对象) |
:D | 允许复制选择模式(Duplicates Ok) |
:E | 小孔中的所有实体(Everything in aperture) |
F | 栏选模式 |
G | 选择编组 |
I | 获得当前图形窗口中已经选择的实体(PickFirst 选择集) |
:K | 键盘回调选择模式(Keyword callbacks) |
L | 选择最近一次创建的可见实体 |
M | 指定多次选择而不高亮显示对象,从而加快对复杂对象的选择过程 |
P | 选择最近创建的选择集 |
:S | 单一对象选择模式 |
W | 窗口选择模式 |
WP | 圈围选择模式 |
X | 过滤选择模式 |