明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2687|回复: 24

aardio以com方式开发autocad的库(补充智能提示)

[复制链接]
发表于 2021-8-28 17:02 | 显示全部楼层 |阅读模式
本帖最后由 guangdonglbq 于 2021-9-23 11:36 编辑

    当前的aardio版本已含一个简单的AutoCAD开发库,但缺少智能提示,现予以补充。
    目前补充了智能提示功能的开发库,对写形如:acad.ActiveDocument.ActiveSpace.AddLine(StartPoint, EndPoint)这样,从acad程序到最终操作层的代码的情况,可以实现智能提示,但形如以下的代码,则未实现智能提示:
var  actModel=acad.ActiveDocument.ModelSpace;
               actModel.AddLine(pt1,pt2)
   未能确认是什么原因。
   现把补充了智能提示功能的开发库及相关整理的过程资料都发出来,有兴趣的朋友可以一起升级完善相关功能。
   2021年09月23日升级完善,有需要的朋友可重新下载。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-8-5 06:04 | 显示全部楼层
guangdonglbq 发表于 2022-8-4 22:47
AppendOuterLoop参数应该用数组,但,照vba手册抄了一下,下面的代码也不成功。
    import com.acad;
...

谢谢你的回复!
我偿试了几种方式转换数据类型,都不成功,也按VBA手册代码试过,也不行,所以才发贴请教!我看了aardio使用手册上,估计是“COM与aardio间的数据类型转换”这一块的问题,但水平不够,看的不太明白。
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-13 16:53 | 显示全部楼层
本帖最后由 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 22:47 | 显示全部楼层
旧事阑珊 发表于 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[1] = cad.ActiveDocument.ModelSpace.AddCircle(center, radius);
        outerLoop[2] = cad.ActiveDocument.ModelSpace.AddCircle({2;2;0}, radius);   
        hatchObj.AppendOuterLoop (outerLoop);
        hatchObj.Evaluate();
        cad.ActiveDocument.Regen();

暂时未能解决这个问题
发表于 2021-8-29 14:56 | 显示全部楼层
同一版本打开多个cad,指定特定cad的问题解决了吗?
 楼主| 发表于 2021-8-29 15:44 | 显示全部楼层
陨落 发表于 2021-8-29 14:56
同一版本打开多个cad,指定特定cad的问题解决了吗?

我没偿试,只是有个想法:lisp调用时,想办法发送程序窗口句柄hwnd;在aardio中,通过hwnd调用autocad。不知道是否可行。
发表于 2021-8-29 21:28 | 显示全部楼层
guangdonglbq 发表于 2021-8-29 15:44
我没偿试,只是有个想法:lisp调用时,想办法发送程序窗口句柄hwnd;在aardio中,通过hwnd调用autocad。 ...

那你可以研究一下。通过HWND是无法获取到com接口的。我尝试过通过ROT获取,但是这也是一条死路。这个问题aardio作者也回复过我,他的建议跟其他人一样:自己建立一个ROT,那就有点复杂而且不方便了。
发表于 2021-11-5 09:48 | 显示全部楼层
想问一下 这个智能提示,支持vba自带的函数么
 楼主| 发表于 2021-11-9 15:25 | 显示全部楼层
leipengshang 发表于 2021-11-5 09:48
想问一下 这个智能提示,支持vba自带的函数么

vba用的就com。
发表于 2021-11-15 11:52 来自手机 | 显示全部楼层
aardio必须赞 国产语言的先锋,铁杆支持!。
发表于 2021-11-15 12:00 来自手机 | 显示全部楼层
aardio很好 很有特点,也希望能早日摆脱匹马打天下的模式
发表于 2021-11-15 21:26 | 显示全部楼层
要是能不生成exe,而是像c#那样生成dll文件在cad环境下运行,是不是能替代c#用作一种开发方式?
 楼主| 发表于 2021-11-16 06:57 | 显示全部楼层
liuyj 发表于 2021-11-15 21:26
要是能不生成exe,而是像c#那样生成dll文件在cad环境下运行,是不是能替代c#用作一种开发方式?

不能生成dlll。
现在也是一种开发方式了。
看场合使用就好,我现在就在用aardio的com结合lisp写程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 23:56 , Processed in 0.367537 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表