j15tty 发表于 2014-9-25 15:46:14

自动绘制多段线各点垂线,如何保证垂线都在多线外侧

如何让多段线垂线都在多段线外侧
(defun C:t11 ()
(vl-load-com)
(setq cur (car (entsel)))
(setq
    lb (mapcar
       'cdr
       (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget cur))
       )
)
(setq n 0)
(while (<= n (length lb))
    (setq p1 (car (nth n lb)))
    (setq p2 (cadr (nth n lb)))
    (setq p (listp1p20.0))
    (setq obj (vlax-ename->vla-object cur))
    (setq tan (vlax-curve-getFirstDeriv
                obj
                (vlax-Curve-GetParamatDist
                  obj
                  (vlax-curve-getDistAtPoint obj p)
                )
              )
    )
    (setq pe (polar p (+ (/ pi 2) (atan (/ (cadr tan) (car tan)))) 10))
    (vl-cmdf "line" p pe "")
    (setq n (+ n 1))
)
)

自贡黄明儒 发表于 2014-9-25 16:54:17

估计这个要先取多段线的三个点,判断非自交多段是否顺时针或逆时针。

j15tty 发表于 2014-9-25 17:07:16

我倒是觉得没那么复杂,我想就判断点在多段线哪一侧,然后加180度就可以

llsheng_73 发表于 2014-9-28 18:59:08

本帖最后由 llsheng_73 于 2014-9-28 19:03 编辑

个人理解能力有限,个人认为未封闭多线段没有内外的区分,所谓的“内外”完全根据视觉上的感觉,而这点经验无法传递给计算机,所以无法让它进行判断,柱主的U字形的曲线可以有一个大家都可接受的内外的说法,但是S或者Z,N这样形状的如何界定内外?
当然如果按楼主本来的意思想保证短线全都在一边有个比较简单的办法,第一条线绘制出来后,计算出第二条线的外端点(不与原多线段相接的那个点),用它和前一条线的外端点临时绘制一根直线段与原多线段相交,如果交点数量是奇数就说明它们不在同一方向,需要加上180度进行反向

lyqiezi 发表于 2014-9-28 20:11:41

本帖最后由 lyqiezi 于 2014-9-28 20:15 编辑

我觉得应该在绘制前给一个示意,在线段的起点位置显示绘制的方向(画出第一条垂线),如果不对,就右键改方向(可以循环多次改变方向)。
至于转折以后的角度,实际上也是多线段的角度,取得这个角度,就可以确定了

j15tty 发表于 2014-9-29 11:53:26

llsheng_73 发表于 2014-9-28 18:59 static/image/common/back.gif
个人理解能力有限,个人认为未封闭多线段没有内外的区分,所谓的“内外”完全根据视觉上的感觉,而这点经验 ...

你的说法很对,我也觉得这样

Gu_xl 发表于 2014-9-29 14:44:10

(setq pe (polar p (+ (/ pi 2) (atan (/ (cadr tan) (car tan)))) 10))
改成如下方式:
(setq pe (polar p (+ (/ pi 2) (angle '(0 0 0) tan)) 10))

j15tty 发表于 2014-9-29 15:57:54

Gu_xl 发表于 2014-9-29 14:44 static/image/common/back.gif
(setq pe (polar p (+ (/ pi 2) (atan (/ (cadr tan) (car tan)))) 10))
改成如下方式:
(setq pe (polar ...

谢谢版主,这样可以了
页: [1]
查看完整版本: 自动绘制多段线各点垂线,如何保证垂线都在多线外侧