[求助]求空间POLYLINE线各顶点处夹角(已解决)
本帖最后由 作者 于 2009-5-21 22:09:47 编辑 <br /><br /> <p>各位朋友,所供的是明友"wangjin"写的求取两相交空间直线的夹角的程序,请大家帮忙改改,使得程序实现用户选取一根(3或4点)POLYLINE,即可求得夹角A及R、L、E、T这五要素?R由用户输入。</p> <p>迫切需要此功能,恳请大家出手。先谢谢大家了!</p> 本帖最后由 作者 于 2009-5-6 22:27:16 编辑 <br /><br /> <p>怎么又沉了呀,现在附上公式与说明,期待大家触手</p> 还是没有朋友出手吗,班竹们能否帮助改改或从新写一个啊。先谢谢了 <p>大项目,一般不会有人去写的,太费心思了</p> <p>我知道这个不容易,但还是希望万能的明经会有人出手。</p><p>不然不要那些复杂功能了,请大家帮忙写段程序实现:选去POLYLINE-》右键-》输出POLYLINE各拐点夹角(锐角)</p><p>找到几个求角度的函数,大家看看能不能用。。。</p> <p>继续顶起求助...</p> 用以下程序可以得出一楼图片中的各值(2维坐标),请哪位朋友帮忙改改使它可以支持3维坐标(或选取空间POLYLINE线)就能求出各值。先谢谢了。(defun c:test()
;加载vlisp函数
(vl-load-com)
;选取多段线
(if (setq Pline (entsel))
(progn
;提取多段线图元名称
(setq Pline (car Pline)
;提取DXF组码
PlDXFs (entget Pline)
;初始化顶点表
PLCoordinates nil
)
;提取顶点
(setq Tmp (vlax-safearray->list (vlax-variant-value (vla-get-coordinates (vlax-ename->vla-object Pline))))
i 1
)
(repeat (/ (length Tmp) 3)
(setq PLCoordinates (append PLCoordinates (list (list (nth (- i 1) Tmp) (nth i Tmp) (nth (+ i 1) Tmp))))
i (+ i 3)
)
)
;三个点以上
(if (> (length PLCoordinates) 3)
(progn
;构造三个表
(setq ListA (reverse (cddr (reverse PLCoordinates)))
ListB (cdr (reverse (cdr (reverse PLCoordinates))))
ListC (cddr PLCoordinates)
;初始化弧度表
ListAngle '()
)
;计算夹角
(mapcar '(lambda(ptA ptB ptC)
;计算过程
(princ ptA)
(princ ptB)
(princ PtC)
)
listA listB listC
)
;显示结果
ListAngle
)
)
)
)
(princ)
)
睡觉咯,明天继续,有兴趣的接力
页:
[1]
2