从选定对象中画一个圆
(defun c:cxircle(/ PT1 PT2 s)
(setq s (ssget '((0 . "LINE"))))
PT1 (cdr (assoc 10 s))
PT2 (cdr (assoc 11 s))
(command "LINE" PT1 PT2 "")
(command "CIRCLE" "2P" PT1 PT2)
)
先生,有人能帮我做一个简单的Lisp程序从一条直线上画一个圆吗??
圆的直径将与我选择的线的长度相同 像这样的?
(defun C:CADTUTOR ( / ss n ensel enlist )
(setq ss (ssget ":L" (list (cons 0 "Line"))))
(if ss
(progn
(setq n 0)
(repeat (sslength ss)
(setq ensel (ssname ss n))
(setq enlist (entget ensel))
(command "CIRCLE" "2P" (cdr (assoc 10 enlist)) (cdr (assoc 11 enlist)))
(setq n (+ n 1))
)
)
(progn
(princ "No line(s) selected.")
)
)
(princ)
)
就是这样!!!!!!!
天哪,你真节省时间!非常感谢!先生 欢迎光临,
对于您的学习:
您的代码如下:
(defun c:cxircle(/ PT1 PT2 s)
(setq s (ssget '((0 . "LINE"))))
PT1 (cdr (assoc 10 s))
PT2 (cdr (assoc 11 s))
(command "LINE" PT1 PT2 "")
(command "CIRCLE" "2P" PT1 PT2)
)
尝试根据分配给选择集本身的“s”设置PT1和PT2。
您忘记从该选择集中获取实体。
要做到这一点,您必须先获得ssname:-) 或者这个
仅具有相同Z轴值的WCS线
(defun c:wlin2cir (/ ss i en ed p10 p11 mp lt tk cl)
(princ "\nSelect Lines To Convert To Circles...")
(while (setq ss (ssget (list (cons 0 "LINE")(list 210 0 0 1))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en)
p10 (cdr (assoc 10 ed))
p11 (cdr (assoc 11 ed))
mp (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
(or (setq lt (assoc 6 ed))
(setq lt (cons 6 "BYLAYER")))
(or (setq tk (assoc 39 ed))
(setq tk (cons 39 0)))
(or (setq cl (assoc 62 ed))
(setq cl (cons 62 256)))
(if (equal (caddr p10) (caddr p11))
(entmake (list (cons 0 "CIRCLE")
(assoc 8 ed)
(cons 10 mp)
(cons 40 (distance p10 mp))
lt tk cl))
(alert "LINEs Found That Are Not Coplaner..."))
(setq i (1+ i))))
(prin1))
应匹配图层、颜色、厚度和线型
-大卫
(defun c:l2c (/ sel int ent str end)
(if (setq int -1 sel (ssget '((0 . "LINE"))))
(while (setq ent (ssname sel (setq int (1+ int))))
(setq str (cdr (assoc 10 (entget ent)))
end (cdr (assoc 11 (entget ent)))
)
(entmake
(list '(0 . "CIRCLE")
(cons 10 (mapcar '(lambda (q p) (* (+ q p) 0.5)) str end))
(cons 40 (/ (distance str end) 2.))
)
)
)
)
(princ)
)
页:
[1]