水吉空 发表于 2017-11-30 10:07:07

悬赏50个明经币,求大神出手多段线中点垂足上的一点!最简求法

本帖最后由 水吉空 于 2017-12-1 00:06 编辑

悬赏50个明经币,求大神出手多段线中点垂足上的一点!最简求法
垂足在多段线的右边或者上边,从上往下画也是在右边,从下往上画也是在右边,从左往右画在上边,从右往左画也是在上边。感谢回答问题的热心网友!

修改 了springwillow大师的程序实现垂足在多段线的右边或者上边,从上往下画也是在右边,从下往上画也是在右边,从左往右画在上边,从右往左画也是在上边。实现了自己想要的功能,感谢!

springwillow 发表于 2017-11-30 10:07:08

试用

本帖最后由 springwillow 于 2017-12-1 08:49 编辑

欢迎试用,简单写了一下,加了一些注释,方便同学们参考(defun c:getmap()
(setq dist (getdist "输入垂直距离:"))
(setq ename (car (entsel)))
(setq curve (vlax-ename->vla-object ename))
(setq len (vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve)));求多段线长度
(setq d (/ len 2))
(setq midpoint (vlax-curve-getPointAtDist curve d));求多段线中点
(setq param (vlax-curve-getparamatpoint curve midpoint));求中点处的参数,参数的意义为计算点在polyline顶点上的顺序位置值,该值整数为计算点在polyline上的顶点顺序,以0为计数起点,小数部分为计算点在该poly片段上的长度比率
(setq SecondDeriv (vlax-curve-getSecondDeriv curve param));求中点的法线向量
(if (equal SecondDeriv '(0 0 0));如果法线的向量为'(0 0 0)说明此线段为直线段,否则为有凸度段
    (progn
      (setq FirstDeriv (vlax-curve-getFirstDeriv curve param));求中点的切线向量
      (setq ang (+ (angle '(0 0 0)FirstDeriv) (* 0.5 pi)));根据切线向量求法向角度
      )
    (setq ang (angle '(0 0 0)SecondDeriv));直接用法线向量求角度
    )
(setq pt (polar midpoint ang dist))
(entmake (list '(0 . "LINE") (cons 10 midpoint) (cons 11 pt)))
)

panliang9 发表于 2017-11-30 11:10:08

帮顶一个,需要选中一个多段线,然后再求出多段线的中点,然后再求出该中点和多段线的垂线,再根据距离找出一个座标点!

Andyhon 发表于 2017-11-30 11:48:00

这几个函数会有帮助滴

水吉空 发表于 2017-11-30 11:52:42

panliang9 发表于 2017-11-30 11:10
帮顶一个,需要选中一个多段线,然后再求出多段线的中点,然后再求出该中点和多段线的垂线,再根据距离找出 ...

谢谢支持!

水吉空 发表于 2017-11-30 11:53:07

Andyhon 发表于 2017-11-30 11:48
这几个函数会有帮助滴

我查查看,谢谢大神。

xinxirong 发表于 2017-11-30 14:15:47

这个垂足方向有两个,就像offset你要偏向哪边?

水吉空 发表于 2017-11-30 14:26:14

xinxirong 发表于 2017-11-30 14:15
这个垂足方向有两个,就像offset你要偏向哪边?

总是偏向上面或者右面。

水吉空 发表于 2017-11-30 14:27:09

springwillow 发表于 2017-11-30 14:08
欢迎试用,简单定了一下

谢谢大神,等下我试试看!感谢!

llsheng_73 发表于 2017-11-30 16:28:16

水吉空 发表于 2017-11-30 14:26
总是偏向上面或者右面。

多段线前进方向右边?
页: [1] 2 3
查看完整版本: 悬赏50个明经币,求大神出手多段线中点垂足上的一点!最简求法