2
;;----------------=={ Add Objects to Block }==----------------;;
;;                                                            ;;
;;  Adds all objects in the provided SelectionSet to the      ;;
;;  definition of the specified block.                        ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;

(defun LM:AddObjectstoBlock ( doc block ss / lst mat )

    (setq lst (LM:ss->vla ss)
          mat (LM:Ref->Def block)
          mat (vlax-tmatrix (append (mapcar 'append (car mat) (mapcar 'list (cadr mat))) '((0. 0. 0. 1.))))
    )
    (foreach obj lst (vla-transformby obj mat))

    (vla-CopyObjects doc (LM:SafearrayVariant vlax-vbobject lst)
        (vla-item (vla-get-Blocks doc) (cdr (assoc 2 (entget block))))
    )
    (foreach obj lst (vla-delete obj))
    (vla-regen doc acAllViewports)

このタイプの構文が AutoLISP で使用されているのを見たのはこれが初めてです。

私は"LM:"実際に何を意味するのかについて何らかの説明を得ようとしています。

の使用"Ref->"も私にとって問題です。"Ref"は定義されていないようで、何らかの形でシステムの一部であるに違いないと思われますが、そのような"Ref->".

ローカル変数ssが でアクセスされるのはなぜ"LM:ss->"ですか?

ありがとうございました。

4

2 に答える 2

3

このタイプの構文は、AutoLISP/Visual LISP の構築ではありません。リーマックのスタンダードです。私は次のように理解しています。

"LM:" は実際には "Lee Mac" のショートカットを意味します ;)

(LM:ss->vla ss) データ型を選択セットから vla-object のリストに切り替える必要があります。ここで、選択セットは選択された要素のリストに似ていますが、vla-object ではなくエンティティ型として定義されています。おそらく (ssget) または (ssgetfirst) で取得できます

(LM:Ref->Def block) 参照に基づいてブロック定義を取得します。ここで、「LM:Ref->Def」は関数の完全な名前です。「Ref」は変数ではなく、関数名の一部です。

「LM:ss->」は、関数のパラメータとして定義された ss を使用するという意味ではなく、「LM:ss->vla」は関数の名前です。

于 2016-08-22T06:19:44.623 に答える