LISPで簡単な方法でコピーと回転

このブログの最後のエピソードで指摘した.NETの例とは対照的に、オブジェクトのコピーと回転に使用されるLISPコマンドの簡単な例を次に示します。

 (defun c:copyrotate(/ slset pt1 pt2)(プロンプト「コピーして回転するエンティティを選択:」)(setq sset(ssget))(setq pt1(getpoint "Specify copy base point:"))(terpri)(setq pt2 (getpoint pt1 "Specify copy second point:"))(terpri)(command ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw")(setq pt2(getpoint "Specify rotate base point : "))(terpri)(コマンド" .rotate "sset" "pt2))

さて、それは短いプログラムです!上で述べたように、この「コマンド」は移動コマンドと回転コマンドを1つのコマンドに結合します。

コメント付きの同じプログラム:

LISPでは、セミコロンはコメント行をマークするため、その後は何も処理されません。

(defun c:copyrotate(/ slset pt1 pt2)
;コマンド関数「copyrotate」を定義します
(「コピーおよび回転するエンティティを選択:」というプロンプトが表示されます)
;コマンドラインでユーザーにプロンプトを表示する 
(setq sset(ssget))   
;オブジェクトを選択するようにユーザーに要求する      
;オブジェクトを含む変数は「セット」です
(setq pt1(getpoint "Specify copy base point:"))(terpri)
;コピーの基点「pt1」を取得
(setq pt2(getpoint pt1 "Specify copy second point:"))(terpri)
; 2番目の点「pt2」をコピー
(コマンド ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw")
;オブジェクトを所定の位置にコピーし、前に移動します…;新しくコピーして回転する最も簡単な方法 作成されたオブジェクトのグループ
(setq pt2(getpoint "Specify rotate base point:"))(terpri)
;回転の基点を取得...補足として、
;回転の中心として、元のコピーの基点を使用したい
;これを行うには、単に「;(setq pt2」の上の行を削除またはコメント化します
(コマンド ".rotate" sset "" pt2)
;以前に移動したグループを回転
)
;関数を閉じる

関数の使いやすさを改善するために、「while」ループを追加し(より多くの選択を要求し続けるため)、角度オプションを指定し、オブジェクトスナップまたはオルソをオン/オフにするなどを行うことができます。

LISPルーチンは多すぎますか?

これを提示したので、LISPルーチンが過剰になる可能性がある多くのケースがあることをお伝えします。関数間のデータの「操作」を必要としない一連のコマンドを単に実行している場合、またはデータの入力が一貫している場合、メニューマクロはLISPよりも効率的です。ただし、メニューマクロは選択肢を使用して設計することはできず、エラーを処理できないため、「壊れやすい」、つまり簡単に壊れる可能性があります。私の推薦?これがハイブリッドのビットです。1行のLISPルーチンです。

* ^ c ^ c(コマンド「選択」一時停止「コピー」「p」「」「@」「@」「移動」「p」「」一時停止「回転」「p」「」「@」一時停止)

このシンプルでありながらエレガントなLISPの「マクロ」は、自動プログラムの繰り返し(* ^ c ^ c)が追加された上記のプログラムとまったく同じように機能し、洗練されたプログラムの動的なグラフィカルユーザーフィードバックをすべて提供します。 CUIインターフェースを使用してメニューの1つにアイコンを追加し、上の行をコマンド文字列にプラグインするだけで、非常に優れたコピー/回転機能を使用できます。

仕事に適したツール

BricsCADでグリップを使用し、右クリックしてすべてのオプションを切り替えるのは同じくらい簡単だと思っているかもしれません。私の返答は、私が(本当に)古い学校であることを思い出させることです。Gripsを頻繁に使用していますが、Escキーが常にキーボードの乱用で死ぬ最初のキーであることも知っています(大丈夫ですが、そうではありません)。ここでの主なポイントは、ジョブに適切なツールを使用していることを確認することです。.NETアプリケーションには確かに有効な用途がありますが、クリーンな作業を行うことができる場合は、コンパイルされたコードのページを書くことができません。 LISPの数行。

うまくいけば、この紹介はあなたの興味のピークを迎えました。 LISPの世界に飛び込んでいくと、役立つヒントや提案が見つかると思います。覚えておいてください、それはすべて、設計作業を迅速かつ正確に行うことです。 BricsCADに組み込まれた機能を使用して自分のやり方で動作させるよりも良い方法は何ですか?