脚印2012 发表于 2021-6-13 11:02:29

CAD里标注圆直径。选择圆后,提示所选对象不是圆弧或圆。

本帖最后由 脚印2012 于 2021-6-13 16:28 编辑

求助大神们:在CAD里标注圆直径。选择圆后,提示所选对象不是圆弧或圆。由于有很多这种看似是圆,但是标注不了半径。所以求助大神们怎么才能将图里很多的这种看似圆,转换成实际的圆。本想一个一个重新画。实在是圆太多了。谢谢大神们。能给解决下吗。谢谢

xj6019 发表于 2021-6-13 11:22:58

(defun c:tt (/ ss n ent para p1 p2 p3)
   (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (repeat (setq n (sslength ss))
       (setq ent         (ssname ss (setq n (1- n)))
             para (vlax-curve-getEndParam ent)
             p1         (vlax-curve-getPointAtParam ent 0)
             p2         (vlax-curve-getPointAtParam ent (fix (* para 0.33)))
             p3         (vlax-curve-getPointAtParam ent (fix (* para 0.66)))
       )
       (pt3a p1 p2 p3)
       (entdel ent)
   )
   )
   (princ)
)

(defun pt3a (pt1 pt2 pt3)                ;pt1以及pt3为起始点,pt2为中间的一点.
;;;==================================
;;;(setq      pt1 (list (nth 0 pt1) (nth 1 pt1) 0.0)
;;;      pt2 (list (nth 0 pt2) (nth 1 pt2) 0.0)
;;;      pt3 (list (nth 0 pt3) (nth 1 pt3) 0.0)
;;;)
   (if
   (setq cent
            (Inters
            (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
            (polar (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
                     (+ (* 0.5 pi) (angle pt1 pt2))
                     1.0
            )
            (polar pt3 (angle pt3 pt2) (* 0.5 (distance pt3 pt2)))
            (polar (polar pt3 (angle pt3 pt2) (* 0.5 (distance pt3 pt2)))
                     (+ (* 0.5 pi) (angle pt3 pt2))
                     1.0
            )
            nil
            )
   )                                        ;假如有交点,则可以做园,否则做直线
       (entmake      (list (cons 0 "circle")
                     (cons 8 "ok")
                     (cons 10 cent)
                     (cons 40 (distance cent pt1))
                     (cons 62 102)
               )
      )    (entmake      (list (cons 0 "line")
                     (cons 8 "ok")
                     (cons 10 pt1)
                     (cons 11 pt2)
                     (cons 62 102)
               )
      )
   )
   (princ)
)

脚印2012 发表于 2021-6-13 11:29:46

xj6019 发表于 2021-6-13 11:22
(defun c:tt (/ ss n ent para p1 p2 p3)
   (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
   (repeat ...
你好。运行了下。好像不行。能下载下我发的图。测试下。我运行了下。不行。麻烦了。谢谢大哥

xj6019 发表于 2021-6-13 15:16:53

你的文件里的都是两个半圆组成的一个圆吧,直接合并一下不行吗

脚印2012 发表于 2021-6-13 15:28:52

xj6019 发表于 2021-6-13 15:16
你的文件里的都是两个半圆组成的一个圆吧,直接合并一下不行吗

他是一个整体,我看了下不是两个半圆。用炸开命令还炸不开。好奇怪。用圆直径标注。提示不是圆。

xj6019 发表于 2021-6-13 16:29:22

(defun c:YTZY ()
(if (setq ss (ssget '((0 . "ELLIPSE"))))
    (progn
      (setq i -1)
      (while (setq s1 (ssname ss (setq i (1+ i))))
      (setq en (entget s1)
            pt (cdr (assoc 10 en))
            rr (caddr (assoc 11 en))
                          RRA(* RR 1.41422712487)
      )
      (command "circle" "non" pt RRA)
      )
      (command "erase" ss "")
    )
)
(princ)
)

xj6019 发表于 2021-6-13 16:30:03

脚印2012 发表于 2021-6-13 15:28
他是一个整体,我看了下不是两个半圆。用炸开命令还炸不开。好奇怪。用圆直径标注。提示不是圆。

新代码测试过可用

脚印2012 发表于 2021-6-13 16:33:09

xj6019 发表于 2021-6-13 16:29
(defun c:YTZY ()
(if (setq ss (ssget '((0 . "ELLIPSE"))))
    (progn


可以了。非常感谢。谢谢。
页: [1]
查看完整版本: CAD里标注圆直径。选择圆后,提示所选对象不是圆弧或圆。