标题: 两种开发环境比较,vb.net画球并bake [打印本页] 作者: panhao1 时间: 2010-3-12 12:57 标题: 两种开发环境比较,vb.net画球并bake 首先看运算器的代码
Private Sub RunScript(ByVal x As Double, ByVal y As Object, ByRef A As Object)
'your code goes here…
Dim center As New On3dPoint(0, 0, 0)
Dim radius As Double = x
Dim sphere As New OnSphere(center, radius)
Dim sphere_srf As OnRevSurface = sphere.RevSurfaceForm()
If (sphere_srf Is Nothing) Then
A = Nothing
End If
Dim sphere_obj As New MRhinoSurfaceObject()
sphere_obj.SetSurface(sphere_srf)
If (doc.AddObject(sphere_obj)) Then
doc.Redraw()
A = IRhinoCommand.result.success
End If
End Sub
——————————————————————————————————————
再看VS2005的代码
Public Overrides Function RunCommand(ByVal context As IRhinoCommandContext)_
As IRhinoCommand.result
Dim rc As IRhinoCommand.result = IRhinoCommand.result.cancel
Dim center As New On3dPoint(0, 0, 0)
Dim radius As Double = 5
Dim sphere As New OnSphere(center, radius)
Dim sphere_srf As OnRevSurface = sphere.RevSurfaceForm()
If (sphere_srf Is Nothing) Then
Return rc
End If
Dim sphere_obj As New MRhinoSurfaceObject()
sphere_obj.SetSurface(sphere_srf)
If (context.m_doc.AddObject(sphere_obj)) Then
context.m_doc.Redraw()
rc = IRhinoCommand.result.success
End If
Return rc
End Function作者: panhao1 时间: 2010-3-12 13:03 本帖最后由 panhao1 于 2010-3-12 13:22 编辑
context.m_doc.Redraw()和doc.redraw用法几乎相同
都来自MRhinoDoc Class
AddObject()会返回bol和ID
return在sub里面是用不了的(不能返回结果)
改成A=就行了
代码具体思路就是把一个球转成曲面类型 然后输出物体
觉得有用就回个帖
如果没人看 下次就没动力发这类帖子了作者: panhao1 时间: 2010-3-12 13:27 本帖最后由 panhao1 于 2010-3-12 13:29 编辑
麻烦一点的bake做法
C# 根据自己需求改vb.net
if(obj is IOnBrep){ //If a brep, a polysurface or a surface
addedObj = doc.AddBrepObject((IOnBrep) obj, att);
} else if(obj is IOnMesh) //If a mesh
addedObj = doc.AddMeshObject((IOnMesh) obj, att);
else if(obj is IOnLine) //If a line (not a curve)
addedObj = doc.AddCurveObject(new OnLineCurve((IOnLine) obj), att);
else if(obj is IOnArc) //If an arc (not a curve)
addedObj = doc.AddCurveObject(new OnArcCurve((IOnArc) obj), att);
else if(obj is IOnCircle){ //If a circle (not a curve)
OnNurbsCurve crv = new OnNurbsCurve();
((OnCircle) obj).GetNurbForm(ref crv);
addedObj = doc.AddCurveObject(crv, att);
} else if(obj is IOnCurve) //If a curve
addedObj = doc.AddCurveObject((IOnCurve) obj, att);
else if(obj is IOn3dPoint) //If a point
addedObj = doc.AddPointObject((IOn3dPoint) obj, att);
else if(obj is IArrayOn3dPoint) //If a pointcloud
addedObj = doc.AddPointCloudObject((IArrayOn3dPoint) obj, att);
else if(obj is IOn3dVector) { //If a vector
att.m_object_decoration = IOn.object_decoration.end_arrowhead;
addedObj = doc.AddCurveObject(new OnLineCurve(new OnLine(new On3dPoint(0, 0, 0), (new On3dPoint(0, 0, 0)) + (On3dVector) obj)), att);
} else if(obj is Grasshopper.Kernel.IGH_BakeAwareData){ //If other strange type of geometry, including Box and Twistedbox
Guid gu;
((Grasshopper.Kernel.IGH_BakeAwareData ) obj).BakeGeometry(doc, att, out gu, out addedObj);
} else {//Otherwise dont know what to do...
continue;
}作者: arceed 时间: 2010-3-12 13:53
顶顶 支持楼主~虽然现在看不懂~先搜藏下来慢慢研究哈 3#panhao1作者: skywoolf 时间: 2010-3-13 14:36
一直想在GH里创建这样一个球体
[attach]4880[/attach]
Panhao感觉用VB好实现不?作者: panhao1 时间: 2010-3-13 20:20
知道逻辑就很好弄
先搞清楚球的逻辑作者: liubaolalala 时间: 2010-5-13 21:53
学习了!感谢分享!作者: jian3vivi 时间: 2010-5-16 23:16
发现强人真的很多啊作者: ninesuns 时间: 2011-9-7 12:30
楼主能给一个voronoi的代码么,最好用电池的形式给出啊,输出端可以接curve或者brep的。。。作者: weiwei 时间: 2011-12-29 02:48
原來如此難怪去rhino vb.net 上找到的程式代碼跟grasshopper vb lengcy 上面不太相同。原來是vs2005 的版本作者: 丞丞 时间: 2012-1-30 17:38
谢谢楼主分享。。。。。作者: tra 时间: 2012-3-24 19:12
我看的收获是貌似看懂了GH中的数据如何衔接到VB的运算器中来~作者: hacker 时间: 2012-4-28 14:58
感谢分享啊。作者: wang19891216 时间: 2012-5-3 14:52
发现强人真的很多啊