求助:非闭合多段线两端同时延伸给定距离的编程思路?谢谢!
如题:请大家帮忙
vormittag 发表于 2013-7-7 19:26
如果首尾两端都是直线就好搞一些。
起终点的切线矢量通过vlax-curve-getFirstDeriv 可以取得,沿伸以后的 ...
延伸圆弧是最烦人,总是一个方向延伸 如果首尾两端都是直线就好搞一些。
起终点的切线矢量通过vlax-curve-getFirstDeriv 可以取得,沿伸以后的点很容易算得出来,然后把起终点的坐标更新就行了。
如果首尾是圆弧就要讨厌一些,看你想要的效果了,如果是沿圆弧切线沿伸,跟上面思路是一样的,不过要补充首尾两个点。
如果是沿圆弧沿伸,这是最讨厌的,首先要算出沿伸后起终点的位置,接下来有两种方法:第一,在首尾添加两个点,添加两段的凸度要算出来,添加进去然后更新图元,这种方法一定有解;第二,不添加点,用沿伸后的坐标直接更新,这时还要算出沿伸以后首尾的凸度,然后更新起点的位置和凸度,更新终点的坐标,更新倒数第二个点的凸度,这种方法最麻烦,而且圆弧弧度比较大的时候不一定有解,好处是多段线的顶点数没有增加。
我来说下我的思路。也许还不正确,仅供参考。
1、选线,求得PL线起点P1、终点P2、及其角度ANG1 与ANG2
2、再求各点在各自角度延伸后的点。P3 P4
3、根据P3.P4修改PL线的起点、终点坐标。
本帖最后由 xhq1954425 于 2013-7-7 19:52 编辑
两端是直线的,我没弄过PL,看来还是有点难度!向楼上二位深表谢意!!
调用_extend不行吗? 本帖最后由 xhq1954425 于 2013-7-7 20:58 编辑
自贡黄明儒 发表于 2013-7-7 20:15 static/image/common/back.gif
调用_extend不行吗?
谢谢你!原本想是多有不便,但是既然你说了就必有其道理!我又试了一下,想法是先在两端点处,以伸长量为半径分别画圆(用屏幕背景色画),并选为延伸边界,然后用栏选(F ),第一点在圆心,第二点为随意,还真行了,剩下的就是如何获取两端点的坐标问题了,这样也解决了两端无论是什么情况都行!你说你多聪明!!, 没说的,再次谢谢你! 使用命令LENGTHEN也行。
(command "LENGTHEN" "DE" <长度> 端点 ... "") 本帖最后由 Gu_xl 于 2013-7-8 09:27 编辑
xhq1954425 发表于 2013-7-7 20:31 static/image/common/back.gif
谢谢你!原本想是多有不便,但是既然你说了就必有其道理!我 ...
最基本的lengthen命令都忘了吗?
(defun c:tt ()
(initget 7)
(setq d (getreal "\n延伸距离:"))
(setq e (car(entsel "\n选择曲线:")))
(command "_lengthen" "de" d)
(command (list e (trans (vlax-curve-getStartPoint e) 0 1)) (list e (trans (vlax-curve-getEndPoint e) 0 1)) "")
(princ)
) 本帖最后由 xhq1954425 于 2013-7-7 21:25 编辑
Gu_xl 发表于 2013-7-7 21:01 static/image/common/back.gif
最基本的lengthen命令都忘了吗?
你要是出手那还说啥就是强大!一个顶三呀
我的问题解决了,怎么在标题上改成 已解决???要不就显得不好了……
页:
[1]
2