下面是一个供您学习的示例:
- ;; Rounded Rectangle Example - Lee Mac 2016
- (defun c:myrect ( / blg lst ocs pt1 pt2 rad tmp )
-
- (setq rad 10.0) ;; Fillet Radius
-
- (if (and (setq pt1 (getpoint "\nSpecify 1st point: "))
- (setq pt2 ((if (zerop (getvar 'worlducs)) getpoint getcorner) pt1 "\nSpecify 2nd point: "))
- )
- (progn
- (setq ocs (trans '(0 0 1) 1 0 t)
- tmp (mapcar 'max pt1 pt2)
- pt1 (mapcar 'min pt1 pt2)
- pt2 tmp
- lst (list pt1 (list (car pt2) (cadr pt1)) pt2 (list (car pt1) (cadr pt2)))
- blg (1- (sqrt 2))
- )
- (if (equal rad 0.0 1e-
- (entmake
- (append
- '( (000 . "LWPOLYLINE")
- (100 . "AcDbEntity")
- (100 . "AcDbPolyline")
- (090 . 4)
- (070 . 1)
- )
- (list (cons 038 (caddr (trans pt1 1 ocs))))
- (mapcar '(lambda ( x ) (cons 10 (trans x 1 ocs))) lst)
- (list (cons 210 ocs))
- )
- )
- (entmake
- (append
- '( (000 . "LWPOLYLINE")
- (100 . "AcDbEntity")
- (100 . "AcDbPolyline")
- (090 .
- (070 . 1)
- )
- (list (cons 038 (caddr (trans pt1 1 ocs))))
- (apply 'append
- (mapcar
- (function
- (lambda ( a b )
- (apply 'append
- (mapcar
- (function
- (lambda ( c d )
- (list
- (cons 10 (trans (mapcar '+ a c) 1 ocs))
- (cons 42 d)
- )
- )
- )
- b (list blg 0.0)
- )
- )
- )
- )
- lst
- (list
- (list (list 0 rad) (list rad 0))
- (list (list (- rad) 0) (list 0 rad))
- (list (list 0 (- rad)) (list (- rad) 0))
- (list (list rad 0) (list 0 (- rad)))
- )
- )
- )
- (list (cons 210 ocs))
- )
- )
- )
- )
- )
- (princ)
- )
上述内容也应在所有UCS和视图中兼容。 |