1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Data;
8 using System.Windows.Documents;
9 using System.Windows.Input;
10 using System.Windows.Media;
11 using System.Windows.Media.Imaging;
12 using System.Windows.Navigation;
13 using System.Windows.Shapes;
14 using System.ComponentModel;
15 using System.Windows.Forms.Integration;
16 using System.Windows.Interop;
17 using System.Runtime.InteropServices;
18 
19 namespace IE_WPF_D3D
20 {
21   /// <summary>
22   /// Interaction logic for MainWindow.xaml
23   /// </summary>
24   public partial class MainWindow : Window, INotifyPropertyChanged
25   {
26     public event PropertyChangedEventHandler PropertyChanged;
RaisePropertyChanged(string thePropertyName)27     protected void RaisePropertyChanged (string thePropertyName)
28     {
29       if (PropertyChanged != null)
30       {
31         PropertyChanged (this, new PropertyChangedEventArgs (thePropertyName));
32       }
33     }
34 
MainWindow()35     public MainWindow ()
36     {
37       InitializeComponent ();
38 
39       StatusBarText = String.Empty;
40       IsHlrOffPushed = false;
41       IsHlrOnPushed = true;
42       IsZoomWinEnabled = true;
43 
44       #region menu operations
45 
46       CommandBinding aBind_New = new CommandBinding (IECommands.New);
47       aBind_New.Executed += NewCommand_Executed;
48       CommandBindings.Add (aBind_New);
49 
50       CommandBinding aBind_Close = new CommandBinding (IECommands.Close);
51       aBind_Close.Executed += CloseCommand_Executed;
52       aBind_Close.CanExecute += CloseCommand_CanExecute;
53       CommandBindings.Add (aBind_Close);
54 
55       CommandBinding aBind_Quit = new CommandBinding (IECommands.Quit);
56       aBind_Quit.Executed += QuitCommand_Executed;
57       CommandBindings.Add (aBind_Quit);
58 
59       CommandBinding aBind_About = new CommandBinding (IECommands.About);
60       aBind_About.Executed += AboutCommand_Executed;
61       CommandBindings.Add (aBind_About);
62 
63       #endregion
64     }
65 
66     private String myStatusBarText;
67     public String StatusBarText
68     {
69       get
70       {
71         return myStatusBarText;
72       }
73       private set
74       {
75         myStatusBarText = value;
76         RaisePropertyChanged ("StatusBarText");
77       }
78     }
79 
80     private bool isHlrOffPushed;
81     public Boolean IsHlrOffPushed
82     {
83       get
84       {
85         return isHlrOffPushed;
86       }
87       set
88       {
89         isHlrOffPushed = value;
90         RaisePropertyChanged ("isHlrOffPushed");
91       }
92     }
93 
94     private bool isHlrOnPushed;
95     public Boolean IsHlrOnPushed
96     {
97       get
98       {
99         return isHlrOnPushed;
100       }
101       set
102       {
103         isHlrOnPushed = value;
104         RaisePropertyChanged ("IsHlrOnPushed");
105       }
106     }
107 
108     private bool isZoomWinEnabled;
109     public Boolean IsZoomWinEnabled
110     {
111       get
112       {
113         return isZoomWinEnabled;
114       }
115       set
116       {
117         isZoomWinEnabled = value;
118         RaisePropertyChanged ("IsZoomWinEnabled");
119       }
120     }
121 
122     private OCCViewer ActiveViewer
123     {
124       get
125       {
126         if (!IsDocumentOpen)
127         {
128           return null;
129         }
130 
131         Grid aGrid = (ViewPanel.SelectedContent) as Grid;
132 
133         if (aGrid == null)
134         {
135           return null;
136         }
137 
138         return Map[aGrid].Viewer;
139       }
140     }
141 
142     public Boolean IsDocumentOpen
143     {
144       get
145       {
146         return ViewPanel.Items.Count > 0;
147       }
148     }
149 
150     private int myDocumentCounter = 1;
151 
152     Dictionary<Grid, D3DViewer> Map = new Dictionary<Grid, D3DViewer> ();
153 
NewCommand_Executed(object sender, ExecutedRoutedEventArgs e)154     private void NewCommand_Executed (object sender, ExecutedRoutedEventArgs e)
155     {
156       D3DViewer aViwer = new D3DViewer ();
157 
158       Grid g = new Grid ();
159 
160       Map.Add (g, aViwer);
161 
162       ImageBrush anImage = new ImageBrush (aViwer.Image);
163 
164       //anImage.RelativeTransform = new ScaleTransform (1.0, -1.0, 0.5, 0.5);
165 
166       g.Background = anImage;
167       g.MouseMove += new MouseEventHandler (g_MouseMove);
168       g.MouseDown += new MouseButtonEventHandler (g_MouseDown);
169       g.MouseUp += new MouseButtonEventHandler (g_MouseUp);
170 
171       g.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
172 
173 
174       TabItem aNewTab = new TabItem ();
175       aNewTab.Content = g;
176 
177       aNewTab.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
178       aNewTab.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch;
179       aNewTab.VerticalContentAlignment = System.Windows.VerticalAlignment.Stretch;
180 
181       g.SizeChanged += new SizeChangedEventHandler (g_SizeChanged);
182 
183       aNewTab.IsSelected = true;
184       aNewTab.Header = "Document " + myDocumentCounter.ToString ();
185       myDocumentCounter++;
186 
187       ViewPanel.Items.Add (aNewTab);
188 
189       ViewPanel.Focus ();
190 
191       // update XAML property
192       RaisePropertyChanged ("IsDocumentOpen");
193     }
194 
g_SizeChanged(object sender, SizeChangedEventArgs e)195     void g_SizeChanged (object sender, SizeChangedEventArgs e)
196     {
197       if (!IsDocumentOpen)
198         return;
199 
200       Grid aGrid = (ViewPanel.SelectedContent) as Grid;
201 
202       if (aGrid == null)
203         return;
204 
205       Map[aGrid].Resize (Convert.ToInt32 (e.NewSize.Width),
206                          Convert.ToInt32 (e.NewSize.Height));
207     }
208 
g_MouseUp(object sender, MouseButtonEventArgs e)209     void g_MouseUp (object sender, MouseButtonEventArgs e)
210     {
211       Grid aGrid = (ViewPanel.SelectedContent) as Grid;
212 
213       if (aGrid != null)
214       {
215           ActiveViewer.OnMouseUp(aGrid, e);
216       }
217     }
218 
g_MouseDown(object sender, MouseButtonEventArgs e)219     void g_MouseDown (object sender, MouseButtonEventArgs e)
220     {
221       Grid aGrid = (ViewPanel.SelectedContent) as Grid;
222 
223       if (aGrid != null)
224       {
225           ActiveViewer.OnMouseDown(ViewPanel, e);
226       }
227     }
228 
g_MouseMove(object sender, MouseEventArgs e)229     void g_MouseMove (object sender, MouseEventArgs e)
230     {
231       Grid aGrid = (ViewPanel.SelectedContent) as Grid;
232 
233       if (aGrid != null)
234       {
235         ActiveViewer.OnMouseMove (aGrid, e);
236       }
237     }
238 
CloseCommand_Executed(object sender, ExecutedRoutedEventArgs e)239     private void CloseCommand_Executed (object sender, ExecutedRoutedEventArgs e)
240     {
241       if (ViewPanel.Items.Count > 0)
242       {
243         Grid aGrid = (ViewPanel.SelectedContent) as Grid;
244 
245         if (aGrid == null)
246         {
247           return;
248         }
249 
250         Map[aGrid].StopRenderingScene ();
251 
252         ViewPanel.Items.Remove (ViewPanel.SelectedItem);
253       }
254 
255       // update XAML property
256       RaisePropertyChanged ("IsDocumentOpen");
257     }
258 
CloseCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)259     private void CloseCommand_CanExecute (object sender, CanExecuteRoutedEventArgs e)
260     {
261       e.CanExecute = IsDocumentOpen;
262     }
263 
QuitCommand_Executed(object sender, ExecutedRoutedEventArgs e)264     private void QuitCommand_Executed (object sender, ExecutedRoutedEventArgs e)
265     {
266       this.Close ();
267     }
268 
ImportBRep_Click(object sender, RoutedEventArgs e)269     private void ImportBRep_Click (object sender, RoutedEventArgs e)
270     {
271       if (ActiveViewer != null)
272       {
273         ActiveViewer.ImportModel (ModelFormat.BREP);
274       }
275     }
276 
ImportIges_Click(object sender, RoutedEventArgs e)277     private void ImportIges_Click (object sender, RoutedEventArgs e)
278     {
279       if (ActiveViewer != null)
280       {
281         ActiveViewer.ImportModel (ModelFormat.IGES);
282       }
283     }
284 
ImportStep_Click(object sender, RoutedEventArgs e)285     private void ImportStep_Click (object sender, RoutedEventArgs e)
286     {
287       if (ActiveViewer != null)
288       {
289         ActiveViewer.ImportModel (ModelFormat.STEP);
290       }
291     }
292 
ExportBRep_Click(object sender, RoutedEventArgs e)293     private void ExportBRep_Click (object sender, RoutedEventArgs e)
294     {
295       if (ActiveViewer != null)
296       {
297         ActiveViewer.ExportModel (ModelFormat.BREP);
298       }
299     }
300 
ExportStep_Click(object sender, RoutedEventArgs e)301     private void ExportStep_Click (object sender, RoutedEventArgs e)
302     {
303       if (ActiveViewer != null)
304       {
305         ActiveViewer.ExportModel (ModelFormat.STEP);
306       }
307     }
308 
ExportIges_Click(object sender, RoutedEventArgs e)309     private void ExportIges_Click (object sender, RoutedEventArgs e)
310     {
311       if (ActiveViewer != null)
312       {
313         ActiveViewer.ExportModel (ModelFormat.IGES);
314       }
315     }
316 
ExportStl_Click(object sender, RoutedEventArgs e)317     private void ExportStl_Click (object sender, RoutedEventArgs e)
318     {
319       if (ActiveViewer != null)
320       {
321         ActiveViewer.ExportModel (ModelFormat.STL);
322       }
323     }
324 
ExportVrml_Click(object sender, RoutedEventArgs e)325     private void ExportVrml_Click (object sender, RoutedEventArgs e)
326     {
327       if (ActiveViewer != null)
328       {
329         ActiveViewer.ExportModel (ModelFormat.VRML);
330       }
331     }
332 
ExportImage_Click(object sender, RoutedEventArgs e)333     private void ExportImage_Click (object sender, RoutedEventArgs e)
334     {
335       if (ActiveViewer != null)
336       {
337         ActiveViewer.ExportModel (ModelFormat.IMAGE);
338       }
339     }
340 
FitAllBtn_Click(object sender, RoutedEventArgs e)341     private void FitAllBtn_Click (object sender, RoutedEventArgs e)
342     {
343       if (ActiveViewer != null)
344       {
345         ActiveViewer.FitAll ();
346       }
347     }
348 
ZoomWindowBtn_Click(object sender, RoutedEventArgs e)349     private void ZoomWindowBtn_Click (object sender, RoutedEventArgs e)
350     {
351       if (ActiveViewer != null)
352       {
353         IsZoomWinEnabled = false;
354         ActiveViewer.ZoomWindow ();
355       }
356     }
357 
DynamicZoomingBtn_Click(object sender, RoutedEventArgs e)358     private void DynamicZoomingBtn_Click (object sender, RoutedEventArgs e)
359     {
360       if (ActiveViewer != null)
361       {
362         ActiveViewer.DynamicZooming ();
363       }
364     }
365 
DynamicPanningBtn_Click(object sender, RoutedEventArgs e)366     private void DynamicPanningBtn_Click (object sender, RoutedEventArgs e)
367     {
368       if (ActiveViewer != null)
369       {
370         ActiveViewer.DynamicPanning ();
371       }
372     }
373 
GlobalPanningBtn_Click(object sender, RoutedEventArgs e)374     private void GlobalPanningBtn_Click (object sender, RoutedEventArgs e)
375     {
376       if (ActiveViewer != null)
377       {
378         ActiveViewer.GlobalPanning ();
379       }
380     }
381 
FrontBtn_Click(object sender, RoutedEventArgs e)382     private void FrontBtn_Click (object sender, RoutedEventArgs e)
383     {
384       if (ActiveViewer != null)
385       {
386         ActiveViewer.FrontView ();
387       }
388     }
389 
BackBtn_Click(object sender, RoutedEventArgs e)390     private void BackBtn_Click (object sender, RoutedEventArgs e)
391     {
392       if (ActiveViewer != null)
393       {
394         ActiveViewer.BackView ();
395       }
396     }
397 
TopBtn_Click(object sender, RoutedEventArgs e)398     private void TopBtn_Click (object sender, RoutedEventArgs e)
399     {
400       if (ActiveViewer != null)
401       {
402         ActiveViewer.TopView ();
403       }
404     }
405 
BottomBtn_Click(object sender, RoutedEventArgs e)406     private void BottomBtn_Click (object sender, RoutedEventArgs e)
407     {
408       if (ActiveViewer != null)
409       {
410         ActiveViewer.BottomView ();
411       }
412     }
413 
LeftBtn_Click(object sender, RoutedEventArgs e)414     private void LeftBtn_Click (object sender, RoutedEventArgs e)
415     {
416       if (ActiveViewer != null)
417       {
418         ActiveViewer.LeftView ();
419       }
420     }
421 
RightBtn_Click(object sender, RoutedEventArgs e)422     private void RightBtn_Click (object sender, RoutedEventArgs e)
423     {
424       if (ActiveViewer != null)
425       {
426         ActiveViewer.RightView ();
427       }
428     }
429 
AxoBtn_Click(object sender, RoutedEventArgs e)430     private void AxoBtn_Click (object sender, RoutedEventArgs e)
431     {
432       if (ActiveViewer != null)
433       {
434         ActiveViewer.AxoView ();
435       }
436     }
437 
ResetBtn_Click(object sender, RoutedEventArgs e)438     private void ResetBtn_Click (object sender, RoutedEventArgs e)
439     {
440       if (ActiveViewer != null)
441       {
442         ActiveViewer.Reset ();
443       }
444     }
445 
DynamicRotationBtn_Click(object sender, RoutedEventArgs e)446     private void DynamicRotationBtn_Click (object sender, RoutedEventArgs e)
447     {
448       if (ActiveViewer != null)
449       {
450         ActiveViewer.DynamicRotation ();
451       }
452     }
453 
HiddenOffBtn_Click(object sender, RoutedEventArgs e)454     private void HiddenOffBtn_Click (object sender, RoutedEventArgs e)
455     {
456       IsHlrOffPushed = true;
457       IsHlrOnPushed = false;
458       if (ActiveViewer != null)
459       {
460         ActiveViewer.HiddenOff ();
461       }
462     }
463 
HiddenOnBtn_Click(object sender, RoutedEventArgs e)464     private void HiddenOnBtn_Click (object sender, RoutedEventArgs e)
465     {
466       IsHlrOffPushed = false;
467       IsHlrOnPushed = true;
468       if (ActiveViewer != null)
469       {
470         ActiveViewer.HiddenOn ();
471       }
472     }
473 
AboutCommand_Executed(object sender, ExecutedRoutedEventArgs e)474     private void AboutCommand_Executed (object sender, ExecutedRoutedEventArgs e)
475     {
476       AboutDialog aDlg = new AboutDialog ();
477       aDlg.ShowDialog ();
478     }
479 
ToolBar_MouseEnter(object sender, MouseEventArgs e)480     private void ToolBar_MouseEnter (object sender, MouseEventArgs e)
481     {
482       StatusBarText = "Toolbar";
483     }
484 
DocumentToolBar_MouseEnter(object sender, MouseEventArgs e)485     private void DocumentToolBar_MouseEnter (object sender, MouseEventArgs e)
486     {
487       StatusBarText = "Document toolbar";
488     }
489 
ViewToolBar_MouseEnter(object sender, MouseEventArgs e)490     private void ViewToolBar_MouseEnter (object sender, MouseEventArgs e)
491     {
492       StatusBarText = "View toolbar";
493     }
494 
ToolBar_MouseLeave(object sender, MouseEventArgs e)495     private void ToolBar_MouseLeave (object sender, MouseEventArgs e)
496     {
497       StatusBarText = "";
498     }
499 
OnZoomingFinished(object sender, EventArgs e)500     public void OnZoomingFinished (object sender, EventArgs e)
501     {
502       IsZoomWinEnabled = true;
503     }
504 
505     public bool IsWireframeEnabled
506     {
507       get
508       {
509         if (ActiveViewer != null)
510         {
511           return ActiveViewer.IsWireframeEnabled;
512         }
513         return false;
514       }
515     }
516 
Wireframe_Click(object sender, RoutedEventArgs e)517     private void Wireframe_Click (object sender, RoutedEventArgs e)
518     {
519       if (ActiveViewer != null)
520       {
521         ActiveViewer.Wireframe ();
522       }
523     }
524 
Shading_Click(object sender, RoutedEventArgs e)525     private void Shading_Click (object sender, RoutedEventArgs e)
526     {
527       if (ActiveViewer != null)
528       {
529         ActiveViewer.Shading ();
530       }
531     }
532 
533     public bool IsShadingEnabled
534     {
535       get
536       {
537         if (ActiveViewer != null)
538         {
539           return ActiveViewer.IsShadingEnabled;
540         }
541         return false;
542       }
543     }
544 
Color_Click(object sender, RoutedEventArgs e)545     private void Color_Click (object sender, RoutedEventArgs e)
546     {
547       if (ActiveViewer != null)
548       {
549         ActiveViewer.Color ();
550       }
551     }
552 
553     public bool IsColorEnabled
554     {
555       get
556       {
557         if (ActiveViewer != null)
558         {
559           return ActiveViewer.IsColorEnabled;
560         }
561         return false;
562       }
563     }
564 
Material_Click(object sender, RoutedEventArgs e)565     private void Material_Click (object sender, RoutedEventArgs e)
566     {
567       if (ActiveViewer != null)
568       {
569         ActiveViewer.Material ();
570       }
571     }
572 
573     public bool IsMaterialEnabled
574     {
575       get
576       {
577         if (ActiveViewer != null)
578         {
579           return ActiveViewer.IsMaterialEnabled;
580         }
581         return false;
582       }
583     }
584 
Transparency_Click(object sender, RoutedEventArgs e)585     private void Transparency_Click (object sender, RoutedEventArgs e)
586     {
587       if (ActiveViewer != null)
588       {
589         ActiveViewer.Transparency ();
590       }
591     }
592 
593     public bool IsTransparencyEnabled
594     {
595       get
596       {
597         if (ActiveViewer != null)
598         {
599           return ActiveViewer.IsTransparencyEnabled;
600         }
601         return false;
602       }
603     }
604 
Delete_Click(object sender, RoutedEventArgs e)605     private void Delete_Click (object sender, RoutedEventArgs e)
606     {
607       if (ActiveViewer != null)
608       {
609         ActiveViewer.Delete ();
610       }
611     }
612 
Background_Click(object sender, RoutedEventArgs e)613     private void Background_Click(object sender, RoutedEventArgs e)
614     {
615         if (ActiveViewer != null)
616         {
617             ActiveViewer.Background();
618         }
619     }
620 
621     public bool IsDeleteEnabled
622     {
623       get
624       {
625         if (ActiveViewer != null)
626         {
627           return ActiveViewer.IsDeleteEnabled;
628         }
629         return false;
630       }
631     }
632 
AvaliabiltyOfOperationToolbarChanged()633     private void AvaliabiltyOfOperationToolbarChanged ()
634     {
635       RaisePropertyChanged ("IsWireframeEnabled");
636       RaisePropertyChanged ("IsShadingEnabled");
637       RaisePropertyChanged ("IsTransparencyEnabled");
638       RaisePropertyChanged ("IsColorEnabled");
639       RaisePropertyChanged ("IsMaterialEnabled");
640       RaisePropertyChanged ("IsDeleteEnabled");
641     }
642 
OnAvaliabiltyOfOperationsChanged(object sender, EventArgs e)643     public void OnAvaliabiltyOfOperationsChanged (object sender, EventArgs e)
644     {
645       AvaliabiltyOfOperationToolbarChanged ();
646     }
647 
OnViewerChanged(object sender, SelectionChangedEventArgs e)648     private void OnViewerChanged (object sender, SelectionChangedEventArgs e)
649     {
650       if (e.RemovedItems.Count > 0)
651       {
652         Grid aHost = ((e.RemovedItems[0] as TabItem).Content) as Grid;
653         if (aHost == null)
654         {
655           return;
656         }
657 
658         OCCViewer aViewer = Map[aHost].Viewer;
659         if (aViewer != null)
660         {
661           aViewer.ZoomingFinished -= new EventHandler (OnZoomingFinished);
662           aViewer.AvaliabiltyOfOperationsChanged -= new EventHandler (OnAvaliabiltyOfOperationsChanged);
663         }
664       }
665 
666       if (e.AddedItems.Count > 0)
667       {
668         Grid aHost = ((e.AddedItems[0] as TabItem).Content) as Grid;
669         if (aHost == null)
670         {
671           return;
672         }
673 
674         OCCViewer aViewer = Map[aHost].Viewer;
675         if (aViewer != null)
676         {
677           aViewer.ZoomingFinished += new EventHandler (OnZoomingFinished);
678           aViewer.AvaliabiltyOfOperationsChanged += new EventHandler (OnAvaliabiltyOfOperationsChanged);
679         }
680       }
681 
682       AvaliabiltyOfOperationToolbarChanged ();
683     }
684 
OnContextOpened(object sender, RoutedEventArgs e)685     private void OnContextOpened(object sender, RoutedEventArgs e)
686     {
687         this.WireframeItem.IsEnabled    = IsWireframeEnabled;
688         this.ShadingItem.IsEnabled      = IsShadingEnabled;
689         this.ColorItem.IsEnabled        = IsColorEnabled;
690         this.MaterialItem.IsEnabled     = IsMaterialEnabled;
691         this.TransparencyItem.IsEnabled = IsTransparencyEnabled;
692         this.DeleteItem.IsEnabled       = IsDeleteEnabled;
693     }
694   }
695 }
696