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

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

角度寸法の形式変更、精度変更
選んだ角度寸法の形式を度に変更して精度も小数点第一位まで表示するLISPは作成可能でしょうか?
  • 初心者
  • 2025/04/26 (Sat) 15:49:17
Re: 角度寸法の形式変更、精度変更
可能かどうか、と言われれば可能です。

ただ、私個人の考えとしては、寸法や文字など「スタイル」を定義し、そのスタイルを使用して作成するオブジェクトについては、プロパティを個々に変更するのではなく、そのプロパティを設定したスタイルを作成して、それに変更することでプロパティを変更するのが原則だと思います。
  • LUNE
  • 2025/04/28 (Mon) 09:36:53
Re: 角度寸法の形式変更、精度変更
私もそれが原則で作業がやりやすいとは思うのですが
特殊な?お客様がスタイルの追加や変更、画層の追加や変更など
やってはいけない決まりごとになっております。
もちろん他のお客様は問題ないのですが、この特殊な?お客様だけ
10年以上この取決めが続いております。
コメントありがとうございました。
  • 初心者
  • 2025/04/28 (Mon) 13:30:33
Re: 角度寸法の形式変更、精度変更
LISPを勉強されているということなので、ヒントだけ

ssgetでオブジェクトの種類 DIMENSION と、角度寸法を表すDXFコード70が2のものをフィルタして選択します。

「角度寸法の形式を度に変更して精度も小数点第一位まで」を変更するには、コマンドラインだとDIMOVERRIDEを使います。
DIMOVERRIDEを使ってどのように変更するのか、一度コマンドラインで試してみてください。
角度寸法の形式変更は DIMAUNIT、精度は DIMADEC というシステム変数を使用します。
コマンドラインでの変更方法が分かったら、同じことをcommand関数で行います。

command関数を使用しない場合は、setpropertyvalueで可能です。

Lispの作成には何をお使いでしょうか?
Microsoft Visual Studioをお使いであれば、変数は最初に定義しておくことをお薦めします。
(defun c:foo ( / [ここに変数を列記])
こうしておくと、Lispがうまく動かない場合に、デバッグの際各変数に意図した値が入っているか確認しながら進めることができます。
(グローバル変数としての扱いたいというのなら、デバッグ時のみ定義してみては)

  • LUNE
  • 2025/04/28 (Mon) 14:05:51
Re: 角度寸法の形式変更、精度変更
ありがとうございます。

(setq ssetangdim (ssget ":E" '((0 . "DIMENSION"))))

だと長さ寸法も選択されてしまいました。

教えていただいたもので

(setq ssetangdim (ssget ":E" '((0 . "DIMENSION")(70 . 2))))

(70 . 2)を追加すると何も選択できなくなりました。

どこが悪いのでしょうか?
  • 初心者
  • 2025/04/28 (Mon) 15:33:48
Re: 角度寸法の形式変更、精度変更
すみません。

DXFリファレンスにある(https://help.autodesk.com/view/OARX/2025/JPN/?guid=GUID-EDD54EAC-A339-4EBA-AEA6-EC8066505E2B
値 0 ~ 6 は、寸法タイプを表す整数値。値 32、64、128 はビット値で、整数値に加えられます(値 32 は、R13J 以降では常にセットされます)。
というのを見落としていたようです。

(setq ssetangdim (ssget ":E" '((0 . "DIMENSION")(70 . 34))))
にしてみてください。
疑問なんですけど、なぜ ":E" ?
1個ずつピックするんですか?
  • LUNE
  • 2025/04/28 (Mon) 15:50:05
Re: 角度寸法の形式変更、精度変更
どうしてもLISPでやりたいなら、それでも良いのですが、
寸法を選んでオブジェクトプロパティ管理で変更しても、そんなに手間じゃないと思います。

変更したい寸法が沢山有るとしても、クイック選択で一括で選択できるなら、1回の処理で済むし、
1個づつ確認しながらやりたいのでしたら、初めの1個だけオブジェクトプロパティ管理で変更して、
他の物は、1個目の寸法からプロパティコピーすれば良いです。
  • Hamu
  • 2025/04/28 (Mon) 16:10:43
Re: 角度寸法の形式変更、精度変更
(70 .34)でできたと思ったのですがなぜか
寸法値を移動していたら選択できなくなりました。
矢印だけを変更している場合は問題なく選択できました。

奥が深すぎます。

":E"はとくに意味がありません。本当に選択できるかできないかの確認です。
最終的には"X"で図面全体で選択する予定です
  • 初心者
  • 2025/04/28 (Mon) 16:45:06
Re: 角度寸法の形式変更、精度変更
プロパティーコピーをすると
矢印などが変更されてしまうので少し困ります。
  • 初心者
  • 2025/04/28 (Mon) 16:46:49
Re: 角度寸法の形式変更、精度変更
(70 . 34)を (70 . 162)に変更すると文字移動したものだけ選ばれるようになってしまった。
ssgetのフィルター条件で or を追加すればいいのか?できるのかな?
  • 初心者
  • 2025/04/28 (Mon) 17:05:12
Re: 角度寸法の形式変更、精度変更
その場合は、角度寸法ではなく、角度3点寸法なのかもしれません。
(70 .37) にしてみて選択されるかどうか、確認してください。
それで選択されるなら、(70 .34) と (70 .37) で選択セットをそれぞれ作って、合成するか、検索すれば、OR条件のフィルタの作成方法も出てくると思います。

コマンドラインに (entget(car(entsel))) として、対象となるオブジェクトを選択すると、そのオブジェクトのdxfコードがコマンドラインに表示されます。
Lispを作るうえで、dxfコードは重要です。
https://help.autodesk.com/view/OARX/2025/JPN/?guid=GUID-7D07C886-FD1D-4A0C-A7AB-B4D21F18E484
こちらなどを参考に、dxfコードの意味を確認してください。


  • LUNE
  • 2025/04/28 (Mon) 17:09:11
Re: 角度寸法の形式変更、精度変更
ここまでできました。

(defun c:TEST000 ()

(command-s "._UNDO" "_BE") ;UNDO[元に戻す] [開始(BE)]
(setq ssetangdim (ssget ":E" '((0 . "DIMENSION")
(-4 . "<OR")
(70 . 34)
(70 . 37)
(70 . 162)
(-4 . "OR>")
)
)
)


(command-s "._DIMOVERRIDE"
"dimaunit" "0"
"dimadec" "1"
"dimazin" "2"
"" "._select" "p" "")
(command-s "._UNDO" "_E") ;UNDO[元に戻す] [終了(E)]

)
  • 初心者
  • 2025/04/28 (Mon) 19:30:20

返信フォーム






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