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

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

打ち変えた寸法値に文字を足す
autocad 2022を使用しています。

寸法線の文字を編集して打ち変えた後に
打ち変え後の寸法線を選択し、値に特定の文字を足したいです。

『値が打ち変えられた寸法線を選択し、値に特定の文字を足す』マクロを作成可能でしょうか。

よろしくお願いします。
  • th
  • 2023/08/30 (Wed) 15:16:40
Re: 打ち変えた寸法値に文字を足す
以下の理由から、マクロでは難しいと思います。

1.値が打ち変えられた寸法線を選択 → 手作業なら検索コマンドorフィルターコマンドで可能ですが、両方ともダイアログが表示されるため、マクロで使えません
2.値に特定の文字を足す → 計測値のままの場合は、マクロで特定の文字を付加することはできますが、打ち換えられたものは、マクロでは文字内容が取得できないためにできません

LISPならできますが・・・
  • LUNE
  • 2023/08/30 (Wed) 16:51:11
Re: 打ち変えた寸法値に文字を足す
LISPなら、こんな感じ。コマンド名はordim
図面内の値が打ち変えられた寸法すべてに、特定の文字を末尾に追加します。
対象となる寸法を選択したい場合は、
(setq ss (ssget "X" (list (cons 0 "DIMENSION") (cons 1 "?*"))))
→ (setq ss (ssget (list (cons 0 "DIMENSION") (cons 1 "?*"))))
に変更のこと。

(defun c:ordim (/ adtxt ss ent cnt txt)
(setq adtxt (getstring "\n追加する文字を入力:"))
(setq ss (ssget "X" (list (cons 0 "DIMENSION") (cons 1 "?*"))))
(setq cnt 0)
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(setq txt (strcat (cdr (assoc 1 ent)) adtxt))
(setq ent (subst (cons 1 txt) (assoc 1 ent) ent))
(entmod ent)
(setq cnt (1+ cnt))
)
(princ)
)
  • LUNE
  • 2023/08/30 (Wed) 17:08:17
Re: 打ち変えた寸法値に文字を足す
早々に作成ありがとうございます。
lispで問題なく起動できました。

追加する文字を寸法値の先頭にするにはどうすれば良いでしょうか。(例:※500)
現状、作成いただいたものだと末尾に追加されます。(例:500※)

出来れば先頭に追加するパターンと末尾に追加するパターンで使い分けたいと考えています。
  • th
  • 2023/08/30 (Wed) 18:16:13
Re: 打ち変えた寸法値に文字を足す
追加位置を指定する動作を追加しました。

(defun c:ordim (/ adtxt ss ent cnt ftxt ltxt kwd)
(setq ftxt ""
ltxt "")
(initget "F L")
(or (setq kwd (getkword "\n追加する位置を指定 [F(前)/L(後)] <F>:")) (setq kwd "F"))
(setq adtxt (getstring "\n追加する文字を入力:"))
(cond
((= kwd "F") (setq ftxt adtxt))
((= kwd "L") (setq ltxt adtxt))
(t nil)
)
(setq ss (ssget "X" (list (cons 0 "DIMENSION") (cons 1 "?*"))))
(setq cnt 0)
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(setq txt (strcat ftxt (cdr (assoc 1 ent)) ltxt))
(setq ent (subst (cons 1 txt) (assoc 1 ent) ent))
(entmod ent)
(setq cnt (1+ cnt))
)
(princ)
)
  • LUNE
  • 2023/08/31 (Thu) 09:30:37
Re: 打ち変えた寸法値に文字を足す
横から申し訳ありません。
厚かましいお願いになるのですが
「うちかえた寸法値の頭に※をつける」コマンドが可能でしたら作成頂けないでしょうか。

私もこのLISPがあれば便利と思っていたところでしたので有り難く御使用させていただたいのですが
基本的に使うパターンが上記の物が多いので・・・

何卒宜しくお願い致します。
  • YK
  • 2023/09/01 (Fri) 09:53:01
Re: 打ち変えた寸法値に文字を足す
「うちかえた寸法値の頭に※をつける」限定にしました
※2023/9/4 ご指摘があったため、一部変更しました
コマンド名はprdim

(defun c:prdim (/ adtxt ss ent cnt txt)
(setq adtxt “※")) ;ここで頭につける文字を指定しています
(setq ss (ssget "X" (list (cons 0 "DIMENSION") (cons 1 "?*"))))
(setq cnt 0)
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(setq txt (strcat adtxt (cdr (assoc 1 ent))))
(if (/= (cdr (assoc 1 ent)) "<>")
(setq ent (subst (cons 1 txt) (assoc 1 ent) ent))
(setq ent (subst (cons 1 "") (assoc 1 ent) ent))
)
(entmod ent)
(setq cnt (1+ cnt))
)
(princ)
)
  • LUNE
  • 2023/09/01 (Fri) 16:54:02
Re: 打ち変えた寸法値に文字を足す
>LUNE様
早速のご対応ありがとうございました。
  • YK
  • 2023/09/01 (Fri) 16:57:14
Re: 打ち変えた寸法値に文字を足す
判らない事がありますので、よろしくお願いします。

上書き寸法をフィルタリングするのに (cons 1 "?*") を指定していますが、
?* これが上書きを指定している事になるのは、何故でしょう?

また、上書きで <> を入力している場合は、上書きとみなすのか、実寸とみなすのか。

以上、ご教示願います。
  • サキ吉
  • 2023/09/02 (Sat) 09:33:34
Re: Re: 打ち変えた寸法値に文字を足す
>上書き寸法をフィルタリングするのに (cons 1 "?*") を指定していますが、
?* これが上書きを指定している事になるのは、何故でしょう?
dxfのコード1は、上書き寸法の場合のみ値がありない場合は空白""です。ワイルドカード*のみだと、空白も該当するので文字のワイルドカードである?と組み合わせ、必ず文字があるという条件のワイルドカードとすることで、上書き寸法を指定することになります。

>また、上書きで <> を入力している場合は、上書きとみなすのか、実寸とみなすのか。
実際試してもらうとわかりますが、上書きで<>にした場合、dxfコード1の値は""に変換されます。なので実寸とみなされます。
  • LUNE
  • 2023/09/02 (Sat) 12:17:26
Re: 打ち変えた寸法値に文字を足す
ご回答ありがとうございます。

?*の件、理解いたしました。

上書きで <> を入力した場合、
私の2020バージョンでは、dxfコード1の値は"<>"です。""に変換されていません。

しかし、何かのタイミングで""に変換される事は有る様です。(何をしたら変換されるのかは判りません。いつの間にか変わっています。)
  • サキ吉
  • 2023/09/02 (Sat) 14:41:00
Re: 打ち変えた寸法値に文字を足す
サキ吉 様

ご指摘の「<>」がそのままの件、こちらでも確認しました。
検証不足で、失礼しました。

上書き内容が「<>」の場合は空白に(既定に戻す)、それ以外の場合は文字を付加にするようコードを変更しました。

(defun c:ordim (/ adtxt ss ent cnt ftxt ltxt txt kwd)
(setq ftxt ""
ltxt "")
(initget "F L")
(or (setq kwd (getkword "\n追加する位置を指定 [F(前)/L(後)] <F>:")) (setq kwd "F"))
(setq adtxt (getstring "\n追加する文字を入力:"))
(cond
((= kwd "F") (setq ftxt adtxt))
((= kwd "L") (setq ltxt adtxt))
(t nil)
)
(setq ss (ssget "X" (list (cons 0 "DIMENSION") (cons 1 "?*"))))
(setq cnt 0)
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(setq txt (strcat ftxt (cdr (assoc 1 ent)) ltxt))
(if (/= (cdr (assoc 1 ent)) "<>")
(setq ent (subst (cons 1 txt) (assoc 1 ent) ent))
(setq ent (subst (cons 1 "") (assoc 1 ent) ent))
)
(entmod ent)
(setq cnt (1+ cnt))
)
(princ)
)
  • LUNE
  • 2023/09/04 (Mon) 10:27:38
Re: 打ち変えた寸法値に文字を足す
丁寧なご回答、感謝いたします。
  • サキ吉
  • 2023/09/04 (Mon) 13:15:56
Re: 打ち変えた寸法値に文字を足す
お世話になっております。

打ち替えた寸法値の前後に( )をつけたいのですが
本LISPを使用する場合、2回コマンドを起動させる必要があります。
それを1回で済ますようにする事は可能でしょうか。

付与する( )は半角を使用したいです。
文字は任意でも( )で固定されていても問題ありません。

お手数をおかけしますが、御検討お願い致します。
  • YK
  • 2023/11/13 (Mon) 15:49:49
Re: 打ち変えた寸法値に文字を足す
例えばLISPをロードしたうえで、下記のようなマクロを作成すれば、そのマクロ1回の実行で可能です。
^C^C_ordim;F;(;ordim;L;);
  • LUNE
  • 2023/11/13 (Mon) 16:15:29
Re: 打ち変えた寸法値に文字を足す
>>LUNE様

早速のご返信ありがとうございます。
そういう手もあったのですね・・・
使用してみたところ、寸法の頭に(はついたのですが
後ろに)が付与されませんでした。

コマンドの履歴を貼り付けます。

ーーーーーーーーーーーーーーーーーーーーーーー

【履歴】
コマンド: _ordim

追加する位置を指定 [F(前)/L(後)] <F>:F

追加する文字を入力:(

LISP に再び入れません。

オブジェクトを選択: ordim


*選択無効*
点を指定 または 窓(W)/最後(L)/交差(C)/ボックス(BOX)/すべて(ALL)/フェンス(F)/ポリゴン窓(WP)/ポリゴン交差(CP)/グループ(G)/追加モード(A)/除外(R)/一括モード(M)/直前(P)/元に戻す(U)/自動モード(AU)/単一モード(SI)

オブジェクトを選択: 認識された数: 1

オブジェクトを選択:

コマンド:

ーーーーーーーーーーーーーーーーーーーーーーー
となっていたので、2回目を起動するところで何か引っ掛かってるのでしょうか。
  • YK
  • 2023/11/13 (Mon) 16:52:05
Re: 打ち変えた寸法値に文字を足す
もしかして、対象となるオブジェクトを選択する下記コードに、変更して使用されていますか?
(setq ss (ssget (list (cons 0 "DIMENSION") (cons 1 "?*"))))

それであれば、下記で。マクロ実行→オブジェクト選択です。
^C^Cselect;\ordim;F;(;p;;ordim;L;);p;;
  • LUNE
  • 2023/11/13 (Mon) 17:11:21
Re: 打ち変えた寸法値に文字を足す
>>LUNE様
ご指摘通りでした。
問題なく動きました、ありがとうございました。

マクロでLISPを起動させる方法があるのも知らなく大変勉強になりました。
  • YK
  • 2023/11/13 (Mon) 17:53:20
Re: 打ち変えた寸法値に文字を足す
自作のLispもロードさえしてあれば、通常のコマンドと同じようにマクロ内で記述できます。
  • LUNE
  • 2023/11/15 (Wed) 14:04:19

返信フォーム






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