当掲示板は、AutoCADのマクロに関する掲示板です。
質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
数個のブロックの貼り付けについて
いつも、いつも、お世話になっております。

ここ数か月で仕事の能率が劇的に向上しております。
(決して大袈裟ではありません。)

ありがとうございます。

先日、”二つのマクロを一つのマクロにできないでしょうか? ”の件で
その後、欲がでまして、、、

今現在は

*^C^C-layer;on;画層名;;-insert;ブロック名A;\;;;_Explode;l;_rotate;l;;\\
*^C^C-layer;on;画層名;;-insert;ブロック名B;\;;;_Explode;l;_rotate;l;;\\
*^C^C-layer;on;画層名;;-insert;ブロック名C;\;;;_Explode;l;_rotate;l;;\\
*^C^C-layer;on;画層名;;-insert;ブロック名D;\;;;_Explode;l;_rotate;l;;\\

、、、と複数のブロック貼り付けマクロをボタンに割り付けて使用しています。

これを、1つのボタンにできないかと、、、


右クリックで、A→B→C→D→A→B.....
というように、それぞれのブロックがグルグルと循環して、尚且つ回転もできる、、、
それから、それぞれのブロックのイメージというのか、プレビューが出ていてほしい、、、

こんなマクロができたらな!と思っています。

可能でしょうか?

(ノ`Д´)ノ.:・┻┻   無理ですか、、、


よろしくお願いいたします。m(_ _)m 
  • 瑞海
  • 2016/06/19 (Sun) 14:24:27
Re: 数個のブロックの貼り付けについて
2016 使用です。
よろしくお願いします。
  • 瑞海
  • 2016/06/19 (Sun) 14:29:07
Re: 数個のブロックの貼り付けについて
各ブロック名における、画層名はそれぞれ違うのでしょうか?
それによって作り方が変わります。

※プレビューは無理です。マクロはコマンドの羅列ですのでCAD自身に無い機能は使えません。
  • とってぃ
  • 2016/06/20 (Mon) 08:21:59
Re: 数個のブロックの貼り付けについて
失礼しました。

それぞれのブロックで画層名も分けたいと思います。

よろしくお願いいたします。

  • 瑞海
  • 2016/06/20 (Mon) 08:40:44
Re: 数個のブロックの貼り付けについて
とりあえず作ってみました。
お試しください。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;sw;0;;bl1;ブロック名A;;bl2;ブロック名B;;bl3;ブロック名C;;bl4;ブロック名D;;to;1,;to;2;;la1;画層名A;;la2;画層名B;;la3;画層名C;;la4;画層名D,,,,)$(nth,$(getenv,to),,,;to;0;ray;^x挿入点を指定:$(nth,$(getenv,sw),$(getenv,bl1),$(getenv,bl2),$(getenv,bl3),$(getenv,bl4))--ブロック名切替(Rc)--^x\$M="""$(if,$(getvar,cmdactive),;setenv;to;4,setenv;to;3)""",,,)$(nth,$(getenv,to),,,,;sw;$(if,$(=,$(getenv,sw),3),0,$(+,$(getenv,sw),1));;to;1,;to;5;-layer;on;$(nth,$(getenv,sw),$(getenv,la1),$(getenv,la2),$(getenv,la3),$(getenv,la4));,)$(nth,$(getenv,to),,,,,,-insert;$(nth,$(getenv,sw),$(getenv,bl1),$(getenv,bl2),$(getenv,bl3),$(getenv,bl4));non;@;;;;Explode;l;rotate;l;;\\setenv;to;2)^M

ブロック名と画層名を記入して下さい。
右クリックで、ブロック名が変わります。
  • とってぃ
  • 2016/06/20 (Mon) 09:25:15
Re: 数個のブロックの貼り付けについて
早速、希望マクロを作っていただいたにもかかわらず、
返信できなかったこと、申し訳ありませんでした。

すごいです!

ほぼ、自分がイメージする動きをしてくれています!

本当に、ありがとうございます。

私の中では、汎用性の高いマクロとなるかと思います。


一つ関連した質問よろしいでしょうか?

右クリックでブロック選択貼り付けマクロを自分で作ろうとしたとき
特級 4.「nth」でマクロ作成 で紹介されている構築線のマクロを参考にして
このようなマクロを作ってみました。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),-insert;ブロック名A;\;;;"""$M=$(if,$(getvar,cmdactive),;setenv;to;0,setenv;to;1)""",)$(nth,$(getenv,to),,-insert;ブロック名B;\;;;"""$M=$(if,$(getvar,cmdactive),;setenv;to;1,setenv;to;0)""")^M

トッテイ様なら当たり前なのかもしれませんが、うまく動きません。
右クリックで選択できないのです。
構築線では素直に垂直、水平を選択されるのに、、、

なぜ?なんでしょう。

そのほかいろいろ試してみたのですが、やっぱりダメダメでした。

私に簡単に理解できるのなら、”特級”にはならないのでしょうが、
もし、少しでも理解ができるのなら一寸でも理解したいです。

お忙しいかと思いますが、少し、解説していただけるなら、幸いです。

過去と今回の件ともども本当にありがとうございます。



  • 瑞海
  • 2016/06/20 (Mon) 22:49:55
Re: 数個のブロックの貼り付けについて
上記マクロで言いますと
nthの構文は問題ないと思いますが
if文に問題が有ります。

>"""$M=$(if,$(getvar,cmdactive),;setenv;to;0,setenv;to;1)"""

これは、実行中のコマンドが、アクティブかどうかを判断させています。
つまり、-insertコマンドが途中なのか終了しているかどうかです。

マクロを見ますと
-insert;ブロック名A;\;;; も
-insert;ブロック名B;\;;; も
どちらも終了していますよね。

if文でよく使うコマンドは
■中級 8.ダミーでオブジェクト選択
http://ameblo.jp/totthi-macro/entry-11293982095.html
にも記載していますが
offsetやrayコマンドなどです。

今回自分が作ったマクロも、rayコマンドを使っていますが
rayコマンドを実行した場合、コマンドの仕様上
左クリックをした場合、基点を指定⇒方向を指定(コマンド途中)
右クリックをした場合、コマンド終了
となります。

このコマンド仕様の性質を使って
if文で分岐させているわけです。

再度

■上級 2.CMDACTIVE
http://ameblo.jp/totthi-macro/entry-11394602811.html

こちらをご確認頂いた上
色々なコマンドの仕様やマクロにした時の性質を
お試しになった方が良いかと思います。
  • とってぃ
  • 2016/06/21 (Tue) 08:20:28
Re: 数個のブロックの貼り付けについて
早速の返信と分かりやすい解説、ありがとうございます。

コマンド(マクロ)が終了していてはまずいのですね。
他のアプローチとしてダミーコマンドを使う…

少し、腰を据えて勉強してみます。

また、分からない事があれば質問してしまうかもしれません。
その時は、また対応していただけると幸いにおもいます。

ありがとうございました。
  • 瑞海
  • 2016/06/21 (Tue) 10:53:43
Re: 数個のブロックの貼り付けについて
あけましておめでとうございます。
昨年は大変お世話になりました。
今年もよろしくお願いします。

このまくろその後改良して、大変便利に使わせていただいております。

その、改良マクロなのですが

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;sw;0;;bl1;ブロック1;;bl2;ブロック2;;bl3;ブロック3;;to;1,;to;2;;,,,,)$(nth,$(getenv,to),,,;to;0;ray;^x挿入点を指定:$(nth,$(getenv,sw),$(getenv,bl1),$(getenv,bl2),$(getenv,bl3))^x\$M="""$(if,$(getvar,cmdactive),;setenv;to;4,setenv;to;3)""",,,)$(nth,$(getenv,to),,,,;sw;$(if,$(=,$(getenv,sw),2),0,$(+,$(getenv,sw),1));;to;1,;to;5;,)$(nth,$(getenv,to),,,,,,-insert;$(nth,$(getenv,sw),$(getenv,bl1),$(getenv,bl2),$(getenv,bl3));non;\;;;_layer;m;画層名;;Explode;l;setenv;to;2)^M


ブロックのイメージというのか、プレビューが出て貼り付ける位置を確認しながら作業が行えます。
nonの後を@から\に変えただけなのですが、@の時よりも1クリック余分にかかってしまう。
たいしたことでないのですが、どうもリズムに乗れず、戸惑ってしまいます。

初めは、改善するのはさして難しくはないと思っていたのですが、なかなかうまくいきません。

それから、このマクロはOスナップが効きません。
効かせないほうが私の使用環境では都合が良いのですが、効かせようとするなら
どのようにすれば良いのでしょうか?

どうか、よろしくお願いします。





  • 瑞海
  • 2017/01/17 (Tue) 22:24:44
Re: 数個のブロックの貼り付けについて
non;\ の「non;」を削除すればOスナップが効きます。

nonはOスナップなしの意味です。
  • とってぃ
  • 2017/01/18 (Wed) 08:33:51
Re: 数個のブロックの貼り付けについて
早速のお返事ありがとうございます。

ごめんなさい。少し言葉足らずだったですね。

以前、とってい様から作って頂いたマクロは、
左クリック、左クリックで1クリック事にどんどんブロックが貼り付けられたのですが
私が改良したマクロでは2クリック必要なのです。
1クリック目でブロックの姿が見えて、2クリック目で貼り付ける。。。

それを、2クリック必要なのを1クリックで済ませたいと思ったのです。
大して時間に変わりは無いのですが、なかなかリズムよく作業ができない次第です。

もし、よろしければご再考下さい。
よろしくお願い致します。
  • 瑞海
  • 2017/01/18 (Wed) 09:10:47
Re: 数個のブロックの貼り付けについて
>non;\;;;_layer;m;画層名;;Explode;l;setenv;to;2)^M

この部分で「non;\」を「non;@;」ですかね。
文面から意図的に変更したと思っていたのですが(^-^;

  • とってぃ
  • 2017/01/18 (Wed) 10:59:42
Re: 数個のブロックの貼り付けについて
お世話になります。

そうなんですよね。。。
non;@;にすれば、1クリックで済みます。
けれども、そうすると、ブロックのイメージが見えない。。。

元々、non;@;からnon;\に変えた理由というのは
Oスナップを効かせたくなかったからなのです。

普通、non;@でOスナップは効かなくなると思うのですが
何故かこのマクロではOスナップが効いてしまう。。
そこで¥をエイヤッと入れてみたところ、Oスナップが効かなくなって
尚且つ、ブロックのイメージも表示されるようになった。。。。
。。。という次第だったのです。

私の希望としては

1クリックでブロックの姿も見える状態で連続で貼り付けたい。
Oスナップは基本的には必要無いのだけれど、@から¥に変えてうまくいったと言うことは
Oスナップが必要な時はどうすればよいのかな?
と、おもった次第です。


僅か、0.数秒の話で、私がリズミカルに仕事がしたい。。。
という、わがままな話で申し訳ありません。

  • 瑞海
  • 2017/01/18 (Wed) 13:15:18
Re: 数個のブロックの貼り付けについて
なるほど理解しました。

少しお待ちを。
  • とってぃ
  • 2017/01/18 (Wed) 13:29:26
Re: 数個のブロックの貼り付けについて
ちょっと使い方を変更しました。

♪ブロック選択挿入【連続版】
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;sw;0;;bl1;ブロック1;;bl2;ブロック2;;bl3;ブロック3;;to;1,;to;2;;,,,,)$(nth,$(getenv,to),,,;to;0;ray;^x挿入ブロックを指定:$(nth,$(getenv,sw),$(getenv,bl1),$(getenv,bl2),$(getenv,bl3)) -決定(Lc)/切替(Rc)^x\$M="""$(if,$(getvar,cmdactive),;setenv;to;4,setenv;to;3)""",,,)$(nth,$(getenv,to),,,,;sw;$(if,$(=,$(getenv,sw),2),0,$(+,$(getenv,sw),1));;to;1,,)$(nth,$(getenv,to),,,,,;to;5;-insert;$(nth,$(getenv,sw),$(getenv,bl1),$(getenv,bl2),$(getenv,bl3));non;@;;;;copybase;non;@;l;;erase;p;,;to;0;pasteclip;non;\layer;m;画層名;;Explode;l;setenv;to;5)^M


●使い方
1.挿入ブロックを指定
  右クリックで切替
  左クリックで決定 ⇒2へ
2、ブロック挿入点を指定 ⇒繰り返し2へ
  ※終了はキャンセル

お試しください
  • とってぃ
  • 2017/01/18 (Wed) 13:48:14
Re: 数個のブロックの貼り付けについて
お世話になります。

ありがとうございます。
随分快適に作業できています。

後は、ブロックの並べ方を少しいじって調整しようと思います。

感謝です!!!

追伸
頭の柔らかい人がうらやましいっす(>Д<)
  • 瑞海
  • 2017/01/18 (Wed) 16:02:12

返信フォーム






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