指定したブロックから自動で寸法を入力するLISP

  • URLをコピーしました!

(defun c:qdb ()

(setq ss1 (entsel “寸法記入するブロック選択: “));ブロック選択
(setq b1 (cdr (assoc 2 (entget (car ss1)))));ブロック名取得

(setq sel
(ssget
(list (cons 2 b1))
)
)

(setq Cnt (sslength sel));選択セットss0にある要素の数

(setq num 0);numに0を入れる

(repeat Cnt

(setq ss1 (ssname sel num));ブロック

;ブロック座標
(setq p1 (cdr (assoc 10 (entget ss1))))

(command-s “._POINT” p1 );

(setq num (1+ num));numに1を足す

);repeat終了

(setq sel (ssget “X” ‘((0 . “POINT”))));点を選択セットに代入

(setq Pt1 (getpoint “\n寸法記入基点:”))

(command-s “._QDIM” sel “” Pt1 )

(command-s “._ERASE” sel “” )

)

このコードは、選択したブロックのすべての寸法を、指定した基点から始めて、単一の寸法スタイルで編集します。

コードの説明

  • (defun c:qdb ()

この行は、関数「qdb」を定義します。関数名は「c:」で始まり、これはAutoCADのカスタムコマンドの命名規則に従っています。

  • ()

この行は、関数の引数を定義します。この関数には引数はありません。

  • **(setq ss1 (entsel “寸法記入するブロック選択: “));ブロック選択

この行は、プロンプト「寸法記入するブロック選択:」を表示し、ユーザーがブロックを選択できるようにします。

  • **(setq b1 (cdr (assoc 2 (entget (car ss1)))));ブロック名取得

この行は、前の行で選択されたブロックのブロック名を取得します。

  • **(setq sel  (ssget     (list (cons 2 b1))  ) )

この行は、選択したブロックのすべてのオブジェクトを取得します。

  • **(setq Cnt (sslength sel));選択セットss0にある要素の数

この行は、選択セット「sel」にある要素の数を取得します。

  • **(setq num 0);numに0を入れる

この行は、変数「num」に0を代入します。

  • **(repeat Cnt

この行は、変数「Cnt」の値が0になるまで、次の処理を繰り返します。

  • **(setq ss1 (ssname sel num));ブロック

この行は、選択セット「sel」から、変数「num」で指定された要素を取得します。

  • **;ブロック座標 (setq p1 (cdr (assoc 10 (entget ss1))))

この行は、前の行で取得したブロックの座標を取得します。

  • **(command-s “._POINT” p1 );

この行は、コマンド「._POINT」を実行し、指定した座標に点を作成します。

  • **(setq num (1+ num));numに1を足す

この行は、変数「num」に1を加えます。

  • **);repeat終了

この行は、repeat処理を終了します。

  • **(setq sel (ssget “X” ‘((0 . “POINT”))));点を選択セットに代入

この行は、選択セット「sel」に、タイプが「POINT」のオブジェクトを追加します。

  • **(setq Pt1 (getpoint “\n寸法記入基点:”))

この行は、プロンプト「寸法記入基点:」を表示し、ユーザーが寸法記入基点を指定できるようにします。

  • **(command-s “._QDIM” sel “” Pt1 )

この行は、コマンド「._QDIM」を実行し、選択セット「sel」のすべての寸法を、指定した基点から始めて、単一の寸法スタイルで編集します。

  • **(command-s “._ERASE” sel “” )

この行は、コマンド「._ERASE」を実行し、選択セット「sel」のすべての点を削除します。

コードの実行例

図面に、ブロック「A」とブロック「B」の寸法が1つずつあるとします。このコードを実行し、ブロック「A」の寸法を編集すると、以下のようになります。

図面を開く

ブロック「A」を選択する

コマンドウィンドウに「qdb」と入力してEnterキーを押す

寸法記入基点:

ユーザーが寸法記入基点を指定すると、ブロック「A」のすべての寸法が、指定した基点から始めて、単一の寸法スタイルで編集されます。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

Contents