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

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

「*^C^Csetenv;to;0;$M=$(nth,$(getenv,to),」のマクロを考える
↓こんなマクロが有るとします。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),・・・・setenv;to;1,,,,)
          $(nth,$(getenv,to),,・・・・setenv;to;2,,,)
          $(nth,$(getenv,to),,,・・・・setenv;to;3,,)
          $(nth,$(getenv,to),,,,・・・・setenv;to;4,)
          $(nth,$(getenv,to),,,,,・・・・setenv;to;0)^M

この様にしても↓同じです。

*^C^C$M=$(nth,$(getenv,to),setenv;to;0;・・・・setenv;to;1,,,,)
    $(nth,$(getenv,to),,setenv;to;0;・・・・setenv;to;2,,,)
    $(nth,$(getenv,to),,,setenv;to;0;・・・・setenv;to;3,,)
    $(nth,$(getenv,to),,,,setenv;to;0;・・・・setenv;to;4,)
    $(nth,$(getenv,to),,,,,setenv;to;0;・・・・setenv;to;0)^M

1段落目は既にto=0であるから1段落目なので、更に「setenv;to;0;」を宣言する必要はないです。
なので↓これでOK

*^C^C$M=$(nth,$(getenv,to),・・・・・・・・・・setenv;to;1,,,,)
    $(nth,$(getenv,to),,setenv;to;0;・・・・setenv;to;2,,,)
    $(nth,$(getenv,to),,,setenv;to;0;・・・・setenv;to;3,,)
    $(nth,$(getenv,to),,,,setenv;to;0;・・・・setenv;to;4,)
    $(nth,$(getenv,to),,,,,setenv;to;0;・・・・setenv;to;0)^M

では、2段落目以降で、初めに「setenv;to;0;」が必要な理由は何でしょう?
答えは「途中キャンセルしたときに、次回起動で1段落目から始まるように」
だったら、途中キャンセルする事が無い段落では先頭に「setenv;to;0;」は必要ない。

途中キャンセルするのって、ユーザー入力「¥」が有るときだけ。
つまり、「¥」が無い段落では先頭に「setenv;to;0;」を付けなくても良い。

↓こうなります。
*^C^C$M=$(nth,$(getenv,to),・・・・・・・・・・・setenv;to;1,,,,)
    $(nth,$(getenv,to),,・・・・・・・・・・・setenv;to;2,,,)
    $(nth,$(getenv,to),,,setenv;to;0;・・¥・・setenv;to;3,,)
    $(nth,$(getenv,to),,,,・・・・・・・・・・・setenv;to;4,)
    $(nth,$(getenv,to),,,,,・・・・・・・・・・・setenv;to;0)^M

もしユーザー入力が1段落目だけだと↓先頭の「setenv;to;0;」は全く不要になります。

*^C^C$M=$(nth,$(getenv,to),・・・・¥・・・・・setenv;to;1,,,,)
    $(nth,$(getenv,to),,・・・・・・・・・・setenv;to;2,,,)
    $(nth,$(getenv,to),,,・・・・・・・・・・setenv;to;3,,)
    $(nth,$(getenv,to),,,,・・・・・・・・・・setenv;to;4,)
    $(nth,$(getenv,to),,,,,・・・・・・・・・・setenv;to;0)^M

//////////////////////////////////////////////////////////////////////

それを応用したのがこのマクロ。

寸法の矢印を片方or両方 小黒丸に変更する♪

*^C^C$M=$(nth,$(getenv,to),select;$M="""$(if,$(getvar,cmdactive),\)"""setenv;dimblk;3;;to;1,,,,)$(nth,$(getenv,to),,;dimblk1;$(nth,$(getenv,dimblk),.,_dotsmall,.,_dotsmall);;dimblk2;$(nth,$(getenv,dimblk),.,_dotsmall,_dotsmall,.);;to;2,,,)$(nth,$(getenv,to),,,dim1;override;dimsah;on;dimblk1;$(getenv,dimblk1);dimblk2;$(getenv,dimblk2);;p;;setenv;to;3,,)$(nth,$(getenv,to),,,,setenv;to;0;dist;\$M="""$(if,$(getvar,cmdactive),;setenv;to;4,^C;)""",)$(nth,$(getenv,to),,,,,;dimblk;$(nth,$(getenv,dimblk),3,0,1,2);;to;1)^M


使い方は、
寸法選択(複数可)してマクロ実行。 または、マクロ実行して寸法選択(複数可)
エンターキー連打(クリックでもOK)、ESCで終了。

//////////////////////////////////////////////////////////////////////

「*^C^Csetenv;to;0;$M=$(nth,$(getenv,to),」だと、
先頭の「setenv;to;0;」で選択や処理が中断されるので、作りたいものが作れない事が有る。

それを回避できる(かもしれない)方法の備忘録でした。
  • Lon
  • 2021/03/26 (Fri) 16:43:54

返信フォーム






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