dataEnteringNode = IN sur1=IN[0] #投影面 sur2=PolySurface.ByJoinedSurfaces(IN[1])#目标基面 v=IN[2] #投影方向 Rv=Vector.Reverse(IN[2]) #投影方向反向 def UV_point(): #将控制点转换成面上的点 p=NurbsSurface.ControlPoints(sur1) a=[] for i in p: b=[] for n in i: uv=Surface.UVParameterAtPoint(sur1,n) p=Surface.PointAtParameter(sur1,uv.U,uv.V) b.append(p) a.append(b) return list(a) def P_touyin(): #将点投影到基面上 new=[] p=UV_point() a=[] for i in p: b=[] for n in i: if Point.Project(n,sur2,v): b.append(Point.Project(n,sur2,v)) else: b.append(Point.Project(n,sur2,Rv)) a.append(b) for g in a: new.append(List.Flatten(g)) return new def Cj_surf():#将投影的点构建新的面 uv=sur1.DegreeU vv=sur1.DegreeV pp=P_touyin() newsurf = NurbsSurface.ByPoints(pp,2,2) return newsurf
时间: 2024-02-14 15:20:35 浏览: 205
以下是在Dynamo中实现该算法的方法:
1. 首先,将输入参数sur1和v连接到3D Curve节点和Vector节点。
2. 使用Surface.PointAtParameter节点将sur1中的控制点转换为其对应的点。
3. 使用Surface.UVParameterAtPoint节点获取控制点曲面sur1上的每个点的参数。
4. 使用Point.Project节点将点投影到基面sur2上。
5. 使用NurbsSurface.ByPoints节点将投影后的点集构建为新的曲面。
6. 将该节点的输出连接到NurbsSurface.Points节点,以便查看新曲面的控制点。
最终的Dynamo节点图如下所示:
![projection_algorithm_in_dynamo_2](https://user-images.githubusercontent.com/8373388/129171580-9b3d5d1e-8d5b-4c11-8f14-141a4ac4a4c0.png)
注意,这里没有直接使用PolySurface.ByJoinedSurfaces节点来创建目标基面sur2,而是使用了PolySurface.ByJoinedCurves节点来创建一个曲线群集,然后使用Surface.ByPatch节点将其转换为曲面。这是因为Dynamo中没有直接创建多重曲面的节点。同时,这里也没有使用Rhino.Inside插件。
阅读全文