お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2010年2月7日日曜日

defun 関数(AutoCAD 2010)

自分で新たに作成する関数を定義する関数です。

使用例
(defun sym (<引数> / <ローカル変数>)
    
)

sym は自分で新たに作成する関数の名前です。
例えば、test にすると、AutoCAD 上 あるいは AutoLISP のプログラム内で (test) と入力すると実行されます。
また、c:test にすると、コマンドとして定義されることになります。そのため、AutoCAD 上で test と入力すると実行されます。AutoLISP のプログラム内では (c:test) と入力すると実行されます。

<引数> は関数を実行する時の引数です。

<ローカル変数>
ローカル変数とは、この関数の実行中にのみ設定される変数で、この関数が完了したあとは設定がなくなる変数です。(ローカル変数の逆は、グローバル変数です。)
例えば、以下の 2 つの例で違いを見てみましょう。

<例 1>
(defun c:test1 (/ pt1 pt2)
    (setq pt1 '(0.0 0.0 0.0))
    (setq pt2 '(100.0 100.0 0.0))
    (command "_.LINE" pt1 pt2 "")
    (princ)
)

<例 2>
(defun c:test2 ()
    (setq pt1 '(0.0 0.0 0.0))
    (setq pt2 '(100.0 100.0 0.0))
    (command "_.LINE" pt1 pt2 "")
    (princ)
)

例 1 の test1 コマンドを実行したあとは、変数 pt1 と pt2 が nil に戻ります。
例 2 の test2 コマンドを実行したあとは、変数 pt1 には (0.0 0.0 0.0) が、変数 pt2 には (100.0 100.0 0.0) が設定されたままになります。
(AutoCAD のコマンド ラインに !pt1 や !pt2 と入力することにより確認できます。)

ローカル変数であれば、他の関数実行時にその設定が影響することはありません。
グローバル変数は、他の関数で同じ変数名を使用していると、その設定が影響することがあります。

1 件のコメント:

  1. ローカル変数にしておくと、
    間違ってネィティブ関数名やユーザー定義関数名を変数に使ったとしても
    その定義関数内での問題にとどめる事ができるので、
    まだ関数名を覚えていない初心者には有効です。

    その定義関数内で間違って変数名として使った関数名を
    本来の関数として使う場合にはエラ-になるので間違いに気付き易い。

    返信削除