29e4e100720d33fd8c0effda9e8b6fdb253fcb9a
[occt.git] / samples / CSharp / WPF_WinForms / OCCViewer.cs
1 \feffusing System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6
7 namespace IE_WPF_WinForms
8 {
9     public enum CurrentAction3d
10     {
11         CurAction3d_Nothing,
12         CurAction3d_DynamicZooming,
13         CurAction3d_WindowZooming,
14         CurAction3d_DynamicPanning,
15         CurAction3d_GlobalPanning,
16         CurAction3d_DynamicRotation
17     }
18     public enum CurrentPressedKey
19     {
20         CurPressedKey_Nothing,
21         CurPressedKey_Ctrl,
22         CurPressedKey_Shift
23     }
24     public enum ModelFormat
25     {
26         BREP,
27         STEP,
28         IGES,
29         VRML,
30         STL,
31         IMAGE
32     }
33
34     public enum DisplayMode
35     {
36         Wireframe,
37         Shading
38     }
39
40     public class OCCViewer : System.Windows.Forms.Form
41     {
42         public event EventHandler ZoomingFinished;
43         protected void RaiseZoomingFinished()
44         {
45             if ( ZoomingFinished != null )
46             {
47                 ZoomingFinished( this, EventArgs.Empty );
48             }
49         }
50
51         public event EventHandler AvaliabiltyOfOperationsChanged;
52         protected void RaiseAvaliabiltyOfOperationsChanged()
53         {
54             if ( AvaliabiltyOfOperationsChanged != null )
55             {
56                 AvaliabiltyOfOperationsChanged( this, EventArgs.Empty );
57             }
58         }
59
60         public OCCTProxy View { get; private set; }
61         public CurrentAction3d CurrentMode { get; private set; }
62         private CurrentPressedKey CurrentPressedKey { get; set; }
63         private bool IsRectVisible { get; set; }
64         public bool DegenerateMode { get; private set; }
65
66         public bool IsWireframeEnabled { get; private set; }
67         public bool IsShadingEnabled { get; private set; }
68         public bool IsTransparencyEnabled { get; private set; }
69         public bool IsColorEnabled { get; private set; }
70         public bool IsMaterialEnabled { get; private set; }
71         public bool IsDeleteEnabled { get; private set; }
72
73         private float myCurZoom;// ~ Quantity_Factor
74         private int myXmin;
75         private int myYmin;
76         private int myXmax;
77         private int myYmax;
78         private int myRectDownX;
79         private int myRectDownY;
80         private int myButtonDownX;
81         private int myButtonDownY;
82
83         private ContextMenu Popup { get; set; }
84         private MenuItem ContextWireframe;
85         private MenuItem ContextShading;
86         private MenuItem ContextColor;
87         private MenuItem ContextMaterial;
88         private MenuItem ContextDelete;
89         private MenuItem ContextBackground;
90         private MenuItem ContextTransparency;
91
92
93         public OCCViewer()
94         {
95             InitializeComponent();
96
97             View = new OCCTProxy();
98             View.InitOCCTProxy();
99             if ( !View.InitViewer( this.Handle ) )
100             {
101                 MessageBox.Show( "Fatal Error during the graphic initialisation", "Error!" );
102             }
103
104             CurrentMode = CurrentAction3d.CurAction3d_Nothing;
105             CurrentPressedKey = CurrentPressedKey.CurPressedKey_Nothing;
106             IsRectVisible = false;
107             DegenerateMode = true;
108         }
109
110         private void InitializeComponent()
111         {
112             ControlBox = false;
113             TopLevel = false;
114
115             this.ImeMode = System.Windows.Forms.ImeMode.NoControl;
116
117             SizeChanged += new System.EventHandler( OnSizeChanged );
118             Paint += new System.Windows.Forms.PaintEventHandler( OnPaint );
119
120             MouseDown += new System.Windows.Forms.MouseEventHandler( OnMouseDown );
121             MouseUp += new System.Windows.Forms.MouseEventHandler( OnMouseUp );
122             MouseMove += new System.Windows.Forms.MouseEventHandler( OnMouseMove );
123
124             Popup = new ContextMenu();
125             ContextWireframe = new MenuItem();
126             ContextShading = new MenuItem();
127             ContextColor = new MenuItem();
128             ContextMaterial = new MenuItem();
129             ContextTransparency = new MenuItem();
130             ContextDelete = new MenuItem();
131             ContextBackground = new MenuItem();
132
133             ContextWireframe.Text = "Wireframe";
134             ContextShading.Text = "Shading";
135             ContextColor.Text = "Color";
136             ContextMaterial.Text = "Material";
137             ContextTransparency.Text = "Transparency";
138             ContextDelete.Text = "Delete";
139             ContextBackground.Text = "Background";
140
141             ContextWireframe.Click += new System.EventHandler( ContextWireframe_Click );
142             ContextShading.Click += new System.EventHandler( ContextShading_Click );
143             ContextColor.Click += new System.EventHandler( ContextColor_Click );
144             ContextMaterial.Click += new System.EventHandler( ContextMaterial_Click );
145             ContextTransparency.Click += new System.EventHandler( ContextTransparency_Click );
146             ContextDelete.Click += new System.EventHandler( ContextDelete_Click );
147             ContextBackground.Click += new System.EventHandler( ContextBackground_Click );
148
149             Popup.MenuItems.AddRange( new MenuItem[] { ContextWireframe,
150                                                            ContextShading,
151                                                            ContextColor,
152                                                            ContextMaterial,
153                                                            ContextTransparency,
154                                                            ContextDelete,
155                                                        ContextBackground } );
156             Popup.Popup += new System.EventHandler( OnPopup );
157         }
158
159         private void OnPaint(object sender, System.Windows.Forms.PaintEventArgs e)
160         {
161             View.RedrawView();
162             View.UpdateView();
163         }
164
165         private void OnSizeChanged(object sender, System.EventArgs e)
166         {
167             View.UpdateView();
168         }
169
170         public void ImportModel( ModelFormat theFormat )
171         {
172             int aFormat = 10;
173             OpenFileDialog anOpenDialog = new OpenFileDialog();
174             string aDataDir = Environment.GetEnvironmentVariable("CSF_OCCTDataPath");
175             string aFilter = "";
176
177             switch ( theFormat )
178             {
179                 case ModelFormat.BREP:
180                     anOpenDialog.InitialDirectory = (aDataDir + "\\occ");
181                     aFormat = 0;
182                     aFilter = "BREP Files (*.brep *.rle)|*.brep; *.rle";
183                     break;
184                 case ModelFormat.STEP:
185                     anOpenDialog.InitialDirectory = (aDataDir + "\\step");
186                     aFormat = 1;
187                     aFilter = "STEP Files (*.stp *.step)|*.stp; *.step";
188                     break;
189                 case ModelFormat.IGES:
190                     anOpenDialog.InitialDirectory = (aDataDir + "\\iges");
191                     aFormat = 2;
192                     aFilter = "IGES Files (*.igs *.iges)|*.igs; *.iges";
193                     break;
194                 default:
195                     break;
196             }
197
198             anOpenDialog.Filter = aFilter + "|All files (*.*)|*.*";
199             if (anOpenDialog.ShowDialog() == DialogResult.OK)
200             {
201                 string aFileName = anOpenDialog.FileName;
202                 if (aFileName == "")
203                 {
204                     return;
205                 }
206
207                 Cursor = System.Windows.Forms.Cursors.WaitCursor;
208                 if ( !View.TranslateModel( aFileName, aFormat, true ) )
209                 {
210                     MessageBox.Show( "Cann't read this file", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning );
211                 }
212                 Cursor = System.Windows.Forms.Cursors.Default;
213             }
214             View.ZoomAllView();
215         }
216
217         public void ExportModel( ModelFormat theFormat )
218         {
219             int aFormat = 10;
220             SaveFileDialog saveDialog = new SaveFileDialog();
221             string aDataDir = Environment.GetEnvironmentVariable("CSF_OCCTDataPath");
222             string aFilter = "";
223
224             switch ( theFormat )
225             {
226                 case ModelFormat.BREP:
227                     saveDialog.InitialDirectory = ( aDataDir + "\\occ" );
228                     aFormat = 0;
229                     aFilter = "BREP Files (*.brep *.rle)|*.brep; *.rle";
230                     break;
231                 case ModelFormat.STEP:
232                     saveDialog.InitialDirectory = ( aDataDir + "\\step" );
233                     aFormat = 1;
234                     aFilter = "STEP Files (*.stp *.step)|*.step; *.stp";
235                     break;
236                 case ModelFormat.IGES:
237                     saveDialog.InitialDirectory = ( aDataDir + "\\iges" );
238                     aFormat = 2;
239                     aFilter = "IGES Files (*.igs *.iges)| *.iges; *.igs";
240                     break;
241                 case ModelFormat.VRML:
242                     saveDialog.InitialDirectory = ( aDataDir + "\\vrml" );
243                     aFormat = 3;
244                     aFilter = "VRML Files (*.vrml)|*.vrml";
245                     break;
246                 case ModelFormat.STL:
247                     saveDialog.InitialDirectory = ( aDataDir + "\\stl" );
248                     aFormat = 4;
249                     aFilter = "STL Files (*.stl)|*.stl";
250                     break;
251                 case ModelFormat.IMAGE:
252                     saveDialog.InitialDirectory = ( aDataDir + "\\images" );
253                     aFormat = 5;
254                     aFilter = "Images Files (*.bmp)|*.bmp";
255                     break;
256                 default:
257                     break;
258             }
259
260             saveDialog.Filter = aFilter;
261             if ( saveDialog.ShowDialog() == DialogResult.OK )
262             {
263                 string aFileName = saveDialog.FileName;
264                 if ( aFileName == "" )
265                 {
266                     return;
267                 }
268
269                 Cursor = System.Windows.Forms.Cursors.WaitCursor;
270                 if ( !View.TranslateModel( aFileName, aFormat, false ) )
271                 {
272                     MessageBox.Show( "Can not write this file", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Warning );
273                 }
274                 Cursor = System.Windows.Forms.Cursors.Default;
275             }
276         }
277
278         public void FitAll()
279         {
280             View.ZoomAllView();
281         }
282
283         public void ZoomWindow()
284         {
285             CurrentMode = CurrentAction3d.CurAction3d_WindowZooming;
286         }
287
288         public void DynamicZooming()
289         {
290             CurrentMode = CurrentAction3d.CurAction3d_DynamicZooming;
291         }
292
293         public void DynamicPanning()
294         {
295             CurrentMode = CurrentAction3d.CurAction3d_DynamicPanning;
296         }
297
298         public void GlobalPanning()
299         {
300             myCurZoom = View.Scale();
301             CurrentMode = CurrentAction3d.CurAction3d_GlobalPanning;
302         }
303
304         public void AxoView()
305         {
306             View.AxoView();
307         }
308
309         public void FrontView()
310         {
311             View.FrontView();
312         }
313
314         public void TopView()
315         {
316             View.TopView();
317         }
318
319         public void LeftView()
320         {
321             View.LeftView();
322         }
323
324         public void BackView()
325         {
326             View.BackView();
327         }
328
329         public void RightView()
330         {
331             View.RightView();
332         }
333
334         public void Reset()
335         {
336             View.Reset();
337         }
338
339         public void BottomView()
340         {
341             View.BottomView();
342         }
343
344         public void HiddenOff()
345         {
346             View.SetDegenerateModeOff();
347             DegenerateMode = false;
348         }
349
350         public void HiddenOn()
351         {
352             View.SetDegenerateModeOn();
353             DegenerateMode = true;
354         }
355
356         public void DynamicRotation()
357         {
358             CurrentMode = CurrentAction3d.CurAction3d_DynamicRotation;
359         }
360
361         public void SelectionChanged()
362         {
363             switch ( View.DisplayMode() )
364             {
365                 case -1:
366                     IsShadingEnabled = false;
367                     IsWireframeEnabled = false;
368                     break;
369                 case 0:
370                     IsWireframeEnabled = false;
371                     IsShadingEnabled = true;
372                     IsTransparencyEnabled = false;
373                     break;
374                 case 1:
375                     IsWireframeEnabled = true;
376                     IsShadingEnabled = false;
377                     IsTransparencyEnabled = true;
378                     break;
379                 case 10:
380                     IsWireframeEnabled = true;
381                     IsShadingEnabled = true;
382                     IsTransparencyEnabled = true;
383                     break;
384                 default:
385                     break;
386             }
387
388             if ( View.IsObjectSelected() )
389             {
390                 IsColorEnabled = true;
391                 IsMaterialEnabled = true;
392                 IsDeleteEnabled = true;
393             }
394             else
395             {
396                 IsColorEnabled = false;
397                 IsMaterialEnabled = false;
398                 IsTransparencyEnabled = false;
399                 IsDeleteEnabled = false;
400             }
401
402             RaiseAvaliabiltyOfOperationsChanged();
403         }
404
405         public void ChangeColor( bool IsObjectColor )
406         {
407             int r, g, b;
408             if ( IsObjectColor )
409             {
410                 r = View.GetObjColR();
411                 g = View.GetObjColG();
412                 b = View.GetObjColB();
413             }
414             else
415             {
416                 r = View.GetBGColR();
417                 g = View.GetBGColG();
418                 b = View.GetBGColB();
419             }
420             System.Windows.Forms.ColorDialog ColDlg = new System.Windows.Forms.ColorDialog();
421             ColDlg.Color = System.Drawing.Color.FromArgb( r, g, b );
422             if ( ColDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK )
423             {
424                 System.Drawing.Color c = ColDlg.Color;
425                 r = c.R;
426                 g = c.G;
427                 b = c.B;
428                 if ( IsObjectColor )
429                 {
430                     View.SetColor( r, g, b );
431                 }
432                 else
433                 {
434                     View.SetBackgroundColor( r, g, b );
435                 }
436             }
437             View.UpdateCurrentViewer();
438         }
439
440         public void Wireframe()
441         {
442             View.SetDisplayMode( (int)DisplayMode.Wireframe );
443             View.UpdateCurrentViewer();
444
445             SelectionChanged();
446             RaiseZoomingFinished();
447         }
448
449         public void Shading()
450         {
451             View.SetDisplayMode( (int)DisplayMode.Shading );
452             View.UpdateCurrentViewer();
453
454             SelectionChanged();
455             RaiseZoomingFinished();
456         }
457
458         public void Color()
459         {
460             ChangeColor( true );
461         }
462
463         public void Background()
464         {
465             ChangeColor( false );
466         }
467
468         public void Material()
469         {
470             MaterialDlg aDlg = new MaterialDlg( View );
471             aDlg.ShowDialog();
472         }
473
474         public void Transparency()
475         {
476             TransparencyDialog dlg = new TransparencyDialog();
477             dlg.View = View;
478             dlg.ShowDialog( this );
479         }
480
481         public void Delete()
482         {
483             View.EraseObjects();
484             SelectionChanged();
485         }
486
487         public void OnKeyDown( System.Windows.Input.Key theKey )
488         {
489             if ( theKey == System.Windows.Input.Key.LeftShift ||
490                  theKey == System.Windows.Input.Key.RightShift )
491             {
492                 CurrentPressedKey = CurrentPressedKey.CurPressedKey_Shift;
493             }
494             else if (theKey == System.Windows.Input.Key.LeftCtrl ||
495                      theKey == System.Windows.Input.Key.RightCtrl )
496             {
497                 CurrentPressedKey = CurrentPressedKey.CurPressedKey_Ctrl;
498             }
499         }
500
501         public void OnKeyUp()
502         {
503             CurrentPressedKey = CurrentPressedKey.CurPressedKey_Nothing;
504         }
505
506         protected void MultiDragEvent( int x, int y, int theState )
507         {
508             if ( theState == -1 ) //mouse is down
509             {
510                 myButtonDownX = x;
511                 myButtonDownY = y;
512             }
513             else if ( theState ==  1) //mouse is up
514             {
515                 View.ShiftSelect( Math.Min( myButtonDownX, x ), Math.Min( myButtonDownY, y ),
516                                   Math.Max( myButtonDownX, x ), Math.Max( myButtonDownY, y ) );
517             }
518         }
519
520         protected void DragEvent( int x, int y, int theState )
521         {
522             if ( theState == -1 ) //mouse is down
523             {
524                 myButtonDownX = x;
525                 myButtonDownY = y;
526             }
527             else if ( theState == 1 ) //mouse is up
528             {
529                 View.Select( Math.Min( myButtonDownX, x ), Math.Min( myButtonDownY, y ),
530                              Math.Max( myButtonDownX, x ), Math.Max( myButtonDownY, y ) );
531             }
532         }
533
534         private void DrawRectangle( bool draw )
535         {
536             System.Drawing.Graphics gr = System.Drawing.Graphics.FromHwnd(Handle);
537             System.Drawing.Pen p = null;
538             if ( IsRectVisible || !draw )//erase the rect
539             {
540                 int r = View.GetBGColR();
541                 int g = View.GetBGColG();
542                 int b = View.GetBGColB();
543                 p = new System.Drawing.Pen( System.Drawing.Color.FromArgb(r, g, b) );
544                 IsRectVisible = false;
545                 View.UpdateView();
546             }
547             else if ( draw )
548             {
549                 p = new System.Drawing.Pen( System.Drawing.Color.White );
550                 IsRectVisible = true;
551             }
552             if ( p == null )
553             {
554                 return;
555             }
556             int x = Math.Min( myXmin, myXmax );
557             int y = Math.Min( myYmin, myYmax );
558             gr.DrawRectangle( p, x, y, Math.Abs(myXmax - myXmin), Math.Abs(myYmax - myYmin) );
559             myRectDownX = Math.Max( myXmin, myXmax );
560             myRectDownY = Math.Max( myYmin, myYmax );
561         }
562
563         private void OnMouseDown( object sender, System.Windows.Forms.MouseEventArgs e )
564         {
565             if ( e.Button == MouseButtons.Left )
566             {
567                 myXmin = e.X;
568                 myXmax = e.X;
569                 myYmin = e.Y;
570                 myYmax = e.Y;
571                 if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl )
572                 {
573                     // start the dinamic zooming....
574                     CurrentMode = CurrentAction3d.CurAction3d_DynamicZooming;
575                 }
576                 else
577                 {
578                     switch ( CurrentMode )
579                     {
580                         case CurrentAction3d.CurAction3d_Nothing:
581                             if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift )
582                             {
583                                 MultiDragEvent( myXmax, myYmax, -1 );
584                             }
585                             else
586                             {
587                                 DragEvent( myXmax, myYmax, -1 );
588                             }
589                             break;
590                         case CurrentAction3d.CurAction3d_DynamicRotation:
591                             if ( !DegenerateMode )
592                             {
593                                 View.SetDegenerateModeOn();
594                             }
595                             View.StartRotation( e.X, e.Y );
596                             break;
597                         case CurrentAction3d.CurAction3d_WindowZooming:
598                             Cursor = Cursors.Hand;
599                             break;
600                         default:
601                             break;
602                     }
603                 }
604             }
605             else if ( e.Button == MouseButtons.Right )
606             {
607                 if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl )
608                 {
609                     if ( !DegenerateMode )
610                     {
611                         View.SetDegenerateModeOn();
612                     }
613                     View.StartRotation( e.X, e.Y );
614                 }
615                 else
616                 {
617                     Popup.Show( this, new System.Drawing.Point( e.X, e.Y ) );
618                 }
619             }
620         }
621
622         private void OnMouseUp( object sender, System.Windows.Forms.MouseEventArgs e ) 
623         {
624             if ( e.Button == MouseButtons.Left )
625             {
626                 if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl )
627                 {
628                     return;
629                 }
630                 switch ( CurrentMode )
631                 {
632                     case CurrentAction3d.CurAction3d_Nothing:
633                         if ( e.X == myXmin && e.Y == myYmin )
634                         {
635                             myXmax = e.X;
636                             myYmax = e.Y;
637                             if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift )
638                             {
639                                 View.ShiftSelect();
640                             }
641                             else
642                             {
643                                 View.Select();
644                             }
645                         }
646                         else
647                         {
648                             myXmax = e.X;
649                             myYmax = e.Y;
650                             DrawRectangle( false );
651                             if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Shift )
652                             {
653                                 MultiDragEvent( myXmax, myYmax, 1 );
654                             }
655                             else
656                             {
657                                 DragEvent( myXmax, myYmax, 1 );
658                             }
659                         }
660                         break;
661                     case CurrentAction3d.CurAction3d_DynamicZooming:
662                         CurrentMode = CurrentAction3d.CurAction3d_Nothing;
663                         break;
664                     case CurrentAction3d.CurAction3d_WindowZooming:
665                         myXmax = e.X;
666                         myYmax = e.Y;
667                         DrawRectangle( false );
668                         int ValZWMin = 1;
669                         if ( Math.Abs(myXmax - myXmin) > ValZWMin && 
670                              Math.Abs(myXmax - myYmax) > ValZWMin )
671                         {
672                             View.WindowFitAll( myXmin, myYmin, myXmax, myYmax );
673                         }
674                         Cursor = Cursors.Arrow;
675                         RaiseZoomingFinished();
676                         CurrentMode = CurrentAction3d.CurAction3d_Nothing;
677                         break;
678                     case CurrentAction3d.CurAction3d_DynamicPanning:
679                         CurrentMode = CurrentAction3d.CurAction3d_Nothing;
680                         break;
681                     case CurrentAction3d.CurAction3d_GlobalPanning:
682                         View.Place( e.X, e.Y, myCurZoom );
683                         CurrentMode = CurrentAction3d.CurAction3d_Nothing;
684                         break;
685                     case CurrentAction3d.CurAction3d_DynamicRotation:
686                         CurrentMode = CurrentAction3d.CurAction3d_Nothing;
687                         if ( !DegenerateMode )
688                         {
689                             View.SetDegenerateModeOff();
690                         }
691                         else
692                         {
693                             View.SetDegenerateModeOn();
694                         }
695                         break;
696                     default:
697                         break;
698                 }
699             }
700             else if ( e.Button == MouseButtons.Right )
701             {
702                 if ( !DegenerateMode )
703                 {
704                     View.SetDegenerateModeOff();
705                 }
706                 else
707                 {
708                     View.SetDegenerateModeOn();
709                 }
710             }
711
712             SelectionChanged();
713         }
714
715         private void OnMouseMove( object sender, System.Windows.Forms.MouseEventArgs e )
716         {
717             if ( e.Button == MouseButtons.Left ) //left button is pressed
718             {
719                 if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl )
720                 {
721                     View.Zoom(myXmax, myYmax, e.X, e.Y);
722                     myXmax = e.X;
723                     myYmax = e.Y;
724                 }
725                 else
726                 {
727                     switch ( CurrentMode )
728                     {
729                         case CurrentAction3d.CurAction3d_Nothing:
730                             DrawRectangle( false );
731                             myXmax = e.X;
732                             myYmax = e.Y;
733                             DrawRectangle( true );
734                             break;
735                         case CurrentAction3d.CurAction3d_DynamicZooming:
736                             View.Zoom( myXmax, myYmax, e.X, e.Y );
737                             myXmax = e.X;
738                             myYmax = e.Y;
739                             break;
740                         case CurrentAction3d.CurAction3d_WindowZooming:
741                             DrawRectangle( false );
742                             myXmax = e.X;
743                             myYmax = e.Y;
744                             DrawRectangle( true );//add brush here
745                             break;
746                         case CurrentAction3d.CurAction3d_DynamicPanning:
747                             View.Pan( e.X - myXmax, myYmax - e.Y );
748                             myXmax = e.X;
749                             myYmax = e.Y;
750                             break;
751                         case CurrentAction3d.CurAction3d_GlobalPanning:
752                             break;
753                         case CurrentAction3d.CurAction3d_DynamicRotation:
754                             View.Rotation( e.X, e.Y );
755                             View.RedrawView();
756                             break;
757                         default:
758                             break;
759                     }
760                 }
761             }
762             else if ( e.Button == MouseButtons.Middle ) //middle button is pressed
763             {
764                 if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl )
765                 {
766                     View.Pan( e.X - myXmax, myYmax - e.Y );
767                     myXmax = e.X;
768                     myYmax = e.Y;
769                 }
770             }
771             else if ( e.Button == MouseButtons.Right ) //right button is pressed
772             {
773                 if ( CurrentPressedKey == CurrentPressedKey.CurPressedKey_Ctrl) 
774                 {
775                     View.Rotation( e.X, e.Y );
776                 }
777             }
778             else // no buttons are pressed
779             {
780                 myXmax = e.X;
781                 myYmax = e.Y;
782                 View.MoveTo( e.X, e.Y );
783             }
784         }
785
786         private void OnPopup( object sender, System.EventArgs e )
787         {
788             ContextWireframe.Enabled = IsWireframeEnabled;
789             ContextShading.Enabled = IsShadingEnabled;
790             ContextColor.Enabled = IsColorEnabled;
791             ContextMaterial.Enabled = IsMaterialEnabled;
792             ContextDelete.Enabled = IsDeleteEnabled;
793             ContextTransparency.Enabled = IsTransparencyEnabled;
794             ContextBackground.Enabled = true;
795         }
796
797         private void ContextWireframe_Click( object sender, System.EventArgs e )
798         {
799             Wireframe();
800         }
801
802         private void ContextShading_Click( object sender, System.EventArgs e )
803         {
804             Shading();
805         }
806
807         private void ContextColor_Click( object sender, System.EventArgs e )
808         {
809             Color();
810         }
811
812         private void ContextMaterial_Click( object sender, System.EventArgs e )
813         {
814             Material();
815         }
816
817         private void ContextTransparency_Click( object sender, System.EventArgs e )
818         {
819             Transparency();
820         }
821
822         private void ContextDelete_Click( object sender, System.EventArgs e )
823         {
824             Delete();
825         }
826
827         private void ContextBackground_Click( object sender, System.EventArgs e )
828         {
829             Background();
830         }
831     }
832 }