Lt Dan's l 发表于 2022-7-6 09:44:58

多段线上的点

我希望能够得到我选择的多段线部分之间的两点。
 
例子:
蓝线是所选多段线的一部分,X是我希望得到的两个点。

 
我可以通过比较角度和按距离排序得到这个结果,但肯定有更好的方法。

designerstuart 发表于 2022-7-6 09:52:39

您只想选择直线并将其端点作为坐标返回?

Lt Dan's l 发表于 2022-7-6 10:00:37

我想选择一条多段线,让它返回该线段的起点和终点
 
我用这个做什么
https://sites.google.com/site/reidbooe/videos和观察门。avi公司

alanjt 发表于 2022-7-6 10:03:51

(defun AT:Segment (objPnt)
;; Retreive segment number and Start & End points
;; objPnt - List with object & point
;; Alan J. Thompson, 11.10.09 / 08.19.10
(if (vl-consp objPnt)
   ((lambda (seg)
      (list seg
            (list (vlax-curve-getPointAtParam (car objPnt) seg)
                  (cond ((vlax-curve-getPointAtParam (car objPnt) (1+ seg)))
                        ((vlax-curve-getPointAtParam (car objPnt) (1- seg)))
                  )
            )
      )
    )
   (fix (vlax-curve-getParamAtPoint
            (car objPnt)
            (vlax-curve-getClosestPointTo (car objPnt) (trans (cadr objPnt) 1 0))
          )
   )
   )
)
)
 
如。
(AT:Segment (entsel))

Lt Dan's l 发表于 2022-7-6 10:11:19

我在开发人员的帮助下查看了曲线测量函数,但不知道如何获得端点。
 
非常感谢。

pBe 发表于 2022-7-6 10:19:49

谢谢你的代码片段Alanjt,我为同样的目的编写的代码是waaaaayyyy to long。(DXF代码)
 
(vlax-curve-getClosestPointTo (car objPnt) (trans (cadr objPnt) 1 0));<------

 
但仍然。。随便。有时间我会努力的,谢谢你的鼓励
 

alanjt 发表于 2022-7-6 10:24:28

这可能会引起兴趣:

(defun c:Seg (/ pl ss a_10 pt_lst dst_tst seg_pts)
(if (setq pl (entsel "\nSelect Pline:"))
(progn
          (setq ss (entget (car pl)))
(while (setq a_10 (assoc 10 ss))
          (setq ss (member a_10 ss))
          (setq
            pt_lst
             (cons (cdr (assoc 10 ss)) pt_lst)
            ss (cdr ss)) ;_ end of setq
          )
(setq dst_tst (mapcar (function (lambda (j) (distance (cadr pl) j))) pt_lst)
   2pt (vl-sort dst_tst '<)
seg_pts
               (list
   (nth (vl-position (nth 0 2pt) dst_tst) pt_lst)
   (nth (vl-position (nth 1 2pt) dst_tst) pt_lst))
         )
          )
)
)

pBe 发表于 2022-7-6 10:27:36

alanjt 发表于 2022-7-6 10:35:02

Yeah, I could see where you'd have problems with vertices being close together. I still like it.

pBe 发表于 2022-7-6 10:44:33

 
yup, bummer huh
 
I could've made it shorter it i did this way(not that it matters)
 

(setq ss   (entget (car pl))       pt_lst (mapcar                'cdr                (vl-remove-if-not '(lambda (x) (= (car x) 10)) ss)))
 
but still.. anyhoo. i'll worked on it when i get time, thank you for the encouragement Alanjt
 
页: [1] 2
查看完整版本: 多段线上的点