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

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

フィールドで面積と長さ表示を簡単にしたい
フィールドで面積を簡単にm表示表示したいのですが
オブジェクトを選んで
面積や長さとか項目から選んで
単位の精度を選んで
単位m2表示にするのに0.000001に設定したり
選ぶことが多いのですが
マクロで作れるものなのでしょうか。
よろしくお願いします。

  • ちあき
  • 2021/09/15 (Wed) 19:42:37
Re: フィールドで面積と長さ表示を簡単にしたい
>表示したい
ここがちょっと不明ですが
文字記入したいのかなとも思ったのですけど
それだと表示という表現はしないかなと思いました

とりあえずコマンドラインに表示していますので
コマンドラインを2段以上に設定しておいてください

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),offset;;オブジェクト選択(R-Clickで終了)^X\$M="""$(if,$(getvar,CMDACTIVE),;select;non;@;non;@;;area;o;non;@;setenv;to;1,^Csetenv;to;0)""",,)$(nth,$(getenv,to),,ray;面積:L-Click/長さ:R-Click^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;ar1;$(/,$(getvar,AREA),1000000);;sw;1;;to;2,setenv;l1;$(/,$(getvar,PERIMETER),1000);;sw;0;;to;2)""",)$(nth,$(getenv,to),,,^Csetenv;^Z$(if,$(getenv,sw),面積=$(getenv,ar1)㎡,長さ=$(getenv,l1)m)^X)^M

1.マクロ起動
2.オブジェクト選択(R-Clickで終了)
3.面積(L-Click)か長さ(R-Click)を指定
4.コマンドラインに面積または長さを表示して終了

  • chibi-tom
  • 2021/09/16 (Thu) 09:11:09
Re: フィールドで面積と長さ表示を簡単にしたい
フィールドの項目設定、面倒ですよね。
しかも、新規でフィールド挿入する場合は、最初から全部の項目を選び直す必要があるので・・・

結論から言うと、マクロでフィールドの項目設定を操作することはできません。
FIELDコマンドはダイアログ版しか用意されていないので、コマンドラインで操作できないからです。

R版をお使いであれば、Lispでなんとかできますが。
  • LUNE
  • 2021/09/16 (Thu) 09:53:48
Re: フィールドで面積と長さ表示を簡単にしたい
>フィールドの項目設定
フィールド使わないからそもそもが見当違いでした

失礼しました
  • chibi-tom
  • 2021/09/16 (Thu) 10:10:00
Re: フィールドで面積と長さ表示を簡単にしたい
手数が増えますが

フィールドをDIESEL式にして$(getenv,フィールド名)として製作しておき
下記マクロを実行すれば可能?

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;フィールド名;\offset;;オブジェクト選択(R-Clickで再入力)^X\$M="""$(if,$(getvar,CMDACTIVE),;select;non;@;non;@;;area;o;non;@;setenv;to;1,setenv;to;0)""",,)$(nth,$(getenv,to),,ray;面積:L-Click/長さ:R-Click^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;$(getenv,フィールド名);$(/,$(getvar,AREA),1000000)㎡;;sw;1;;to;2,setenv;$(getenv,フィールド名);$(/,$(getvar,PERIMETER),1000)m;;sw;0;;to;2)""",)$(nth,$(getenv,to),,,regen;^Csetenv;to;0)^M

1.マクロ起動
2.フィールド名を入力
3.オブジェクト選択(R-Clickでフィールド名の再入力)
4.面積(L-Click)か長さ(R-Click)を指定

※、フィールド名が同じものはすべて一緒に更新されますのでご注意ください

繰り返しになりますがフィールドを使わないので
見当違いはスルーしてください
  • chibi-tom
  • 2021/09/16 (Thu) 11:07:38
Re: Re: フィールドで面積と長さ表示を簡単にしたい
Lineさん R版なのですが
Lispでできるんですか!?
教えて頂きたいです!
  • ちあき
  • 2021/09/24 (Fri) 08:03:58
Re: フィールドで面積と長さ表示を簡単にしたい
Lispの使い方はご理解いただいていると判断して、以下にコードを記載します。
(※2022/6/1 修正内容も含め、Lispを再掲載しました)
-----------------------------------------------------------------------------
(defun c:fsqm
(/ ename vlobj obid pt mt fstr dsc c_unt pref suff pr_0 pr)
(setq pref "") ;接頭辞を指定
(setq suff "㎡") ;接尾辞を指定
(setq c_unt "1e-006") ;変換単位を指定 ただし、浮動小数点表示
(setq pr_0 "pr2") ;精度を指定 小数点以下の桁数をpr0~pr8で表示 現在の精度の場合は空白
(setq pr (if (= pr_0 "")
""
(strcat "\%" pr_0)
)
) ;精度を示す文字列を作成


(vl-load-com)
(setq ename (car (entsel)))
(setq vlobj (vlax-ename->vla-object ename))
(setq obid (itoa (vla-get-objectid vlobj)))
;図形IDを10進法に変換 itoa必要(rtosだと64bitで不具合)

(setq fstr (strcat
"\%\<\\AcObjProp.16.2 Object(\%\<\\_ObjId "
obid "\>\%).Area \\f \"%lu2"
pr "\%ps["
pref ","
suff "]%ct8["
c_unt "]\" \>\%"
)
) ;フィールド文字列を作成
;(setq tsty (getvar "TEXTSTYLE"));現在の文字スタイルを取得
(setq dsc (getvar "DIMSCALE")) ;DIMSCALEの値を取得
(setq mt (* dsc 2.8)) ;DIMSCALEのを2.8倍を文字高さとする
(setq pt (getpoint "\n文字挿入位置を指定: "))
;異尺度対応の文字スタイル・文字高さを設定した文字スタイルを分岐
(if (or (LM:isAnnotative) (textHeight))
(command "text" pt "" fstr)
(command "text" pt mt "" fstr)
)
(princ)
)

'異尺度対応の文字スタイルかどうかを判定
(defun LM:isAnnotative ( / object annotx )
(and
(setq object (tblobjname "STYLE" (getvar "TEXTSTYLE")))
(setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
(= 1 (cdr (assoc 1070 (reverse annotx))))
)
)

'文字高さ設定した文字スタイルかどうかを判定
(defun textHeight ( / object txtH )
(and
(setq object (tblobjname "STYLE" (getvar "TEXTSTYLE")))
(setq txtH (cdr (assoc 40 (entget object))))
(/= 0 txtH)
)
)
-----------------------------------------------------------------------------
メモ帳を使用するなら、文字コードはANSIで保存してください。
コマンドはfsqm、上記のLispはフィールドの面積で取得される値を、1e-006(0.000001)倍して、最後に「㎡」を付加したダイナミックテキストにします。
文字スタイルは現在のスタイル、文字のサイズは現在のDIMSCALEの2.8倍となります。

あとは注釈を参考に、お好みの設定にどうぞ。
  • LUNE
  • 2021/09/24 (Fri) 09:35:59
Re: Re: フィールドで面積と長さ表示を簡単にしたい
Luneさん
ご親切に
ありがとうございました!
色々試したのですが
フィールドの文字列の作成のところで
止まってしまいます。
2019R なのですが
原因はあるのでしょうか?
  • ちあき
  • 2021/09/28 (Tue) 20:17:26
Re: フィールドで面積と長さ表示を簡単にしたい
>フィールドの文字列の作成のところで止まってしまいます。
とのことですが、Lispは記載通りのものをご使用でしょうか?
それともなにか変更されましたか?

文字列作成で止まるということは、「文字挿入位置を指定:」がコマンドラインに出ないということでしょうか。
止まるときに、コマンドラインには何か表示されますか?
  • LUNE
  • 2021/09/29 (Wed) 08:56:56
Re: フィールドで面積と長さ表示を簡単にしたい
もしかして、現在の文字スタイルは高さが設定されているものですか?
  • LUNE
  • 2021/09/29 (Wed) 09:51:49
Re: Re: フィールドで面積と長さ表示を簡単にしたい
LUNEさん
エラー症状をお伝えできていなく
大変失礼いたしました。
記載とおりで、変更せず実行しますと
下記コマンドラインになります。

オブジェクトを選択:
文字挿入位置を指定: text
現在の文字スタイル: "100" 文字の高さ: 350.00 異尺度対応: いいえ 位置合わせ: 左寄せ
文字列の始点を指定 または [位置合わせオプション(J)/文字スタイル変更(S)]:
文字列の角度を指定 <0.0000>: 280
文字列を入力:
コマンド: %<\AcObjProp.16.2 Object(%<\_ObjId 2195717553120>%).Area \f "%lu2%pr2%ps[, ㎡]%ct8[1e-006]" >% そのようなコマンド "%<\ACOBJPROP.16.2 OBJECT(%<\_OBJID 2195717553120>%).AREA \F "%LU2%PR2%PS[, ㎡]%CT8[1E-006]" >%" はありません。ヘルプを表示するには F1 キーを押してください。
コマンド:
コマンド:
コマンド:
コマンド: _commandline
お手数おかけしますが
ご教授の頂けませんでしょうか!
  • ちあき
  • 2021/09/29 (Wed) 12:37:04
Re: フィールドで面積と長さ表示を簡単にしたい
やっぱり文字スタイルで高さが設定されている文字スタイルをお使いなのですね。
では、「;異尺度対応の文字スタイルを分岐」の下の行を以下のように修正してください。

-----------------------------------------------------------------------------
(if (or (LM:isAnnotative) (textHeight))
-----------------------------------------------------------------------------

そして、Lispの最後に以下を追加してください。
-----------------------------------------------------------------------------
(defun textHeight ( / object txtH )
(and
(setq object (tblobjname "STYLE" (getvar "TEXTSTYLE")))
(setq txtH (cdr (assoc 40 (entget object))))
(/= 0 txtH)
)
)
-----------------------------------------------------------------------------

これでいかがでしょうか。
  • LUNE
  • 2021/09/29 (Wed) 13:30:38
Re: Re: フィールドで面積と長さ表示を簡単にしたい
LUNEさん

出来ました!
すばらしいです!
まさしく求めていたものです。
ありがとうございます!
高さが設定されている文字スタイルが?
だったのですが
沢山の条件でプログラムが変わるのですね
大変勉強になりました。
やわり不便とか困ったときに
思い通りにすぐプログラムが作成できるって
すごいことですね。羨ましいです。
少しずつ私も勉強していきたいとおもいます。
今回は大変ありがとうございました。
  • ちあき
  • 2021/09/30 (Thu) 13:05:46
Re: フィールドで面積と長さ表示を簡単にしたい
このLispでは、最後にcommand関数を使って文字を作成しています。
マクロと同じようにコマンドを並べて実行するのですが、高さが設定されていない文字スタイルと、異尺度対応あるいは高さが設定されている文字スタイルとでは、コマンドラインに違いがあります。そのため、分岐が必要となります。

異尺度については対応していたのですが、私自身高さを設定した文字スタイルを使用していないので、その対応をしていませんでした。

ちゃんと動作したとこのことで、よかったです。
  • LUNE
  • 2021/09/30 (Thu) 13:35:47
Re: フィールドで面積と長さ表示を簡単にしたい
お世話になります上記fsqm.lsp使用させて頂いております。
今まで入力の設定が面倒だった為、フィールド機能をあまり使わなかったのですが作業の効率化にとても役立っております。

入力されるフィールド文字の起点を中央にしてたかったので

(command "text" "J" "MC" pt mt "" fstr);文字の起点を中央(MC)で文字入力

と変更してみましたところうまくいきました。
もう一つ、表示される文字の計測数値と㎡の間の半角スペースを詰めたいのですがどこを変更すればよろしいのでしょうかご教授宜しくお願い致します。

このように変更したいです  100 ㎡ → 100㎡
  • Mico
  • 2022/05/31 (Tue) 16:17:00
Re: フィールドで面積と長さ表示を簡単にしたい
上部に掲載の、Lispを修正しました。


修正内容については、以下の通りです。

半角スペースをなくすには、

(setq fstr (strcat
"\%\<\\AcObjProp.16.2 Object(\%\<\\_ObjId "
obid "\>\%).Area \\f \"%lu2"
pr "\%ps["
pref ", "
suff "]%ct8["
c_unt "]\" \>\%"
)

上記部分の

pref ", "



pref ","

に変更してください。
  • LUNE
  • 2022/06/01 (Wed) 09:04:22
Re: フィールドで面積と長さ表示を簡単にしたい
LUNEさん

ありがとうございます。
そこに半角スペースが入っていたのですね!
気づきませんでした。

計測表記 100 ㎡ → 100㎡ となりました。
スッキリです。

迅速なご対応ありがとうございました。
  • Mico
  • 2022/06/02 (Thu) 09:06:22
Re: フィールドで面積と長さ表示を簡単にしたい
LUNEさま

お世話になります。
IJCAD2019を使用しています。
LUNEさんが作られた、この面積の文字記入LispをIJCADに
使用したかったのですが、エラーになってしまいました。
IJCAD版のコード等ご存じでしょうか?
よろしくお願いします。
  • nao
  • 2023/07/13 (Thu) 14:11:00
Re: フィールドで面積と長さ表示を簡単にしたい
nao さん

残念ながら、私はIJCADを所持していないので、IJCAD版を作成することができません。
ちょっと調べてみましたが、IJCADのLTグレードではvla系のコードが使えないようです。
そのあたりはいかがでしょうか。

vla系のコードを使わない方法も調べてみましたが、vla系を使用せずにオブジェクトIDを取得する方法がなさそうなので、そこの修正もできません。

また、LispファイルはShift_JISで保存されていますか。
IJCADはUnicodeには対応していないようですので・・・
  • LUNE
  • 2023/07/13 (Thu) 16:10:20
Re: フィールドで面積と長さ表示を簡単にしたい
LUNEさま

お世話になります。
お返事ありがとうございます。

そうでしたか、、
IJCADはSTDでvlaは対応してそうです。
オブジェクトIDも取得できてるみたいなのですが、
いざ、画面に文字位置を決定させると、フィールドの文字が「-」ばかり並んでしまいます。

ちなみに、Shift_JISで保存しています。
IJCADでLispが詳しく書かれてるサイトが全く無く、筋違いとは思ったのですがLUNEさんに聞いてみました。
対応してくださりありがとうございました。
  • nao
  • 2023/07/13 (Thu) 16:34:58
Re: フィールドで面積と長さ表示を簡単にしたい
横から失礼します。

フィールド式を入力する手間を省くLISPだと思うのですが、
入力したい式を、ダイアログから手入力してみるとどうなりますか?
それでも表示できないのならLISPの問題ではなく、IJCADのフィールド機能がフィールド式に対応していない事になります。
IJCADはDIESEL式の対応が出来ていないらしいのでフィールド式も同様かもしれません。
  • 通りすがり
  • 2023/07/13 (Thu) 17:05:03
Re: フィールドで面積と長さ表示を簡単にしたい
手動で操作したときのフィールド式と、Lispで作成したフィールド式を比較してみてはどうでしょう?
AutoCADとIJCADで、フィールド式が異なっているのではないでしょうか。

  • LUNE
  • 2023/07/13 (Thu) 17:16:49
Re: フィールドで面積と長さ表示を簡単にしたい
通りすがりさま

お世話になります。
Lispに疎いので、ちょっと時間が掛かりそうですがやってみます。
確かに、IJCADはDIESEL式に対応してないみたいですね。。
引出線でポリゴンの面積を書き出したいだけなんですが、何度もする作業なのでフィールド機能だと面倒で仕方ないんです。
  • nao
  • 2023/07/13 (Thu) 17:32:09
Re: フィールドで面積と長さ表示を簡単にしたい
IJCADのフィールド式は、
%<\AcObjProp Object(%<\_ObjId 657805416>%).Area \f "%lu2%pr2%ps[,m2]%ct8[0.000001]">%

AUTOCADのフィールド式は、
%<\AcObjProp.16.2 Object(%<\_ObjId 657805416>%).Area \f "%lu2%pr2%ps[,m2]%ct8[1e-006]">%

となっており、AcObjProp.16.2の.16.2だけが違うみたいです。
LUNEさんが作成されたAUTOCADのコードを参考にそこだけ修正して使ってましたがエラー表示になりました。
  • nao
  • 2023/07/13 (Thu) 17:37:51
Re: フィールドで面積と長さ表示を簡単にしたい
["] を入力するために [\"]と記述していますが、IJCADではそれを認識してくれません。
(chr 34) に置き換えれば良いと思います。

また、

(setq obid (itoa (vla-get-objectid vlobj)))
;図形IDを10進法に変換 itoa必要(rtosだと64bitで不具合)

の部分、IJCADではrtosの方が良いみたいです。
  • 通りすがり2
  • 2023/07/13 (Thu) 18:43:32
Re: フィールドで面積と長さ表示を簡単にしたい
通りすがり2さま

お世話になります。
アドバイスありがとうございます!
やってみますね。
皆さんお優しくて助かります。。
  • nao
  • 2023/07/13 (Thu) 19:03:54

返信フォーム






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