如何将圆变为don
大家好有人能帮我写一个lisp程序吗?在这个程序中,我必须用同样大小的甜甜圈(实心圆)替换图形中的所有圆。
提前感谢
甘尼什 退房http://www.cadtutor.net/forum/showthread.php?59935-LISP作业帮助看起来很多学生都被分配了作业。
我将从(ssget“x”'((0。“圆”))开始) 如果是同一个圆反复重复,那么它应该在开始时被做成一个块,然后很容易将块修改为实心圆。 这
(defun c:Test (/ ss in out)
(if
(and
(setq in (getdist "\n Specify Inside Diameter :"))
(setq out (getdist "\n Specify Outside Diameter :"))
(setq ss (ssget "_x" '((0 . "CIRCLE"))))
)
(
(lambda (j / sset)
(while
(setq sset (ssname ss (setq j (1+ j))))
(command "_.donut" in out (cdr (assoc 10 (entget sset))) "")
(entdel sset)
)
)
-1
)
(princ "\n Sorry !! Not even a Circle found ")
)
(princ)
)
塔瓦特 谢谢tharwat Dink&Begal
它工作得很好,你让我的工作更轻松
谢谢
甘尼什
很高兴听到这个消息。甘尼什
享受 另一种方法是在不使用“甜甜圈”命令的情况下创建甜甜圈。以下代码适用于在任何平面上绘制的任何半径的圆,并将进一步保留原始圆的所有属性:
(defun c:Circle2Donut ( / c i l r s ) (vl-load-com)
;; © Lee Mac 2011
(if (setq s (ssget "_:L" '((0 . "CIRCLE"))))
(repeat (setq i (sslength s))
(setq l (entget (ssname s (setq i (1- i))))
r (cdr (assoc 40 l))
c (cdr (assoc 10 l))
)
(if
(entmakex
(append
'(
(0 . "LWPOLYLINE")
(100 . "AcDbEntity")
(100 . "AcDbPolyline")
(90 . 2)
(70 . 1)
)
(vl-remove-if '(lambda ( x ) (member (car x) '(-1 0 5 10 40 100 330))) l)
(list
(cons 43 r)
(cons 10 (polar c pi (/ r 2.)))
(cons 42 1)
(cons 10 (polar c 0. (/ r 2.)))
(cons 42 1)
(assoc 210 l)
)
)
)
(entdel (cdr (assoc -1 l)))
)
)
)
(princ)
) 李,
我想必须有内部和外部输入,以避免将圆转换为图案填充实体选项。
当做
我知道OP需要“实心圆”,但如有必要,可以创建任意内外半径的甜甜圈。 或者可能:
(defun c:cir2dont (/ ss en ed ce ev ra la lt tk cl)
(and (setq ss (ssget '((0 . "CIRCLE"))))
(while (setq en (ssname ss 0))
(setq ed (entget en)
ce (cdr (assoc 10 ed))
ev (caddr ce)
ra (cdr (assoc 40 ed))
la (assoc 8 ed)
lt (if (assoc6 ed) (assoc6 ed) '(6. "BYLAYER"))
tk (if (assoc 39 ed) (assoc 39 ed) '(39 . 0))
cl (if (assoc 62 ed) (assoc 62 ed) '(62 . 256)))
(entmake (list (cons 0 "POLYLINE")(cons 66 1)
(list 10 0 0 ev)
(cons 40 ra)(cons 41 ra)
la lt tk cl
(cons 70 1)
(assoc 210 ed)))
(entmake (list (cons 0 "VERTEX")
(list 10 (+ (car ce) (* ra 0.5)) (cadr ce) ev)
(cons 40 ra)(cons 41 ra)
la lt tk cl
(cons 42 1)))
(entmake (list (cons 0 "VERTEX")
(list 10 (- (car ce) (* ra 0.5)) (cadr ce) ev)
(cons 40 ra)(cons 41 ra)
la lt tk cl
(cons 42 1)))
(entmake (list (cons 0 "SEQEND") la lt tk cl))
(entdel en)
(ssdel en ss)))
(redraw)
(prin1))
-大卫
页:
[1]
2