标题: 关于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
额复杂。。。。。。。。。。