Grasshopper

algorithmic modeling for Rhino

Hi David,

 

Is there any way to access the source code behind the components?

Or is this something with hard core copy rights?  My guess is it is, but was just curious would be awesome to have the ability to open the components and learn/use the sc.

 

Cheers, hope alls well.

 

Views: 9501

Replies to This Discussion

Hi Madu.

 

This is not the source code behind the GH components, but the SDK on which (I believe) GH and Rhino is written. http://www.rhino3d.com/5/rhinocommon/

 

cheers,

Eirik

RhinoCommon is actually Open Source as of a few weeks ago.

 

Grasshopper is not. You agreed to this when you accepted the license agreement (don't tell me you didn't read it!?).

 

It is not possible to see the full source code for Grasshopper because I compile the code into MSIL dlls before I hand it out to people. It is however possible to reverse-engineer (or "disassemble") he code to a certain degree.

 

You can use Reflector to disassemble .NET assemblies into a number of popular languages, including C# and VB.NET. Just as long as you realize it is in fact a breach of the license agreement to use Reflector on Grasshopper.

 

--

David Rutten

david@mcneel.com

Poprad, Slovakia

Hi David,

 

Thanks for the reply, and i promise not to reverse engineer... ;)

I've been playing a bit around with creating my on custom components in visual basic 2010 for GH referencing to a couple tutorials out there.  In all making some progress and the bigger computation and how gh vb is operating is get more and more clearer.

I was testing while in visual basic 2010 to create a simple form with a button and link it directly to rhino.  I'm having quite a bit of difficulties perhaps its the way im calling the rhinodoc.active window.  I've been referring from the 'members in the vb component in gh and still doesnt work.  I've been getting an error

 "Unable to load DLL 'rhcommon_c': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"  and when i try to add rhcommon_c dll it also gives an error saying the file can't be added.

 

Anyways heres the simple code any input greatly appreciated...

 


Imports Rhino

Imports Rhino.Geometry

Imports Rhino.Collections

Imports System

Imports System.IO

Imports System.Xml

Imports System.Data

Imports System.Drawing

Imports System.Reflection

Imports System.Collections

Imports System.Windows.Forms

Imports Microsoft.VisualBasic

Imports System.Collections.Generic

Imports System.Runtime.InteropServices 


Public Class Form1

 

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

Dim pt As New Point3d(Rnd, Rnd, Rnd)

Rhino.RhinoDoc.ActiveDoc.Objects.AddPoint(pt)

End Sub

End Class

 

 

 

Hi Madu,

 

when you create a plugin for Rhino, you should make sure you do not create a copy of the RhinoCommon.dll in your project. You should reference the file, but set the CopyLocal property to False. After you've changed this, make sure you delete any RhinoCommon.dll file from your project build folders.

 

You cannot add rhinocommon_c.dll because it is a C++ dll. You can only reference 'managed' dlls in a .NET project and C++ is unmanaged.

 

--

David Rutten

david@mcneel.com

Poprad, Slovakia

Hi David Thank you for the reply.

 

Two Reference I've loaded (Using Visual Basic 2010 Express \ Rhino 4):

Rhino_DoTNET.dll (in the rhino systems folder) = CopyLocal property False

RhinoCommon.dll ( in the grasshopper\rh_common foler) = CopyLocal propery False

 

Code:


Imports Rhino

Imports Rhino.Geometry

Imports Rhino.Collections


Public Class Form1


#Region "Members" 

      Private doc As RhinoDoc = RhinoDoc.ActiveDoc

#End Region 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

Dim aPt As New List(Of Point3d)

Dim pt As New Point3d(Rnd, Rnd, Rnd)

aPt.Add(pt)

 

End Sub

End Class

 

 

Above is the error I'm recieving.

Now with RhinoDotNet and Rhinocommon references set as False and neither dll.s are in the project build folder of my vb I'm under the assumption that this must be the way I'm trying to link to rhino in my code. Am I missing something here? I've been ripping through github and havn't found any thing related to making the basic connection to rhino or on Mcneels site. (on a side note I've noticed quite a bit of examples of csharp on the site, perhaps i'm gunna trot in that terriorty next month ;) ) anyways any thoughts or feedback when you get a chance. Cheers!

 

p.s. the intention is to create a form with a button to execute the point creation upon being pressed

Hi madu,

 

you can't use RhinoCommon in Rhino4. Only Grasshopper has been granted this exception, and then only because I compile a special version of RhinoCommon as part of the Grasshopper build process.

 

If you want to use RhinoCommon you'll need to work in Rhino5.

 

--

David Rutten

david@mcneel.com

Poprad, Slovakia

Ha, ok well that would be the issue.

Cheers, I'll upgrade and take another stab at it!

Hi David & All,

 

I've updated to rhino 5 eval version.

Installed Rhinocommon.

In VB studio Referenced RhinoCommon = False & Rhino_DotNet = False

 

*%!*%# Error

System.InvalidOperationException-

{"An error occurred creating the form. See Exception.InnerException for details.  The error is: Could not load file or assembly 'RhinoCommon, Version=5.0.15005.0, Culture=neutral, PublicKeyToken=552281e97c755530' or one of its dependencies. The system cannot find the file specified."}

 

-Warning 1 Possible problem detected while building assembly 'Random_Points': Referenced assembly 'Rhino_DotNet.dll' targets a different processor Random_Points

Code:


Option Strict Off

Option Explicit On


 


Imports Rhino


Imports Rhino.Geometry


Imports Rhino.Collections


Imports System


Imports System.IO


Imports System.Xml


Imports System.Data


Imports System.Drawing


Imports System.Reflection


Imports System.Collections


Imports System.Windows.Forms


Imports Microsoft.VisualBasic


Imports System.Collections.Generic


Imports System.Runtime.InteropServices

 


Public Class Form1


#Region "members" 

      Private doc As RhinoDoc = RhinoDoc.ActiveDoc

#End Region


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim aPt As New List(Of Point3d)

Dim oPt As New Point3d(Rnd, Rnd, Rnd)

aPt.Add(oPt)

End Sub 

End Class

 

 

I'm a bit confused.  Perhaps I'm missing something to enable rhino as the active document.  I'm gunna keep digging around on github and mcneal and feedback greatly appreciated.

 

 

-shamefull madu

 

This thread has got me officially confused now. Are you trying to code up Grasshopper components or a Rhino plugin? Let's move this discussion into a new thread.


In either case, why are you referencing both Rhino_DotNET and RhinoCommon? There could be a good reason for this, but it is unlikely that applies.


To make a .NET plugin for Rhino4 (rhp) you need to reference only Rhino_DotNET.dll and make sure you don't 'Copy Local'.*

 

To make a .NET plugin for Rhino5 (rhp) you need to reference only RhinoCommon.dll and make sure you don't 'Copy Local'.**

 

To make a .NET plugin for Grasshopper (gha) you need to reference RhinoCommon.dll, Grasshopper.dll and GH_IO.dll, and they must all be CopyLocal = False.**

 

I do have a couple of remarks and questions:

  1. I highly recommend you use Option Strict On. It's a great way to not shoot yourself in the foot.
  2. What is Rnd? Is it a function or a variable? 
  3. Why are you caching the ActiveDoc?

--

David Rutten

david@mcneel.com

Poprad, Slovakia



* We will keep on supporting Rhino_DotNET for as long as possible, so any plugin build using it will also run on Rhino5.


** If Rhino_DotNET has functionality that you need and which is not (yet) available in RhinoCommon, you might need to reference it as well. But this is quite a special case.

RSS

About

Translate

Search

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service