BrianTFC 发表于 2022-7-6 09:13:32

效果很好。。。。谢谢

pBe 发表于 2022-7-6 09:18:25

另一个
 
(defun c:acir(/ circle _moveblk aDoc ss e ang pts ln p1 p2 cir1 cir2 entm_ entm gr code cord)
   (if (not (member "geomcal.arx" (arx)))
         (arxload "geomcal")
         )
   (setvar 'osmode 0)
   (defun circle(Doc p r)
         (vlax-invoke
               (vlax-get (vla-get-ActiveLayout Doc) 'Block)
               'AddCircle pr
               )
         )
   (defun _moveblk(flg ent bp np)
         (if (not flg)
               (vla-move
                     (setq flg (vla-copy ent))
                     (vlax-3d-point bp)
                     (vlax-3d-point np)
                     )
               (progn (vla-delete flg) (setq flg nil))
               )
         flg
         )
   (setq aDoc (vla-get-activedocument (vlax-get-acad-object)))
   (if
   (setq ss (ssget '((0 . "LINE"))))
   (repeat (setq i (sslength ss))
         (setq e (ssname ss (setq i (1- i))))
         (redraw e 3)
         (setq ang (apply 'angle
                            (setq pts(mapcar
                                             '(lambda (d)
                                                    (cdr(assoc
                                                                d
                                                                (entget e))))
                                             '(10 11))
                                  )))
         (if (> (setq ln (apply 'distance pts)) 12.0)
               (progn
                     (redraw e 3)
                     (setq p1 (Car pts)
                           p2 (Cadr pts))
                     (setq cir1 (circle aDoc
                                          (setq uPt1 (polar (vlax-curve-getPointAtDist
                                                         e 6.0) (+ ang (/ pi 2.)) 0.375))
                                          0.1875))
                     (setq cir2 (circle aDoc
                                          (setq uPt2 (polar (vlax-curve-getPointAtDist
                                                         e (- ln 6.0)) (+ ang (/ pi2.))0.375))
                                          0.1875))
                     (prompt "\nDrag & Pick Location rebar location:")
                     (while
                           (progn
                                 (setq gr   (grread t 15 0)
                                       code (car gr)
                                       cord (cadr gr)
                                       )
                                 (cond
                                 ((and (= 5 code)(> (c:cal "ang(p1,p2,cord)") 180))
                                  (setq entm (_moveblk entm cir1 uPt1
                                                   (setq uPt1 (polar uPt1 (+ ang (* pi 1.5)) 0.75))))
                                  (setq entm_ (_moveblk entm_ cir2 uPt2
                                                    (setq uPt2 (polar uPt2 (+ ang (* pi 1.5)) 0.75)))) T
                                  )
                                 ((and (= 5 code)(< (c:cal "ang(p1,p2,cord)") 180))
                                  (setq entm (_moveblk entm cir1 uPt1
                                                   (setq uPt1 (polar uPt1 (+ ang (/ pi 2.)) 0))))
                                  (setq entm_ (_moveblk entm_cir2uPt2
                                                    (setq uPt2 (polar uPt2 (+ ang (/ pi 2.)) 0)))) T
                                  )
                                 )
                                 )
                           )
                     (vla-delete cir1)
                     (vla-delete cir2)
                     )
               )(redraw e 4)(setq entm nil entm_ nil)
         )
      )(princ)
   )(vl-load-com)
(princ)

 
如果长度小于12个单位,则不会处理这些线。
页: 1 [2]
查看完整版本: 直线为pi时插入圆