https://blog.csdn.net/webtracer/article/details/6962207
在Arx操作中,经常碰到要判断一个ARX是否被加载了,以及需要在程序中动态加载或者卸载一个ARX程序,于是封装了这几个函数
// 检查arx程序是否加载,格式“arxname.arx”,不要路径名
// 返回:RTNORM-已加载 RTERROR-没加载
int YgxAcadUtil::IsArxLoaded(const char* appName)
{
char tBuf[80];
size_t appL, tBufL, i;
int retCode;
struct resbuf* rb1, * rb2;
appL = strlen(appName);
for (rb2 = rb1 = acedArxLoaded(); rb2 != NULL; rb2 = rb2->rbnext) {
if (rb2->restype = RTSTR) {
retCode = RTNORM;
strcpy(tBuf, rb2->resval.rstring);
tBufL = strlen(tBuf);
if (appL != tBufL) retCode = RTERROR;
else {
for (i=0; i<appL; i++) {
if (toupper(appName[i]) != toupper(tBuf[i])) {
retCode = RTERROR;
break;
}
}
if (retCode == RTNORM) break;
else retCode = RTERROR;
}
}
}
acutRelRb(rb1);
return retCode;
}
// 不管arx有没有加载,都可以调用,appName为全路径或在CAD搜索路径范围内
// 正常-RTNORM
int YgxAcadUtil::ArxLoad(const char* appName)
{
char DriveName[_MAX_DRIVE],PathName[_MAX_PATH],FileName[_MAX_FNAME],Ext[_MAX_EXT];
_splitpath(appName, DriveName, PathName, FileName, Ext);
char szAppname[80];
sprintf(szAppname, "%s.%s", FileName, Ext);
if (RTNORM == YgxAcadUtil::IsArxLoaded(szAppname))
return RTNORM;
else
return acedArxLoad(appName);
}
// 不管arx有没有加载,都可以调用,格式“arxname.arx”,不要路径
// 正常-RTNORM
int YgxAcadUtil::ArxUnload(const char* appname)
{
if (RTNORM == YgxAcadUtil::IsArxLoaded(appname))
return acedArxUnload(appname);
else return RTNORM;
}
问题:
在AutoLISP中使用从ARX应用程序调用的某些AutoCAD®命令时(例如,ROTATE3D和MIRROR3D),将显示以下错误消息:
未知的命令
解决方案:
解决方案
发生此错误是因为ARX应用程序尚未加载到内存中。要解决此问题,您必须首先确定命令来自哪个ARX应用程序。请执行以下步骤:
输入 ARX 在命令行上,然后输入 ?在命令行上。将显示当前加载的所有ARX应用程序的列表。
运行要使用的命令。
再次,输入 ARX 在命令行然后 ?在命令行上。您可以查看列表,看看是否加载了任何新的ARX应用程序。
以下示例AutoLISP例程使用ROTATE3D命令并确定是否已加载关联的ARX应用程序。如果尚未加载ARX应用程序,则例程将加载应用程序。
;;示例AutoLISP代码的开头
(VL-负载-COM)
(setq acadObject(vlax-get-acad-object))
(setq Arxlist(vla-listarx acadObject))
(setq strArx(vlax-safearray-> list(vlax-variant-value arxlist)))
(if(=(member'“geom3d.arx”strArx)nil)
(arxload“geom3d.arx”)
)
(命令“cylinder”“0,0,0”“5”“20”)
(命令“rotate3d”“last”“”“x”“0,0,0”“19”)
(PRINC)
;;示例AutoLISP代码的结束
将创建所有已加载的ARX应用程序的列表。如果 geom3d.arx 文件未列出,将加载,并将创建并旋转3D圆柱体。
重要 :在尝试自定义AutoCAD之前,请务必备份所有文件。
文章评论