Hello,
I know already have some topics with this question, but I did not see any solution so I’ll come back to the question:
I need on while loop True, when the mouse button is clicked the break loop.
This work:
if scriptcontext.escape_test(False):
break
But I need break with mouse button.
Any help please.
I’ve subclassed this to intercept mouse events:
class MouseIntercept(R.UI.MouseCallback):
def __init__(self):
super(MouseIntercept, self).__init__()
...
def OnMouseDown(self, e):
...
def OnMouseUp(self, e):
...
def OnMouseMove(self, e):
...
If you are in a loop I don’t know if the callback will work like the escape test though.
Thank you for you replay.
I dont understand, How can I implement it?
thanks
stevebaer
(Steve Baer)
November 11, 2018, 11:31pm
#4
Can you provide some details about what you are trying to do? There may be a better approach.
Hello Steve,
I’m basically re-creating a command to do this:
Hello,
There is some command to snap the entire selected object, it is not just the point where it was selected.
Just like this example:
Or can I do this with some script?
tanks
Surface= rs.GetObject(“get surface”,8)
while True:
cursor = rs.GetCursorPos()
translation = cursor[0]- cursor2[0]
cursor2 = rs.GetCursorPos()
rs.EnableRedraw(True)
rs.MoveObject(Surface, translation)
rs.EnableRedraw(False)
if scriptcontext.escape_test(False):
print "esc"
break
I just need to access the mouse button to place the obj (exit the loop),
and eventually also access the mouse wheel to rotate the object.
thanks
stevebaer
(Steve Baer)
November 11, 2018, 11:50pm
#6
This is what the GetPoint
class in RhinoCommon is for.
Sorry for my ignorance Steve, but, I can not see how this command can help me.
My script, get a surface and and follow the position of the mouse wherever it goes, I just need
when press the mouse button exit the loop.
This is the first phase, then I have to complete the script to automatically snap other objects (I already have an idea how to do)
Sorry.
stevebaer
(Steve Baer)
November 12, 2018, 12:24am
#8
I’ll have to write up a sample for using GetPoint to do this then. I won’t be able to get to this today, sorry
Hello @stevebaer is possible write this sample?
Ok, I find one solution with mousecallback function, but now
I have the problem that the event “OnMouseUp” is triger for the two mouse keys,
left and right click.
I see online doc:
https://developer.rhino3d.com/api/RhinoCommon/html/Methods_T_Rhino_UI_MouseCallback.htm
I dont see any reference to left and right click, or the wheel event.
There is any of this args?
dale
(Dale Fugier)
November 30, 2018, 9:49pm
#12
Hello @dale , I iam using python:
import rhinoscriptsyntax as rs
import Rhino
class MyMouseCallback(Rhino.UI.MouseCallback):
def OnMouseDown(self, e):
print "Down"
def OnMouseUp(self, e):
print "up"
def RunCommand():
m_mc = MyMouseCallback()
m_mc.Enabled = True
Rhino.RhinoApp.WriteLine("Click somewhere in a viewport ...")
return Rhino.Commands.Result.Success
RunCommand()
How I put OnMouseDown (args) on python??
dale
(Dale Fugier)
December 1, 2018, 12:04am
#14
Fun with mouse buttons…
import System
import Rhino
import scriptcontext as sc
class SampleMouseCallback(Rhino.UI.MouseCallback):
def OnMouseDown(self, e):
print "OnMouseDown", e.Button
def TestSampleMouseCallback():
if sc.sticky.has_key('TestSampleMouseCallback'):
callback = sc.sticky['TestSampleMouseCallback']
if callback:
callback.Enabled = False
callback = None
sc.sticky.Remove('TestSampleMouseCallback')
else:
callback = SampleMouseCallback()
callback.Enabled = True
sc.sticky['TestSampleMouseCallback'] = callback
Rhino.RhinoApp.WriteLine("Click somewhere...")
if __name__ == "__main__":
TestSampleMouseCallback()
– Dale
1 Like
stevebaer
(Steve Baer)
December 1, 2018, 12:08am
#15
If you are trying to draw preview geometry moving around the screen with features like snapping, the mouse callback is not the route to take. This is morein line with GetPoint operations or transform commands. Sorry I haven’t written a sample yet.
Hello @stevebaer ,
I dont now if I can say that my function is the same of “draw preview geometry”.
I whant make script that move one obj, and snap all vertices to all other objs vertices on the document,
the snap is not just for mouse point, at same time the snap was to have a offset tickness from the other
objs.
I alreday have the script running, snaping to all vertices with offset distance:
Now I need breack the loop on mouse clic to place the obj, and I need to , acess to keyboad keys during
the while loop to , ex: rotate the selected obj or some other funcions.
This is what I trying make:
Hello,
There is some command to snap the entire selected object, it is not just the point where it was selected.
Just like this example:
Or can I do this with some script?
tanks
My loop is continually looking for the vertices to snap, I can not interrupt the loop, if is interrupt whit “pause”
or something else, stop to compare vertives in the document.
dale:
Fun with mouse buttons…
import System
import Rhino
import scriptcontext as sc
class SampleMouseCallback(Rhino.UI.MouseCallback):
def OnMouseDown(self, e):
print "OnMouseDown", e.Button
def TestSampleMouseCallback():
if sc.sticky.has_key('TestSampleMouseCallback'):
callback = sc.sticky['TestSampleMouseCallback']
if callback:
callback.Enabled = False
callback = None
sc.sticky.Remove('TestSampleMouseCallback')
else:
callback = SampleMouseCallback()
callback.Enabled = True
sc.sticky['TestSampleMouseCallback'] = callback
Rhino.RhinoApp.WriteLine("Click somewhere...")
if __name__ == "__main__":
TestSampleMouseCallback()
– Dale
@dale ,
Any change to have the same function for the keyboard keys??, any KeyCallBack?
I dont find any read key function on Ironpython.
dale
(Dale Fugier)
December 13, 2018, 7:08pm
#18
Hi @MatrixRatrix ,
Sorry, RhinoCommon doesn’t have special tools for manipulating the keyboard.
– Dale