span8
span4
我有一个岩石斜率,我想比较的理论表面模型(倾斜面)的点云。下一步骤是将点云成取决于所述表面的距离不同的颜色进行排序。任何人谁拥有该变压器使用的想法?
感谢您的回答@DaveAtSafe,我的表面并不是一个简单亚搏在线的平面。我想抵消表面,创造了坚实的两个表面和夹子内部的固体分,但不能设法得到它的工作。那是一个可能的解决方案?
你好@信息1,
如果理论表面是一个简单的平面,最简单的方法是将点云旋转成面的平面,然后在新的标高进行过滤。
您可以使用获得的表面法线平面过滤器变压器,具有暴露表面正常设置为YES。
以下Python可以被用在蟒蛇来计算表面水平的3D旋转的参数:
进口fmeobjects导入数学DEF calcRotation(功能):normalX = feature.getAttribute( '_ surfaceNormalX')normalY = feature.getAttribute( '_ surfaceNormalY')normalZ = feature.getAttribute( '_ surfaceNormalZ')向量= [normalX,normalY,normalZ]长度 = math.sqrt(normalX**2 + normalY**2 + normalZ**2) vertical = [0,0,length] cross = [vertical[1]*vector[2] - vertical[2]*vector[1],vertical[2]*vector[0] - vertical[0]*vector[2],vertical[0]*vector[1] - vertical[1]*vector[0]] dot = vertical[0]*vector[0] + vertical[1]*vector[1] + vertical[2]*vector[2] cos = dot/(length**2) # in some edge cases, a slightly out of bounds cos may be created if cos > 1.0: cos = 1.0 if cos < -1.0: cos = -1.0 rotation = math.acos(cos)*180/math.pi feature.setAttribute('_vector_x',cross[0]) feature.setAttribute('_vector_y',cross[1]) feature.setAttribute('_vector_z',cross[2]) feature.setAttribute('_rotation',-rotation) if rotation == 180 and cross == [0,0,0]: feature.setAttribute('_length',-length) else: feature.setAttribute('_length',length)
传递参数给点云,然后用3旋转器点云旋转到与所述表面对准。
一旦点云旋转,你可以使用点云表达式计算器到z分量复制到新的邻近部件。
要重置点云到原来的方向,使用其他3DRotator,使用相同的参数,但有一个负的旋转。
您可以使用新的邻近组件来过滤您的点。
我附加了一个工作区来说明这个过程:
©2019安全亚搏在线软件公司|法律