(defun c:R1 ()
(setq sel (ssget))
(setq Pt1 (getpoint “\n始点:”))
(setq Pt2 (getpoint “\n終点:”))
(command “._ROTATE” sel “” Pt1 “R” Pt1 Pt2 pause “” )
)
このコードは、選択したオブジェクトを、指定した始点と終点を通る軸を中心に、任意の角度で回転させるAutoCADのLISP関数です。
コードの各行の説明は以下の通りです。
- (defun c:R1 ():
- この行は関数の宣言です。
- 関数の名前は「R1」で、コマンド名も「R1」になります。
- (setq sel (ssget)):
- この行は、選択したオブジェクトのリストを変数「sel」に格納します。
(ssget)
関数は、選択したオブジェクトのリストを取得する関数です。
- (setq Pt1 (getpoint “\n始点:”)):
- この行は、始点座標を取得し、変数「Pt1」に格納します。
(getpoint "\n始点:")
関数は、ユーザーに始点座標を入力させます。
- (setq Pt2 (getpoint “\n終点:”)):
- この行は、終点座標を取得し、変数「Pt2」に格納します。
(getpoint "\n終点:")
関数は、ユーザーに終点座標を入力させます。
- (command “._ROTATE” sel “” Pt1 “R” Pt1 Pt2 pause “” ):
- この行は、選択したオブジェクトを、指定した始点と終点を通る軸を中心に、任意の角度で回転させます。
(command "._ROTATE" ...)
関数は、オブジェクトの回転を行うコマンド._ROTATE
を実行します。sel
は、回転するオブジェクトのリストです。""
は、回転するオブジェクトの基点の座標です。"R"
は、オブジェクトを回転させるためのオプションです。Pt1
は、始点座標です。Pt2
は、終点座標です。pause
は、コマンドプロンプトを一時停止させます。""
は、コマンドプロンプトの表示です。
関数の実行方法:
- AutoCADのコマンドプロンプトで「R1」と入力して Enter キーを押します。
- 回転するオブジェクトを選択します。
- 始点座標を入力します。
- 終点座標を入力します。
- 角度を入力します。
- Enter キーを押します。
具体的な説明は、以下のとおりです。
- (defun c:R1 ():
- この行は、関数の宣言です。
- 関数名は「R1」で、コマンド名も「R1」になります。
- 関数名は、AutoCADのコマンドプロンプトで入力する名前です。
- コマンド名は、関数名と同じ名前にする必要があります。
- (setq sel (ssget)):
- この行は、選択したオブジェクトのリストを変数「sel」に格納します。
(ssget)
関数は、選択したオブジェクトのリストを取得する関数です。- 選択したオブジェクトのリストは、オブジェクトのタイプや、オブジェクトの属性などによって異なります。
- (setq Pt1 (getpoint “\n始点:”)):
- この行は、始点座標を取得し、変数「Pt1」に格納します。
(getpoint "\n始点:")
関数は、ユーザーに始点座標を入力させます。- ユーザーは、X,Y座標を入力するか、または、オブジェクトをクリックして座標を指定することができます。
- (setq Pt2 (getpoint “\n終点:”)):
- この行は、終点座標を取得し、変数「Pt2」に格納します。
(getpoint "\n終点:")
関数は、ユーザーに終点座標を入力させます
コメント
コメント一覧 (10件)
こんにちは。ご記載のリスプについてお伺いいたします。
3D回転で支点を指定し、x.y.zの軸指定をし90度回転させることはできますか
こんにちは^^3D回転(3DROTATE)コマンドですと回転ギズモを選ぶことができないので無理だと思います
しかし、「ROTATE3D」というコマンドがありまして、こちらはメニューから回転軸を選ぶことができるので、これを使用してLISPを作成すればうまくいくと思いますよ(^^)v
ご回答ありがとうございます。
ROTATE3D というコマンドがありまして、こちらはメニューから回転軸を選ぶことができるので、これを使用してLISPを作成 といただいておりますが、そのリスプを作成いただくことは可能でしょうか?
あと 下世話な話ですがもし有料でしたら辞退いたします。
ありがとうございました。
はじめてコメントいただけたので簡単に作ったので良ければ大丈夫です^^
(defun c:RO3 ()
(setq sel (ssget))
(command-s “._ROTATE3D” sel “” “y” pause “90” )
)
こんな感じでLISPを組めばモデルが指定したY軸上の点で90度回転します
上の”y”を”x”や”z”にすればそれぞれの軸に変更できます
“90”の部分を変更すれば角度も変えれます
(setq sel (ssget))←これは最初に回転するオブジェクトを選択するLISPでROTATE3Dのコマンド内で使用しています
身勝手なお願いにお答えくださり誠にありがとうございます。
早速ロードしましたが、コマンド: RO3
オブジェクトを選択: もう一方のコーナーを指定: 認識された数: 3
オブジェクトを選択:
アプリケーション エラー: コマンド入力で送ったタイプが無効です。
; エラー: 不明な (command-s) の失敗。
となりました。使用キャドはメカニカル2012です
もし、ご都合がよろしければご教授のほど よろしくお願いいたします。
AutoCADメカニカル2012だとかなり古いので (command-s) という関数が使えませんね
(command-s) は割と最近実装されたので、昔のversionですと(command)というものが使えるはずです
-sを削除していただいてロードしなおしてみてください(*^^)v
ありがとうございます。
(defun c:RO3 ()
(setq sel (ssget))
(command “._ROTATE3D” sel “” “y” pause “90” )
)
このように修正しましたが
コマンド: RO3
オブジェクトを選択: もう一方のコーナーを指定: 認識された数: 178
オブジェクトを選択:
*キャンセル*
となりました。修正の方法が間違っているのでしょうか。
今一度 ご教授の程 よろしくお願いいたします。
(defun c:RO3 ()
(setq sel (ssget)) ; ユーザーに選択を促す
(if sel ; 選択セットがnilでない場合のみ処理を実行
(progn
(command “._ROTATE3D” sel “” “y” pause “90”) ; ROTATE3Dコマンドを実行
(princ “\nオブジェクトを回転しました。”) ; 成功メッセージを表示
)
(princ “\nオブジェクトが選択されていません。”) ; エラーメッセージを表示
)
(princ) ;
)
こんばんは~これならどうでしょうか?
私のCADでは一応動きました(;’∀’)
ありがとうございます。
大変お世話になりました。
これで解決とさせていただきます。
解決できてたら良いのですが(*^^)v
また何かありましたらコメントください