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

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

ブロックの基点で寸法作図
いつも大変お世話になっております。

ブロックの基点を基準に水平寸法、垂直寸法を一括で記入するマクロは作成可能でしょうか?

希望動作としては、

1.ブロックを複数選択
2.寸法を揃える位置(A点からB点)を選択
3.寸法が自動で作成

となります。

宜しくお願い致します。
  • kgw
  • 2020/03/26 (Thu) 16:25:07
Re: ブロックの基点で寸法作図
読解力に乏しいので理解できてないかもしれません
乏しいなりに考えてみました
こんな感じでしょうか?

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;cd;$(getvar,cmddia);;sw;0;undo;be;select;\copybase;non;0<0;p;;setenv;to;1,,,,,,,)$(nth,$(getenv,to),,xline;$(if,$(getenv,sw),v,h);寸法位置指定(R-Clickで切替)^X\$M="""$(if,$(getvar,cmdactive),;erase;l;;setenv;to;2,setenv;sw;$(if,$(getenv,sw),0,1);;to;1)""",,,,,,)$(nth,$(getenv,to),,,;p0;$M=$(getvar,lastpoint);;cd;$(getvar,cmddia);-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;cmddia;0;setenv;to;3,,,,,)$(nth,$(getenv,to),,,,;to;7;select;l;;ucs;ob;l;id;non;0<0;ucs;p;id;non;@;setenv;p1;$M="""$(getvar,lastpoint)""";erase;l;;setenv;to;4,,,,)$(nth,$(getenv,to),,,,,;to;7;select;l;;ucs;ob;l;id;non;0<0;ucs;p;id;non;@;setenv;p2;$M="""$(getvar,lastpoint)""";;to;5,,,)$(nth,$(getenv,to),,,,,,dimlinear;non;$(getenv,p1);non;$(getenv,p2);$(if,$(getenv,sw),v,h);non;$(getenv,p0);setenv;to;6,,)$(nth,$(getenv,to),,,,,,,copybase;non;0<0;l;;erase;p;;-layout;s;model;pasteclip;non;0<0;-layout;s;tmplo;setenv;to;3,)$(nth,$(getenv,to),,,,,,,,-layout;s;model;;d;tmplo;cmddia;$(getenv,cd);undo;e;^Csetenv;to;0)^M

1.マクロ起動
2.ブロックを複数選択(単体で選択してもエラーは出ませんが何も変化は無いです)
3.寸法位置を指定(R-Clickで垂直/水平の切替、最初は水平です)
>寸法を揃える位置(A点からB点)を選択
ここがちょっと理解できなかったです
水平位置又は垂直位置を1点だけ指定する仕様になっていますのでご注意ください

寸法位置指定後に自動で寸法を描いて終了します

・仮のレイアウトtmploを作成して処理していますのでもしレイアウト名tmploをご使用でしたら
tmploを別の名前に変更してご使用ください
・基準点が同じブロックを選択した場合寸法値『0』の寸法が描かれると思いますので終了後に削除願います

理解が間違えていたらスルーしてください

LT2019で動作確認です
  • chibi-tom
  • 2020/03/30 (Mon) 14:30:19
Re: ブロックの基点で寸法作図
すいません

選択順序のことを失念してました

オブジェクトの描かれた逆順に寸法振りしてしまうので
このマクロ使えないです
失礼しました、見なかったことにしてください

ただ、この理解であっているならマクロでは難しい気がします
と思うのは自分だけか?
  • chibi-tom
  • 2020/03/30 (Mon) 15:24:47
Re: ブロックの基点で寸法作図
画像を添付していたのですが、反映されていなかったようです、、、。
寸法の脚?の位置をオブジェクトの基準点からではなくて任意の位置に揃えたかった為、基準線(A点からB点)を指定したいとの考えでした。
例)オブジェクトが同列ではなくバラバラに配置されていた場合でも寸法の位置は同列のように

オブジェクトの作図順序が関係しているのですね、、。
別な手段を考えてみたいと思います。
ありがとうございました。
  • kgw
  • 2020/04/01 (Wed) 09:17:08
Re: ブロックの基点で寸法作図
あまり自信はないですが
とりあえずLT2019で確認しました

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;px;1;;sw;0;;aus;$(getvar,autosnap);undo;be;select;\setenv;to;1)$(if,$(=,$(getenv,to),1),orthomode;1;line;寸法補助線の起点位置1点目を指定^X\2点目を指定^X\;orthomode;$(getvar,orthomode);ucs;ob;l;copybase;non;0<0;p;;lengthen;dy;;;non;0<0;;;setenv;to;2)$(if,$(=,$(getenv,to),2),;l1;$(getvar,perimeter);-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;setenv;to;3)$(if,$(=,$(getenv,to),3),;to;4;select;l;;ucs;ob;l;id;non;0<0;ucs;p;$M=id;non;@;setenv;pa$(getenv,px);"""$(getvar,lastpoint)""";erase;l;;setenv;px;$(+,$(getenv,px),1);;to;3)$(if,$(=,$(getenv,to),4),;px0;$(-,$(getenv,px),1);;px;$(-,$(getenv,px),1);;py;$(-,$(getenv,px),1);-layout;s;model;;d;tmplo;setenv;to;5)$(if,$(=,$(getenv,to),5),$(if,$(getenv,px),line;non;$(getenv,pa$(getenv,px));non;$(index,0,$(getenv,pa$(getenv,px)))<0;;select;$(if,$(getenv,sw),l,l;p);;setenv;px;$(-,$(getenv,px),1);;to;5,;to;6))$(if,$(=,$(getenv,to),6),copybase;non;0<0;p;;erase;p;;pasteblock;non;0<0;explode;l;draworder;p;;b;setenv;to;7)$(if,$(=,$(getenv,to),7),$(if,$(getenv,py),trim;p;;$(getenv,l1)<0;;lengthen;dy;;;non;0<0;;;setenv;to;8,erase;non;0<0;p;;autosnap;$(getenv,aus);xline;h;寸法線の位置を指定^X\;erase;l;;setenv;p0;$M="""""""$(index,1,$(getvar,lastpoint))""""""";;to;10))$(if,$(=,$(getenv,to),8),;l1;$(getvar,perimeter);id;non;$(getvar,perimeter)<0;setenv;to;9)$(if,$(=,$(getenv,to),9),;pb$(getenv,py);$(index,0,$(getvar,lastpoint));;py;$(-,$(getenv,py),1);;to;7)$(if,$(=,$(getenv,to),10),;py;$(+,$(getenv,py),1);$(if,$(=,$(getenv,py),$(getenv,px0)),;to;11,dimlinear;non;$(getenv,pb$(getenv,py))<0;non;$(getenv,pb$(+,$(getenv,py),1))<0;non;$(getenv,p0)<90;setenv;to;10))$(if,$(=,$(getenv,to),11),erase;non;0<0;;ucs;p;undo;e;^Csetenv;to;0)^M

1.マクロ起動
2.ブロックを複数選択
3.寸法を揃える位置(A点からB点)を選択(作図例のように両端ともオブジェクトより外側を選択)
4.寸法位置を指定

寸法位置指定後に自動で寸法を作図して終了します

・仮のレイアウトtmploを作成して処理していますのでもしレイアウト名tmploをご使用でしたら
tmploを別の名前に変更してご使用ください
・基準点が同じブロックを選択した場合寸法値『0』の寸法が描かれると思いますので終了後に削除願います

できたらラッキー程度で考えください
  • chibi-tom
  • 2020/04/03 (Fri) 16:28:38
Re: ブロックの基点で寸法作図
LT2016で使用できませんでした、、、。

すみませんありがとうございました!
  • kgw
  • 2020/04/06 (Mon) 09:06:19
Re: ブロックの基点で寸法作図
そうですか、残念です
LT2015でも試してみましたができたので
Lt2016ならできそうな気もしますが
設定が違うのかもしれないですね

解決できるかはわかりませんが
どうしたら駄目なのかわからないので操作方法や
駄目になったところまでの流れを
コピペしていただければ何かわかるかもしれないです
  • chibi-tom
  • 2020/04/06 (Mon) 09:52:09
Re: ブロックの基点で寸法作図
現在の長さ: 5467.4753
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>:
変更するオブジェクトを選択 または [元に戻す(U)]:
コマンド: setenv
変数名を入力: to
値: 8
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: l1
値: 5467.47526649
コマンド: id
点を指定: non
5467.47526649<0
X = 5467.4753 Y = 0.0000 Z = 0.0000
コマンド: setenv
変数名を入力: to
値: 9
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: pb3
値: 5467.47526649
コマンド:
SETENV
変数名を入力: py
値: 2
コマンド:
SETENV
変数名を入力: to
値: 7
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド: trim
現在の設定: 投影モード=UCS、エッジモード=非延長
切り取りエッジを選択 ...
オブジェクトを選択 または <すべて選択>: p
認識された数: 3
オブジェクトを選択:
トリムするオブジェクトを選択 または Shift を押して延長するオブジェクトを選択 または
[フェンス(F)/交差(C)/投影モード(P)/エッジ(E)/削除(R)/元に戻す(U)]: 5467.47526649<0
トリムするオブジェクトを選択 または Shift を押して延長するオブジェクトを選択 または
[フェンス(F)/交差(C)/投影モード(P)/エッジ(E)/削除(R)/元に戻す(U)]:
コマンド: lengthen
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>: dy
変更するオブジェクトを選択 または [元に戻す(U)]:
コマンド:
LENGTHEN
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>: non
0<0
現在の長さ: 3638.4753
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>:
変更するオブジェクトを選択 または [元に戻す(U)]:
コマンド: setenv
変数名を入力: to
値: 8
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: l1
値: 3638.47526649
コマンド: id
点を指定: non
3638.47526649<0
X = 3638.4753 Y = 0.0000 Z = 0.0000
コマンド: setenv
変数名を入力: to
値: 9
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: pb2
値: 3638.47526649
コマンド:
SETENV
変数名を入力: py
値: 1
コマンド:
SETENV
変数名を入力: to
値: 7
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド: trim
現在の設定: 投影モード=UCS、エッジモード=非延長
切り取りエッジを選択 ...
オブジェクトを選択 または <すべて選択>: p
認識された数: 3
オブジェクトを選択:
トリムするオブジェクトを選択 または Shift を押して延長するオブジェクトを選択 または
[フェンス(F)/交差(C)/投影モード(P)/エッジ(E)/削除(R)/元に戻す(U)]: 3638.47526649<0
トリムするオブジェクトを選択 または Shift を押して延長するオブジェクトを選択 または
[フェンス(F)/交差(C)/投影モード(P)/エッジ(E)/削除(R)/元に戻す(U)]:
コマンド: lengthen
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>: dy
変更するオブジェクトを選択 または [元に戻す(U)]:
コマンド:
LENGTHEN
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>: non
0<0
現在の長さ: 1809.4753
計測するオブジェクトを選択 または [増減(DE)/比率(P)/全体(T)/ダイナミック(DY)] <ダイナミック(DY)>:
変更するオブジェクトを選択 または [元に戻す(U)]:
コマンド: setenv
変数名を入力: to
値: 8
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: l1
値: 1809.47526649
コマンド: id
点を指定: non
1809.47526649<0
X = 1809.4753 Y = 0.0000 Z = 0.0000
コマンド: setenv
変数名を入力: to
値: 9
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: pb1
値: 1809.47526649
コマンド:
SETENV
変数名を入力: py
値: 0
コマンド:
SETENV
変数名を入力: to
値: 7
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド: erase
オブジェクトを選択: non
0<0
認識された数: 1
オブジェクトを選択: p
認識された数: 3, 総数 4
オブジェクトを選択:
コマンド: autosnap
AUTOSNAP の新しい値を入力 <55>: 55
コマンド: xline
点を指定 または [水平(H)/垂直(V)/角度(A)/2 等分(B)/オフセット(O)]: h
通過点を指定: 寸法線の位置を指定*削除*
寸法線の位置を指定
通過点を指定:
コマンド: erase
オブジェクトを選択: l
認識された数: 1
オブジェクトを選択:
コマンド: setenv
変数名を入力: p0
値: -2349.53019523
コマンド:
SETENV
変数名を入力: to
値: 10
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: py
値: 1
コマンド: dimlinear
1 本目の寸法補助線の起点を指定 または <オブジェクトを選択>: non
<0
無効な点が入力されました。
1 本目の寸法補助線の起点を指定 または <オブジェクトを選択>: non
1809.47526649<0
2 本目の寸法補助線の起点を指定: non
-2349.53019523<90
非自動調整の寸法が作成されました。
寸法線の位置を指定 または [マルチ テキスト(M)/寸法値(T)/寸法値角度(A)/水平(H)/垂直(V)/回転(R)]: setenv
無効な点が入力されました。
寸法線の位置を指定 または [マルチ テキスト(M)/寸法値(T)/寸法値角度(A)/水平(H)/垂直(V)/回転(R)]: to
無効な点が入力されました。
寸法線の位置を指定 または [マルチ テキスト(M)/寸法値(T)/寸法値角度(A)/水平(H)/垂直(V)/回転(R)]: 10
寸法値: 1809
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値: 0
コマンド:
SETENV
変数名を入力: px
値: 1
コマンド:
SETENV
変数名を入力: sw
値: 0
コマンド:
SETENV
変数名を入力: aus
値: 55
コマンド: undo
現在の設定: 自動 = オン, コントロール = すべて, 合成 = はい, 画層 = はい
取り消す操作の数を入力 または [自動(A)/コントロール(C)/開始(BE)/終了(E)/マーク(M)/後退(B)] <1>: be
コマンド: select
オブジェクトを選択: *キャンセル*



何度もすみません。
宜しくお願い致します。
  • kgw
  • 2020/04/06 (Mon) 16:03:13
Re: ブロックの基点で寸法作図
すいません修正したマクロになってなかったです

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;px;1;;sw;0;;aus;$(getvar,autosnap);undo;be;select;\setenv;to;1)$(if,$(=,$(getenv,to),1),orthomode;1;line;寸法補助線の起点位置1点目を指定^X\2点目を指定^X\;orthomode;$(getvar,orthomode);ucs;ob;l;copybase;non;0<0;p;;lengthen;dy;;;non;0<0;;;setenv;to;2)$(if,$(=,$(getenv,to),2),;l1;$(getvar,perimeter);-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;setenv;to;3)$(if,$(=,$(getenv,to),3),;to;4;select;l;;ucs;ob;l;id;non;0<0;ucs;p;$M=id;non;@;setenv;pa$(getenv,px);"""$(getvar,lastpoint)""";erase;l;;setenv;px;$(+,$(getenv,px),1);;to;3)$(if,$(=,$(getenv,to),4),;px0;$(-,$(getenv,px),1);-layout;s;model;;d;tmplo;setenv;to;5)$(if,$(=,$(getenv,to),5),;py;$(getenv,px0);line;non;$(getenv,pa$(getenv,px));non;$(index,0,$(getenv,pa$(getenv,px)))<0;;select;l;;setenv;px;$(-,$(getenv,px),1);;to;6)$(if,$(=,$(getenv,to),6),$(if,$(getenv,px),line;non;$(getenv,pa$(getenv,px));non;$(index,0,$(getenv,pa$(getenv,px)))<0;;select;l;p;;setenv;px;$(-,$(getenv,px),1);;to;6,;to;7))$(if,$(=,$(getenv,to),7),copybase;non;0<0;p;;erase;p;;pasteblock;non;0<0;explode;l;draworder;p;;b;setenv;to;8)$(if,$(=,$(getenv,to),8),$(if,$(getenv,py),trim;p;;$(getenv,l1)<0;;lengthen;dy;;;non;0<0;;;setenv;to;9,erase;non;0<0;p;;autosnap;$(getenv,aus);xline;h;寸法線の位置を指定^X\;erase;l;;setenv;p0;$M="""""""$(index,1,$(getvar,lastpoint))""""""";;to;11))$(if,$(=,$(getenv,to),9),;l1;$(getvar,perimeter);id;non;$(getvar,perimeter)<0;setenv;to;10)$(if,$(=,$(getenv,to),10),;pb$(getenv,py);$(index,0,$(getvar,lastpoint));;py;$(-,$(getenv,py),1);;to;8)$(if,$(=,$(getenv,to),11),$(if,$(=,$(getenv,py),$(getenv,px0)),;to;12,;py;$(+,$(getenv,py),1);dimlinear;non;$(getenv,pb"""$(getenv,py)""")<0;non;$(getenv,pb"""$(+,$(getenv,py),1)""")<0;non;$(getenv,p0)<90;setenv;to;11))$(if,$(=,$(getenv,to),12),erase;non;0<0;;ucs;p;undo;e;^Csetenv;to;0)^M

これで試してください
  • chibi-tom
  • 2020/04/06 (Mon) 17:38:36
Re: ブロックの基点で寸法作図
度々、すいません
再度試したところエラーは出ませんでしたが
寸法がうまく作図されませんでした

もう少し自分でもチェックしなおします
  • chibi-tom
  • 2020/04/07 (Tue) 08:17:40
Re: ブロックの基点で寸法作図
再チェックしました
これでいけるかな?

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;px;1;;sw;0;;aus;$(getvar,autosnap);undo;be;select;\setenv;to;1)$(if,$(=,$(getenv,to),1),orthomode;1;line;寸法補助線の起点位置1点目を指定^X\2点目を指定^X\;orthomode;$(getvar,orthomode);ucs;ob;l;copybase;non;0<0;p;;lengthen;dy;;;non;0<0;;;setenv;to;2)$(if,$(=,$(getenv,to),2),;l1;$(getvar,perimeter);-layout;d;tmplo;;n;tmplo;;s;tmplo;point;0<0;erase;all;;pasteclip;non;0<0;zoom;e;setenv;to;3)$(if,$(=,$(getenv,to),3),;to;5;select;l;;ucs;ob;l;id;non;0<0;ucs;p;id;non;@;setenv;to;4)$(if,$(=,$(getenv,to),4),setenv;pa$(getenv,px);$(getvar,lastpoint);erase;l;;setenv;px;$(+,$(getenv,px),1);;to;3)$(if,$(=,$(getenv,to),5),;px0;$(-,$(getenv,px),1);;px;$(-,$(getenv,px),1);;py;$(-,$(getenv,px),1);-layout;s;model;;d;tmplo;setenv;to;6)$(if,$(=,$(getenv,to),6),$(if,$(getenv,px),line;non;$(getenv,pa$(getenv,px));non;$(index,0,$(getenv,pa$(getenv,px)))<0;;select;l;p;;setenv;px;$(-,$(getenv,px),1);;to;6,;to;7))$(if,$(=,$(getenv,to),7),copybase;non;0<0;p;;erase;p;;pasteblock;non;0<0;explode;l;draworder;p;;b;setenv;to;8)$(if,$(=,$(getenv,to),8),$(if,$(getenv,py),trim;p;;$(getenv,l1)<0;;lengthen;dy;;;non;0<0;;;setenv;to;9,;pb0;0;erase;non;0<0;p;;autosnap;$(getenv,aus);xline;h;寸法線の位置を指定^X\;erase;l;;setenv;p0;$M="""""""$(index,1,$(getvar,lastpoint))""""""";;to;11))$(if,$(=,$(getenv,to),9),;l1;$(getvar,perimeter);id;non;$(getvar,perimeter)<0;setenv;to;10)$(if,$(=,$(getenv,to),10),;pb$(getenv,py);$(index,0,$(getvar,lastpoint));;py;$(-,$(getenv,py),1);;to;8)$(if,$(=,$(getenv,to),11),$(if,$(=,$(getenv,py),$(getenv,px0)),;to;12,;py;$(+,$(getenv,py),1);dimlinear;non;$(getenv,pb"""$(getenv,py)""")<0;non;$(getenv,pb"""$(+,$(getenv,py),1)""")<0;non;$(getenv,p0)<90;setenv;to;11))$(if,$(=,$(getenv,to),12),erase;non;0<0;;ucs;p;undo;e;^Csetenv;to;0)^M
  • chibi-tom
  • 2020/04/07 (Tue) 11:47:15
Re: ブロックの基点で寸法作図
できました!希望通りです!

何度もありがとうございました。
  • kgw
  • 2020/04/09 (Thu) 08:34:19

返信フォーム






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