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

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

LISPの修正依頼
IJCAD2005(STD)を使用しています。OSはWindows11Proです。
LISPの内容ですが、図面中の文字(選択可)を抽出して同じ内容の文字(TEXT)が何個あるかを表にして図中に記載する(任意の場所に)という内容です。
以下に記載したLISPをチャットGPTなど使い作成したのですが、何故か1種類の文字だけカウントしない現象が起こります。
例えば、A・B・C・Dという文字がそれぞれ2個づつあった場合、Aだけが無くB・C・Dのみ表記されるといった感じです。(画像を貼っておきます)
どこを変えればちゃんと表記してくれるのかが、まったく解らないので直して頂けるとたすかります。
宜しくお願いします。
なにやら、エラーも出ているので貼っておきます。足りない情報がある場合は言って頂けると助かります。

<エラー内容のコマンドライン>

コマンド: TextCount

オブジェクトを選択: もう一方のコーナーを指定: 8 個見つかりました

オブジェクトを選択:

テーブルの挿入位置を指定してください: ; エラー: 実際のパラメータが多すぎます

<LISPの内容>

(defun c:TextCount (/ ss textEntities textCount textList insertionPoint tbl acadApp modelSpace row)
;; エンティティを選択する
(setq ss (ssget '((0 . "TEXT")))) ; TEXTエンティティのみ選択

;; TEXTエンティティが選ばれているか確認
(if ss
(progn
;; テキストを格納するリスト
(setq textList '())

;; 選択したエンティティを処理
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i)) ; エンティティを取得
(setq textObj (entget ent)) ; エンティティのデータを取得
(setq textValue (cdr (assoc 1 textObj))) ; TEXTの内容を取得

;; テキストをリストに追加
(setq textList (cons textValue textList))

(setq i (1+ i))
)

;; テキストの内容ごとにカウント
(setq textCount '())

;; リスト内の各テキストをカウント
(foreach t textList
;; 数字も文字列として扱う
(if (assoc t textCount)
(progn
(setq textCount (subst (cons t (1+ (cdr (assoc t textCount)))) (assoc t textCount) textCount))
)
(setq textCount (cons (cons t 1) textCount))
)
)

;; 結果を図面に挿入する位置(指定の座標)
(setq insertionPoint (getpoint "\nテーブルの挿入位置を指定してください: "))

;; AutoCADアプリケーションオブジェクトの取得
(setq acadApp (vlax-get-acad-object))
(setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument acadApp)))

;; テーブルの作成(列数は2、行数はカウントされたテキスト数)
(setq tbl (vla-addtable modelSpace insertionPoint (length textCount) 2))

;; ヘッダーを設定
(vla-settext tbl 0 0 "Text")
(vla-settext tbl 0 1 "Count")

;; テーブルにデータを挿入
(setq row 1)
(foreach pair textCount
(vla-settext tbl row 0 (car pair)) ; テキスト
(vla-settext tbl row 1 (itoa (cdr pair))) ; 個数
(setq row (1+ row))
)

;; 列幅を設定(2列分)
(vla-put-columnwidth tbl 0 15) ; 1列目の幅を15に設定
(vla-put-columnwidth tbl 1 15) ; 2列目の幅を15に設定

(princ "\nテーブルが図面に挿入されました。")
)
(princ "\nNo TEXT entities selected.")
)

(princ) ; コマンドラインに結果を表示
)
  • アンクルのお願い
  • 2025/05/01 (Thu) 13:56:35
Re: LISPの修正依頼
画像の貼付けが出来ていなかった様ですので、貼付け直しました。
  • アンクルのお願い
  • 2025/05/01 (Thu) 13:59:47
Re: LISPの修正依頼
(setq tbl (vla-addtable modelSpace insertionPoint (length textCount) 2))

この部分を

(setq tbl (vla-addtable modelSpace insertionPoint (1+ (length textCount)) 2))
  • Hamu
  • 2025/05/01 (Thu) 15:21:53
Re: LISPの修正依頼
思った動作になりました。Hamuさん有難う御座いました。
  • アンクルのお願い
  • 2025/05/01 (Thu) 16:36:00

返信フォーム






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