algorithmic modeling for Rhino
Hi
I am writing a component in Visual Studio to find a color value of an inputted object. I have it working in gh vb.script:
Dim obj As Rhino.DocObjects.RhinoObject = doc.Objects.Find(id)
If (obj Is Nothing) Then
col = Color.Transparent
Else
col = obj.Attributes.ObjectColor
End If
But while i rewrite it to Visual Studio it seems to create some problem with inputting object GUID. Can someone help me?
Tags:
Can someone help me?
Not without some code to compile. What does your RegisterInputParams() method look like? What does your SolveInstance() method look like?
Generally it is not working, so i assume that there is a lot wrong there.
With inputs i tried both makin GUID and just inputting object, both without succes:
pManager.AddIntegerParameter("GUID", "ID", "GUID(ID) of an object", GH_ParamAccess.item, 10)
pManager.AddGeometryParameter("Object", "O", "Object to get color from", GH_ParamAccess.item)
With solve instance it looks like this (messy):
Protected Overrides Sub SolveInstance(DA As IGH_DataAccess)
Dim iddd As Int32 = 0
Dim objj As GeometryBase
Dim idx As Guid
If (Not DA.GetData(0, iddd)) Then Return
If (Not DA.GetData(1, objj)) Then Return
Dim obj As Rhino.DocObjects.RhinoObject
idx = obj.Id
obj = Rhino.RhinoDoc.ActiveDoc.Objects.Find(iddd)
Dim col As New Drawing.Color
If (objj Is Nothing) Then
col = Drawing.Color.Transparent
Else
col = obj.Attributes.ObjectColor
End If
DA.SetData(0, col)
End Sub
Public Overrides ReadOnly Property ComponentGuid() As System.Guid
Get
'Don't copy this GUID, make a new one
Return New Guid("419c3a3a-cc48-4717-8cef-5f5647a5ecfc")
End Get
End Property
Have you replaced the GUID with a new GUID using a GUIDGen, which you can download from Microsoft(https://www.microsoft.com/en-us/download/confirmation.aspx?id=17252)?
Hi Aleksander,
concerning the first line only in your code: the input type for a guid should not be Integer. I think if you choose type String you'll be able to cast that succesfully to a guid.
There is also a Guid parameter. You should probably use that one.
No, scratch that. You don't need the Guid parameter at all. You only need the geometry param. I'll whip up some code.
Oookay... code is utterly untested. Hopefully it will at least tell you what the approach should be:
Public Class ColourFromObjectComponent
Inherits GH_Component
Public Sub New()
MyBase.New("Colour From Object", "Obj2Col", "Extract the colour a referenced object is drawn in", "Display", "Colour")
End Sub
Public Shared ReadOnly Id As Guid = New Guid("{9BD61B9C-C186-4CC9-8B91-C63829563997}")
Public Overrides ReadOnly Property ComponentGuid As Guid
Get
Return Id
End Get
End Property
Public Overrides ReadOnly Property Exposure As GH_Exposure
Get
Return GH_Exposure.primary
End Get
End Property
Protected Overrides Sub RegisterInputParams(pManager As GH_InputParamManager)
pManager.AddGeometryParameter("Object", "O", "Object to examine", GH_ParamAccess.item)
End Sub
Protected Overrides Sub RegisterOutputParams(pManager As GH_OutputParamManager)
pManager.AddColourParameter("Object", "O", "Object colour", GH_ParamAccess.item)
pManager.AddColourParameter("Display", "D", "Display colour", GH_ParamAccess.item)
End Sub
Protected Overrides Sub SolveInstance(DA As IGH_DataAccess)
Dim geo As IGH_GeometricGoo = Nothing
If (Not DA.GetData(0, geo)) Then Return
If (Not geo.IsReferencedGeometry) Then
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Geometry is not referenced from Rhino")
DA.SetData(0, Color.Black)
DA.SetData(1, Color.Black)
Return
End If
Dim id As Guid = geo.ReferenceID
Dim doc As Rhino.RhinoDoc = Rhino.RhinoDoc.ActiveDoc
Dim obj As RhinoObject = doc.Objects.Find(id)
If (obj Is Nothing) Then
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Object could not be found in the current Rhino document")
DA.SetData(0, Color.Black)
DA.SetData(1, Color.Black)
Return
End If
DA.SetData(0, obj.Attributes.ObjectColor)
DA.SetData(1, obj.Attributes.DrawColor(doc))
End Sub
End Class
Ah, yes, now I see, thanks David - and thanks to Dani for demonstrating how to implement that. (I was looking for pManager.AddGuidParameter or something like that... Doh!)
There should have been an AddGuidParameter, but I never added that method.
That was my initial source of concern. I realised that there is no such thing as AddguidParameter and there I started to tweak randomly. Thank you guys! In the evening I will test all of these
Protected Overrides Sub RegisterInputParams(pManager As GH_Component.GH_InputParamManager)
pManager.AddParameter(New Grasshopper.Kernel.Parameters.Param_Guid(), "Name", "Nickname", "description", GH_ParamAccess.item)
End Sub
Protected Overrides Sub RegisterOutputParams(pManager As GH_Component.GH_OutputParamManager)
pManager.AddColourParameter("Name", "nick", "Des", GH_ParamAccess.item)
End Sub
Protected Overrides Sub SolveInstance(DA As IGH_DataAccess)
Dim id As Guid = Guid.Empty
Dim col As Color = Color.Empty
If Not (DA.GetData(0, id)) Then Exit Sub
Dim robj As Rhino.DocObjects.RhinoObject = Rhino.RhinoDoc.ActiveDoc.Objects.Find(id)
If (robj Is Nothing) Then
col = Color.Transparent
Else
col = robj.Attributes.ObjectColor
End If
DA.SetData(0, col)
End Sub
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by