Using
Visual Basic (VB) to control/program Rhinoceros V2
Use Rhino3D(V2) as an engine inside of the VB |
Problem: How to connect Visual Basic and Rhino so we can use VB forms, ActiveX and other VB flavors.
Here is the basic idea: We'll send the Rhino object from starting/initializing rvb script into VBActiveX and from there we'll control the Rhino from inside of VB. So we'll use the object (Rhinoobject) methods that are available trough the scripting.
Start and select the ActiveX EXE type of project in the VB IDE.
o Create a new class(Rhinoclass.cls) and insert the following code:
Public Sub AXInit(RhinoObject)
'
from script
Set Rhino = RhinoObject
If IsObject(Rhino) Then
Form1.Show
else
MsgBox
("We
don't have an object yet")
End If
End Sub
o Create new module (Rhinobas.bas) and insert the following code:
Public Rhino As Object
o Create new form (Rhinofrom.frm)
and insert the following code under the buttons i.e.
something like the picture below or anything
If we want to assign our values to the array inside of VB
we should do it with the following workaround
Dim arrPoint_inf
arrPoint = Rhino.GetPoint("Pick a point")
(without next line AddLine...
wont work, Why? it is question of VarArray used in VB and VBArray used
trough the scripts)
arrPoint_inf = arrPoint '
<<
works in Rhino V3 as well
or
Dim arrPoint(2) As Variant (starting
with RhinoV3)
arrPoint_inf(0) = 100
arrPoint_inf(1) = 100
arrPoint_inf(2) = 100
Rhino.AddLine arrPoint, arrPoint_inf
Rhino start up script RhinoVB.rvb
Dim RVBobject
Sub connectActiveX()
Set RVBobject = CreateObject("Rhinoexe.Rhinoclass")
If IsObject(RVBobject) And
IsObject(Rhino) Then 'send
Rhinoobject to the VB ActiveX InitClass
RVBobject.AXInit(Rhino)
'
object created and exist call class in our executables
End If
Set RVBobject = Nothing
End Sub
connectActiveX
Code to keep our form as a TOP_MOST one
(even if we click in the Rhino window)
All the project files and start up script can be found in here Download VB2Rhino
I've tested the above on the WIN2000 (worked with no problems) & Rhinoceros V2 and it did not work on one of my NT4 boxes??