algorithmic modeling for Rhino
so can anyone tell me the method or property to expose the ability to access/launch a user from form right clicking a context option in a component.
Basically, consider the color swatch or the path component. Right clicking the color swatch launches teh interactive color 3d box for selecting color.
Is there a method or property in the grasshopper SDK for this?
Basically I want to be able to launch a form when the user right clicks such a context]]thanks
Tags:
Hi Duck,
you can override the Menu_AppendDerivedItems() method on GH_Component. This allows you to insert additional items into the component context menu. Alternatively you can override AppendToInstanceMenu to create the entire menu from scratch. GH_DocumentObject, GH_ActiveObject and GH_Component classes all have protected functions that may help to create new menu items. Have a look at all the functions that start with "Menu_"
--
David Rutten
david@mcneel.com
Poprad, Slovakia
A lot of the method names are a bit awkward. They sort of grow over time and don't have a consistent naming system. I'll probably mark a lot of them Obsolete soon and replace them with more obvious names. In the meantime:
Public Overrides Sub Menu_AppendDerivedItems( _
ByVal iMenu As System.Windows.Forms.ToolStripDropDown)
'First append a separator line
GH_DocumentObject.Menu_AppendSeparator(iMenu)
'Then append a new item
GH_DocumentObject.Menu_AppendGenericMenuItem(iMenu, "Name", _ AddressOf MyMenuItemClicked)
End Sub
Private Sub MyMenuItemClicked(ByVal sender As Object, ByVal e As EventArgs)
'Put code here that will be executed when the menu item is clicked.
'For example:
Me.RecordUndoEvent("Behaviour Toggle")
Me.SpecialBehaviour = Not Me.SpecialBehaviour
Me.ExpireSolution(True)
End Sub
--
David Rutten
david@mcneel.com
Poprad, Slovakia
The above adds an extra item to the popup menu of a parameter or component. Very few components change the menu (it would be difficult to discover such a feature), but parameters and especially 'weird' parameters like Sliders, Text Panels and Colour Swatches do this a lot. Sometimes they even override the entire menu instead of just adding a few special items into the default menu.
What you do when an item is clicked is entirely up to you. You could change a local variable (my example) or you could display a form, or you could randomly delete three out of every four files on the hard-disk...
To launch a window from a menu item, replace the code in MyMenuItemClicked(). Something like this:
Dim dlg As New MySpecialForm()
dlg.SettingA = Me.m_settingA
dlg.SettingB = Me.m_settingB
If (dlg.ShowDialog() = Windows.Forms.DialogResult.OK) Then
Me.RecordUndoEvent("MyComponent Settings")
Me.m_settingA = dlg.SettingA
Me.m_settingB = dlg.SettingB
Me.ExpireSolution(True)
End If
This code assumes you have a form defined in your project called MySpecialForm and it has two properties called SettingA and SettingB. These properties mirror local variables on your component. So the steps are:
--
David Rutten
david@mcneel.com
Poprad, Slovakia
David
thank you so much for this information, this helps a lot. I will try this later tonight and let you know how i get on,
thanks again!
Hi Guys,
I'm in the process of doing a similar exercise. I have added a new item to the drop down menu for the component. I can call the user form and enter the required information, but i'm not able to get that information to show up on the output side of the component.
For example, if the user form asks the user for two inputs (a string and a number), how do I get those values to populate the the output params of the component?
Thanks!
You can only populate outputs from within SolveInstance(). So you either have to read the state of your component in SolveInstance or place some class level variables that are written from within the menu click handlers and then copied inside SolveInstance.
--
David Rutten
david@mcneel.com
Tirol, Austria
Thanks for the info. That makes sense. How would I go about calling the SolveInstance() sub from a right click situation?
Thanks
[C]
DON'T call SolveInstance yourself. Instead, expire the solution and let Grasshopper call that method. I.e.
ExpireSolution(true)
--
David Rutten
david@mcneel.com
Tirol, Austria
Hi David,
Recently I ran into a situation that didn't occur before. The settings in the menu are no longer preserved. When a user selects certain settings from the right-click pop-up menu, saves the file, closes the file, and re-opens the file, the selection settings are reverted back to default. Each of the menu items is a public variable in the component class, with it's get and set.
Would you be able to shed some light on what I may be doing incorrectly? Thanks,
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