旧事阑珊 发表于 2022-8-8 16:19:47

用Aardio二次开发,如何在CAD中填充图形?

请教一下用Aardio做AutoCAD二次开发的大神!
我用Aardio想在AutoCAD中实现填充效果,但总是提示“对象数组无效”,不知哪里出了问题,代码如下:

patternName = "ANSI31"
PatternType = 0
bAssociativity = True
var hatchObj = cad.ActiveDocument.ModelSpace.AddHatch(PatternType, patternName, bAssociativity)
            
center = {0,0,0}
radius = 1
var outerLoop = cad.ActiveDocument.ModelSpace.AddCircle(center, radius)
            
hatchObj.AppendOuterLoop (outerLoop)

参照VBA 手册编写,也一样报错,估计是“COM与aardio间的数据类型转换”的问题,但是不知如何修正,有知道的大神请指教一下,谢谢!



jacenhe 发表于 2022-8-19 00:35:09

本帖最后由 jacenhe 于 2022-8-19 00:37 编辑

outerLoop 是 IDispatch 对象数组,要这样定义:

var outerLoop = com.SafeArray(9/*_VT_DISPATCH*/);
完整示例:
import com.cad
var cad = com.cad();
cad.Visible = true;

var patternName = "ANSI31";
var patternType = 0 ;
var hatchObj = cad.ActiveDocument.ModelSpace.AddHatch(patternType, patternName, true);

var outerLoop = com.SafeArray(9/*_VT_DISPATCH*/);
outerLoop = cad.ActiveDocument.ModelSpace.AddCircle({0;0;0}, 1);

hatchObj.AppendOuterLoop (outerLoop);
hatchObj.Evaluate();
cad.ActiveDocument.Regen(cad.acActiveViewport);另外 aardio 首字母不需要大写。

烟盒迷唇 发表于 2022-8-9 11:57:18

center,radius 等很多都少了var定义吧,0,0,0应为0;0;0这样子吧。

旧事阑珊 发表于 2022-8-9 16:21:51

烟盒迷唇 发表于 2022-8-9 11:57
center,radius 等很多都少了var定义吧,0,0,0应为0;0;0这样子吧。

应该不是这个原因,请教了几个朋友,他们用其它写法也是出这样的提示。这是其中一个朋友写的,也是一样提示错误。

   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();
页: [1]
查看完整版本: 用Aardio二次开发,如何在CAD中填充图形?