本帖最后由 ljpnb 于 2011-6-25 14:37 编辑
简单版的:
- (defun c:test (/ p1 p2 p3 p4 n os dx dy xlst ylst l p5 p6 ent1 ent2 ent3)
- (setq p1 (getpoint "\n方框第一个角:"))
- (setq p2 (getcorner p1 ":\n方框另一个角:"))
- (setq n (getint ":\n输入等分数:"))
- (setq os (getvar "osmode"))
- (setvar "osmode" 0)
- (setvar "cmdecho" 0)
- (command "undo" "g")
- (setq xlst (vl-sort (list (car p1) (car p2)) '<))
- (setq ylst (vl-sort (list (cadr p1) (cadr p2)) '<))
- (setq dx (- (nth 1 xlst) (nth 0 xlst)))
- (setq dy (- (nth 1 ylst) (nth 0 ylst)))
- (if (> dx dy)
- (progn
- (setq p1 (list (nth 1 xlst) (nth 0 ylst))
- ;;右下角
- p2
- (polar p1 pi dx)
- ;;左下角
- p3
- (polar p2 (* pi 0.5) dy)
- ;;左上角
- p4
- (polar p1 (* pi 0.5) dy)
- ;;右上角
- )
- (setq l dx)
- )
- (progn
- (setq p1 (list (nth 1 xlst) (nth 1 ylst))
- ;;右上角
- p2
- (polar p1 (* pi 1.5) dy)
- ;;右下角
- p3
- (polar p2 pi dx)
- ;;左下角
- p4
- (polar p1 pi dx)
- ;;左上角
- )
- (setq l dy)
- )
- )
- (setq p5 (polar p2 (angle p2 p1) (/ l n)))
- (setq p6 (polar p3 (angle p2 p1) (/ l n)))
- ;;;(command "line" p1 p2 p3 p4 "")
- (command "line" p2 p6 "")
- (setq ent1 (entlast))
- (command "line" p6 p5 "")
- (setq ent2 (entlast))
- (command "line" p5 p3 "")
- (setq ent3 (entlast))
- (if (> dx dy)
- (progn
- (command "-array" ent1 ent3 "" "r" 1 n (/ dx n))
- (command "-array" ent2 "" "r" 1 (1- n) (/ dx n))
- )
- (progn
- (command "-array" ent1 ent3 "" "r" n 1 (/ dy n))
- (command "-array" ent2 "" "r" (1- n) 1 (/ dy n))
- )
- )
- (command "undo" "e")
- (setvar "osmode" os)
- (setvar "cmdecho" 1)
- (princ)
- )
|