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

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

下書き線画層に接円(半径・1点・1接線) を作成
はじめまして。
このサイト大変勉強になり、業務改善に非常に役立っております。ありがとうございます。

AutoCAD LT2018を使用しております。

接円(半径・1点・1接線)のマクロを紹介されてますが、
そのマクロを利用して「下書き線」レイヤに接円を作成するコマンドを作成してみているのですが上手くいきません。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;r1;半径記入^X\id;\setenv;p1;$M="""$(getvar,lastpoint)^H^H""";setenv;to;1,offset;;\;setenv;to;1;select;non;@;non;@;;copy;p;;non;@;non;@;erase;p;;setenv;p2;$M="""$(getvar,lastpoint)^H^H""";setenv;to;2,,,,,,)$(nth,$(getenv,to),,,-Layer;n;下書き線;P;N;下書き線;C;Red;下書き線;;pline;non;$(getenv,p1);per;$(getenv,p2);;area;o;l;erase;l;;setenv;to;3,setenv;to;$(if,$(<=,$(*,$(getenv,r1),2),$(getvar,perimeter)),0,4),,,,)$(nth,$(getenv,to),,,,,zoom;c;@;$(*,$(getenv,r1),4);setenv;to;1;select;non;$(getenv,p2);non;@;;setenv;to;5,,,)$(nth,$(getenv,to),,,,,,ucs;ob;@;;o;nea;@;;w;xline;o;non;$(getenv,r1);non;@;$(getenv,p1);;select;l;;circle;non;@;$(getenv,r1);ucs;ob;l;trim;p;;$(getenv,r1)<0;;ucs;ob;l;erase;p;l;;circle;non;$(getenv,r1)<0;$(getenv,r1);setenv;to;6,,)$(nth,$(getenv,to),,,,,,,ucs;p;;p;join;^XOK(L)/Mirror(R)^X\$M="""$(if,$(getvar,cmdactive),;id;,setenv;to;7)""",zoom;c;$(getenv,p2);$(*,$(getenv,r1),4);id;non;$(getenv,p1);ucs;p;mirror;l;;non;@;per;0<0;y;ucs;p;;p;Change;L;;P;LA;下書き線;C;ByLayer;)^M

ここまでは作成できました。
右クリックで確定させる(Mirror(R))円は画層を変えられるのですが、
左クリックで確定させる最初に作成された円の画層を変えることができません。

ご教授いただけると幸いです。
よろしくお願いいたします。
  • M
  • URL
  • 2019/08/15 (Thu) 14:50:44
Re: 下書き線画層に接円(半径・1点・1接線) を作成
「Change;L;;P;LA;下書き線;C;ByLayer;」
を円を描いた直後に移動する。
例えば、「setenv;to;6」の前あたり
  • N
  • 2019/08/15 (Thu) 16:07:49
Re: 下書き線画層に接円(半径・1点・1接線) を作成
ご回答ありがとうございます。

下記、ご指摘の通り入れてみたマクロにしても動かず、nthも動かなくなってしまいます。原因分かりますでしょうか。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;r1;半径記入^X\id;\setenv;p1;$M="""$(getvar,lastpoint)^H^H""";setenv;to;1,offset;;\;setenv;to;1;select;non;@;non;@;;copy;p;;non;@;non;@;erase;p;;setenv;p2;$M="""$(getvar,lastpoint)^H^H""";setenv;to;2,,,,,,)$(nth,$(getenv,to),,,-Layer;n;下書き線;P;N;下書き線;C;Red;下書き線;;pline;non;$(getenv,p1);per;$(getenv,p2);;area;o;l;erase;l;;setenv;to;3,setenv;to;$(if,$(<=,$(*,$(getenv,r1),2),$(getvar,perimeter)),0,4),,,,)$(nth,$(getenv,to),,,,,zoom;c;@;$(*,$(getenv,r1),4);setenv;to;1;select;non;$(getenv,p2);non;@;;setenv;to;5,,,)$(nth,$(getenv,to),,,,,,ucs;ob;@;;o;nea;@;;w;xline;o;non;$(getenv,r1);non;@;$(getenv,p1);;select;l;;circle;non;@;$(getenv,r1);ucs;ob;l;trim;p;;$(getenv,r1)<0;;ucs;ob;l;erase;p;l;;circle;non;$(getenv,r1)<0;$(getenv,r1);
Change;L;;P;LA;下書き線;C;ByLayer;
setenv;to;6,,)$(nth,$(getenv,to),,,,,,,ucs;p;;p;join;^XOK(L)/Mirror(R)^X\$M="""$(if,$(getvar,cmdactive),;id;,setenv;to;7)""",zoom;c;$(getenv,p2);$(*,$(getenv,r1),4);id;non;$(getenv,p1);ucs;p;mirror;l;;non;@;per;0<0;y;ucs;p;;p;Change;L;;P;LA;下書き線;C;ByLayer;)^M
  • M
  • URL
  • 2019/08/16 (Fri) 16:35:25
Re: 下書き線画層に接円(半径・1点・1接線) を作成
間違っては無いので、文字数オーバーですかね。

ちょっと順番を変えて、1段落の文字数を押並べてみました。
構文自体は触ってません。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;r1;半径記入^X\id;\setenv;p1;$M="""$(getvar,lastpoint)^H^H""";;to;1,offset;;\;setenv;to;1;select;non;@;non;@;;copy;p;;non;@;non;@;erase;p;;setenv;p2;$M="""$(getvar,lastpoint)^H^H""";;to;2,,,,,,)$(nth,$(getenv,to),,,pline;non;$(getenv,p1);per;$(getenv,p2);;area;o;l;erase;l;;setenv;to;3,,zoom;c;@;$(*,$(getenv,r1),4);setenv;to;1;select;non;$(getenv,p2);non;@;;setenv;to;5,,,)$(nth,$(getenv,to),,,,;to;$(if,$(<=,$(*,$(getenv,r1),2),$(getvar,perimeter)),0,4),,,,zoom;c;$(getenv,p2);$(*,$(getenv,r1),4);id;non;$(getenv,p1);ucs;p;mirror;l;;non;@;per;0<0;y;ucs;p;;p)$(nth,$(getenv,to),,,,,,ucs;ob;@;;o;nea;@;;w;xline;o;non;$(getenv,r1);non;@;$(getenv,p1);;select;l;;circle;non;@;$(getenv,r1);ucs;ob;l;trim;p;;$(getenv,r1)<0;;ucs;ob;l;erase;p;l;;circle;non;$(getenv,r1)<0;$(getenv,r1);setenv;to;6,,)$(nth,$(getenv,to),,,,,,,-Layer;n;下書き線;P;N;下書き線;C;Red;下書き線;;Chprop;L;;LA;下書き線;C;ByLayer;;ucs;p;;p;ray;^XOK(L)/Mirror(R)^X\$M="""$(if,$(getvar,cmdactive),;id;,setenv;to;7)""",)^M

何をしたか、解説しますと。

元のマクロは、

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

このような並びになってました。

それに、「下書き線画層を追加」「書いた円の画層変更」の命令を追記したので、
極端に文字数の多い段落ができてしまった。
※1段落は、「 $(nth,$(getenv,to),,,,,,,,) 」これ1個分です。

極端に文字数の多い段落ができた場合は、普通はそれを2つに分けるのですが、
そうすると、このマクロではマクロ全体の文字数オーバーになる可能性がでてくるので、分けたくありません。

そこで、

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

と順番を変えることで、文字数の突出した段落を無くす事が出来ました。

今回のワンポイント!
文字数オーバーは、マクロ全体の文字数だけでなく、1段落の文字数でも発生する。

どげん?
  • Lon
  • 2019/08/17 (Sat) 12:35:16
Re: 下書き線画層に接円(半径・1点・1接線) を作成
ありがとうございます!
文字数オーバーだったのですね。

nth構文は順番通り・・・という概念しかなかったので
順番を入れ替える発想に驚きました。
凄いです。

下記で狙っている動作ができました。ありがとうございます。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;r1;半径記入^X\id;\setenv;p1;$M="""$(getvar,lastpoint)^H^H""";;to;1,offset;;\;setenv;to;1;select;non;@;non;@;;copy;p;;non;@;non;@;erase;p;;setenv;p2;$M="""$(getvar,lastpoint)^H^H""";;to;2,,,,,,)$(nth,$(getenv,to),,,pline;non;$(getenv,p1);per;$(getenv,p2);;area;o;l;erase;l;;setenv;to;3,,zoom;c;@;$(*,$(getenv,r1),4);setenv;to;1;select;non;$(getenv,p2);non;@;;setenv;to;5,,,)$(nth,$(getenv,to),,,,;to;$(if,$(<=,$(*,$(getenv,r1),2),$(getvar,perimeter)),0,4),,,,zoom;c;$(getenv,p2);$(*,$(getenv,r1),4);id;non;$(getenv,p1);ucs;p;mirror;l;;non;@;per;0<0;y;ucs;p;;p)$(nth,$(getenv,to),,,,,,ucs;ob;@;;o;nea;@;;w;xline;o;non;$(getenv,r1);non;@;$(getenv,p1);;select;l;;circle;non;@;$(getenv,r1);ucs;ob;l;trim;p;;$(getenv,r1)<0;;ucs;ob;l;erase;p;l;;circle;non;$(getenv,r1)<0;$(getenv,r1);setenv;to;6,,)$(nth,$(getenv,to),,,,,,,-Layer;n;下書き線;P;N;下書き線;C;Red;下書き線;;Chprop;L;;LA;下書き線;C;ByLayer;;ucs;p;;p;ray;^XOK(L)/Mirror(R)^X\$M="""$(if,$(getvar,cmdactive),;id;,setenv;to;7)""",)^M
  • M
  • URL
  • 2019/08/19 (Mon) 09:06:36
Re: 下書き線画層に接円(半径・1点・1接線) を作成
順番を入れ替えると、作った人以外が、変更や追記しようとしても、訳わかんなくなっちゃいますから、
やらない方がいいんです。

ですから、今回は上記の様な解説を補足しときました。

多分、その補足が無いと、「どーなってんの?」と混乱する人がほとんどでしょう。
私自身も、時間が経てば、「なんだよこれ!」って言いそうな気がします。

  • Lon
  • 2019/08/19 (Mon) 11:02:19

返信フォーム






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