song宋_74729 发表于 2022-3-17 09:51:08

(已解决)叉路口圆弧如何求出交点

本帖最后由 song宋_74729 于 2022-4-4 18:03 编辑

叉路口圆弧如何求出交点,红色圈为交点,可以用框选方式求出圆弧与交点坐标和半径,并汇出至EXECL,
麻烦大神帮忙谢谢.

夏生生 发表于 2022-4-4 17:16:11

song宋_74729 发表于 2022-4-4 16:02
改为图上标注编号并提
取圆弧首末坐标及交点坐标 半径
夏生生 谢谢

您拿19楼的改改就是了,就是那么几个函数转圈圈
(defun c:tt (/ en f i lst n pt pt1 pt1a pt2 pt2a r ss)
(setq ss (ssget '((0 . "arc"))))
(repeat (setq i (sslength ss))
    (setq n    (* 3 i)
    en   (ssname ss (setq i (1- i)))
    r    (rtos (cdr (assoc 40 (entget en))) 2 3)
    pt1(vlax-curve-getstartpoint en)
    pt1a (mapcar '+
         pt1
         (vlax-curve-getfirstderiv
       en
       (vlax-curve-getparamatpoint en pt1)
       )
         )
    pt2(vlax-curve-getendpoint en)
    pt2a (mapcar '-
         pt2
         (vlax-curve-getfirstderiv
       en
       (vlax-curve-getparamatpoint en pt2)
       )
         )
    pt   (trans (inters pt1 pt1a pt2 pt2a nil) 0 1)
    pt1(trans pt1 0 1)
    pt2(trans pt2 0 1)
    lst(cons (strcat (itoa n)
         ","
         (rtos (car pt) 2 3)
         ","
         (rtos (cadr pt) 2 3)
         ","
         r
         ",心"
         )
         lst
         )
    lst(cons (strcat (itoa (1- n))
         ","
         (rtos (car pt2) 2 3)
         ","
         (rtos (cadr pt2) 2 3)
         ","
         r
         ",末"
         )
         lst
         )
    lst(cons (strcat (itoa (- n 2))
         ","
         (rtos (car pt1) 2 3)
         ","
         (rtos (cadr pt1) 2 3)
         ","
         r
         ",首"
         )
         lst
         )
    )
    (entmake
      (list '(0 . "circle") (cons 10 (trans pt 1 0)) (cons 40 1))
      )
    (entmake (list '(0 . "text")
       '(100 . "AcDbEntity")
       '(100 . "AcDbText")
       (cons 10 (trans pt 1 0))
       (cons 1 (itoa n))
       (cons 40 1)
       )
       )
    (entmake (list '(0 . "text")
       '(100 . "AcDbEntity")
       '(100 . "AcDbText")
       (cons 10 (trans pt2 1 0))
       (cons 1 (itoa (1- n)))
       (cons 40 1)
       )
       )
    (entmake (list '(0 . "text")
       '(100 . "AcDbEntity")
       '(100 . "AcDbText")
       (cons 10 (trans pt1 1 0))
       (cons 1 (itoa (- n 2)))
       (cons 40 1)
       )
       )
    )
(setq f (open "d:\\1.csv" "w"))
(foreach n (cons "序号,X=,Y=,半径,点类别" lst)
    (write-line n f)
    )
(close f)
)

夏生生 发表于 2022-4-4 15:43:52

本帖最后由 夏生生 于 2022-4-4 15:55 编辑

可以看看vlax-curve-getfirstderiv函数

(defun c:tt (/ en f i lst n pt pt1 pt1a pt2 pt2a ss)
(setq ss (ssget '((0 . "arc"))))
(repeat (setq i (sslength ss))
    (setq en   (ssname ss (setq i (1- i)))
      pt1(vlax-curve-getstartpoint en)
      pt1a (mapcar '+
               pt1
               (vlax-curve-getfirstderiv
             en
             (vlax-curve-getparamatpoint en pt1)
             )
               )
      pt2(vlax-curve-getendpoint en)
      pt2a (mapcar '-
               pt2
               (vlax-curve-getfirstderiv
             en
             (vlax-curve-getparamatpoint en pt2)
             )
               )
      pt   (trans (inters pt1 pt1a pt2 pt2a nil) 0 1)
      n    (itoa (1+ i))
      lst(cons (strcat n
               ","
               (rtos (car pt) 2 3)
               ","
               (rtos (cadr pt) 2 3)
               ","
               (rtos (cdr (assoc 40 (entget en))) 2 3)
               )
             lst
             )
      )
    (entmake
      (list '(0 . "circle") (cons 10 (trans pt 1 0)) (cons 40 1))
      )
    (entmake (list '(0 . "text")
         '(100 . "AcDbEntity")
         '(100 . "AcDbText")
         (cons 10 (trans pt 1 0))
         (cons 1 n)
         (cons 40 1)
         )
         )
    )
(setq f (open "d:\\1.csv" "w"))
(foreach n lst
    (write-line n f)
    )
(close f)
)

song宋_74729 发表于 2022-4-4 15:09:05

song宋_74729 发表于 2022-3-18 23:00
谢谢xyp1964版主,如何将数据提取至execl,每一个点加编号,1. X=Y=R=并标注在图上,才知道提取位置谢 ...

(defun c:tt ()
(defun dxf (code e) (cdr (assoc code (entget e))))
(defun ArcBreakPoint (s1 / p0 p1 p1a p2 p2a pt) ;
    (setq p0(cdr (assoc 10 (entget s1)))
          p1(vlax-curve-getStartPoint s1)
          p2(vlax-curve-getEndPoint s1)
          p1a (polar p1 (+ (angle p0 p1) (* pi 0.5)) 1)
          p2a (polar p2 (+ (angle p0 p2) (* pi 0.5)) 1)
    )
    (inters p1 p1a p2 p2a nil)
)
(if (setq ss (ssget '((0 . "arc"))))
    (progn
      (setq i      -1
            lst      '()
      )
      (while (setq s1 (ssname ss (setq i (1+ i))))
      (setq pt(ArcBreakPoint s1)
            a          (list (cadr pt) (car pt) (dxf 40 s1))
            a          (mapcar '(lambda (x) (rtos x 2 3)) a)
            lst (cons a lst)
      )
      )
      (setq lst (cons '("X=" "Y=" "圓弧半徑") (reverse lst)))
      (print lst)
    )
)
(princ)
)
(setq ffn (getfiled "坐標寫入文本文件" "D:/" "TXT" 1))
(setq opf (open ffn "w"))
(setq ss (ssget '((0 . "*ARC"))))
(setq kg " ")
(setq txt (strcatkg "X坐標" kg "Y坐標" kg "圓弧半徑"))
(write-line txt opf)
;(princ (strcat kg "X坐標" kg "Y坐標" kg "圓弧半徑") opf)
(setq i -1)
(setq key 10)
(repeat (sslength ss)
(setq ent (entget (ssname ss (setq i (1+ i)))))
(setq count 1)
(foreach xy ent
(if (eq (car xyr) key)
(progn
(setq pe (cdr xyr))
(setq x (rtos(cadr pe)2 3))
(setq y (rtos(car pe)2 3))
(setq r (rtos(caddr pe)2 3))
(write-line (strcat (itoa count) kg x kg y kg r) opf)
;(princ "\n" opf)
;(princ (strcat (itoa count) kg x kg y kg r) opf)
(setq count (1+ count))
)
)
)
)
如何修改为图上标注编号并提
取圆弧首末坐标及交点坐标 半径
谢谢

guosheyang 发表于 2022-3-17 11:40:17

没咋说清楚,红色小圆为交点,啥交点?那些圆弧与红色小圆哪有啥交点?既然都画好了,还需要求?直接导出就可以

song宋_74729 发表于 2022-3-17 11:52:01

guosheyang 发表于 2022-3-17 11:40
没咋说清楚,红色小圆为交点,啥交点?那些圆弧与红色小圆哪有啥交点?既然都画好了,还需要求?直接导出 ...

红色圈为圆弧交点,交点是未知,

guosheyang 发表于 2022-3-17 11:59:28

圆弧与圆弧的交点?还是圆弧与啥的交点?

song宋_74729 发表于 2022-3-17 12:08:41

本帖最后由 song宋_74729 于 2022-3-17 12:16 编辑

guosheyang 发表于 2022-3-17 11:59
圆弧与圆弧的交点?还是圆弧与啥的交点?
单圆弧交点

xyp1964 发表于 2022-3-17 12:38:48

本帖最后由 xyp1964 于 2022-3-17 13:10 编辑

(defun ArcBreakPoint (s1 / p0 p1 p1a p2 p2a pt) ;圆弧拐点函数
(setq p0(cdr (assoc 10 (entget s1)))
      p1(vlax-curve-getStartPoint s1)
      p2(vlax-curve-getEndPoint s1)
      p1a (polar p1 (+ (angle p0 p1) (* pi 0.5)) 1)
      p2a (polar p2 (+ (angle p0 p2) (* pi 0.5)) 1)
)
(inters p1 p1a p2 p2a nil)
)



song宋_74729 发表于 2022-3-17 13:02:26

本帖最后由 song宋_74729 于 2022-3-17 13:05 编辑

xyp1964 发表于 2022-3-17 12:38
(defun ArcPtR (s1 / p0 p1 p1a p2 p2a pt)
(setq      p0(cdr (assoc 10 (entget s1)))
      p ...
厉害 , 那圆圈的交点是未知的,我要求出圆弧及交点坐标和半径,汇出至execl

guosheyang 发表于 2022-3-17 13:10:29

红色圆圈和圆弧是啥关系?为何称为交点?

guosheyang 发表于 2022-3-17 13:12:37

哦懂了原来是两端点的切线交点

song宋_74729 发表于 2022-3-17 13:56:38

guosheyang 发表于 2022-3-17 13:12
哦懂了原来是两端点的切线交点

没错 就是两端点的切线交点
页: [1] 2 3
查看完整版本: (已解决)叉路口圆弧如何求出交点