 - (defun c:qqq (/ a b c d ent lst n name pt)
- (defun jspt (pt a b) (mapcar '+ pt (list a b)))
- (if (null lstbak001)
- (setq lstbak001 '(10.0 10.0 10.0 10.0));默认四边偏移距离
- )
- (setq a (car lstbak001) b (cadr lstbak001) c (caddr lstbak001) d (cadddr lstbak001));四边偏移量定义为变量
- (if (setq n (getreal (strcat "\n向左偏移:<" (rtos a) ">")))
- (setq a n);定义变量a,若输入实数则存入a;若无输入,则a为默认值
- )
- (if (setq n (getreal (strcat "\n向上偏移:<" (rtos b) ">")))
- (setq b n)
- )
- (if (setq n (getreal (strcat "\n向右偏移:<" (rtos c) ">")))
- (setq c n)
- )
- (if (setq n (getreal (strcat "\n向下偏移:<" (rtos d) ">")))
- (setq d n)
- )
- (setq lstbak001 (list a b c d));四边偏移值存入数组
- (setvar "cmdecho" 0)
- (while (setq point (getpoint "\n拾取内部点:"))
- (command "_boundary" point "");创建边界
- (if (and (setq ent (entget (setq name (entlast))))
- (= (cdr (assoc 0 ent)) "LWPOLYLINE")(= (cdr (assoc 90 ent)) 4));判断边界是否为四个顶点的多段线
- (progn
- (setq lst '())
- (foreach n ent
- (if (= (car n) 10)
- (setq lst (cons (cdr n) lst));遍历边界组合,将顶点存入lst内
- )
- )
- (setq lst (list (jspt (car lst) c (- d)) ;边界第一点(右下角点)x坐标加c,y坐标减d
- (jspt (cadr lst) (- a) (- d));边界第二点(左下角点)x坐标减a,y坐标减d
- (jspt (caddr lst) (- a) b);边界第三点(左上角点)x坐标减a,y坐标加b
- (jspt (cadddr lst) c b);边界第四点(右上角点)x坐标加c,y坐标加b
- (jspt (car lst) c (- d));边界第一点(右下角点)x坐标加c,y坐标减d,这个点不加,生成的矩形不闭合
- ));通过变换,将偏移后的矩形顶点的二维坐标点存入lst中
- (entmake
- (append
- (list
- '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- (cons 90 (length lst))
- )
- (mapcar '(lambda (pt) (cons 10 pt)) lst)
- )
- )
- ))
- (entdel name)
- )
- (princ)
- )
|