aardio 文档

aardio 范例: AutoCAD:批量工作放进 LISP,减少进程间往返。此例不要求人工输入。

// AutoCAD:批量工作放进 LISP,减少进程间往返。此例不要求人工输入。
import com.cad;
var cad = com.cad();
if(!cad) error("无法连接 AutoCAD");

cad.Visible = true;
if(!cad.IsQuiescent()) error("请先结束 AutoCAD 当前命令");

var doc = cad.Documents.Add();
doc.SetVariable("INSUNITS",com.word(4));

// LoadLisp 支持模板;单个字符串模板参数是原样代码,数据应使用 lispValue 或数组。
cad.LoadLisp(`
(vl-load-com)
(defun c:aardioRow (/ model i item handles)
  (setq model (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
        i 0)
  (repeat <?= owner.count ?>
    (setq item (vla-AddCircle model (vlax-3d-point (* i 12.0) 0.0 0.0) 4.0))
    (setq handles (cons (vla-get-Handle item) handles) i (1+ i))
  )
  (princ (reverse handles))
  (princ)
)
`,{count=8},doc);
cad.SendCommand("aardioRow",,doc);

// SendCommand 通常同步,但交互/事件上下文可能异步;没有 LISP 业务返回值。
// 不用固定 sleep 或 IsQuiescent 充当此任务的完成回执,不在超时后重放绘图。
// 当前示例打印的句柄在 CAD 命令行中;需要程序化结果与恢复请用
// CreateLispTask / RunLisp,参见 tasks.aardio,不应从命令行文本猜测结果。
// 也不立即追加 ZoomExtents/Regen,避免在异步执行尚未结束时抢先操作。

Markdown 格式