新人求助,想实现不同宽度的道路在相交处进行导角,导角数值和相交的宽度相关

我想实现多条道路进行平面相交,在相交处进行导角,导角的数值和道路宽度相关

最终效果大致如下图所示

我尝试写了一段流程,但是在特殊的情况下我当前写的就不适用了,也没想到好的解决办法,故来寻求大佬帮助,
如下图所示,在蓝色圈内,设想有一小段相交后延伸出来的线需要和另一个方向的路进行相交形成一个平交口,然后导角,但按照我现在写的流程,这段伸出来的路直接被我处理掉了
(当前我先先把这个问题处理正常后,再处理导角半径随路宽度变化的流程)

gh测试文件如下
道路 平交口导角测试.gh (13.4 KB)

感谢!

1 个赞

程序做的很不错
不过筛选逻辑做的不甚合理
提供给你一个新版
道路 平交口导角测试2.gh (15.8 KB)

2 个赞

感谢大佬的指点,接着你的流程,我基本上完成了我想实现的效果
测试文件如下
道路 平交口导角测试3.gh (34.6 KB)

但还存在2个小问题,

问题1,如下图,

累加部分属实没想到可以这么用,也不会往这里去想,可能基础太薄弱,想请教一下,这块有可以替代的方式吗,可读性更高的那种

问题2,如下图

我现在处理导角的方法如截图所示,先将曲线中间部分打断一小段,将曲线一分为三,然后再进行join,再处理后续的流程。现在碰到的问题是,红色箭头所指的尖角处,两条锐角边因为前置流程已经将线段在中间打断了,导致形成尖角的两条曲线中的一条长度小于导角能够形成的最小长度,形成导角失败,碰到这种特殊情况,又不会了…

感谢

问题2的局部这几个曲线发一下rhino模型吧
问题1的话,严格意义说应该是一系列布尔
只要出现一个true就可以退出
按照伪代码写法

for item in items:
    if item == True:
        return True
return False

如果有一万个数,碰到第一个是true的话,后面9999都不用判断了。
在这里用代码块显然也意义不大
所以我就用累加了,累加的情况下布尔默认转化为整数
转化逻辑:
true=1
false=0
累加结果只要大于0,则至少出现一个true

将这个累加再作为bool输入dispatch又涉及到第二次强制转化
逻辑:
0=false
除了0之外任何数字=true
因此在这里只要出现一个true,那最后累加再转回bool一定是true
如果全部都是false,则累加再转回bool一定是false

基于这一逻辑,你可以将我上面的内容写成备注panel放进gh
我尽可能不用代码块并且用足了GH的强制转化逻辑,让电池数量少,并具有一定可读性
如果你认为不习惯这个做法,可以按照我上述逻辑做成代码块或者用更多的电池
但是注意对这类计算量很小的情况来说,电池的输入输出损耗占据大头,所以电池越多效率越低。

3 个赞

感谢大佬的耐心解答!

问题1这种默认转换的逻辑,还得多接触多学习;

关于上述问题2,我已经修改的我的流程,增加了筛选,出错的问题已经解决

同时,我也尝试换了个思路处理初始多条曲线相交的问题,避开了曲线在相交处需要筛选,剔除的步骤

最终测试结果如下,已达到我的预期
道路 平交口导角测试4.gh (56.8 KB)

再次感谢!

1 个赞

我发现你的线段倒角并不平顺,我用了我以前写过的一个组件给你重建了下(它并不完善,你可以试着完善它),现在每根单独的多重曲线都转化为一根根标准的曲线,希望能为你提供帮助
道路 平交口导角测试.gh (120.4 KB)

感谢大佬的分享 :+1:

我会抽时间拜读!


emmmmm?嗯?

ennnnnn.

哈哈哈,看了蒯大的案例,改了一些特殊情况,继续探索的 :crazy_face:

我第一次看到还在想,楼主的GH做的可真好啊,破案了破案了。。。

不过楼主相当优秀了,能充分理解+继续修改,还有自己的思考。

哈哈哈,毕竟蒯大说,可以尝试按照这个例子继续深化,那就按照借鉴来的数据,改一些特殊情况,创造困难,然后再解决困难 :crazy_face: