自贡黄明儒 发表于 2013-11-19 09:15:31

圆、弧时,如果中心点没有相互垂直的两条线,画十字中心线

;;圆、弧时,如果中心点没有相互垂直的两条线,画十字中心线
(defun HH:circleCross (en / ANG1 ANG2 E1EN E1ST        E2EN E2ST EN1 EN2 ENT P10 PX1 PX2 PY1 PY2 R
                     SS)
(setq ent (entget en))
(setq p10 (cdr (assoc 10 ent)))
(setq r (* (cdr (assoc 40 ent)) 1.25))
(if (and (setq ss (ssget "_C"
                           p10
                           p10
                           (list '(-4 . "<or")          '(0 . "LINE")           '(-4 . "<and")
                               '(0 . "LWPOLYLINE")                   '(90 . 2)
                               '(-4 . "and>")          '(-4 . "or>")
                                )
                  )
           )
           (cond ((equal (sslength ss) 2)
                  (setq en1 (ssname ss 0))
                  (setq en2 (ssname ss 1))
                  (setq e1st (vlax-curve-getStartPoint en1))
                  (setq e1en (vlax-curve-getendPoint en1))
                  (setq e2st (vlax-curve-getStartPoint en2))
                  (setq e2en (vlax-curve-getendPoint en2))
                  (setq ang1 (angle e1st e1en))
                  (setq ang2 (angle e2st e2en))
                  (equal (rem (- ang1 ang2) (/ pi 2)) 0)
               )
               ((> (sslength ss) 2) T)
               (T nil)
           )
      )
    nil
    (progn
      (setq px1 (mapcar '- p10 (list r 0 0)))
      (setq px2 (mapcar '+ p10 (list r 0 0)))
      (entmake (list (cons 0 "LINE") (cons 10 px1) (cons 11 px2)))
      (setq py1 (mapcar '- p10 (list 0 r 0)))
      (setq py2 (mapcar '+ p10 (list 0 r 0)))
      (entmake (list (cons 0 "LINE") (cons 10 py1) (cons 11 py2)))
    )
)
)
(defun C:W3 (/ EN)
(setq en (car (entsel)))
(HH:circleCross en)
(princ)
)

w245272914 发表于 2018-6-6 16:04:05

黄老师,这函数我给你挖出来,让你回忆下,哈哈。

可不可以圆与直线弧与直线    他们的最近点两线链接并垂直啊。
页: [1]
查看完整版本: 圆、弧时,如果中心点没有相互垂直的两条线,画十字中心线