chenjian2159 发表于 2014-2-27 20:33:22

圆弧堆中过滤出交叉口

本帖最后由 chenjian2159 于 2014-2-27 21:01 编辑

工作中,画道路的时候,有时候道路线中含有圆弧,而道路交叉口也是圆弧,需要在一堆圆弧中找出哪些圆弧是道路交叉口的圆弧,哪些是道路线中的圆弧,交叉口圆弧的半径可能都不一样,没什么规律,道路线是根据道路中心线相两边偏移相同的距离得到的。想了很久不知道有什么好方法,请明经的高手们帮忙解决下,万分感激!!!!

q3_2006 发表于 2014-2-27 22:13:25

(defun c:tt ( / co e el i la ss)
(defun mklaco (la co)
(if (= (tblsearch "layer" la) nil)
    (command "layer" "m" la "c" co la "")
    (command "layer" "t" la "s" la "c" co la "")
)
)
(mklaco "交叉口半径" 3)
      (if (setq ss (ssget "x" '((0 . "arc") (8 . "道路线"))))
      (repeat (setq i (sslength ss))
            (setq e (ssname ss (setq i (1- i)))
                  el (entget e)
            )
            (if (equal (cdr (assoc 40 el)) 20 10)
                  (entmod (subst (cons 8 "交叉口半径") (assoc 8 el) el))
            )
      )
    )
)

zml84 发表于 2014-2-28 10:28:34

好判断
方案1:看左右相邻。若邻居长,自身短,则是。
方案2:不看相邻,只算增长系数,即可。

q3_2006 发表于 2014-2-28 10:38:42

zml84 发表于 2014-2-28 10:28 static/image/common/back.gif
好判断
方案1:看左右相邻。若邻居长,自身短,则是。
方案2:不看相邻,只算增长系数,即可。

专业 .....

Gu_xl 发表于 2014-2-28 11:31:45

(defun c:tt (/ ss n el dr)
(while (setq ss (ssget '((0 . "arc"))))
    (repeat (setq n (sslength ss))
      (setq el (entget(ssname ss (setq n (1- n)))))
      (setq dr (- (cdr (assoc 51 el)) (cdr (assoc 50 el))))
      (if (< dr 0) (setq dr (+ dr pi pi)))
      (if (> dr (/ pi 3)) ;;圆心角大于60度(具体大小可根据实际情况自己设置),则认为是交叉口
        (progn
          (if (assoc 370 el)
          (setq el (subst (cons 370 40) (assoc 370 el) el))
          (setq el (append el (list (cons 370 40))))
          )
          (if (assoc 62 el)
          (setq el (subst (cons 62 3) (assoc 62 el) el))
          (setq el (append el (list (cons 62 3))))
          )
          (entmod el)
          )
        )
      )
    )
(princ)
)

xyp1964 发表于 2014-2-28 12:09:42

本帖最后由 xyp1964 于 2014-2-28 12:41 编辑


;;只适于所提供的dwg文件

(if (setq ss (ssget '((0 . "circle") (40 . 20)))) (sssetfirst ss ss))
页: [1]
查看完整版本: 圆弧堆中过滤出交叉口