请问各位前辈,我最近写了一个小程序,想要将一个矩形等分为多个小矩形,中间留有一定间隙。运行程序后发现,有些矩形可以等分,有些矩形等分过程中电脑直接死机,请问各位前辈可以帮忙看一下吗?程序如下:
 - (defun c:mm ()
- (setvar "cmdecho" 0)
- (setvar "blipmode" 0)
- (setvar "osmode" 0)
- (setq ent (entsel "选择对象:"))
- (command "offset" 10 ent 1 "")
- (setq ent1 (entlast))
- (setq ent_data (entget ent1))
- (setq name (cdr (assoc 0 ent_data)))
- (setq jdgs (cdr (assoc 90 ent_data)))
- (setq ort (getint "沿x/y向拆分[1/2]:"))
- (setq nn (getint "拆分的块数:"))
- (setq hj 300)
- (if (and (= name "LWPOLYLINE") (= jdgs 4))
- (progn
- (setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) ent_data)))
- (setq p1 (car pts)
- p2 (cadr pts)
- p3 (caddr pts)
- p4 (cadddr pts)
- )
- (setq c1 (distance p1 p2))
- (setq c2 (distance p1 p4))
- (if (= ort 1)
- (progn (princ "沿x方向拆分:")
- (setq bb (- (/ (+ c2 hj) nn) hj))
- (if (= (rem bb 10) 0)
- (progn (setq pp3 (list (+ (car p1) c1) (- (cadr p1) bb) 0))
- (command "rectang" p1 pp3)
- (command "snapang" Pause)
- (command "_array" (entlast) "" "R" nn 1 (- 0 (+ hj bb)) "")
- )
- (progn
- (while (/= (rem bb 10) 0)
- (setq hj (+ hj 5))
- (setq bb (- (/ (+ c2 hj) nn) hj))
- )
- (setq pp3 (list (+ (car p1) c1) (- (cadr p1) bb) 0))
- (command "rectang" p1 pp3)
- (command "snapang" Pause)
- (command "_array" (entlast) "" "R" nn 1 (- 0 (+ hj bb)) "")
- )
- )
- )
- )
- (if (= ort 2)
- (progn (princ "沿y方向拆分:")
- (setq aa (- (/ (+ c1 hj) nn) hj))
- (if (= (rem aa 10) 0)
- (progn (setq pp3 (list (+ (car p1) aa) (- (cadr p1) c2) 0))
- (command "rectang" p1 pp3)
- (command "snapang" Pause)
- (command "array" (entlast) "" "r" 1 nn (+ hj aa) "")
- )
- (progn
- (while (/= (rem aa 10) 0)
- (setq hj (+ hj 5))
- (setq aa (- (/ (+ c1 hj) nn) hj))
- )
- (setq pp3 (list (+ (car p1) aa) (- (cadr p1) c2) 0))
- (command "rectang" p1 pp3)
- (command "snapang" Pause)
- (command "array" (entlast) "" "r" 1 nn (+ hj aa) "")
- )
- )
- )
- )
- )
- )
- (command "_.ERASE" ent "" )
- (command "_.ERASE" ent1 "" )
- (princ)
- )
|