ホームページ > 記事 > コンピューターのチュートリアル > CAD 用の Lisp プログラムの書き方を独学する
2 つのコマンド: Hide と show を作成しました。
簡単に書きましたが、機能は未完成ですので、お好みに合わせて使ってください。
次のコードをコピーして acad.lsp を作成し、CAD インストール ディレクトリの最初の階層フォルダーに配置すると、自動的にロードされます。; コマンド ラインに hidden コマンドを入力し、グラフィック要素を選択すると、選択されていない要素が非表示レイヤーに変更されます。
(defun C:hidsel(/ すべて;すべてのプリミティブ#xxs;非隠蔽プリミティブ
yc;プリミティブを非表示
ンナムダット)
(setvar "CMDECHO" 0); コマンド echo をオフにします
(command "_layer" "n" "一時的に非表示にするレイヤ""")(command "_layer" "off" "一時的に非表示にするレイヤ" "")
(setvar "CMDECHO" 1)
(setq all (ssget "x")); すべて選択
(setq xs (ssget)); 非表示でないプリミティブを選択します
(setq n -1 yc all); 隠れプリミティブの操作
(繰り返し (sslength xs)
(setq n ( n 1))
(setq nam (ssname xs n)); N 番目のプリミティブの名前を返します
(setq yc (ssdel nam yc))
)
(setq N -1);隠す
(繰り返し (sslength yc)
(setq N ( n 1))
(setq nam (ssname yc n)); N 番目のプリミティブの名前を返します
(setq dat (entget nam));DATにはN番目の要素データが格納されます
(entmod (subst (cons 8 "一時的に非表示のレイヤー") (Assoc 8 dat) dat)); yc コレクションを非表示にする
)
(setq all nil xs nil yc nil n nil nam nil dat nil); データ占有メモリをクリア
(王子)
)
;すべてのプリミティブを表示
(defun c:shoal(/ all n nam dat)
(setq all (ssget "x")); すべて選択
(setq N -1);隠す
(繰り返し (sslength すべて)
(setq N ( n 1))
(setq nam (ssname all n)); N 番目のプリミティブの名前を返します
(setq dat (entget nam));DATにはN番目の要素データが格納されます
(entmod (subst (cons 8 "0") (Assoc 8 dat) dat)); yc コレクションを非表示にする
)
(setvar "CMDECHO" 0)
(コマンド "パージ" "LA" "レイヤーを一時的に非表示" "Y" "Y" """)
(setvar "CMDECHO" 1)
(setq all nil n nil nam nil dat nil); データ占有メモリをクリア
(王子)
)
CADのLispの機能は何ですか?使い方は?詳しく理解できれば加点
Lisp 自体は CAD に属する開発プログラムであり、いくつかの簡単な関数計算を提供し、残りはすべて autocad の描画機能に使用されます。 Lisp プログラムはデータベースのストアド プロシージャに似ており、CAD グラフィックをバッチで処理および描画できます。
LISPのロード
1. APPLOAD コマンドを使用して、ロードする LISP ファイルを見つけてロードします。
2. LISP ファイルをファイル マネージャーから ACAD のグラフィックス ウィンドウにドラッグするか、ロードすることができます
3. コマンドライン(load "c:\\temp\\xxx.lsp")をロードした後に使用することもできます。パス名は実際のパスを入力してください。
別: LSP プログラムの場合、(defun に続くのはコマンドまたは関数です。通常、プログラムにはプロンプトが必要です。そうでない場合、識別子 c: に続く単語は、ACAD で使用できるコマンドです。コマンド: 直接入力して実行します。
CAD で複数の LISP 言語をプログラムする方法
AutoLISP 言語は、通常の LISP 言語をベースに、CAD アプリケーションに適した多くの機能を拡張したプログラミング言語です。これは解釈値言語であり、速度が遅く、秘密にしておくことが困難であり、任意のテキスト編集ソフトウェアで編集でき、プレーン テキスト形式で保存できます。例えば:###
(setq i 1); つまり、コード i の値は 1AutoLISP 言語のすべてのコンポーネントは関数の形式で与えられ、ステートメントの概念やその他の文法構造はありません。 AutoLISP プログラムを実行するということは、いくつかの関数を実行してから他の関数を呼び出すことを意味します。例えば:###
(setq pt1 (getpoint "\n中心の挿入点を選択してください"))
(command "CIRCLE" pt1 100); この挿入ポイントに半径 100 の円を描くように命令します。
AutoLISP はデータとプログラムを統一したテーブル構造で表現するため、プログラムをデータとして処理したり、データをプログラムとして実行したりすることができます。例: 直線、始点座標' (0 0)、終点座標' (1000 0)、レイヤー 0、色 1 [赤] これは直線のデータです。これを実行する方法は次のとおりです。次のようなプログラムコード:
(entmake (リスト '(0 . "LINE") '(8 . "0") '(62 . 1) '(10 0 0) '(11 1000 0)))
データを視覚的に表示することも、AutoCAD のコマンド ラインにデータを貼り付けて、上に必要な直線を描くこともできます。
AutoLISP 言語におけるプログラムの実行プロセスは関数値を処理するプロセスであり、関数の機能は関数値を処理するプロセスで実現されます。 AutoCAD では、すべてのオブジェクトは無数の点で構成されていると考えることができ、各点は独自の座標を持ち、これらの点の値を計算し、得られた値に基づいて判断するのが関数の動作です。
AutoLISP 言語の主要な制御構造は再帰的です。再帰を使用すると、プログラミングがシンプルになり、理解しやすくなります。例えば:###
(setq &k1 (entsel)); オブジェクトを選択
(setq &k1 (car &k1)); プリミティブの抽出
(setq #g1 (entget &k1)); 属性リストの取得
(setq c0 (cdr (assoc 0 #g1))); プリミティブ名を取得します
上記を一つずつ書くと次のように書けます:
(setq c0 (cdr (assoc 0 (entget (car (entsel)))))); シンプルでわかりやすい
autolisp はシンプルで簡単なので、すぐに使い始めることができます。プログラムを書くと描画効率が大幅に向上しますので、有名なプラグイン「Tianzheng」を使うと描画が楽になります。
autolisp プログラムには座標の抽出などの欠点もあります。これはプリミティブ属性からしか抽出できません。この場合、制限が発生します。通常の座標 1 と -1 の座標値は同じです。ただし、グラフィックスの位置が異なるため、座標を計算するのは困難です。そのため、VLAX 関数を使用して座標値を抽出することをお勧めします。
以上がCAD 用の Lisp プログラムの書き方を独学するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。