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) ; コマンドラインに結果を表示
)
LISPの修正依頼
- アンクルのお願い
- 2025/05/01 (Thu) 13:56:35