TOP PAGE > 記事閲覧
移動(複写)して回転(lisp)
投稿日 | : 2015/11/16(Mon) 10:09 |
投稿者 | : アルサポ |
参照先 | : |
今回、移動して回転、複写して回転の2つのLISPを紹介します。
どちらも、2回コマンドを実行させるくらい、なんてことないと思うのですが、
何度も実行する機会が多いコマンドではないでしょうか?是非、勉強がてら試して見て下さい。
使い方は、
1.移動(複写)させたいオブジェクトを選択します。
2.基点を指示して、移動(複写)先を指示する。
3.回転する時に参照する角度を指示して、新しい角度を指示すれば完了。
使い方に関しては、普通に移動(複写)と回転を実行する順番なので、使いやすいと思います。
Re: 移動(複写)して回転(lisp)
投稿日 | : 2015/11/16(Mon) 10:11 |
投稿者 | : アルサポ |
参照先 | : |
;移動して回転
(defun C:MoveRotate (/ ss p1 p2 ang1 ang2)
(prompt "\nオブジェクトを選択:")
(setq ss (ssget))
(ssRedraw ss 3);選択したオブジェクトをハイライト表示
(setq p1 (getpoint "\n移動の基点を指示:"))
(setq p2 (getpoint p1 "\n移動先を指示:"))
(command "_MOVE" ss "" p1 p2)
(ssRedraw ss 3);選択したオブジェクトをハイライト表示
(setq ang1 (getangle p2 "\n回転する参照する角度を指示:"))
(setq ang2 (getangle p2 "\n回転する新しい角度を指示:"))
(command "_ROTATE" ss "" p2 (/ (* (- ang2 ang1) 180.0) pi))
(ssRedraw ss 4);選択したオブジェクトをハイライト表示解除
(princ)
)
;複写して回転
(defun C:CopyRotate (/ ss p1 p2 ang1 ang2)
(prompt "\nオブジェクトを選択:")
(setq ss (ssget))
(ssRedraw ss 3);選択したオブジェクトをハイライト表示
(setq p1 (getpoint "\n複写の基点を指示:"))
(setq p2 (getpoint p1 "\n複写先を指示:"))
(command "_COPYBASE" p1 ss "")
(command "_PASTECLIP" p1)
(command "_MOVE" ss "" p1 p2)
(ssRedraw ss 3);選択したオブジェクトをハイライト表示
(setq ang1 (getangle p2 "\n回転する参照する角度を指示:"))
(setq ang2 (getangle p2 "\n回転する新しい角度を指示:"))
(command "_ERASE" "_P" "")
(command "_PASTECLIP" "_R" (/ (* (- ang2 ang1) 180.0) pi) p2)
(redraw)
(princ)
)
;複数のオブジェクトを再描画(移動、複写共通して使用)
;mode:1 図形を表示、2 図形を非表示、3 図形をハイライト表示、4 図形をハイライト表示解除
(defun ssRedraw (ss mode / i )
(setq i 0)
(repeat (sslength ss)
(redraw (ssname ss i) mode)
(setq i (+ i 1))
);repeat
)
Test, just a test
Re: 移動(複写)して回転(lisp)
投稿日 | : 2017/03/28(Tue) 16:10 |
投稿者 | : たぬ |
参照先 | : |
JFRAF超初心者です。
いつもありがとうございます<(_ _)>
ここで質問すること、ご了承ください。
縦横比が違う縦断図(縦100、横500)を平面図(実寸mm)に並べて表示する時、
ブロック挿入する時に縦横比を合わせてみました。
すると文字や記号など、横にビローンと伸びてしまいます。
これをサクッと一発で調整できないものでしょうか?
どうか、宜しくお願いします。
Re: 移動(複写)して回転(lisp)
投稿日 | : 2017/03/29(Wed) 09:51 |
投稿者 | : アルサポ |
参照先 | : |
たぬさん、おはようございます。
縦断図の縦横比の問題ですが、私も同じように簡単に出来ないかと悩んでいるひとりです
文字に関しては、
AutoCADを使っていた時は「位置合わせ(justifytext)」で文字を動かさずに文字の挿入基点を変更する事が出来るので、
その後に文字の調整をしていましたが、
JDrafでは「位置合わせ(justifytext)」で挿入基点を変更すると文字も挿入基点に合わせて動いてしまうので、
簡単に調整することが出来ないでいます。
もっといい方法があるかもしれませんが、私であれば縦断帯は1段ごとにまとめて文字を調整し移動させる
方法をとると思います。
Re: 移動(複写)して回転(lisp)
投稿日 | : 2018/03/20(Tue) 23:03 |
投稿者 | : みなと |
参照先 | : |
すみません。質問させてください。
(ssRedraw ss 3);選択したオブジェクトをハイライト表示に掛かるところで
; エラー: 関数定義がありません:SS_REDRAW とエラーになります。
初心者です。
色々試してハイライト表示のところを消せば使えるのですが
やはりハイライト表示があった方が便利なので質問させてください。
CADはIJCADです。そもそもそれがダメでしょうか?
よろしくお願い致します。
Re: 移動(複写)して回転(lisp)
投稿日 | : 2018/03/21(Wed) 08:59 |
投稿者 | : アルサポ |
参照先 | : https://knowledge.autodesk.com/ja/search-result/caas/CloudHelp/cloudhelp/2016/JPN/AutoCAD-AutoLISP/files/GUID-4A4DCECD-E85A-4860-A58F-56B48227857F-htm.html |
みなとさん、おはようございます。
IJCADについて知らないのですが、
エラーについては「;複数のオブジェクトを再描画(移動、複写共通して使用)」
以下に書いた自作の関数「ssRedraw」が参照されていないようです。
解決するかわかりませんが、
参照されないのであれば「ssRedraw」を使わない方法として
「(ssRedraw ss 3);選択したオブジェクトをハイライト表示」の行を
(setq i 0)
(repeat (sslength ss)
(redraw (ssname ss i) 3)
(setq i (+ i 1))
)
に書きかえて実行してはどうでしょうか?
これでエラーになるようでしたらlispの関数「redraw」が
IJCADでは使えないのかもしれませんね。
Re: 移動(複写)して回転(lisp)
投稿日 | : 2018/03/22(Thu) 09:58 |
投稿者 | : みなと |
参照先 | : |
アルサポさん おはようございます。
ご返信ご回答ありがとうございます。
「ssRedraw」の部分を書き換えて実行してみました。
関数定義のエラーは出ませんでしたがハイライト表示がされずに
コマンドが実行されました。
やはりIJCADの問題かもしれないですね。
大変便利なコマンドでハイライト表示されないだけなので
このまま利用させてもらいます。
お手数お掛けして申し訳ありませんでした。
ありがとうございました。