ktbjx 发表于 2022-7-5 15:47:30

从选定对象中画一个圆


(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程序从一条直线上画一个圆吗??
圆的直径将与我选择的线的长度相同

Aftertouch 发表于 2022-7-5 16:10:28

像这样的?
 

(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)
)

ktbjx 发表于 2022-7-5 16:22:27

就是这样!!!!!!!
天哪,你真节省时间!非常感谢!先生

Aftertouch 发表于 2022-7-5 16:25:44

欢迎光临,
 
对于您的学习:
您的代码如下:

(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:-)

David Bethel 发表于 2022-7-5 16:42:07

或者这个
 
仅具有相同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))

 
应匹配图层、颜色、厚度和线型
 
-大卫

Tharwat 发表于 2022-7-5 16:58:58


(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]
查看完整版本: 从选定对象中画一个圆