怎样找网格特定点的循环边?

怎样用c#或python,找到网格点边数不等于4的点(或任意点)的循环边?
谢谢。不胜感激。

我之前做过纯电池版本的catmull clark细分
所以里面用到过你的这个模块,上面的回帖是纯电池,至于代码方面我也是第一次研究。
下面我会介绍我真实的查阅和研究过程,供你参考。


首先我输入x以后翻阅列表,找到了顶点的单词,在最后
2
这时候我猜测这个顶点是个列表,因此我打了一个方括号,果然后面出现了index
3
我尝试着输入[0]以后再输入点。发现他返回的都是基于单纯的点的操作,此路不通
4
返回到上一步,这次直接vertices后面不加括号,直接加点,出来这个列表,看起来有希望
5
翻到最下面,发现疑似目标GetVertexFaces,准备查阅rhinocommon核实用法,不核实直接上也可以

6
查完后得知圆括号里面的参数是你要查询的顶点编号,这里给了个10做实验


查看结果,正如rhinocommon描述,返回的是这个10号顶点相邻的4个面的编号

之后如何获取所有顶点的面编号,以及判断编号数量是否<4我就不继续了。核心问题的解决过程如上

以上过程执行之前我从未知道这个函数,但是根据科学的方法摸索,任何人都可以摸索出来。

4 个赞

感谢版主如此详细的回复,我用您的方法找到了8个奇点,和相接的3个面。
但是如何找到黑色的循环边线呢?(假设是已经焊接的网格)

黑色不是循环边,这个概念用在这里不正确。循环边一定是循环绕一圈后回到原点的。

你想找的是这个六个面的分界线。这个会比较复杂一点。我暂时找不到很好的逻辑将这些黑色的和其他的分离

我再想想 如果有办法我会回复的

1 个赞

好的,费心了。再次感谢 :heart:

mesh loop在GH中实现需要自己写算法,而不象是犀牛用命令就可以
我google了一下,找到不少资料


pufferfish是肯定可以的

作者提到了本算法来自于Mateusz Zwierzycki
而google搜到的第二个链接是这位Mateusz Zwierzycki发布的一个group

该group里面有下载他的group整合的小插件,其中mesh loop edge的贡献者就是Mateusz Zwierzycki自己


如果不喜欢pufferfish那么大的插件,你可以用这个小插件

至于自己用代码实现,也是没问题的,你有兴趣可以自己尝试,但我认为意义也不是很大

下载Mateusz Zwierzycki的group内的文件需要你注册老GH论坛登陆后加入group方可下载

1 个赞

找到了,似乎有bug好像。局部断掉了。


mesh_loop.gh (240.5 KB)

如果实在是不想装插件,下面是我写的DJstra最短路径源代码+注释
球体的完整示例(不包括求前面8个点)球体.gh (17.9 KB)
单独的DJstra算法实例最短路径DJ(注释).gh (10.6 KB)

你已经拿到了8个点,其中每个点都对应着剩余的7个点,而你又知道每个点需要连的那个黑色边一定是3条
因此对每个点来说,对剩余的7个点求最短路径,然后找到最短的三条即可。
我的程序中是先找到最近的3个点,来节约DJstra的计算量

你后来回复的案例不一定适合这个球体

你其实是想找到mesh使用subd以后变成nurbs的分界线
针对球体是可以用自己的算法解决的。解决方案我都写在上面
但针对你这个复杂形体,你的算法是不成立的,求出汇聚的面/线不等于4的点并不能帮助你拆分。

理论上应该可行的啊,我这个做了一次细分,相当于求反细分。

可以看出来你的思路走歪了。
另外问的问题也是特性前后不一致,球体和你刚发的造型解决方案完全不同,球体可以有办法简化,而你刚发的就完全不行。

不一次性将问题讲清楚,你会浪费解答的人的时间。
建议你将问题的母问题发出来
你从一开始到底想解决什么问题


我随便用犀牛提取了一些3边/5边交汇点的loop edge
能看出这个造型完全就不是subd的逻辑制作的,所有loop edge互相之间的关系很弱,和你刚开始发帖的球体属于截然不同的两个问题。

抱歉
是这样的,我做了一个形体,重拓扑成四边面,做了一次细分,想返回细分之前的面数。
我想找一个通用的办法反细分。

反细分类似于逆向工程
如果之前的文件已经丢了,你只能尝试quadremesh命令

这属于很低级的错误,解决低级错误首先是不能指望高级方法,其次更加不能指望 错误的高级方法。
解决低级错误的正确方法就是避免下次出错
细分之前备份一个模型 :joy:

好吧。 :sweat_smile:
在rhino里双击边循环是可以通的。gh里就有断线。

通当然是可以通的,但是通了以后意义何在呢?就如我上图的,分出来都那么乱了。
不如重新用科学的subd方式建模。

通了以后就可以分裂网格,然后重构,相当于反细分,还是四边面。



你都不在rhino实践一下,就想当然以为他可以顺利得到你要的结果

这是我提取全部的环以后的结果
你觉得这样的线分出来的如此细碎的细分面有什么意义?

全部循环不应该是这样吧 :sweat_smile:,应该都是规整四边面的。相当于面数的1/4。
好吧,我再检查下。