用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: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 首字母不需要大写。 center,radius 等很多都少了var定义吧,0,0,0应为0;0;0这样子吧。 烟盒迷唇 发表于 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]