测试2.3dm (91.1 KB)
第一个曲面是圆用fin命令,经过不等距偏移得到的,第二个曲面是第一个曲面延伸后被平面split,然后缩回控制点得到的。用what命令查看发现,第一个曲面是有效曲面,第二个是无效曲面。我的问题是两个曲面基本上一致,为什么split后就变成了无效曲面。我找到了一个问题切入口,直接移除复节点,第二个曲面也会变成有效曲面。我不清楚原因,不知道是不是软件判定问题。[img]http://[/img
你的问题归纳为你这种做面的方式为什么分割后的结果为无效曲面,前面你描述的Fin之类的过程其实不重要,和你最终的结果无效没关系。
这种做面的接缝是“假的”,从曲面结构上来说还是开放边,单看造型是没啥问题的,但是这种曲面在后续处理时会存在隐患。
我画了个常规的圆柱面,然后重建(重建只是为了调整边缘形状),按照你的描述还原了你说的这个问题,并且在 Rhino 和 GH 中分别做了测试,下图是 GH 中的计算结果:
1.用投影线去分割曲面。
2.用一张平面去分割曲面。
我觉得计算的结果并不是软件的bug,你可以认为是软件判定的问题。
建议用常规的方法去做这个造型,画一个有真正闭合线的圆柱面,然后用线去分割曲面即可,不用纠结。
楼主如果对这个“无效”希望深究一下的话
我也趁此机会做了一些研究。以下是从 完全搞不清状况 到 大概能搞清状况 的全过程:
过程用的各类方式方法,楼主如果希望也做类似的研究,可以参考一下。
题外话:楼主可能是其他软件的建模习惯,让你认为Rhino的摄像机旋转是反的。
因此你的摄像机是180反转的。但是在这个情况下你的世界坐标的Z轴是对着下面的。
也就是说,按照常理2m比1m高,但是在你这模型里,1m比2m高。
另一个问题就是你的摄像机旋转值不等于0的情况下,旋转值将永远是一个不固定的数字,因为你的旋转不会自动锁定绕Z轴。将旋转值设定为0后,旋转值会固定为0,永远绕Z轴旋转。
除了what命令之外,其他查阅物体信息的命令还有list和check
依次运行后,list将不会显示更多关于无效的信息,但check能够显示出来。
先把如下信息记录下来
【以下部分可以酌情跳过】
当你需要在GH内批量检测这类信息时,由于没有运算器,需要使用C#和Rhinocommon
尝试了x为Surface类型后,输入英文句号,在后面的信息中寻找Valid相关的函数
除了发现isValid外,发现了一个叫做isValidWithLog的神奇函数,查阅官方资料
找到里面的用法。写出代码
发现并未输出invalid的log信息
增加B输出端显示isValid的信息时,发现这两个物体作为曲面都是Valid
回顾一下check命令的结果
发现他用的描述是brep,于是修改代码的输入端类型为brep (brep也有isValidWithLog)
【跳过部分结束,回到正文】
分析这段错误代码
brep.m_E[2] edge is not valid.
edge.m_vi[]=(2,3) but edge.IsClosed() is true
ON_Brep.m_E[2] is invalid.
其中提到了brep的m_E属性,而且是个数组,这个表述并不在Rhinocommon中,推测是属于C++内核的,所以这类信息多半是为了开发者调试用,而不是面对普通用户。
推测是边缘列表内的第二条出现了问题。而边缘是可以使用GH电池或者Rhinocommon提取的
第二句话里面edge.m_vi[]=(2,3) 其中v应该说的是顶点Vertex,i说的可能是index也就是序号
这句话表述的意思是这条边缘的顶点序号是数组[2,3]
顶点序号类似于网格的顶点-面的facelist,意思就是这条边涉及到的顶点,是这个brep的顶点列表内的第几个,这里是第二个和第三个。
尝试使用Rhinocommon获取这个m_vi[]发现并没有,最接近的只有edge.startVertex和edge.endVertex.
也就是说Rhinocommon无法提取这个点的具体编号,只能给出点的位置
这里为了方便调试,将edge序号给了一个滑动条
回到上一个错误信息,表述的意思是,这条边是一个封闭曲线“ edge.IsClosed() is true”
但是他的顶点有两个,而不是一个(封闭曲线应该头尾都是一个点)
我们看到刚才代码提取出来的2号和3号点,虽然他们的坐标一模一样
但是由于他们的index是2和3,是两个数字,因此犀牛认为这条封闭曲线有2个端点,而不是一个
所以他认为第二条边缘自己是存在自相矛盾的,边缘无效,进而曲面无效。
如果你检查两个物体的顶点情况,会发现无效的曲面,在红框处会有两个点,而有效的只有一个
无效曲面的红框处的顶点是2个分离的点,只不过几何位置刚好重合
有效曲面在这里只有一个点,他们有相同的index/编号/索引。符合这条边缘是封闭曲线的定义。因此没有内在的矛盾
至于形成这个情况的进一步原因
暂时还没有找到
针对封闭曲线进行不等距的fin命令并不是什么常规操作
我也不确定你是从哪个教程内看来的做法。建议放弃那个教程。
非常感谢,我明白了。
你说的很硬核,可能我需要好几天时间,查阅其他资料,来慢慢消化你说的内容。
假设你真的感兴趣的话,是可以看看研究一下的。
Fin+封闭曲线+不等距fin
这三个结合在一起才会出现这个问题
不管是谁教会你的,这个方法还是忘记比较好。
用版主提供给你的正规方法做吧:
好,我看了好几遍你的答案,反复琢磨,感到收获很多,原来还可以这样分析问题。你这种深入原理的精神,非常佩服,非常感谢。
好,不深究了。
请注意 ,你使用的是一组盗版许可证
,如果你是从我们的授权经销商购买,烦请与经销商联系且索回你应有的正版许可证,我们会提供相关协助。如果你是从其他渠道获得,请卸载之,然后你可以至下面的网站联系你附近的经销商洽谈购买
我们在中国大陆地区也提供淘宝在线销售业务,浏览详情
提醒与呼吁 :尊重知识产权请从拒绝盗版软件开始,不要等到自己的设计与其他智力劳动成果被剽窃、盗取、盗用或抄袭的时候才想到要维护知识产权,维持良好的知识产权环境需要你的参与
你只是换了种方法做了个结构矛盾的曲面而已,和你之前的结果并没有两样,有什么意义呢?
问题的核心是这种结构的曲面本身就对后续的操作带来隐患,和你处理的过程没什么关系,我前面截图已经复现了这个问题,只是你没仔细看或者没理解。