lengliqun 发表于 2010-6-18 20:14:00

将正多边形变为圆

<p><font face="Verdana">求一LSP程序,将正多边形变为圆,生成的圆的图层与选择的正多边形对应相同(最好能框选)</font></p>
<p>谢谢。</p>

cyfdean 发表于 2023-8-3 08:22:00


感谢ZZXXQQ

戏男 发表于 2022-5-11 08:59:42

感谢ZZXXQQ

999999 发表于 2021-1-22 18:44:20

感谢ZZXXQQ

ZZXXQQ 发表于 2010-6-18 20:17:00

是外接还是内切圆?

lengliqun 发表于 2010-6-18 21:21:00

不好意思,是外接圆。

ZZXXQQ 发表于 2010-6-19 11:12:00


;多边形外接圆 明经 ZZXXQQ 2010.6.19
(defun c:tt ()
(setvar "CMDECHO" 0)
(setq oldos (getvar "OSMODE"))
(if (setq ss (ssget '((0 . "LWPOLYLINE") (70 . 1)))) (progn
(command ".UNDO" "BE")
(setvar "OSMODE" 0)
(setq i 0)
(repeat (sslength ss)
   (setq ent (entget(ssname ss i))
         i (1+ i)
         lst (list))
   (if (> (cdr(assoc 90 ent)) 2) (progn
    (foreach x ent (if (= (car x) 10) (setq lst (cons (cdr x) lst))))
    (setq pt1 (car lst) pt2 (cadr lst) pt3 (caddr lst)
          an1 (angle pt1 pt2) an2 (angle pt2 pt3)
          pm1 (polar pt1 an1 (/ (distance pt1 pt2) 2))
          pm2 (polar pt2 an2 (/ (distance pt2 pt3) 2)))
    (if (setq pc (inters pm1 (polar pm1 (+ an1 (/ pi 2)) 10)
                         pm2 (polar pm2 (+ an2 (/ pi 2)) 10) nil))
   (command ".CIRCLE" pc pt1)
    )
   ))
)
(command ".ERASE" ss "")
(setvar "OSMODE" oldos)
(command ".UNDO" "E")
))
(setvar "CMDECHO" 1)
(princ)
)

lengliqun 发表于 2010-6-19 12:46:00

CAD2004测试可用,谢谢。

mccad 发表于 2010-6-19 15:26:00

<p>&nbsp;先要判断是不是正多边形,用各边长相等角度相同简单判断就行。</p>
<p>如果是正多边形,则直接三点画圆,这样会简单一点。</p>

ZZXXQQ 发表于 2010-6-19 17:13:00

本帖最后由 作者 于 2010-6-20 9:19:40 编辑



;根据明总提示改了一下。2010.6.20又改了一下
(defun c:tt ()
(setvar "CMDECHO" 0)
(setq oldos (getvar "OSMODE"))
(if (setq ss (ssget '((0 . "LWPOLYLINE") (70 . 1)))) (progn
(command ".UNDO" "BE")
(setvar "OSMODE" 0)
(setq i 0)
(repeat (sslength ss)
   (setq ent (entget(ssname ss i))
         i (1+ i)
         lst (list))
   (if (> (cdr(assoc 90 ent)) 2) (progn
    (foreach x ent (if (= (car x) 10) (setq lst (cons (cdr x) lst))))
    (setq oldl (getvar "CLAYER"))
    (setvar "CLAYER" (cdr(assoc 8 ent)))
    (setq j 0)
    (while (and (equal (distance (nth j lst) (nth (1+ j) lst))
            (distance (nth (1+ j) lst) (nth (+ j 2) lst)) 0.001)
             (< j (- (length lst) 3)))
   (setq j (1+ j))
    )
    (if (= j (- (length lst) 3))
   (command ".CIRCLE" "3P" (car lst) (cadr lst) (caddr lst))
    )
    (setvar "CLAYER" oldl)
   ))
)
(command ".ERASE" ss "")
(setvar "OSMODE" oldos)
(command ".UNDO" "E")
))
(setvar "CMDECHO" 1)
(princ)
)

lengliqun 发表于 2010-6-20 01:02:00

<p>CAD2004测试可用,</p>
<p>如果可能,能否将“圆的图层与选择的正多边形对应相同”也满足,</p>
<p>谢谢。</p>
<p>&nbsp;</p>
<p>真不好意思,我患了个错误,一直以为<font face="Verdana" color="#da2549"><b>ZZXXQQ</b></font>与明总是同一个人,真白混了。</p>

ZZXXQQ 发表于 2010-6-20 09:21:00

7楼改了,再试试。

lengliqun 发表于 2010-6-20 13:25:00

谢谢,完全达到要求。
页: [1] 2
查看完整版本: 将正多边形变为圆