この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

クイック選択 or フィルタ →リスト
もし、ご検討いただける余裕がありましたら、
マクロ作成して頂けるでしょうか?

AutoCad LT 2019 を使用しています。
(2015以降でアドバイスいただけると助かります。)
特定のオブジェクトの抽出を行い、テキスト形式に
変換したマクロを作りたいと考えています。

<作業手順>
1.円 直径6、線 選択
 使用コマンド (qselect または filter)
2.listの保存先を一時的にデスクトップに設定
 使用コマンド (不明)
3.テキストへ変換
 使用コマンド (list)
4.listの保存先を元に戻す
 使用コマンド (不明)

以上ですが、どうすればよいかわからず、途方に暮れております。
ご検討のほど、よろしくお願いいたします。
  • Osos
  • 2019/05/21 (Tue) 23:14:44
Re: クイック選択 or フィルタ →リスト
いまいちやりたいことがわからないのですが
特に『2.listの保存先』の部分が自分にはまったくわからないです

円を選択してそのオブジェクト情報の一部又は全部をTXTファイルで
デスクトップに保存したいということでしょうか?

LTじゃ難しいかもしれないですね。

自分にはマルチテキストの編集エディタをnotepad等にしてlistの情報をコピペして
名前をつけて保存でデスクトップに保存するくらいしか思いつかないです。
これじゃ、普通にコピペするほうが早そうですもんねぇ

なんか解決策でもなんでもなくてすいません
  • chibi-tom
  • 2019/05/22 (Wed) 10:07:29
Re: クイック選択 or フィルタ →リスト
DATAEXTRACTIONコマンドで出来ると思います。
  • zukki-
  • 2019/05/22 (Wed) 10:37:23
Re: クイック選択 or フィルタ →リスト
と思ったのですが、LTに無いみたいです。
  • zukki-
  • 2019/05/22 (Wed) 10:57:40
Re: クイック選択 or フィルタ →リスト
chibi-tom様、zukki-様
お返事くださってありがとうございます)^o^(

ご指摘通りです。
DATAEXTRACTIONコマンド→LTにはありませんでした。

説明がうまくできていなかったかもしれないので、もう少しコメントを付け加えさせてください。
下記をマクロで作りたいです。
1.情報の欲しい特定のオブジェクトを選択
 (図面ファイルに対して、クイック選択か、フィルタを使い、例えば、φ6、線など外形線だけが選択された状態にする。)
2.ログファイルの場所を一時的にデスクトップに変更。
3.listコマンドで、オブジェクト情報をデスクトップに出力する。
4.ログファイルの場所を元に戻す。

<ログファイルの場所>
コマンドプロンプト欄のオプション→
ファイルタブ
→ログファイルの場所 ここにlogファイルが保存されます。
LOGFILENAME
で調べることができるのですが、
"C:\Users\[ユーザー名]\appdata\local\autodesk\autocad lt [バージョン]\r**\jpn”
のようなフォルダになっています。
listで出力すると、図面ファイル名にランダムな値が追加されたlogファイルが出来上がります。
この場所を一時的デスクトップにして、listファイルがデスクトップにできるようにしたいです。

<マクロを作成しようとしたときに起こっている問題点>
・コマンドだけで、クイック選択、フィルタを組み込む方法がわからない。
 (ダイアログ ボックスが出てしまう)
・コマンドのログファイルアドレス名(**.log)をクリップボードに保存し、Excelに戻り値としたいが、方法がわからない
 ・クリップボードにアドレスをコピーするためのショートカットキーの送り方がわからない
 ・その対策として、デスクトップに一時的に保存することを思いついたが、ログファイルの場所の変更の仕方が分からない。
  • Osos
  • 2019/05/22 (Wed) 12:32:27
Re: クイック選択 or フィルタ →リスト
参考までに

円の直径と中心座標をマルチテキストにしてメモ帳(notepad)で開くマクロです。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),copy;円を選択:^X\non;@;;non;@;non;@;erase;p;;setenv;to;1,,,)$(nth,$(getenv,to),,undo;be;dist;nea;@;cen;@;id;cen;@;setenv;to;2,,)$(nth,$(getenv,to),,,;d1;$(*,$(getvar,distance),2);;p1;$(getvar,lastpoint);;to;3,)$(nth,$(getenv,to),,,,-mtext;@;@;直径:$(getenv,d1);座標:$(getenv,p1);;mtexted;notepad;_mtedit;l;undo;e;u;^Csetenv;to;0)^M

1.マクロ起動
2.円を選択
3.メモ帳が起動するので名前をつけて保存(保存する名前、場所を指定する)
4.メモ帳の終了

以上で、保存した場所にtxtファイルができていると思います。

lt2019で確認です
  • chibi-tom
  • 2019/05/22 (Wed) 12:43:59
Re: クイック選択 or フィルタ →リスト
入れ違いでした、失礼しました
全然違いましたね
  • chibi-tom
  • 2019/05/22 (Wed) 12:47:03
Re: クイック選択 or フィルタ →リスト
ちなみに
>・コマンドだけで、クイック選択、フィルタを組み込む方法がわからない。
 (ダイアログ ボックスが出てしまう)
これはマクロでは無理なはずです。
(必ずダイアログボックスが開く)

また、LOGFILENAMEも読み込み専用なので変更できないかと思います。

なので、ご希望の動作はマクロでは難しいのではないでしょうか?
  • chibi-tom
  • 2019/05/22 (Wed) 12:54:19
Re: クイック選択 or フィルタ →リスト
今一つやりたいことが分からないのですが、
リストの情報をエクセルで分析するのであれば、最新のログファイルを見つけて開くVBAマクロで
作ればいいのでは?

・コマンドだけで、クイック選択、フィルタを組み込む方法がわからない。
 (ダイアログ ボックスが出てしまう)
これはdieselマクロでは無理っぽいです、selectsimilarとか使えば行けるのかはわかりませんが。
  • zukki-
  • 2019/05/22 (Wed) 12:54:50
Re: クイック選択 or フィルタ →リスト
それかシステム変数qaflagsを6にして履歴がそのまま流れるようにしてcopyhistコマンドをして
エクセルにctrl-vでlistの情報は取れます、行数の制限があります、500ぎょうぐらい?

事前にオブジェクト選択

^C^C$M=id;;qaflags;6;list;p;;copyhist;$(getvar,qpflags)^M

エクセルでctrl-v

一番簡単なのはこんな流れだと思います。
ボタン一つでやるとなると選択の部分があるのでremocon級のものが必要かな。
  • zukki-
  • 2019/05/22 (Wed) 13:56:45
Re: クイック選択 or フィルタ →リスト
chibi-tom様、zukki-様
今回も、早急にお返事くださってありがとうございます)^o^(

chibi-tom様
こんなこともできるんですね!素晴らしいです!(^^)!
選択した円の直径と座標を1個ずつ取りたい時があるので、
このマクロ、すごく重宝します。

LOGFILENAMEの最後に出てくる読み取りの意味が分からなかったので、
大変勉強になりました!

zukki-様
今まで、何冊もAutoCadの本を読みこんできたつもりでしたが、
copyhist 初めて知りました(^^)!
LOGFILENAME後にcopyhist でlogファイルのアドレスを入手すれば、
欲しい情報がとれそうです。

qselect と filterを使いたかったのは、必要な外形だけ取りたかったからです。
1つのCADに複数の部材レイアウトをいれています。
各部材に外形線、中心線、寸法、テキストを別々のレイヤに保存しています。
取り出したいオブジェクトは優に1万を超えてしまいます。
寸法なども出ると。。。と思ったのですが、もう少し考えてみます。

ありがとうございました。
  • Osos
  • 2019/05/22 (Wed) 15:15:37
Re: クイック選択 or フィルタ →リスト
logfilepathで、ログファイルの保存場所が変更出来ます。
  • 、Lon
  • 2019/05/22 (Wed) 21:36:23
Re: クイック選択 or フィルタ →リスト
大量のオブジェクトを処理したいのでしたら、
DXF出力して、それをExcel で読み込み、
VBAでゴリゴリやるのが、手っ取り早い方法かも。
  • 、Lon
  • 2019/05/22 (Wed) 21:47:47
Re: クイック選択 or フィルタ →リスト
、Lon様まで!
logfilepathありがとうございます(*^^*)
確かにパスの変更を促されました!


皆さん、暖かく見守ってくださってありがとうございます
少しまとめてみました。

<LOGFILENAMEを変更したかった理由>
・バージョンによって保存先が変わる
・余計なコメントを作業者に見せたくない、入力させたくない
・自動でlistコマンドの内容を入手したかった

<頂いた内容から考えた作業の流れ>

・円情報入手
 実際に座標と直径を直接調べたい円が10点ほどあるので
 chibi-tom様に教えていただいたマクロを実行

・List用掃き出し
1.作業者があらかじめ手作業で情報の欲しいオブジェクトをfilter、qselect等で選択
 ~マクロ開始~
(2.可能ならundo機能でマークをつける)
3.zukki-様に教えていただいたcopyhistマクロを使用(選択範囲はpで前回のオブジェクトを取得)
  LOGFILENAMEでコマンドラインにパスを出すをマクロの末尾に追加する
4.Excel VBAでクリップボードを解析し、パスを入手
(5.可能ならundo機能でマークのポイントまで履歴を戻しておく)
 ~マクロ終了~
マクロよりも、Excelから情報を発信するスクリプトになりそうな気がしてきました。

<実はこの先があるのですが、マクロではどうしようもできないように思えていたので
依頼から省かせていただいていました。もう少し作戦を考えたいと思っています>
・Excel、CAD連動
 オブジェクトの座標を調べられるように、listファイルをExcelに変換、編集
 オブジェクトのid等を取得しハンドルできるようにidを取得
 ハンドルしたオブジェクトを操作し、不備を編集する
 ハンドルできない場合は、一から考え直す必要があるかもしれないが、
 設計時にグループ機能をうまく使って何とかオブジェクトを操作できるようにする

皆さんのおかげで、次、CADに盛り込むのが楽しみです。ワクワクしてきました!(^^)!
本当に、いろいろなご提案、ありがとうございます!
  • Osos
  • 2019/05/22 (Wed) 23:02:32
Re: クイック選択 or フィルタ →リスト
>実際に座標と直径を直接調べたい円が10点ほどあるので
最後の^Cを削除すれば続けて選択できますよ

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),copy;円を選択:^X\non;@;;non;@;non;@;erase;p;;setenv;to;1,,,)$(nth,$(getenv,to),,undo;be;dist;nea;@;cen;@;id;cen;@;setenv;to;2,,)$(nth,$(getenv,to),,,;d1;$(*,$(getvar,distance),2);;p1;$(getvar,lastpoint);;to;3,)$(nth,$(getenv,to),,,,-mtext;@;@;直径:$(getenv,d1);座標:$(getenv,p1);;mtexted;notepad;_mtedit;l;undo;e;u;setenv;to;0)^M

終了はESCキーになります。
  • chibi-tom
  • 2019/05/23 (Thu) 09:25:24
Re: クイック選択 or フィルタ →リスト
chibi-tom様!
とても素晴らしいマクロありがとうございます!

Excelを操作しているみたいに快適で感激です!(^^)!

これで、かなり時間が短縮できそうなので、毎回ものすごく重宝すると思います。
と言いつつ、時間の調整がつかず、今になってしまいました…(__)
  • Osos
  • 2019/05/23 (Thu) 22:42:15
Re: クイック選択 or フィルタ →リスト
良かったです

余計なお世話かもしれないですが

このように数字だけに修正、マルチテキストエディタでコピーしてExcelで貼り付ければ
メモ帳にする必要も無く保存工程が省略できそうですが

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),join;円を選択(R-Clickで終了):^X\$M="""$(if,$(getvar,CMDACTIVE),;select;non;@;non;@;;setenv;to;1,^Csetenv;to;0)""",,,)$(nth,$(getenv,to),,undo;be;dist;nea;@;cen;@;id;cen;@;setenv;to;2,,)$(nth,$(getenv,to),,,;d1;$(*,$(getvar,distance),2);;p1;$(getvar,lastpoint);;to;3,)$(nth,$(getenv,to),,,,-mtext;@;@;$(getenv,d1);$(getenv,p1);;_mtedit;l;undo;e;u;setenv;to;0)^M

1.マクロ起動
2.円を選択(右クリックで終了)
3.マルチテキストエディタが起動するのでコピー
4.Excelで貼り付け

自己満足で『右クリックで終了』の機能追加しました。

作業性が違ってたらスルーしてください
  • chibi-tom
  • 2019/05/24 (Fri) 08:47:55
Re: クイック選択 or フィルタ →リスト
chibi-tom様!
追加でご提示くださって、ありがとうございます!

作ってくださったデータを試してみました!
残念なことに、私の環境ではマルチテキストエディタが立ち上がりませんでした。
もしかしたら、何か環境の違いがあるのかなと思っています。

最終行が、
----------------------------
円を選択(R-Clickで終了):

コマンド:setenv
変数名を入力:to
値<0>:0
----------------------------
となりました。

せっかくのご厚意を無駄にしたくはないので、もう少し試してみようと思います。
ありがとうございます(^^)
  • Osos
  • 2019/05/24 (Fri) 21:32:57
Re: クイック選択 or フィルタ →リスト
すいません

自分は普段mtexted=OldEditorで作業しているのですが、確認してみたらマクロ終了後にmtextedの値が『OldEdnal』と
何かわからない値に変わってしまっていました。

Ososさんが何のエディタを使っているかわかりませんが
たぶん、それが原因だと思います。

修正できたらまた投稿します。
  • chibi-tom
  • 2019/05/27 (Mon) 09:47:39
Re: クイック選択 or フィルタ →リスト
修正してみました。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;mtd;$(getvar,mtexted);join;円を選択(R-Clickで終了):^X\$M="""$(if,$(getvar,CMDACTIVE),;select;non;@;non;@;;setenv;to;1,^Csetenv;to;0)""",,,)$(nth,$(getenv,to),,undo;be;dist;nea;@;cen;@;id;cen;@;setenv;to;2,,)$(nth,$(getenv,to),,,;d1;$(*,$(getvar,distance),2);;p1;$(getvar,lastpoint);;to;3,)$(nth,$(getenv,to),,,,-mtext;@;@;$(getenv,d1);$(getenv,p1);;mtexted;internal;_mtedit;l;undo;e;u;mtexted;$(getenv,mtd);setenv;to;0)^M

マクロ起動前にmtextedの値が普段使っている値になっているか確認してから使ってください。

関係ないけど『OldEdnal』って何だろう?
OldEditorとinternalが混ざってるみたいだけど、不思議です。
  • chibi-tom
  • 2019/05/27 (Mon) 10:09:44
Re: クイック選択 or フィルタ →リスト
マルチテキストエディタは初期設定のままです。

コマンド:
MTEXTED

MTEXTED の新しい値を入力、または .=なし <"Intepad">: *キャンセル*

がでましたので、「.」を入力したら、うまくいきました。
一瞬でわかるので、ほかの用途にも広げられそうで、本当に助かります!
何度もご対応してくださり、本当にありがとうござます!
  • Osos
  • 2019/05/27 (Mon) 12:31:31

返信フォーム






プレビュー (投稿前に内容を確認)