Quantcast
Channel: Scripting - McNeel Forum
Viewing all articles
Browse latest Browse all 5892

About Keyboard event handle in RhinoCommon

$
0
0

@pythonuser wrote:

Hi:
When I run this script, if I want to rotate the viewport, I must put the cursor on the "Press J or K" window, or it just iuput string to rhino.
I need wherever my cursor is in rhino, I will rotate the viewport by key "J" or "K", think you.

  import Rhino
  import System.Drawing
  import System.Windows.Forms
  import scriptcontext
  class Form1(System.Windows.Forms.Form):

      def __init__(self):

          self.InitializeComponent()

      def InitializeComponent(self):
          self._button = System.Windows.Forms.Button()
          self.SuspendLayout()
          self._button.Location = System.Drawing.Point(150, 67)
          self._button.Size = System.Drawing.Size(75, 23)
          self._button.TabIndex = 0
          self._button.Text = "Done"
          self._button.Click += self.ButtonClick
          self.ClientSize = System.Drawing.Size(250, 102)
          self.Controls.Add(self._button)
          self.KeyPreview = True
          self.Text = "Press J or K"
          self.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow
          self.KeyDown += self.OnKeyDownEvent
          self.Closing += self.OnClosingEvent
          self.ResumeLayout(False)

      def ButtonClick(self, sender, e):
          self.Close()

     def OnKeyDownEvent(self, sender, e):
         left = e.KeyCode == System.Windows.Forms.Keys.J
         right = e.KeyCode == System.Windows.Forms.Keys.K
         if left or right:
             amount = 0.1
             if right: amount = -0.1
                viewport = scriptcontext.doc.Views.ActiveView.MainViewport
                z = viewport.ConstructionPlane().ZAxis
               viewport.Rotate(amount, z, Rhino.Geometry.Point3d.Origin)
             scriptcontext.doc.Views.Redraw()
          finish = e.KeyCode == System.Windows.Forms.Keys.Escape
          finish = finish or e.KeyCode == System.Windows.Forms.Keys.Enter
          if finish:
              self.Close()
          e.Handled = True
      def OnClosingEvent(self, sender, e):
          Rhino.Input.Custom.GetBaseClass.PostCustomMessage("exit")

  f = Form1()
  f.Show(Rhino.RhinoApp.MainWindow())
  gs = Rhino.Input.Custom.GetPoint()
  gs.AcceptCustomMessage(True)
  gs.Get()
  if not f.IsDisposed:
      f.Close()

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 5892

Trending Articles