aardio以com方式开发autocad的库(补充智能提示)
本帖最后由 guangdonglbq 于 2021-9-23 11:36 编辑当前的aardio版本已含一个简单的autocad开发库,但缺少智能提示,现予以补充。
目前补充了智能提示功能的开发库,对写形如:acad.ActiveDocument.ActiveSpace.AddLine(StartPoint, EndPoint)这样,从acad程序到最终操作层的代码的情况,可以实现智能提示,但形如以下的代码,则未实现智能提示:
varactModel=acad.ActiveDocument.ModelSpace;
actModel.AddLine(pt1,pt2)
未能确认是什么原因。
现把补充了智能提示功能的开发库及相关整理的过程资料都发出来,有兴趣的朋友可以一起升级完善相关功能。
2021年09月23日升级完善,有需要的朋友可重新下载。 guangdonglbq 发表于 2022-8-4 22:47
AppendOuterLoop参数应该用数组,但,照vba手册抄了一下,下面的代码也不成功。
import com.acad;
...
谢谢你的回复!
我偿试了几种方式转换数据类型,都不成功,也按VBA手册代码试过,也不行,所以才发贴请教!我看了aardio使用手册上,估计是“COM与aardio间的数据类型转换”这一块的问题,但水平不够,看的不太明白。 本帖最后由 jacenhe 于 2022-2-13 16:55 编辑
自动提示的代码里有些语法错误,例如 -> 只是用来转义 . 不能写到代码里。
另外智能提示变量是全局有效的,最好加上前缀避免冲突干扰,例 !Documents. 可能带来问题。
如果基于 com.cad 扩展,也可以这样写:import com.cad;
class com.cad2{
ctor(...){
this = ..com.cad(...)
};
}
这样可以继承标准库所有的功能、同步更新,也可以任意修改扩展。
看了一下你代码里 GetAcCmColor 这几个函数是用不了的,
代码里不能用 -> 代替点,直接写 "AutoCAD.AcCmColor" 就可以。
而且他这个比较特别,必须加上版本号,com.cad 最新版本添加了一个 GetCadInterfaceObject 函数用于做这事。
然后 com.cad 添加了这几个函数:
namespace com;
class cad{
//.....其他代码省略
GetLayerStateManager = lambda() this.GetCadInterfaceObject("AutoCAD.AcadLayerStateManager");
GetAcCmColor = lambda( ) this.GetCadInterfaceObject("AutoCAD.AcCmColor");
GetSecurityParams = lambda() this.GetCadInterfaceObject("AutoCAD.SecurityParams");
}
测试了一下这样写就可以用了。
像 AutoCAD 这样复杂的接口,智能提示不能完全替代文档,如果把所有智能提示做起来工作量太大,建议加一些常用的就可以了。
旧事阑珊 发表于 2022-8-4 17:10
请教一下!我用Aardio想实现填充效果,总是提示“对象数组无效”,能否指点一二,填充用Aaardio如何写? ...
AppendOuterLoop参数应该用数组,但,照vba手册抄了一下,下面的代码也不成功。
import com.acad;
var cad = com.acad();
patternName = "ANSI31";
PatternType = 0 ;
bAssociativity = true;
var hatchObj = cad.ActiveDocument.ModelSpace.AddHatch(PatternType, patternName, bAssociativity);
center = {0;0;0};
radius = 1;
var outerLoop={};
outerLoop = cad.ActiveDocument.ModelSpace.AddCircle(center, radius);
outerLoop = cad.ActiveDocument.ModelSpace.AddCircle({2;2;0}, radius);
hatchObj.AppendOuterLoop (outerLoop);
hatchObj.Evaluate();
cad.ActiveDocument.Regen();
暂时未能解决这个问题
同一版本打开多个cad,指定特定cad的问题解决了吗? 陨落 发表于 2021-8-29 14:56
同一版本打开多个cad,指定特定cad的问题解决了吗?
我没偿试,只是有个想法:lisp调用时,想办法发送程序窗口句柄hwnd;在aardio中,通过hwnd调用autocad。不知道是否可行。 guangdonglbq 发表于 2021-8-29 15:44
我没偿试,只是有个想法:lisp调用时,想办法发送程序窗口句柄hwnd;在aardio中,通过hwnd调用autocad。 ...
那你可以研究一下。通过HWND是无法获取到com接口的。我尝试过通过ROT获取,但是这也是一条死路。这个问题aardio作者也回复过我,他的建议跟其他人一样:自己建立一个ROT,那就有点复杂而且不方便了。 想问一下 这个智能提示,支持vba自带的函数么 leipengshang 发表于 2021-11-5 09:48
想问一下 这个智能提示,支持vba自带的函数么
vba用的就com。 aardio必须赞 国产语言的先锋,铁杆支持!。 aardio很好 很有特点,也希望能早日摆脱匹马打天下的模式 要是能不生成exe,而是像c#那样生成dll文件在cad环境下运行,是不是能替代c#用作一种开发方式? liuyj 发表于 2021-11-15 21:26
要是能不生成exe,而是像c#那样生成dll文件在cad环境下运行,是不是能替代c#用作一种开发方式?
不能生成dlll。
现在也是一种开发方式了。
看场合使用就好,我现在就在用aardio的com结合lisp写程序。