gvgbabu 发表于 2022-7-6 09:20:18

如何将圆变为don

大家好
 
有人能帮我写一个lisp程序吗?在这个程序中,我必须用同样大小的甜甜圈(实心圆)替换图形中的所有圆。
 
提前感谢
 
甘尼什

BIGAL 发表于 2022-7-6 09:27:12

退房http://www.cadtutor.net/forum/showthread.php?59935-LISP作业帮助看起来很多学生都被分配了作业。
 
我将从(ssget“x”'((0。“圆”))开始)

Organic 发表于 2022-7-6 09:34:12

如果是同一个圆反复重复,那么它应该在开始时被做成一个块,然后很容易将块修改为实心圆。

Tharwat 发表于 2022-7-6 09:37:53


 

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


 
塔瓦特

gvgbabu 发表于 2022-7-6 09:39:57

谢谢tharwat Dink&Begal
 
它工作得很好,你让我的工作更轻松
 
谢谢
 
甘尼什

Tharwat 发表于 2022-7-6 09:46:46

 
 
很高兴听到这个消息。甘尼什
 
享受

Lee Mac 发表于 2022-7-6 09:49:15

另一种方法是在不使用“甜甜圈”命令的情况下创建甜甜圈。以下代码适用于在任何平面上绘制的任何半径的圆,并将进一步保留原始圆的所有属性:
 

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

Tharwat 发表于 2022-7-6 09:54:12

李,
 
我想必须有内部和外部输入,以避免将圆转换为图案填充实体选项。
 
当做

Lee Mac 发表于 2022-7-6 09:59:53

 
我知道OP需要“实心圆”,但如有必要,可以创建任意内外半径的甜甜圈。

David Bethel 发表于 2022-7-6 10:03:06

或者可能:
 

(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
查看完整版本: 如何将圆变为don