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

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

マクロの修正お願いします
こんにちは
Autocad R版 2024を使用しています。
早速ですがマクロの修正をお願いしたいです。
やりたい事は画像の通りで、線分で描かれた3行の表があり、
1行目の高さを、2,3行目の基準高さと同じにしたいです。

DISTコマンドで一行目高さと、基準高さを測り、それぞれ変数に代入。
ストレッチで一番上(赤線)を選択し、「一行目高さ-基準高さ」の値(一行目ST寸法)で下げる。
表題がズレた状態になってしまうので、MOVEで表題を「一行目ST寸法÷2」の値(表題MV寸法)で下げる。
上記の手順を考え以下のマクロを記述しました。
※TXTSLコマンドはLISPで「表題」の文字を取得する為に実行しています。
※一行目ST寸法、表題MV寸法はそれぞれストレッチやMOVEしたい変数の値です。

^C^C_dist;\\setenv;一行目高さ;$M=$(getvar,DISTANCE);dist;\\setenv;基準高さ;$M="$(getvar,DISTANCE)";setenv;一行目ST寸法;$M=$(-,$(getenv,一行目高さ),$(getenv,基準高さ));setenv;表題MV寸法;$M=$(/,$(getenv,一行目ST寸法),2);stretch;\\;d;0,-$M=$(getenv,一行目ST寸法);TXTSL;表題;move;d;0,-$M=$(getenv,表題MV寸法);

これで実行すると、DISTでそれぞれ変数に代入はできているのですが、一行目ST寸法と表題MV寸法が上手く計算されずによく分からない値が代入されてしまいます。
いろいろなファイルごとの図面で試してみても代入される値が0だったりとうまくいかないです。
DIESEL評価を遅らせる(?)などいろいろ試行錯誤してもうまくいかず・・・
よく分からないのが、上記のマクロ記述文を実行し、失敗したらCtrl+Zでマクロ実行前まで戻り、何度か繰り返しマクロを実行するとたまにちゃんと計算と代入されて上手く動きます。
分かりにくく申し訳ありませんが修正すること可能でしょうか。
よろしくお願い致します。
  • 無名
  • 2025/04/29 (Tue) 00:23:36
Re: マクロの修正お願いします
^C^C_dist;\\setenv;一行目高さ;$M=$(getvar,DISTANCE);dist;\\setenv;基準高さ;$M="$(getvar,DISTANCE)";setenv;一行目ST寸法;$M="""$(-,$(getenv,一行目高さ),$(getenv,基準高さ))""";setenv;表題MV寸法;$M="""""""$(/,$(getenv,一行目ST寸法),2);stretch;\\;d;0,-$M=$(getenv,一行目ST寸法)""""""";TXTSL;表題;move;d;0,-$M="""""""""""""""$(getenv,表題MV寸法)""""""""""""""";

多分、これで動くのではないかと。

setenv;基準高さ;$M="$(getvar,DISTANCE)";
ここで処理を1回遅らせていますが、これはOK

その後は、一行目ST寸法をsetenvするには、一行目高さと基準高さがsetenvされた後じゃないとダメなので、"が3個必要
表題MV寸法をsetenvするにはは、一行目ST寸法をsetenvした後になるので、"が7つ必要
その後表題MV寸法をgetenvするには、表題MV寸法のsetenvされた後になるので、"が15個必要になります。



  • LUNE
  • 2025/04/30 (Wed) 11:43:21
Re: マクロの修正お願いします
LUNE様、ご修正頂きありがとうございます!
処理を遅らせるというのが私全然分かっていなかったです・・・勉強になります。
修正頂いたマクロで実行してみたところ、正直上手く動かなかったのですが " を修正したところ動きました!
が、追加でやらなければいけない事が出来てしまい、以下のようにマクロを追加したのですが、処理の遅らせ方が上手くいっていないのかマクロが途中で止まってしまいます。
(setenv=表題MV寸法はコードが長くなりすぎるようだったので消しました)

^C^C_dist;\\setenv;一行目高さ;$M=$(getvar,DISTANCE);dist;\\setenv;基準高さ;$M="$(getvar,DISTANCE)";setenv;一行目ST寸法;$M="""$(-,$(getenv,一行目高さ),$(getenv,基準高さ))""";stretch;\\;d;0,-$M="""""""$(getenv,一行目ST寸法)""""""";TXTSL;表題;move;d;0,-$M="""""""""""""""$(/,$(getenv,一行目ST寸法),2)""""""""""""""";scale;\\;\$M="$(/,5,$(getvar,DISTANCE))";scale;\$M=$(getvar,dimscale);

一行目高さを基準高さと同じにした後(ここは動く)、Scaleコマンドで表全体の行高さを一度5に縮尺して(5÷「2回目のDISTANCE」ここまで動く)、その後、再度Scaleコマンドで表全体を、寸法の尺度DIMSCALE(図面が1:20だったら20倍する)で倍尺させる必要があります(ここが動かないです)
2回目のScaleコマンドが実行されず終了してしまいます。
一応最後の方の$(getvar,DISTANCE)や$(getvar,dimscale)を "26個とかで囲ったりなどしてみましたが基準点エラーなどと言われ動きません・・・

追加で修正願い大変申し訳ないのですが、ダメな点分かりますでしょうか
  • 無名
  • 2025/05/01 (Thu) 12:14:16
Re: マクロの修正お願いします
$M=以下の文字数制限に引っかかってしまっていると思われます。
nthで分割してみました。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),_dist;\\setenv;一行目高さ;$M="""$(getvar,DISTANCE)""";dist;\\setenv;基準高さ;$M="""""""$(getvar,DISTANCE)""""""";setenv;一行目ST寸法;$M="""""""$(-,$(getenv,一行目高さ),$(getvar,DISTANCE))""""""";setenv;to;1,,)$(nth,$(getenv,to),,stretch;\\;d;0","-$(getenv,一行目ST寸法);TXTSL;表題;move;l;;d;0","-$(/,$(getenv,一行目ST寸法),2);setenv;to;2,)$(nth,$(getenv,to),,,scale;\\;\$M=$(*,$(/,5,$(getvar,DISTANCE)),$(getvar,dimscale));setenv;to;0)^M

setenv;一行目ST寸法 については、基準高さを使わず、基準高さを設定する時点のDISTANCEで計算しています。それにより、基準高さを設定するのと同じ遅らせるタイミングで計算できるので。
最後のscaleは、5÷「2回目のDISTANCE」×DIMSCALEを一度に計算しています。
  • LUNE
  • 2025/05/02 (Fri) 13:11:53
Re: マクロの修正お願いします
評価遅延を考えたくないなら(未検証)
*^C^C$M=setenv;to;0;
$(if,$(=,$(getenv,to),0),_dist;\\setenv;to;1)
$(if,$(=,$(getenv,to),1),;一行目高さ;$(getvar,DISTANCE);dist;\\setenv;to;2)
$(if,$(=,$(getenv,to),2),;基準高さ;$(getvar,DISTANCE);;to;3)
$(if,$(=,$(getenv,to),3),;一行目ST寸法;$(-,$(getenv,一行目高さ),$(getenv,基準高さ));;to;4)
$(if,$(=,$(getenv,to),4),;表題MV寸法;$(/,$(getenv,一行目ST寸法),2);;to;5)
$(if,$(=,$(getenv,to),5),stretch;\\;d;0","-$(getenv,一行目ST寸法);setenv;to;6)
$(if,$(=,$(getenv,to),6),TXTSL;表題;move;d;0","-$(getenv,表題MV寸法);setenv;to;7)
$(if,$(=,$(getenv,to),7),scale;\\;\$(/,5,$(getenv,基準高さ));setenv;to;8)
$(if,$(=,$(getenv,to),8),^Cscale;P;;NON;@;$(getvar,dimscale))^M
  • 名無し
  • 2025/05/02 (Fri) 14:36:45
Re: マクロの修正お願いします
LUNE様
修正ありがとうございます!希望通りの動きでマクロ動作しました!
計算方法や考え方まで短縮して頂いて流石としか言いようがありません・・・
nth・・・まだまだそこまで自分が到達していなく理解が追いつきません^^;
もっと勉強して参ります。本当にありがとうございましたm(__)m

名無し様
マクロ作成ありがとうございます!
評価の遅延を考えずにマクロが作れるなんて発想が無く驚きです。
当方GWに入ってしまったので週明けに動作検証してみようと思います。
この考え方も今後のマクロ作成に取り入れていきたいので動作解析してみます。
ありがとうございました!
  • 無名
  • 2025/05/03 (Sat) 07:37:23

返信フォーム






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