このページについて | ||||||||||||||||||||||||||
このページは、mura's home の AutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
タイトルおよび質問内容は上記より引用しています。 引用した質問内容は、バックカラーが となっています。 当方の発言は、バックカラーが となっています。 その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています。 また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、 ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
|
エクセルでは、
ツール - マクロ - 新しいマクロの記述
一連の操作
ツール -
マクロ -
記録の終了
で、マクロが作成できますよね。
例えばX,Y方向でなく斜めの距離が5mになる面取りをしたい場合、面取りしたいA直線、B直線を選択、面取りする側を選択、交点Oから適当な円を描く、円とA、B直線との交点C、Dから同じ径の円を描き、交点Eと点Oを結ぶ、線分OEを距離2.5mで両側にオフセットする、A直線、B直線との交点同士を線分でつなぐ、その線分でA直線、B直線をトリムする、今迄の補助線を全て消す。
を記録出来れば、斜め距離が○mの面取りマクロ。
マクロをマクロと意識しないで作成出来るマクロとか試作されたりしたことありませんか。
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
http://www.mura.sh/bbs/wwwbbs.cgi?print+200007/00070096.txt
http://www.mura.sh/bbs/wwwbbs.cgi?print+200607/06070081.txt
http://www.mura.sh/bbs/wwwbbs.cgi?print+200007/00070097.txt
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
確かにエクセルの「マクロの記述」と”同様”のものが AutoCAD
にもあるといいですね。
エクセルのそれは確かに優秀なので、(それで値上げされなければ)
AutoCAD
にも搭載して欲しいと思いますが・・・
AutoCAD
には、コマンドラインがあるのがネックと思われます。
エクセルでは、入力された手順をマクロ(VBA)にうまく翻訳してくれるので、
「操作(コマンド)手順を記録したもの
≒ マクロ(VBA)」となりますが、
AutoCAD では、
「操作(コマンド)手順を記録したもの = スクリプト ≠
マクロ(VBA)」なので
単純な手順の記録ではマクロ(VBA)で使用できません。
翻訳エンジンの作成は簡単ではないでしょうが、それほど難しいとも思えません。
AutoCAD
のイベントを監視し、各コマンドに対応した翻訳ルーチンがあれば可能と思えますが。
#選択セットなどの扱いもあるので単純には無理か?
♪ユーザー入力した座標値などをそのまま翻訳するのではなく、
♪汎用性を持たせたユーザー入力書式で翻訳できれば、かなり嬉しい。
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除
>おそらく、誰もつくろうとは思わないでしょうね。(^^ゞ
書き込んだ手前、マクロではなくてVBA変換バージョンですが、作ってみました。
直線の作成のみVBAに変換できます。・・・完成させるのは無理です(笑)
コマンド1つでも、内部では結構多くの処理をしていることがわかります。
http://www.geocities.jp/kamegai2006/autocad/DownLoad_CMD2VBA.htm
上記の、CMD2VBAですが、
致命的なエラーが生じるので、警告メッセージを追加しました。
お手数ですが、ダウンロードされた方は旧バージョンは破棄して、
再度ダウンロード頂けますようお願い致します。
著作権者の許可を得ていないため削除
当方のレベルでは到底完成など不可能です(笑)
VBAのイベントのみでは必要な情報を取得できませんので、
直線のVBA変換も、イベントから判断してゴソゴソしています。
たとえ完成してもVBAでは処理速度が実用レベルではありません。
#複雑な境界のハッチを作成してみればおわかりになると思います
#Ver.0.30 をアップしました
著作権者の許可を得ていないため削除
VBAに搭載されている標準の機能だけでは、
エクセルの「マクロの記述」と”同様”のものに必要な情報を全て取得できません。
おっ?さんが指摘されたユーザーが入力した座標も同様で、
VBA側では(1)〜(4)の判別は出来ません。
lineコマンドを例に挙げると、
VBA側では始点の座標を直接取得できず、
最後に入力した座標(終点)しか取得できないので、
オブジェクトが作成された時に発生するイベント時に、
それが直線ならばVBA変換するという内容となっています。
エクセルの「マクロの記述」と”同様”のものを作成するには、
ユーザーが入力したクリック座標・コマンドラインに入力された内容、
ポップアップメニューでユーザーが選択した内容等を
全て取得する必要がありますが、現状のVBAでは、
ポップアップメニューでユーザーが選択した内容は取得できず、
取得できるのはシステム変数の
LASTPROMPT(コマンドラインで最後にエコー出力された文字列)や
LASTPOINT
(最後に入力された点を、現在の空間の UCS
座標値で格納)
など最後の入力しかないので不十分です。
よって、残念ながら完成させるのは無理というのが結論です。
ただし、これは当方のレベルでの話です。
メッセージフック?などの方法でAutoCADと同等の情報を取得できれば
何とかなりそうですが、当方にはその知識がありません。
さらに一番のやっかいは、
標準コマンドでVBAに搭載されていないメソッド(命令)が多くあることです。
たとえば、楕円の線上に、ディバイダ(DIVIDE)やメジャー(MEASURE)で
点を作成するのは簡単ですが、VBAに同等のメソッドはありません。
SendCommand
メソッドを使用すれば可能ですが、
始終点のどちら側から計測するかを簡単に指定できないなど問題があります。
これをSendCommand
メソッドを使用せず、VBAのみ実現するには
楕円積分が必要ですが、残念ながら当方ではお手上げです。
>Kamegai
さんは、それなりに動く物を作ったのですか?
ヘルプにあるサンプルコードに少し追加した程度のものです。
以下に画像などをアップしておきましたのでご覧下さい。
http://www.geocities.jp/kamegai2006/autocad/CMD2VBA_031-1.bmp
http://www.geocities.jp/kamegai2006/autocad/CMD2VBA_031-2.bmp
http://www.geocities.jp/kamegai2006/autocad/CMD2VBA_031-3.bmp
http://www.geocities.jp/kamegai2006/autocad/CMD2VBA_031.txt
米本家のDiscussion Groupsで検索したら見つけました。
"AutoCAD VBA Macro
Recorder"なる物があるようです。
#2Dのみ対応で有償ですが。
http://www.cadbow.com/
http://www.cadbow.com/getatour.php?productid=1
さらに追加情報。
Discussion
Groupsで"FreeVBAMacroRecorder"も見つけました。
以下の一番下にあります。
http://discussion.autodesk.com/thread.jspa?messageID=5200636
#かなり限られた機能の様ですが参考まで
著作権者の許可を得ていないため削除
http://www.cadbow.com/getatour.php?productid=1