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