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

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

ブロック属性の置換
 はじめまして AutoCad Lt 2004を使っています。
 既に登録してあるAという属性のブロックを、すでに登録してあるBというブロックに置換するマクロを探しています。
 たくさん並んであるAブロックのうち、複数のAを選択して
そのAの属性をBに置き換えるというものです。
 時には、Aを少し回転させて配列する場合もあり、その時には、置換するBはAと同じ角度であってほしいです。
ちなみに、AとBの外形はほとんど同じですが、Bは、Aより
一部だけ窪みがあります。
 ちなみに今は、Aを消してコピーしたBを同じ場所に貼り付けというようなことをしています。Aを回転させてあったら
Bも同じ角度だけ回転させてから貼り付けています。
この煩わしい作業を一発変換したいのです。思いついたのが
属性変更でした。 他に良い代替法があれば何でもかまいません。
よろしくお願いいたします。
  • しか
  • 2015/04/06 (Mon) 22:09:32
Re: ブロック属性の置換
しかさん

ブロックAをBに置き換えるのは可能です。
1発で出来るかは作ってみないと分からないですが。

ただ

>この煩わしい作業を一発変換したいのです。思いついたのが属性変更でした。

とありますが
属性はブロック内部に含まれる文字の類です。

ブロック自体を置換たいのですよね?
  • とってぃ
  • 2015/04/07 (Tue) 08:49:32
Re: ブロック属性の置換
 素早いお返事ありがとうございます。
はい、ブロック自体を置換したいのです。
 「属性」に関しては素人なので見当違いなことを
考えているかもしれません。ややこしいことを言ってすいません。

 それから、再度、プロパティを確認してみたらブロックAとブロックBなのですが、置換するときの状態が
ブロックAを45度回転させた状態=ブロックBが0度の状態
であることがわかりました。
なので、たとえば、ブロックAが90度の時には、ブロックBを45度の状態で挿入したいのです。
それを複数選択して、複数、それを置換したいのですが
素人なのでどういうステップを踏むのかよくわかりません。
どうぞよろしくお願いいたします。
  • しか
  • 2015/04/07 (Tue) 16:50:33
Re: ブロック属性の置換
作ってみました。
注意事項を読んだうえで、お試しください。

♪ブロックA⇒B(-45°)置換 試作1
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;okbl;「置換ブロック名記入」;ray;^x^xブロック置換を実行しますか?[いいえ(Lc)/はい(Rc)]^x\$M="""$(if,$(getvar,cmdactive),;u;^C;^Z^X,setenv;to;1)""",,,,)$(nth,$(getenv,to),,undo;be;copybase;non;0<0;p;;erase;p;;-layout;d;BlockAB;setenv;cv;$(getenv,CreateViewports);;to;2,,,)$(nth,$(getenv,to),,,;to;3;;CreateViewports;0;-layout;n;BlockAB;;s;BlockAB;pasteblock;non;0<0;zoom;a;explode;l,,)$(nth,$(getenv,to),,,,;to;4;select;l;;setenv;to;3;ucs;ob;l;erase;l;;-insert;$(getenv,okbl);s;1;r;-45;non;0<0;ucs;p;copybase;non;0<0;l;;erase;l;;-layout;s;Model;pasteclip;non;0<0;-layout;s;BlockAB,)$(nth,$(getenv,to),,,,,-layout;s;Model;;d;BlockAB;setenv;CreateViewports;$(getenv,cv);id;^C;^Z^x置換完了^x)^M

動作確認済み LT2004/LT2013

▲注意
1)マクロ冒頭部分の「置換ブロック名記入」に、置き換えるブロック名を記入して下さい。
 例:ブロックB
2)マクロ実行前に、置き換えるブロックのみを選択して下さい。
 例:ブロックA
 ※マクロ実行直前に選択されていたオブジェクト全てを、-45°回転させて置き換えます。
3)マクロで仮のレイアウト「BlockAB」を一時的に作成しています。
 同名のレイアウトを作成しないで下さい。
4)マクロが長いので、メニューファイルに直接貼り付けて下さい。
 ※メニューファイルに直接張付ける方法
 http://ameblo.jp/totthi-macro/entry-10895260108.html

●使い方
※マクロ実行前に置き換えるブロックのみを選択して下さい。
1)ブロック置換を実行しますか?[いいえ(Lc)/はい(Rc)]
 ・左クリックまたはEscでキャンセル
 ・右クリックまたはEnterでマクロ実行開始

置換完了で終了となります。

※マクロ実行中は、画面がチラつく可能性があります。
ご注意ください。



尚、マクロ開始時に undo;be; を入れていますので
開始前に戻したい場合は

undo エンター e エンター u エンター

で、実行前に戻ります。
  • とってぃ
  • 2015/04/08 (Wed) 11:04:28
Re: ブロック属性の置換
 ありがとうございます。
明日、会社のパソコンで作っていただいたマクロを試して
みたいと思います。
取り急ぎ、お礼まで。
  • しか
  • 2015/04/08 (Wed) 22:14:47
Re: ブロック属性の置換
コマンド: もう一方のコーナーを指定: *キャンセル*
コマンド:
コマンド:
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <3>: 0
コマンド:
SETENV 変数名を入力: to
値 <0>: 4
コマンド: select
オブジェクトを選択: l
認識された数: 1
オブジェクトを選択:
コマンド: setenv
変数名を入力: to
値 <4>: 3
コマンド: ucs
現在の UCS 名: *ワールド*
オプションを入力
[作成(N)/移動(M)/直交投影(G)/直前(P)/呼び出し(R)/登録(S)/削除(D)/一覧(?)/ワール
ド(W)] <ワールド>: ob
UCS を位置合わせするオブジェクトを選択: l
コマンド: erase
オブジェクトを選択: l
認識された数: 1
オブジェクトを選択:
コマンド: -insert
ブロック名を入力 または [一覧(?)]: M
挿入位置を指定 または
[尺度(S)/X/Y/Z/回転(R)/プレビュー尺度(PS)/プレビューX(PX)/プレビューY(PY)/プレビ
ューZ(PZ)/プレビュー回転(PR)]: s
XYZ 軸に対する尺度を指定: 1
挿入位置を指定 または
[尺度(S)/X/Y/Z/回転(R)/プレビュー尺度(PS)/プレビューX(PX)/プレビューY(PY)/プレビ
ューZ(PZ)/プレビュー回転(PR)]: r
回転角度を指定: -45
挿入位置を指定 または
[尺度(S)/X/Y/Z/回転(R)/プレビュー尺度(PS)/プレビューX(PX)/プレビューY(PY)/プレビ
ューZ(PZ)/プレビュー回転(PR)]: non
0<0
属性値を入力
ブロック名称 <M>: ucs
コマンド: p
PAN 基点 または 移動距離を指定: copybase
2 点を指定、または 移動距離を入力してから[Enter]キーを押してください。
  • しか
  • 2015/04/09 (Thu) 19:50:59
Re: ブロック属性の置換
 今日、作っていただいたマクロを試してみたのですが、
上記のようなログがでて止まってしまいます。
 また、ブロックBが現れるのですが、ブロックAの位置に
貼りつかず、Bブロックの名称がucsとなっており、ブロックBにX軸とY軸の矢印がくっついたままうまくいきません。
 それから、マクロ実行後は、他のブロックをコピーして
貼り付けるという動作も出来なくなってしまいます。
 もしかしたら、マクロの登録の仕方がおかしいのかもしれません。

 参考までに、前レスの画像のAがAブロック、Mとなっているのが今までBブロックといっていたものです。

原因が分かりましたら、どうか教えてください。
  • しか
  • 2015/04/09 (Thu) 19:57:13
Re: Re: ブロック属性の置換
ブロックに属性が設定してある場合
マクロの作り方が変わってきます。
出来れば、置き換えるブロックの情報を
お願い致します。

尚、明日の金曜日は
当方出張になりましたので
来週までお待ち下さい。
  • とってぃ
  • 2015/04/10 (Fri) 00:19:39
Re: ブロック属性の置換
 お忙しいところ無料でしていただいて申し訳ないです。
ブロックの情報なのですが、Aブロックは
X軸に420、Y軸に280の長方形で名称・属性がAとなっているブロックです。前のレスの画像は、すでに45度傾いた状態です。
 Aブロックと置き換えるブロックは、名称・属性がMとなっているブロックです。サイズはAとほぼ同じですが、一部窪んでおります。前のレスの画像にあるように、Mは、通常の状態ですでに傾いております。

 ほかにも数種類の属性のあるブロックを登録して使って作図しております。

 本当にお手数をおかけして申し訳ないです。
  • しか
  • 2015/04/10 (Fri) 18:16:46
Re: ブロック属性の置換
しかさん

もしかして
ブロックAとブロックBの挿入起点が違いますか?

違うのであれば
手動以外では、見た目の同じ位置には挿入できません。
あくまでも、作成されたブロックの挿入起点を元に置き換えているだけですので。


また、マクロが止まるのは
属性が割り当てられている場合の対応が出来ていませんでした。

とりあえず、作り直したので、再度お試しください。


♪ブロックA⇒B(-45°)置換 試作2
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;okbl;「置換ブロック名記入」;ray;^x^xブロック置換を実行しますか?[いいえ(Lc)/はい(Rc)]^x\$M="""$(if,$(getvar,cmdactive),;u;^C;^Z^X,setenv;to;1)""",,,,)$(nth,$(getenv,to),,;areq;$(getvar,attreq);undo;be;attreq;0;copybase;non;0<0;p;;erase;p;;-layout;d;BlockAB;setenv;cv;$(getenv,CreateViewports);;to;2,,,)$(nth,$(getenv,to),,,;to;3;;CreateViewports;0;-layout;n;BlockAB;;s;BlockAB;pasteblock;non;0<0;zoom;a;explode;l,,)$(nth,$(getenv,to),,,,;to;4;select;l;;setenv;to;3;ucs;ob;l;erase;l;;-insert;$(getenv,okbl);s;1;r;-45;non;0<0;ucs;p;copybase;non;0<0;l;;erase;l;;-layout;s;Model;pasteclip;non;0<0;-layout;s;BlockAB,)$(nth,$(getenv,to),,,,,-layout;s;Model;;d;BlockAB;setenv;CreateViewports;$(getenv,cv);attreq;$(getenv,areq);id;^C;^Z^x置換完了^x)^M



  • とってぃ
  • 2015/04/11 (Sat) 09:08:11
Re: ブロック属性の置換
 早速、作製していただいてありがとうございます。
挿入起点・・・なるほどです。
同じことを祈るばかりですが、試せるのが月曜日になります。
すぐに作っていただいたのに申し訳ない。

また、ご報告させていただきます。
  • しか
  • 2015/04/11 (Sat) 19:12:15
Re: ブロック属性の置換
 ありがとうございました。
無事に作動しました。
本当にありがとうございました。
  • しか
  • 2015/04/13 (Mon) 20:10:25

返信フォーム






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