xhq1954425 发表于 2013-7-7 19:02:09

求助:非闭合多段线两端同时延伸给定距离的编程思路?谢谢!

如题:

请大家帮忙

skg123 发表于 2022-5-9 17:25:06

vormittag 发表于 2013-7-7 19:26
如果首尾两端都是直线就好搞一些。
起终点的切线矢量通过vlax-curve-getFirstDeriv 可以取得,沿伸以后的 ...

延伸圆弧是最烦人,总是一个方向延伸

vormittag 发表于 2013-7-7 19:26:02

如果首尾两端都是直线就好搞一些。
起终点的切线矢量通过vlax-curve-getFirstDeriv 可以取得,沿伸以后的点很容易算得出来,然后把起终点的坐标更新就行了。

如果首尾是圆弧就要讨厌一些,看你想要的效果了,如果是沿圆弧切线沿伸,跟上面思路是一样的,不过要补充首尾两个点。

如果是沿圆弧沿伸,这是最讨厌的,首先要算出沿伸后起终点的位置,接下来有两种方法:第一,在首尾添加两个点,添加两段的凸度要算出来,添加进去然后更新图元,这种方法一定有解;第二,不添加点,用沿伸后的坐标直接更新,这时还要算出沿伸以后首尾的凸度,然后更新起点的位置和凸度,更新终点的坐标,更新倒数第二个点的凸度,这种方法最麻烦,而且圆弧弧度比较大的时候不一定有解,好处是多段线的顶点数没有增加。

wowan1314 发表于 2013-7-7 19:26:30

我来说下我的思路。也许还不正确,仅供参考。
1、选线,求得PL线起点P1、终点P2、及其角度ANG1 与ANG2
2、再求各点在各自角度延伸后的点。P3 P4
3、根据P3.P4修改PL线的起点、终点坐标。

xhq1954425 发表于 2013-7-7 19:51:42

本帖最后由 xhq1954425 于 2013-7-7 19:52 编辑

两端是直线的,我没弄过PL,看来还是有点难度!向楼上二位深表谢意!!

自贡黄明儒 发表于 2013-7-7 20:15:29

调用_extend不行吗?

xhq1954425 发表于 2013-7-7 20:31:30

本帖最后由 xhq1954425 于 2013-7-7 20:58 编辑

自贡黄明儒 发表于 2013-7-7 20:15 static/image/common/back.gif
调用_extend不行吗?
谢谢你!原本想是多有不便,但是既然你说了就必有其道理!我又试了一下,想法是先在两端点处,以伸长量为半径分别画圆(用屏幕背景色画),并选为延伸边界,然后用栏选(F ),第一点在圆心,第二点为随意,还真行了,剩下的就是如何获取两端点的坐标问题了,这样也解决了两端无论是什么情况都行!你说你多聪明!!, 没说的,再次谢谢你!

ZZXXQQ 发表于 2013-7-7 21:00:54

使用命令LENGTHEN也行。
(command "LENGTHEN" "DE" <长度> 端点 ... "")

Gu_xl 发表于 2013-7-7 21:01:40

本帖最后由 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:22:39

本帖最后由 xhq1954425 于 2013-7-7 21:25 编辑

Gu_xl 发表于 2013-7-7 21:01 static/image/common/back.gif
最基本的lengthen命令都忘了吗?
你要是出手那还说啥就是强大!一个顶三呀


xhq1954425 发表于 2013-7-7 21:34:28

我的问题解决了,怎么在标题上改成   已解决???要不就显得不好了……
页: [1] 2
查看完整版本: 求助:非闭合多段线两端同时延伸给定距离的编程思路?谢谢!