NCF参数化建筑论坛

标题: 关于grasshopper_vb_scripting的问题 [打印本页]

作者: ninesuns    时间: 2011-10-4 22:44
标题: 关于grasshopper_vb_scripting的问题
刚刚学习vb scripting,看到教程上的例子,不太懂,于是拿出来希望大家能解答解答。直接上图 [attach]21924[/attach] 这是程序的vb电池图,外面的一些输入数据和输出数据 以下是vb的代码 Private Sub RunScript(ByVal int_line As Line, ByVal r As Double, ByVal celltype As List(Of String), ByVal A_ang As Object, ByVal B_ang As Object, ByVal C_ang As Object, ByVal D_ang As Object, ByRef A As Object, ByRef B As Object, ByRef C As Object, ByRef D As Object, ByRef E As Object, ByRef F As Object, ByRef G As Object) 'defines output parameters ////////////////////////////////////////////////////////////////////////////////////// Dim pivot_cell_list As New list(Of circle) Dim pivot_pt_list As New List(Of point3d) Dim start_leg_list As New List(Of Line) Dim start_leg_pt_list As New List(Of point3d) Dim end_leg_list As New List(Of Line) Dim end_leg_pt_list As New List(Of point3d) Dim end_crv_list As New List(Of Line) 'defines output parameters of "component" subroutine ///////////////////////////////////////////////////////////// Dim pivot_cell As circle Dim pivot_pt As point3d Dim start_leg As line Dim start_leg_pt As point3d Dim end_leg As line Dim end_leg_pt As point3d Dim end_crv As line 'defines rotation_ang /////////////////////////////////////////////////////////////////////////////////////////// Dim rotation_ang As Double 'checks component types and computes output based on the types ///////////////////////////////////////////////// For i As Integer = 0 To celltype.Count - 1 If i = 0 Then If celltype(i) = "A" Then rotation_ang = A_ang Else If celltype(i) = "B" Then rotation_ang = B_ang Else If celltype(i) = "C" Then rotation_ang = C_ang Else If celltype(i) = "D" Then rotation_ang = D_ang End If component(int_line, r, rotation_ang, pivot_cell, pivot_pt, start_leg, start_leg_pt, end_leg, end_leg_pt, end_crv) Else If celltype(i) = "A" Then rotation_ang = A_ang Else If celltype(i) = "B" Then rotation_ang = B_ang Else If celltype(i) = "C" Then rotation_ang = C_ang Else If celltype(i) = "D" Then rotation_ang = D_ang End If int_line = end_crv component(int_line, r, rotation_ang, pivot_cell, pivot_pt, start_leg, start_leg_pt, end_leg, end_leg_pt, end_crv) End If pivot_cell_list.Add(pivot_cell) pivot_pt_list.Add(pivot_pt) start_leg_list.Add(start_leg) start_leg_pt_list.Add(start_leg_pt) end_leg_list.Add(end_leg) end_leg_pt_list.Add(end_leg_pt) end_crv_list.Add(end_crv) Next 'output ///////////////////////////////////////////////////////////////////////////////////////////////////////////// A = pivot_cell_list B = pivot_pt_list C = start_leg_list D = start_leg_pt_list E = end_leg_list F = end_leg_pt_list G = end_crv_list End Sub ' Sub component(ByVal start_crv As Line, ByVal pivot_cell_radius As Double, ByVal pivot_ang As Double, ByRef pivot_cell As Object, ByRef pivot_pt As Object, ByRef start_leg As Object, ByRef start_leg_pt As Object, ByRef end_leg As Object, ByRef end_leg_pt As Object, ByRef end_crv As Object) 'defines start_leg_pt ////////////////////////////////////////////////////////////////////////////////////////// Dim s_pt As New point3d(start_crv.PointAt(0.5)) start_leg_pt = s_pt 'defines start_leg ///////////////////////////////////////////////////////////////////////////////////////////// Dim start_crv_start As New Point3d(start_crv.PointAt(0.0)) Dim start_crv_end As New Point3d(start_crv.pointat(1.0)) Dim original_vector As New Vector3d(start_crv_start - start_crv_end) Dim rotation_ang_start_leg As Double = math.PI / 2 Dim rotation_axis_start_leg As New Vector3d(0, 0, 1) original_vector.Rotate(rotation_ang_start_leg, rotation_axis_start_leg) Dim line_start As New line(start_leg_pt, original_vector, pivot_cell_radius) start_leg = line_start 'defines pivot_pt ////////////////////////////////////////////////////////////////////////////////////////////// Dim p_pt As New point3d(line_start.PointAt(1.0)) pivot_pt = p_pt 'defines pivot_cell //////////////////////////////////////////////////////////////////////////////////////////// Dim pivot_circle As New Circle(line_start.PointAt(1.0), pivot_cell_radius) pivot_cell = pivot_circle 'defines end_leg /////////////////////////////////////////////////////////////////////////////////////////////// Dim rot As transform = transform.Rotation(pivot_ang * math.PI / 180, vector3d.ZAxis, line_start.PointAt(1.0)) Dim rotated_leg As line = line_start rotated_leg.Transform(rot) end_leg = rotated_leg 'defines end_leg_pt //////////////////////////////////////////////////////////////////////////////////////////// s_pt.Transform(rot) end_leg_pt = s_pt 'defines end_crv /////////////////////////////////////////////////////////////////////////////////////////////// Dim st_line As line = start_crv st_line.Transform(rot) Dim end_line_st_pt As New Point3d(st_line.PointAt(1.0)) Dim end_line_end_pt As New Point3d(st_line.PointAt(0.0)) Dim end_line As New line(end_line_st_pt, end_line_end_pt) end_crv = end_line End Sub 现在是我的问题,代码前半部分,就是sub component前面那部分的循环,到了最后那个component后面带括号的那部分是什么意思,还有在循环末尾,出现int_line=end_crv这是什么意思,希望高手能用通俗的话解释以下这个循环,谢谢了。
作者: zdjdevil    时间: 2011-10-5 09:29
component后面括号里的就是最后类似rhinoscript的function的参数吧--不是很清楚要如何表达~~
作者: benchenzebin    时间: 2011-10-5 09:29
你到底是在说神马?
作者: xh007    时间: 2011-10-5 09:33
VB什么的看不懂啊~等高手~
作者: s.k.    时间: 2011-10-5 10:27
看不懂啊{:3_47:}
作者: 鹰眼黑客    时间: 2011-10-5 12:04
我表示我先败给VB了。
作者: ninesuns    时间: 2011-10-5 12:34
我觉得也是。其实我主要就是不太懂这个循环是怎么回事,看了vb的语法但是还是在实际的例子中很难理解 2# zdjdevil
作者: ninesuns    时间: 2011-10-5 12:35
就是关于第一部分的循环,我还不是很清楚,为什么要再循环的末尾写上那么一行函数,总是就是循环不太懂。 3# benchenzebin
作者: wangjunxiong    时间: 2011-10-5 18:20
这个。。。真难帮得了{:3_65:}
作者: ping58972    时间: 2011-10-5 18:31
我刚学完了C# 的基础 还没有时间 来看 VB 呢 等我掌握C#好了 才来帮你把!!!!!!
作者: ping58972    时间: 2011-10-5 18:32
我刚学完了C# 的基础 还没有时间 来看 VB 呢 等我掌握C#好了 才来帮你把!!!!!!
作者: benchenzebin    时间: 2011-10-5 20:18
放过撒旦的发生奥斯丁
作者: liyong    时间: 2011-10-5 23:07
学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习 学习
作者: 射手明    时间: 2011-10-6 14:49
这个应该是最新的woojsung教程里的例子吧,后一段“Sub component——End Sub”这部分是你自己定义的名称为“component”的一个过程,而在循环里面“component()”这是在调用你后面定义的过程,括号里面是参数部分,是一一对应的关系,ByVal是传值,也就是“输入参数”,不改变原参数,ByRef是传址,也就是“输出参数”,原参数也改变。int_line=end_crv是把变量end_crv的直线赋予到int_line中去,可以这样理解:每个循环中的“int_line”都是上一个循环中运算得到的结果“end_crv”。不知道我说的是不是清楚,多交流!:)
作者: ememery    时间: 2011-10-6 15:32
楼上正解。。。。。。。
作者: owenandselena    时间: 2011-10-6 22:09
不懂。。。
作者: wangjunxiong    时间: 2011-10-7 16:15
这个不好学。。。
作者: miaomiao    时间: 2011-10-8 01:40
正在研究。。。。。。。。。
作者: ninesuns    时间: 2011-10-9 18:49
说得太到位了。真的,那个int_line=end_crv我想了好久可能是你说的那个意思,但是自己也不知道想的对不对,你这么一说就明白了! 真是多谢! 15# 射手明
作者: 易拉罐    时间: 2011-10-9 20:09
哭····学习中的哇···
作者: 大夏龙雀    时间: 2011-10-15 17:11
必须的认真学习这个东西,必然的趋势
作者: ping58972    时间: 2011-11-22 19:49
简单的跟主楼说一下吧 如果你真的要看懂 全部 那就要学到面向对象 不要只学到 面向过程就来问东问西了~~~ 建议 先学下C 然后学C# 学完了 才学其他语言 VB.NET 或 PYthon 等等 就感觉很爽了~~~ 我估计主楼只学了VB 基础 然后开始用了。。。 那样就真他吗很困难的
作者: ping58972    时间: 2011-11-22 19:51
简单的跟主楼说一下吧 如果你真的要看懂 全部 那就要学到面向对象 不要只学到 面向过程就来问东问西了~~~ 建议 先学下C 然后学C# 学完了 才学其他语言 VB.NET 或 PYthon 等等 就感觉很爽了~~~ 我估计主楼只学了VB 基础 然后开始用了。。。 那样就真他吗很困难的
作者: Anti-archi    时间: 2012-2-22 15:27
完全不懂vb的路過
作者: 64h8s    时间: 2012-4-28 20:47
这个教程看过,没用的变量太多,写得太复杂了反而让人搞不懂
作者: phoenixding    时间: 2012-5-11 22:01
25# ping58972 类是c里没有的概念。那是说在c#中学习类了?
作者: liyanyanhong    时间: 2012-7-22 10:31
额复杂。。。。。。。。。。




欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/) Powered by Discuz! X3.2