clement
September 17, 2017, 2:17pm
1
Hi,
i have a script which calls above method from a button in a Windows Form. The method works fine in Rhino 5 but does nothing in the WIP. It does not generate any error unless i add my own error handling for the delegate. The button event calls this:
Rhino.UI.Dialogs.PushPickButton(self, self.CustomPickerFunction)
In the WIP, it generates this error:
An exception of type AttributeError occured. Arguments:
("'type' object has no attribute 'PushPickButton'",)
Can this be added to Rhino 6 so it runs like Rhino 5 ?
Will there be an equivalent for an ETO form ?
_
c.
dale
(Dale Fugier)
September 18, 2017, 8:59pm
2
Hi @clement ,
In your plug-in project, added a reference to RhinoWindows.dll
. Then use RhinoWindows.Extensions.PushPickButton
.
For Eto, use Rhino.UI.EtoExtensions.PushPickButton
.
– Dale
clement
September 18, 2017, 9:01pm
3
Hi @dale ,
i am not sure i can do this. It is a python script which runs in V5 but not in V6.
_
c.
dale
(Dale Fugier)
September 18, 2017, 9:12pm
4
https://mcneel.myjetbrains.com/youtrack/issue/RH-41439
For now, you can do something like this:
import clr
clr.AddReferenceToFileAndPath(r"C:\Program Files\Rhino WIP\System\RhinoWindows.dll")
import RhinoWindows
print RhinoWindows.Forms.Dpi.DpiScale()
– Dale
1 Like
clement
September 18, 2017, 9:17pm
5
Hi @Dale ,
thanks for adding it as a bug. It seems i can find it here when using V6:
RhinoWindows.Extensions.PushPickButton
but here in V5:
RhinoWindows.RhinoWindow.PushPickButton
but it is kinda hacky:
import clr
import rhinoscriptsyntax as rs
rh_win_dll = rs.FindFile("RhinoWindows.dll")
if not rh_win_dll:
assert False, "Error importing RhinoWindows.dll"
clr.AddReferenceToFileAndPath(rh_win_dll)
import RhinoWindows
_
c.
clement
September 18, 2017, 9:42pm
6
@dale , while searching for a way to use the same code in V5 and V6 (Win) i’ve found that:
Rhino.UI.Dialogs.ShowSemiModal
is also missing in the WIP.
_
c.
dale
(Dale Fugier)
September 18, 2017, 10:23pm
7
RhinoWindows.Extensions.ShowSemiModal
The stuff in RhinoCommon that was Winforms-specific was moved to RhinoWindows, as RhinoCommon should work cross platform.
– D
clement
September 18, 2017, 11:43pm
8
Hi @Dale ,
i have created conditional imports now for Rhino 5 (Win) nothing is required and this works when called from a button event handler in my form:
Rhino.UI.Dialogs.PushPickButton(self, self.CustomPickerFunction)
For Rhino 6 (Win) i imported RhinoWindows
, then check the exe version in my form and try to run:
RhinoWindows.Extensions.PushPickButton(self, self.CustomPickerFunction)
This gives me below error:
An exception of type TypeError occured. Arguments: (‘expected Window, got Form_5$5’,)
It looks like in Rhino 5 it accepts a Form but in Rhino 6 it requires a window ?!
Edit: it seems to be this one which works with a form in V6:
RhinoWindows.Forms.FormUtilities.PushPickButton(self, self.CustomPickerFunction)
_
c.
dale
(Dale Fugier)
September 19, 2017, 12:10am
9
Hi @clement ,
RhinoWindows.Extensions.PushPickButton
is an extension method.
@stevebaer and I are chatting about this. Perhaps it was a mistake moving this stuff around. Can you hang tight until we have a chance to discuss?
– Dale
dale
(Dale Fugier)
September 19, 2017, 12:11am
10
This is in the Rhino.UI assemby, not the Rhino.UI namespace. Thus, you can do this:
import Rhino
import Rhino.UI # bingo...
import clr
clr.AddReference("System.Windows.Forms")
import System.Windows.Forms
class TestForm( System.Windows.Forms.Form):
def __init__(self):
self.Text = 'Simple'
self.Width = 250
self.Height = 200
self.CenterToScreen()
if __name__ == "__main__":
form = TestForm()
Rhino.UI.Dialogs.ShowSemiModal(form)
– Dale
clement
September 19, 2017, 12:19am
11
Yes, no problem. I just would like to point out that it would be the easiest for the user if the code which works in V5 (Win) works the same in V6 (Win). For people trying to make cross compatible forms then with Win using WinForms and ETO on Mac, it would require only two different kind of forms. Currently it seems it requires special handling just between V5 and V6 (Win).
Thank you for this example. It works the same in 5 and 6. In the current WIP it prints:
string>:1: DeprecationWarning: Dialogs.ShowSemiModal has been obsoleted.
_
c.