llsheng_73 发表于 2014-1-9 13:15:42

荒野孤行 发表于 2014-1-9 11:13 static/image/common/back.gif
哥们,我更新了源码,有些问题,再帮我看下吧,谢谢。

当两根边线顶点数不一样多,主要走向也不平行时,内插的点到边线距离相等会出现岐义,这个时候到底取边线顶点连线中点还是取一条线的顶点到另一条线的垂线的中点是不一样的,这个具体取哪个点作为所插入线的顶点可能根据用途不同会有不同取舍吧

edata 发表于 2014-1-9 14:13:45

荒野孤行 发表于 2014-1-9 11:13 static/image/common/back.gif
哥们,我更新了源码,有些问题,再帮我看下吧,谢谢。

绘制的pl会多点。
对于直线与折线,如果选择相反,将出错,还不如原来了。
对等折线的中线还是有问题,不过平行折线正常,但是会多点。。。。
关键还得适合自己用。

荒野孤行 发表于 2014-1-9 15:22:13

edata 发表于 2014-1-9 14:13
绘制的pl会多点。
对于直线与折线,如果选择相反,将出错,还不如原来了。
对等折线的中线还是有问题, ...

我的思路是把一条多段线的顶点投影到另外一条多段线上(找最近点)这些点在多段线上有对应的param值,然后把这些点用vl-sort排序(比较点的param),再将这些点投影到另外一条多段线上,对应的两个顶点之间找中点,通过中点绘制出需要的多段线。

投影点就是最近点
另外我不知道param代表的是什么,是不是每个点在曲线上的位置参数、序号的意思?

q3_2006 发表于 2014-1-21 15:24:42

;;不好意思,没看你的代码.就是我的简单思路....(defun dpl (e)
        (mapcar        'cdr(vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e)))
)
(defun mid (p1 p2)
    (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p1 p2))
    )
(defun pt2per (pt e)
(if (and pt e)
    (vlax-curve-getclosestpointto (vlax-ename->vla-object e) pt t)
)
)
(defun c:tt ( / a al b bl cl dl x y)
        (while (setq a (car (entsel))
                b (car (entsel))
                al (dpl a)
                bl (dpl b)
        )
                (if (> (length al) (length bl))
                (setq cl (mapcar '(lambda(x) (pt2per x b)) al)
                                dl (mapcar '(lambda(x y) (mid x y)) al cl)
                        )
                (setq cl (mapcar '(lambda(x) (pt2per x a)) bl)
                                dl (mapcar '(lambda(x y) (mid x y)) bl cl)
                        )
        )
        (xyp-pline dl nil)
        )
)

q3_2006 发表于 2014-1-21 15:25:37

(xyp-pline dl nil)

院长函数..就是画多段线 ....好写

laorenhao999 发表于 2014-11-6 16:40:11

多谢,可以参考下

daivce 发表于 2019-10-9 17:01:09

牛逼,是个好东西,真好用,谢谢
页: 1 [2]
查看完整版本: 求两条多段线的中线