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

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

累積面積計算
はじめまして。
現在指定した画層にあるオブジェクトの累積面積をテキストで吐き出す、というマクロを作成できないかと試みているのですが初心者には高度すぎて行き詰っており、、
管理人様のお力を貸して頂きたく書き込んでみました。
そういったマクロを教えて頂くことはできますでしょうか><
ちなみに、可能であれば表機能と連携できてその数字指定したセルに表示できたらいいなと思っています。
  • いくみ
  • 2016/03/30 (Wed) 15:33:10
Re: 累積面積計算
管理人ではありませんが、気になったので。

まず、マクロではがばっとオブジェクトを選択して、累積面積を出す、ということは無理です。
出したいオブジェクトを、1つ1つ選択していくなら、ここにある累積面積表示or記入マクロを応用すればなんとななるかもしれませんが。

それと、使用されているバージョンを明記された方がいいですよ。
バージョンによって、作り方が多少変わるかもしれないので。
  • LUNE
  • 2016/03/31 (Thu) 10:10:48
Re: 累積面積計算
出張中で不在でした。。

とりあえず

マクロ屋 138.一発合計長さ計測
http://ameblo.jp/totthi-macro/entry-11492915852.html

こちらをお試しください。
  • とってぃ
  • 2016/03/31 (Thu) 11:20:11
Re: 累積面積計算
コメント頂きありがとうございます。
>マクロではがばっとオブジェクトを選択して、累積面積を出す、ということは無理です。
そうなんですか!!ショック… (;;)
autocadのカスタマイズはかなり自由度高いようだったので期待していたのですが残念。。
field機能などと関連させてもやはり難しいのですかね…

バージョンは2013LTを使用しています ><

  • いくみ
  • 2016/03/31 (Thu) 11:30:48
Re: 累積面積計算
ちょっと嘘ついちゃった。できなくはないのか。

でも、マクロだけでやるには、結構難しい案件だと思います。
あとは、とってぃさんにお任せします。

  • LUNE
  • 2016/03/31 (Thu) 11:40:13
Re: 累積面積計算
>とってぃさん、LUNEさん

とってぃさんの下さったお返事気付かず行き違いになっておりました。。
合計長さ計算のマクロ、ありがとうございます!
一発合計も一応できるのですね!でもやはりLUNEさんの仰っているようにかなり複雑そうです…

クリックで選択せずに予めマクロで画層を指定しておいてそこに属するオブジェクトの面積を計算、というのはやはり難しいでしょうか。

すみません、ご説明が不十分だったのですが実は積算の為の拾い図用のauto図面を作成したく、同じ画層内に書き込んだ面積の合計が再計算などをすればすぐにわかる表のようなものを作れないかなと思っております。
  • いくみ
  • 2016/03/31 (Thu) 15:23:12
Re: 累積面積計算
お任せしたのに、出てきてしまった。

特定画層内、というのはその画層以外をフリーズしてselect;allで何とかなりそうですが。

ご要望の内容は、正直マクロでやるには複雑すぎると思います。
フィールドでやるにも、フィールドの対象は1つのオブジェクトに限定されるので、無理ですね・・・
R版なら、Lispでできなくもなさそうですけど・・・
  • LUNE
  • 2016/03/31 (Thu) 16:15:09
Re: 累積面積計算
ちょっと思いついた。

出したオブジェクトの面積を、ユーザー変数に入れて、フィールドで取り出すのはできそうです。

138.一発合計長さ計測の面積バージョン

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;cv;$(getenv,CreateViewports);select;\copybase;non;0<0;p;;setenv;CreateViewports;0;-layout;n;KDIST;;s;KDIST;pasteclip;non;0<0;zoom;e;setenv;sw;0;;to;1,;to;3;select;l;;area;o;l;erase;l;;setenv;to;2,,)$(nth,$(getenv,to),,,;ta;$(if,$(getenv,sw),$(+,$(getvar,area),$(getenv,ta)),$(getvar,area));;sw;1;;to;1,-layout;s;Model;;d;KDIST;setenv;CreateViewports;$(getenv,cv);^C;^Z^X【合計:$(getenv,ta)】^X)^M

で、フィールドをDIESEL式にして$(getenv,ta)とすると、出た値をフィールドに入れられます。
  • LUNE
  • 2016/03/31 (Thu) 17:36:44
Re: 累積面積計算
>LUNEさん

こんな無茶ぶりに色々考えて頂いてありがとうございます!!! ><

早速やってみたのですが、最初のマクロを起動すると一端入力待ちの状態になります。
そこであるオブジェクトを指定すると確かに「$(getenv,ta)」で表示させた領域にその面積が吐き出されるのですがそのクリックしたオブジェクトのみの数値で上手く合計した数値が出せず…

私の使い方が間違っているのでしょうか ;;
ちなみに、書いていただいたマクロでは画層は現在の画層を指定しているということですよね?

度々すみませんがお時間あればご回答頂けると嬉しいです m(__)m
  • いくみ
  • 2016/03/31 (Thu) 19:15:10
Re: 累積面積計算
ごめんなさい。画層に関しては今日書きます。
いったん、とってぃさんのマクロを面積バージョンにしたものを挙げました。
選択オブジェクトの面積はちゃんと出てるんですね?

じゃあ、これを加工することにします。
画層は現在の画層でいいですか?
  • LUNE
  • 2016/04/01 (Fri) 09:10:41
Re: 累積面積計算
現在層全部計算バージョン。
コマンド終了後は、現在層のみ残してフリーズとなります。
画層状態使って戻そうと試みたけど、テキストウインドウ出ちゃうとマクロが進まないみたい。とってぃさーん。

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;cv;$(getenv,CreateViewports);setenv;to;1,,,,)$(nth,$(getenv,to),,-layer;f;*;;select;all;;copybase;non;0<0;p;;setenv;to;2,,,)$(nth,$(getenv,to),,,;setenv;CreateViewports;0;-layout;n;KDIST;;s;KDIST;pasteclip;non;0<0;zoom;e;setenv;sw;0;;to;3,;to;5;select;l;;area;o;l;erase;l;;setenv;to;4,,)$(nth,$(getenv,to),,,,,;ta;$(if,$(getenv,sw),$(+,$(getvar,area),$(getenv,ta)),$(getvar,area));;sw;1;;to;3,-layout;s;Model;;d;KDIST;setenv;CreateViewports;$(getenv,cv);^C;^Z^X【合計:$(getenv,ta)】^X)^M
  • LUNE
  • 2016/04/01 (Fri) 11:49:27
Re: 累積面積計算
ごめんなさい、早とちりしてしまいました;
選択オブジェクトの面積はちゃんと出ておりました ◎
フィールドのDIESEL式に入れて表と連携する、ということもできました \(*^^*)/

画層は現在画層で大丈夫です!

すみません、大変助かります…ありがとうございます ;▽;
  • いくみ
  • 2016/04/01 (Fri) 11:49:33
Re: 累積面積計算
解決済みですが、自己満足のため投稿させてください。

現在画層以外フリーズさせて選択
面積計算
画像状態を元に戻す

をやってみました。nthをifに変えたり、途中modemacroを使っていたりして読みにくいかも知れません。

*^C^C$M=setenv;to;0;$(if,$(=,0,$(getenv,to)),modemacro;^SU+0024(getenv,ta);setenv;cv;$(getenv,CreateViewports);;lsn;tmplsn;;ta;0;;to;1)$(if,$(=,1,$(getenv,to)),-layer;A;S;$(getenv,lsn);;;F;*;;select;\copybase;non;0<0;P;;setenv;CreateViewports;0;-layout;N;KDIST;;S;KDIST;pasteclip;non;0<0;zoom;e;setenv;to;2)$(if,$(=,2,$(getenv,to)),;to;4;select;L;;area;o;l;erase;l;;setenv;to;3)$(if,$(=,3,$(getenv,to)),;ta;$(+,$(getvar,area),$(getenv,ta));;to;2)$(if,$(=,4,$(getenv,to)),-layout;S;Model;;D;KDIST;setenv;CreateViewports;$(getenv,cv);-layer;A;R;$(getenv,lsn);D;$(getenv,lsn);;^C;^X【合計:$(getenv,ta)】^X)^M


>LUNEさん
最初この質問が来たときLISPか最低でもAcadRemoconがないと無理だと思っていましたが、CreateViewportsを使って実現したときすごいと思いました。
前からCreateViewportsと長い名前使うのはなぜだろうと思っていましたがCreateViewportsってシステム変数みたいなものなのですね、setevn使うのに。

大変勉強になりました、ありがとうございました。
  • zukki-
  • 2016/04/01 (Fri) 13:11:44
Re: 累積面積計算
おおー、- zukki-さんすごいです!

ちょっとだけ変更させていただいて、現在層全部でやっちゃうVer.を。
再計算のときもこのコマンドで。

*^C^C$M=setenv;to;0;$(if,$(=,0,$(getenv,to)),modemacro;^SU+0024(getenv,ta);setenv;cv;$(getenv,CreateViewports);;lsn;tmplsn;;ta;0;;to;1)$(if,$(=,1,$(getenv,to)),-layer;A;S;$(getenv,lsn);;;F;*;;select;\copybase;non;0<0;P;;setenv;CreateViewports;0;-layout;N;KDIST;;S;KDIST;pasteclip;non;0<0;zoom;e;setenv;to;2)$(if,$(=,2,$(getenv,to)),;to;4;select;L;;area;o;l;erase;l;;setenv;to;3)$(if,$(=,3,$(getenv,to)),;ta;$(+,$(getvar,area),$(getenv,ta));;to;2)$(if,$(=,4,$(getenv,to)),-layout;S;Model;;D;KDIST;setenv;CreateViewports;$(getenv,cv);-layer;A;R;$(getenv,lsn);D;$(getenv,lsn);;^C;^X【合計:$(getenv,ta)】^X)^M
  • LUNE
  • 2016/04/01 (Fri) 14:40:53
Re: 累積面積計算
>LUNEさん、zukkiさん

わーーー!!!!ありがとうございます!!!!
一度は無理かなと諦めたのでまさかこんなに完璧に実装してくださるなんて…;U;

ありがたく使用させて頂きますーーーーー!!!! ><

それにしてもautocadのマクロって面白いですね。。
組み上がっていく間にこういう考え方がされているのか…というところまで見せて頂くことができて俄然興味がわきました!
私も自分でここまで書けたら楽しいのだろうなぁと思いましたが道のりは長そうです ^^;

とにかく本当に、みなさんこんな初心者の質問に快く答えて頂きありがとうございました m(><)m
今後もこっそり覗きながら勉強させて頂きたいと思います。


  • いくみ
  • 2016/04/04 (Mon) 11:46:35

返信フォーム






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