Page 314 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼図面情報コピーとタグジャンプ mirror 17/3/22(水) 19:33 ┗Re:図面情報コピーとタグジャンプ mirror 17/3/23(木) 12:52 ┣Re:図面情報コピーとタグジャンプ いっち 17/3/26(日) 19:09 ┃ ┗Re:図面情報コピーとタグジャンプ いっち 17/3/26(日) 19:32 ┣Re:図面情報コピーとタグジャンプ いっち 17/3/26(日) 23:55 ┃ ┗Re:図面情報コピーとタグジャンプ mirror 17/3/27(月) 7:05 ┃ ┗Re:図面情報コピーとタグジャンプ いっち 17/3/27(月) 12:56 ┗Re:図面情報コピーとタグジャンプ いっち 17/4/1(土) 5:24 ┗Re:図面情報コピーとタグジャンプ mirror 17/4/1(土) 7:25 ┗Re:図面情報コピーとタグジャンプ いっち 17/4/1(土) 9:55 ┗Re:図面情報コピーとタグジャンプ mirror 17/4/1(土) 11:16 ┗Re:図面情報コピーとタグジャンプ いっち 17/4/1(土) 14:48 ─────────────────────────────────────── ■題名 : 図面情報コピーとタグジャンプ ■名前 : mirror ■日付 : 17/3/22(水) 19:33 -------------------------------------------------------------------------
Jw_cadのタグジャンプは、同一インスタンスを使う仕様ですが 図面情報コピーで取得できる文字列は、起動オプションとして利用可能です 従って、別のインスタンスを起動(多重起動)して開くことも可能ですので 同一図面内の図面参照についても、違ったアプローチが可能になります https://youtu.be/Uhsh99mGIsI |
図面情報コピーやタグジャンプを、あまり使われていない場合には 判り難いと思われますので、サンプルの動作説明を書き込んでおきます ツールのタスクトレイアイコンをマウスオーバーして表示されるメニューは 図面情報文字列(クリップボードデータ)を、履歴して列挙していきます 履歴しようとするデータが、既に履歴されている場合は排除します 従って、Jw_cadでの表示を変更して、図面情報コピーを行うと その図面情報文字列を、リストにして保持するようになっています サンプルでは レイヤファイル(*.jwl)を適用して、レイヤ表示を変更し画面拡大したあと (この時に、印刷範囲を変更しておくと、印刷範囲も変更が適用されます) マクロリストを表示して、図面情報コピーを実行し履歴を確認しています メニューから、図面情報文字列リスト内を選択すると 新たに、Jw_cadに起動オプションとして上記文字列を与えて起動しています 今回の動作は、同一ファイルを、表示を変更して多重起動しましたが 別ファイルであっても、同様に動作させることができます ツールでなくても、図面情報文字列を取得し、txtファイルなどのリストにし そのリストを利用して、Jw_cadを多重起動できるようにしておけば Windows 10の仮想デスクトップの切り替えを、組み合わせて使うことで 他図面・参照時の表示を、違ったアプローチで利用できるようになります |
▼mirrorさん: >ツールのタスクトレイアイコンをマウスオーバーして表示されるメニューは >図面情報文字列(クリップボードデータ)を、履歴して列挙していきます 不要になった履歴を消すのは、どのようにすれば良いですか? たとえば、削除した図面の履歴でも残ったままとなるようですが。 Exmenuのフォルダー内とかにリストが出来る訳では無いようですし。 機能そのものは便利そうですが、消し方も知りたいです。 |
▼いっちさん: >機能そのものは便利そうですが、消し方も知りたいです。 Exmenuの再起動では消えないようですが、Windowsの再起動を行うと消えました。 |
▼mirrorさん: しばらく考えこんでしまいましたが、ようやくExmenu037hの sub:3 印刷範囲指定付 図面情報コピー,sub:28,sub:29 sub:28 印刷範囲指定,cmd:99,btn:OK,until:確認,(ここに各種設定),btn:範囲変更,until:指示,until:確認,(btn:印刷),cmd:1 sub:29 図面情報コピー,cmd:72, --空白以下は列挙しません sub:37 印刷ヘルパー,cmd:132 辺りの理解が出来て来ました。 > ツールのタスクトレイアイコンをマウスオーバーして表示されるメニューは > 図面情報文字列(クリップボードデータ)を、履歴して列挙していきます の意図するところが、解って来たような気がします。 |
▼いっちさん: ご利用ありがとうございます Jw_cadの、データ読み込み起動時の画面を指定する方法で 一番簡単なのは、図面情報コピーで得られる図面情報文字列です これは、表示範囲記憶・印刷範囲記録された起動オプション文字列で 且つ、起動時にその画面で開けるという特徴があります 建築などでは、多工種の図面を一度に開いて確認したい場合がありますので 図面を開きレイヤ操作して拡大表示する、手間を省くのに使う想定です 日々変更され、追加修正される施工図などを扱う場合には リスト保存などしたものを使うと、ミスを誘発する可能性があると思い 敢えて >ツールでなくても、図面情報文字列を取得し、txtファイルなどのリストにし >そのリストを利用して、Jw_cadを多重起動できるようにしておけば と、考えています |
▼mirrorさん: お返事ありがとうございます。 > 敢えて > >ツールでなくても、図面情報文字列を取得し、txtファイルなどのリストにし > >そのリストを利用して、Jw_cadを多重起動できるようにしておけば > と、考えています クリップボードへコピーされた図面情報を、テキストファイルにして、 普段利用しているエディターに組み込んだマクロでJw_cadを開けば良いですね。 (というか、mirrorさんのレスを見て、サクラエディター用を作りました。) そうでは無い場合にも、c:\jwwには、sample.xlsが入っていますし。 |
mirrorさんの言われている >ツールでなくても、図面情報文字列を取得し、 の意味を、考えてみました。 mirrorさんが公開されているExmenuを用いない場合でも、 例えば、汎用ツールであるUWSCなどを用いて、 図面情報を取得すれば良い。 と言われているように、受け取れます。 その為、Exmenuの > sub:3 印刷範囲指定付 図面情報コピー,sub:28,sub:29 > sub:28 印刷範囲指定,cmd:99,btn:OK,until:確認,(ここに各種設定),btn:範囲変更,until:指示,until:確認,(btn:印刷),cmd:1 > sub:29 図面情報コピー,cmd:72, --空白以下は列挙しません を参考にし、UWSCの高レベル記録を用いて、UWSCスクリプトを私も書いてみました。 // 印刷範囲指定付図面情報コピー.uws // ブロック編集中の印刷は無い。 jww_id = GETID("- jw_win", "", -1) SLEEP(0.1) jww_print(jww_id) jww_information(jww_id) // 印刷範囲指定 Procedure jww_print(id) CLKITEM(id, "印刷", CLK_MENU, True) prt_id = GETID("印刷", "#32770", -1) SLEEP(0.1) CLKITEM(prt_id, "OK", CLK_BTN) SLEEP(0.1) CLKITEM(id, "範囲変更", CLK_ACC) // 範囲変更ボタンを押す前の"確認"と区別する為に、 // "指示"を確認する必要がある。 Repeat SLEEP(0.1) Until POS("指示",GETSTR(id, 1, STR_STATUS)) > 0 // ここでマクロは、待機する。 // 範囲変更ボタンが押された後すべき事を、 // jwwの画面上で各種設定を行う。 Repeat SLEEP(0.1) Until POS("確認",GETSTR(id, 1, STR_STATUS)) > 0 // 印刷は行わずに、AUTOモードに戻る。 CLKITEM(id, "AUTOモード", CLK_MENU, True) Fend // 図面情報コピー Procedure jww_information(id) CLKITEM(id, "図面情報コピー(I)", CLK_MENU, True) Fend |
▼いっちさん: >例えば、汎用ツールであるUWSCなどを用いて、 >図面情報を取得すれば良い。 >と言われているように、受け取れます その通りです いっちさんのようなJw_cadのユーザーが、沢山増えてくれれば マクロを利用した、より新しい使い方も増えてくるものと期待しています 汎用のマクロツールで、ユーザーの操作を待機する方法ですが 何かの参考になるかも知れませんので、書き込んでおきます Jw_cadでは何かの操作を行うと、ステータスバーの表示が変わりますので 各操作の後で、どのような表示になるか確認し、ステータスバーを監視します ステータスバーの監視は、do〜loop内で実行するようにし その中では、sleepでは無く、DoEventsを実行し動作中の制御をWindowsに渡します その表示になるまでか、その表示を継続しているのか、で判断して loopを抜けるように構築する事で、スムーズな待機制御ができます |
▼mirrorさん: おはようございます。 > >例えば、汎用ツールであるUWSCなどを用いて、 > >図面情報を取得すれば良い。 > >と言われているように、受け取れます > その通りです 今回のコードは、取りあえず動く位なもので、もう少し直す必要があるようです。 このようなマクロは、特に繰り返しの実行を行う時、完成度の差が大きく出てしまうようです。 単発的な動作確認だけではダメなようです。 やはり、Exmenuの動作は素晴らしいと思います。 > 汎用のマクロツールで、ユーザーの操作を待機する方法ですが > 何かの参考になるかも知れませんので、書き込んでおきます ありがとうございます。 エクセルで、DoEventsを実行というのは普通の事ですが、 UWSCでDoEventsを実行となると、少々勉強が必要です。 但し、下記のページに記述のある「vbsでdoevents」 https://note.chiebukuro.yahoo.co.jp/detail/n271679?__ysp=RG9FdmVudHMgdXdzYw%3D%3D なら、 Procedure DoEventsCmd() DOSCMD("cmd /c") Fend 位のものなのかも知れません(?) |
▼いっちさん: >UWSCでDoEventsを実行となると、少々勉強が必要です DoEventsの実態の動作は PeekMessage(msg,NULL,0,0,PM_REMOVE)が真の間 msg構造体内のmessageを調べて WM_QUITならExitProcess() そうでない場合は TranslateMessage(msg)とDispatchMessage(msg)を実行するです WindowsAPIを使えば、UWSCでも実装できると思います Exmenuでは、CPU使用率低減や実行速度改善のため自前で実装しています |
mirrorさんのレスの内容が、現在の私にとっては、大変難しい内容の為、今すぐに具体的なコードを書くことは出来ません。 しかしながら、mirrorさんのレスの内容は、単に難しいだけでは無く、的確な内容を書かれているように思える為、取り急ぎ、mirrorさんのレスの内容そのままを解る範囲でコードにしてみました。 ここに書いた内容を、UWSCで実際に動かすような事は、一切行っておりません。(というより、このままでは、行えないはずです。) どこが間違えているかも、(私本人は)解っていません。 いつになったら、ちゃんとしたコードが書けるのか、謎です。 > WindowsAPIを使えば、UWSCでも実装できると思います // DEF_DLL 関数名(型, 型, ...): 戻り型: DLL名 // 型: int、long、bool、uint、hwnd、string、Wstring、float、double、word、dword、byte、char、pchar、Wchar、pWchar、boolean、longlong、SafeArray // 構造体:型を { } にて展開して書く 関数名( double, {int, int, int} ) DEF_DLL PeekMessage({LPMSGのUWSCでの指定方法不明です?},hwnd,uint,uint,uint)bool:user32.dll > DoEventsの実態の動作は > PeekMessage(msg,NULL,0,0,PM_REMOVE)が真の間 > msg構造体内のmessageを調べて > WM_QUITならExitProcess() > そうでない場合は > TranslateMessage(msg)とDispatchMessage(msg)を実行するです // DoEventsの実態の動作は Procedure UwscDoEvents() // PeekMessage(msg,NULL,0,0,PM_REMOVE)が真の間 While PeekMessage(msg,NULL,0,0,PM_REMOVE) // msg構造体内のmessageを調べて Select msg.message // WM_QUITならExitProcess() Case WM_QUIT ExitProcess() // そうでない場合は // TranslateMessage(msg)と // DispatchMessage(msg)を実行するです Default TranslateMessage(msg) DispatchMessage(msg) Selend Wend Fend |