Entmake rect。
(command "_.rectang" "f" 10 (getpoint)(getpoint))
如何使用“entmake”函数做到这一点? 您需要计算8个顶点中每个顶点的位置,计算圆角的适当凸出值,然后使用此类顶点和凸出数据entmake(x)一个LWPOLYLINE实体。 谢谢你,李,如果“f”=0,那么只有4个顶点?
看起来很难,我的数学和几何很差。 下面是一个供您学习的示例:
;; 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和视图中兼容。
非常感谢你!李。我会好好学习的!
不客气-请随时询问有关代码的任何问题。
谢谢,我做了一点改变。
1.使用参数
(defun myrect (rad pt1 pt2 lay col / blg lst ocs tmp )
(if (and pt1 pt2 rad lay col)
(progn
...
...
2.
(list (cons 038 (caddr (trans pt1 1 ocs))))
更改为-->
(list (cons 8 lay)(cons 62 col)(cons 038 (caddr (trans pt1 1 ocs))))
页:
[1]