Q7: 囲んだ範囲に表グリッドを作成/MakeGridByWindow
このマクロでできること
図面上で2点を指定して矩形範囲を決め、その中を指定した行数・列数で均等割りし、格子(表)を作成します。
※鉄筋の均等割を行う際に使用します。
■指定した行数・列数で均等割りし、格子(表)を作成
(defun c:MakeGridByWindow ( / pt1 pt2 rows cols minx maxx miny maxy w h
rowH colW i x y)
(prompt "\n表の外接矩形の1点目をクリック:")
(setq pt1 (getpoint))
(if (null pt1) (progn (prompt "\nキャンセル。")(princ))
(progn
(prompt "\n反対側の点をクリック:")
(setq pt2 (getcorner pt1))
(if (null pt2) (progn (prompt "\nキャンセル。")(princ))
(progn
(initget 6) (setq rows (getint "\n行数(1以上): "))
(initget 6) (setq cols (getint "\n列数(1以上): "))
(if (or (null rows) (null cols)) (prompt "\nキャンセル。")
(progn
;; 範囲正規化
(setq minx (min (car pt1) (car pt2))
maxx (max (car pt1) (car pt2))
miny (min (cadr pt1) (cadr pt2))
maxy (max (cadr pt1) (cadr pt2)))
(setq w (- maxx minx) h (- maxy miny))
(setq rowH (/ h rows) colW (/ w cols))
;; 外枠(ポリライン)
(command "._PLINE"
(list minx miny) (list maxx miny)
(list maxx maxy) (list minx maxy) "C")
;; 縦罫線(列+1本)
(setq i 1)
(while (< i cols)
(setq x (+ minx (* colW i)))
(command "._LINE" (list x miny) (list x maxy) "")
(setq i (1+ i))
)
;; 横罫線(行+1本)
(setq i 1)
(while (< i rows)
(setq y (+ miny (* rowH i)))
(command "._LINE" (list minx y) (list maxx y) "")
(setq i (1+ i))
)
(prompt (strcat
"\n格子を作成:サイズ "
(rtos w 2 3) " × " (rtos h 2 3)
" 行×列 " (itoa rows) "×" (itoa cols)))
)
)
)
)
)
)
(princ)
)
📝 使い方
上記コードを .lsp ファイルに保存(MakeGridByWindow.lsp)
AutoCADで APPLOAD コマンドで読み込み
・操作手順 コマンドラインで MakeGridByWindow と入力して実行
・表を作りたい範囲の左下隅をクリック
・対角の右上隅をクリックして範囲を決定
・行数を入力(例:5) 列数を入力(例:4)
・指定範囲内に外枠+縦横線が均等に引かれた表グリッドが作成されます

