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

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

すべての交点に円を
とってぃ様
こんにちは。
マクロ作成の依頼です。
図中の線分 すべての交点に半径25mmの円を配置する というものを作成願いたいのです。
お忙しいところ恐縮ですがよろしくお願いします。
  • emo
  • 2020/05/31 (Sun) 07:00:49
Re: すべての交点に円を
下記の
http://totthi.bbs.fc2.com/?act=search_form&keyword=%8C%F0%93_&pos=30

Zukki-さんのマクロ参考に点をφ50の円に変更しました
※、勝手に変更させていただきました

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),undo;be;setenv;as;$(getvar,autosnap);;ap;$(getvar,aperture);autosnap;0;aperture;1;-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;model;ucs;w;setenv;to;1)$(if,$(=,$(getenv,to),1),select;縦線を選択^X\copybase;non;0<0;p;;-layout;s;tmplo;pasteclip;non;0<0;zoom;e;setenv;vcnt;1;;to;2)$(if,$(=,$(getenv,to),2),;to;4;select;l;;ucs;ob;l;lengthen;dy;;;l;;;$M=id;non;"""$(*,$(getvar,perimeter),0.113)"""<0;ucs;w;setenv;to;3)$(if,$(=,$(getenv,to),3),erase;l;;setenv;vp$(getenv,vcnt);$(getvar,lastpoint);;vcnt;$(+,$(getenv,vcnt),1);;to;2)$(if,$(=,$(getenv,to),4),model;select;横線を選択^X\copybase;non;0<0;p;;-layout;s;tmplo;pasteclip;non;0<0;zoom;e;setenv;hcnt;1;;to;5)$(if,$(=,$(getenv,to),5),;to;7;select;l;;ucs;ob;l;lengthen;dy;;;l;;;$M=id;non;"""$(*,$(getvar,perimeter),0.101)"""<0;ucs;w;setenv;to;6)$(if,$(=,$(getenv,to),6),erase;l;;setenv;hp$(getenv,hcnt);$(getvar,lastpoint);;hcnt;$(+,$(getenv,hcnt),1);;to;5)$(if,$(=,$(getenv,to),7),model;select;交点を構成するオブジェトを選択^X\zoom;o;p;;setenv;i;1;;j;1;;to;8)$(if,$(=,$(getenv,to),8),$(if,$(<,$(getenv,j),$(getenv,hcnt)),;to;9,-layout;d;tmplo;autosnap;$(getenv,as);aperture;$(getenv,ap);^Cundo;e))$(if,$(=,$(getenv,to),9),$(if,$(<,$(getenv,i),$(getenv,vcnt)),;to;10,;i;1;;j;$(+,$(getenv,j),1);;to;8))$(if,$(=,$(getenv,to),10),circle;int;$(getenv,vp$(getenv,i));$(getenv,hp$(getenv,j));25;setenv;i;$(+,$(getenv,i),1);;to;8)^M

使用方法は元のマクロのままです


lt2021で確認です
  • chibi-tom
  • 2020/06/01 (Mon) 09:02:56
Re: すべての交点に円を
単純に線分1本に対する交点なら

下記の
http://totthi.bbs.fc2.com/?act=reply&tid=14860759

とってぃさんのマクロ参考に修正しました
※、こちらも勝手に変更させていただきました

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;so;$(getvar,sortents);;sw;0;;r0;25;to;1,,,,,,)$(nth,$(getenv,to),,ray;int;【$(if,$(getenv,sw),2点間自動挿入,1点挿入)】^X\$M="""$(if,$(getvar,cmdactive),;setenv;to;2,setenv;sw;$(if,$(getenv,sw),0,1);;to;1)""",,,,,)$(nth,$(getenv,to),,,$(if,$(getenv,sw),sortents;127;line;non;@;int;\;ucs;ob;l;zoom;@;-10<0;setenv;to;4,setenv;to;3),,,,)$(nth,$(getenv,to),,,,circle;non;@;$(getenv,r0),,,)$(nth,$(getenv,to),,,,,;to;5;lengthen;dy;;;non;0<0;;;setenv;l1;$M="""$(getvar,perimeter);trim;c;non;0<0;non;$(getvar,perimeter)<0;;non;$(-,$(getvar,perimeter),0.1)"""<0;,,)$(nth,$(getenv,to),,,,,,;to;6;lengthen;dy;;;non;0<0;;;copy;p;;non;@;non;@;erase;p;;circle;non;$(getenv,l1)<0;$(getenv,r0),)$(nth,$(getenv,to),,,,,,,setenv;to;$M="""$(if,$(=,$(getenv,l1),$(getvar,perimeter)),1;erase;non;0<0;;circle;non;0<0;$(getenv,r0);ucs;p;zoom;p;sortents;$(getenv,so),4)""")^M

使用方法はこちらも元のマクロのままです


lt2021で確認です
  • chibi-tom
  • 2020/06/01 (Mon) 10:43:12
Re: すべての交点に円を
http://totthi.bbs.fc2.com/?act=reply&tid=16354290
ここにアップしていたプログラムのリンクを更新しました。

セキュリティ的に問題ないなら使ってみてもよいかもしれません。
  • Lon
  • 2020/06/01 (Mon) 12:03:37
解決です
chibi-tom様
Lon様
ありがとうございます。chibi-tom様の最初のマクロで動作しました。
皆様にご協力いただきまして、本当にありがとうございます。
おかげさまで解決とさせていただきます。

本当にありがとうございました。
  • emo
  • 2020/06/01 (Mon) 12:33:51
解決としたのにごめんなさい
chibi-tom様

先日はありがとうございました。いただいたマクロを実行して、気づいたことをご報告いたします。
1.田の字を書いた図形が、2つあるときに実行しますと円の数が倍数描かれます。田の字図形ですと交点が9個、二つあれば18個でよいと思われます、プロパティで見てみると36個あります、
2.マクロ実行後に オートスナップが解除されています。

以上2点について、ご検討いただければ幸いです。
また お手数をおかけしますが、よろしくお願いします。
LT2021 を使用しています。(体験版)
  • emo
  • 2020/06/02 (Tue) 16:37:01
Re: すべての交点に円を
すいませんが
zukki-さんのマクロを勝手にいじって点を描く部分を半径25mmの円を描く様に変更しただけなので
単純な図面でしか検証していません

どうやって座標を取得しているのか実はわかっていません

自分も、理解するまでには時間がかかるかもしれません(o_ _)o))
  • chibi-tom
  • 2020/06/02 (Tue) 17:38:56
Re: すべての交点に円を
chibi-tom様
ご意見ありがとうございます。
マクロ実行して、円の数を数えてみてわかったことです。でも使えないことはないです。
ありがとうございました。もし、お時間が許せるならば検証をお願いしたいと思います。
  • emo
  • 2020/06/03 (Wed) 07:18:23
Re: すべての交点に円を
少しだけわかったことを

>田の字を書いた図形が、2つあるとき

circle
int
縦線の任意の点を選択
横線の任意の点を選択
半径入力

以上を縦の線1本に対して横の線の数だけ動作を繰り返しているみたいです

よって、この場合は円の数が倍の数になってしまったんだと思います
田の字1つずつ別々に、2回するしか回避する方法は無いのかなと思います

マクロでは交点を交点として座標取得するのは難しいと思います
すべての交点を一括で、はマクロでは無理かもしれません
少なくとも自分には思いつかないですね


  • chibi-tom
  • 2020/06/09 (Tue) 12:06:16
Re: すべての交点に円を
>オートスナップが解除されています。


途中でマクロが止まってしまったときに戻せていないことが原因かと思われます
自分の環境では
autosnapとapertureは変更する必要がなかったのでその辺の設定を削除しました

また自己満足ですが最後にZOOMしたままなのが気になったのでマクロ起動前の画面表示に戻してみました

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),undo;be;-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;model;ucs;w;setenv;to;1)$(if,$(=,$(getenv,to),1),select;縦線を選択^X\copybase;non;0<0;p;;-layout;s;tmplo;pasteclip;non;0<0;zoom;e;setenv;vcnt;1;;to;2)$(if,$(=,$(getenv,to),2),;to;4;select;l;;ucs;ob;l;lengthen;dy;;;l;;;$M=id;non;"""$(*,$(getvar,perimeter),0.111)"""<0;ucs;w;setenv;to;3)$(if,$(=,$(getenv,to),3),erase;l;;setenv;vp$(getenv,vcnt);$(getvar,lastpoint);;vcnt;$(+,$(getenv,vcnt),1);;to;2)$(if,$(=,$(getenv,to),4),model;select;横線を選択^X\copybase;non;0<0;p;;-layout;s;tmplo;pasteclip;non;0<0;zoom;e;setenv;hcnt;1;;to;5)$(if,$(=,$(getenv,to),5),;to;7;select;l;;ucs;ob;l;lengthen;dy;;;l;;;$M=id;non;"""$(*,$(getvar,perimeter),0.101)"""<0;ucs;w;setenv;to;6)$(if,$(=,$(getenv,to),6),erase;l;;setenv;hp$(getenv,hcnt);$(getvar,lastpoint);;hcnt;$(+,$(getenv,hcnt),1);;to;5)$(if,$(=,$(getenv,to),7),model;select;交点を構成するオブジェトを選択^X\zoom;o;p;;setenv;i;1;;j;1;;to;8)$(if,$(=,$(getenv,to),8),$(if,$(<,$(getenv,j),$(getenv,hcnt)),;to;9,-layout;d;tmplo;^Czoom;p;;p;;p;undo;e))$(if,$(=,$(getenv,to),9),$(if,$(<,$(getenv,i),$(getenv,vcnt)),;to;10,;i;1;;j;$(+,$(getenv,j),1);;to;8))$(if,$(=,$(getenv,to),10),circle;int;$(getenv,vp$(getenv,i));$(getenv,hp$(getenv,j));25;setenv;i;$(+,$(getenv,i),1);;to;8)^M
  • chibi-tom
  • 2020/06/09 (Tue) 12:37:48
Re: すべての交点に円を
談話室でちょっと話題になったので
自分なりに全く違う考えで作ってみました
前の説明で示した田の字2つは問題なく交点のみに円が描けました

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;edm;$(getvar,EDGEMODE);;PA;1;;D1;直径^X\edgemode;0;select;\copybase;non;0<0;p;;setenv;to;1)$(if,$(=,$(getenv,to),1),-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;setenv;to;2)$(if,$(=,$(getenv,to),2),;to;9;select;l;;ucs;ob;l;lengthen;de;1;non;0<0;;ucs;p;;ob;l;lengthen;l;dy;;setenv;to;3)$(if,$(=,$(getenv,to),3),ucs;m;$(getvar,PERIMETER)<0;lengthen;de;1;non;0<0;;ucs;p;;p;;ob;l;lengthen;l;dy;;zoom;o;l;;setenv;to;4)$(if,$(=,$(getenv,to),4),;L1;$(getvar,PERIMETER);trim;c;non;0<0;$(getvar,PERIMETER)<0;;non;$(-,$(getvar,PERIMETER),0.1)<0;;lengthen;l;dy;;setenv;to;5)$(if,$(=,$(getenv,to),5),$(if,$(=,$(getenv,l1),$(getvar,PERIMETER)),ucs;p;zoom;p;erase;l;;setenv;to;2,setenv;to;6))$(if,$(=,$(getenv,to),6),ucs;m;$(getvar,PERIMETER)<0;zoom;c;0<0;;ucs;p;;p;setenv;to;7)$(if,$(=,$(getenv,to),7),;P$(getenv,PA);$(getvar,VIEWCTR);zoom;p;;p;setenv;to;8)$(if,$(=,$(getenv,to),8),ucs;ob;l;zoom;o;l;;setenv;PA;$(+,$(getenv,PA),1);;to;4)$(if,$(=,$(getenv,to),9),;PA;$(-,$(getenv,PA),1);;to;10)$(if,$(=,$(getenv,to),10),$(if,$(getenv,PA),circle;non;$(getenv,P$(getenv,PA));d;$(getenv,D1);setenv;to;9,;to;11))$(if,$(=,$(getenv,to),11),copybase;non;0<0;all;;model;pasteclip;non;0<0;edgemode;$(getenv,edm);-layout;d;tmplo;^Csetenv;to;0)^M

1.マクロ起動
2.直径指定
3.オブジェクト選択(線分のみを選択してください)

以上で交点に円を描いて終了します

lt2022で試しているのでバージョンが古いと使用できない可能性が高いです
LT2015以降なら何とか使えるかもしれませんが
それ以前では間違いなくlengthenコマンドのオプション部分の修正が必要です
そのまま使うとエラーが出ます
オプション仕様の記憶が無くて修正できませんでした(笑)
  • chibi-tom
  • 2021/12/09 (Thu) 14:51:57

返信フォーム






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