1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-04 18:06:22 +03:00
occt/samples/CSharp/WPF/MainWindow.xaml.cs
vdn d1a2fee8ed 0024147: Update of CSharp sample
Overall revision of of CSharp sample code:
- Pure C++ project "OCC" deleted as unnecessary
- C++/CLI project "shell" renamed to OCCTProxy and refactored to implement all required interface to OCCT functionality.
- In About dialog, date corrected in Copyright statement
- CSharp files re-layouted with 2 spaces indentation
- ReadMe converted to MarkDown format and revised
- Generation of names of views refactored to avoid calling C++ level
- Project files corrected to run on 64-bit systems
- Batch scripts refactored to use OCCT default configuration

WPF front-end added to demonstrate usage of OCCT in WPF applications.
WPF sample was modified, operation Export has been fixed
Exception "Cannot create this file", which appeared by export to image format, has been corrected.
Option "Export image to .xwd" removed.
2013-10-25 13:45:47 +04:00

615 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Windows.Forms.Integration;
namespace IE_WPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged( string thePropertyName )
{
if ( PropertyChanged != null )
{
PropertyChanged( this, new PropertyChangedEventArgs( thePropertyName ) );
}
}
public MainWindow()
{
InitializeComponent();
StatusBarText = String.Empty;
IsHlrOffPushed = false;
IsHlrOnPushed = true;
IsZoomWinEnabled = true;
#region menu operations
CommandBinding aBind_New = new CommandBinding( IECommands.New );
aBind_New.Executed += NewCommand_Executed;
CommandBindings.Add( aBind_New );
CommandBinding aBind_Close = new CommandBinding( IECommands.Close );
aBind_Close.Executed += CloseCommand_Executed;
aBind_Close.CanExecute += CloseCommand_CanExecute;
CommandBindings.Add( aBind_Close );
CommandBinding aBind_Quit = new CommandBinding( IECommands.Quit );
aBind_Quit.Executed += QuitCommand_Executed;
CommandBindings.Add( aBind_Quit );
CommandBinding aBind_About = new CommandBinding( IECommands.About );
aBind_About.Executed += AboutCommand_Executed;
CommandBindings.Add( aBind_About );
# endregion
PreviewKeyDown += new KeyEventHandler( OnPreviewKeyDown );
PreviewKeyUp += new KeyEventHandler( OnPreviewKeyUp );
}
private String myStatusBarText;
public String StatusBarText
{
get
{
return myStatusBarText;
}
private set
{
myStatusBarText = value;
RaisePropertyChanged( "StatusBarText" );
}
}
private bool isHlrOffPushed;
public Boolean IsHlrOffPushed
{
get
{
return isHlrOffPushed;
}
set
{
isHlrOffPushed = value;
RaisePropertyChanged("isHlrOffPushed");
}
}
private bool isHlrOnPushed;
public Boolean IsHlrOnPushed
{
get
{
return isHlrOnPushed;
}
set
{
isHlrOnPushed = value;
RaisePropertyChanged("IsHlrOnPushed");
}
}
private bool isZoomWinEnabled;
public Boolean IsZoomWinEnabled
{
get
{
return isZoomWinEnabled;
}
set
{
isZoomWinEnabled = value;
RaisePropertyChanged("IsZoomWinEnabled");
}
}
private OCCViewer ActiveViewer
{
get
{
if ( !IsDocumentOpen )
{
return null;
}
WindowsFormsHost aHost = ( ViewPanel.SelectedContent ) as WindowsFormsHost;
if( aHost == null )
{
return null;
}
return aHost.Child as OCCViewer;
}
}
public Boolean IsDocumentOpen
{
get
{
return ViewPanel.Items.Count > 0;
}
}
private int myDocumentCounter = 1;
private void NewCommand_Executed( object sender, ExecutedRoutedEventArgs e )
{
WindowsFormsHost aHost = new WindowsFormsHost();
OCCViewer aForm = new OCCViewer();
aForm.Show();
aHost.Child = aForm;
TabItem aNewTab = new TabItem();
aNewTab.Content = aHost;
aNewTab.IsSelected = true;
aNewTab.Header = "Document " + myDocumentCounter.ToString();
myDocumentCounter++;
ViewPanel.Items.Add( aNewTab );
// update XAML property
RaisePropertyChanged("IsDocumentOpen");
}
private void CloseCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
if ( ViewPanel.Items.Count > 0 )
{
ViewPanel.Items.Remove( ViewPanel.SelectedItem );
}
// update XAML property
RaisePropertyChanged( "IsDocumentOpen" );
}
private void CloseCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = IsDocumentOpen;
}
private void QuitCommand_Executed( object sender, ExecutedRoutedEventArgs e )
{
this.Close();
}
private void ImportBRep_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ImportModel( ModelFormat.BREP );
}
}
private void ImportIges_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ImportModel( ModelFormat.IGES );
}
}
private void ImportStep_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ImportModel( ModelFormat.STEP );
}
}
private void ExportBRep_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ExportModel( ModelFormat.BREP );
}
}
private void ExportStep_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ExportModel( ModelFormat.STEP );
}
}
private void ExportIges_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ExportModel( ModelFormat.IGES );
}
}
private void ExportStl_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ExportModel( ModelFormat.STL );
}
}
private void ExportVrml_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ExportModel( ModelFormat.VRML );
}
}
private void ExportImage_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.ExportModel( ModelFormat.IMAGE );
}
}
private void FitAllBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.FitAll();
}
}
private void ZoomWindowBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
IsZoomWinEnabled = false;
ActiveViewer.ZoomWindow();
}
}
private void DynamicZoomingBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.DynamicZooming();
}
}
private void DynamicPanningBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.DynamicPanning();
}
}
private void GlobalPanningBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.GlobalPanning();
}
}
private void FrontBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.FrontView();
}
}
private void BackBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.BackView();
}
}
private void TopBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.TopView();
}
}
private void BottomBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.BottomView();
}
}
private void LeftBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.LeftView();
}
}
private void RightBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.RightView();
}
}
private void AxoBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.AxoView();
}
}
private void ResetBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Reset();
}
}
private void DynamicRotationBtn_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.DynamicRotation();
}
}
private void HiddenOffBtn_Click( object sender, RoutedEventArgs e )
{
IsHlrOffPushed = true;
IsHlrOnPushed = false;
if ( ActiveViewer != null )
{
ActiveViewer.HiddenOff();
}
}
private void HiddenOnBtn_Click( object sender, RoutedEventArgs e )
{
IsHlrOffPushed = false;
IsHlrOnPushed = true;
if (ActiveViewer != null)
{
ActiveViewer.HiddenOn();
}
}
private void AboutCommand_Executed( object sender, ExecutedRoutedEventArgs e )
{
AboutDialog aDlg = new AboutDialog();
aDlg.ShowDialog();
}
private void ToolBar_MouseEnter( object sender, MouseEventArgs e )
{
StatusBarText = "Toolbar";
}
private void DocumentToolBar_MouseEnter(object sender, MouseEventArgs e)
{
StatusBarText = "Document toolbar";
}
private void ViewToolBar_MouseEnter(object sender, MouseEventArgs e)
{
StatusBarText = "View toolbar";
}
private void ToolBar_MouseLeave( object sender, MouseEventArgs e )
{
StatusBarText = "";
}
public void OnZoomingFinished( object sender, EventArgs e )
{
IsZoomWinEnabled = true;
}
public bool IsWireframeEnabled
{
get
{
if ( ActiveViewer != null )
{
return ActiveViewer.IsWireframeEnabled;
}
return false;
}
}
private void Wireframe_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Wireframe();
}
}
private void Shading_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Shading();
}
}
public bool IsShadingEnabled
{
get
{
if ( ActiveViewer != null )
{
return ActiveViewer.IsShadingEnabled;
}
return false;
}
}
private void Color_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Color();
}
}
public bool IsColorEnabled
{
get
{
if ( ActiveViewer != null )
{
return ActiveViewer.IsColorEnabled;
}
return false;
}
}
private void Material_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Material();
}
}
public bool IsMaterialEnabled
{
get
{
if ( ActiveViewer != null )
{
return ActiveViewer.IsMaterialEnabled;
}
return false;
}
}
private void Transparency_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Transparency();
}
}
public bool IsTransparencyEnabled
{
get
{
if ( ActiveViewer != null )
{
return ActiveViewer.IsTransparencyEnabled;
}
return false;
}
}
private void Delete_Click( object sender, RoutedEventArgs e )
{
if ( ActiveViewer != null )
{
ActiveViewer.Delete();
}
}
public bool IsDeleteEnabled
{
get
{
if ( ActiveViewer != null )
{
return ActiveViewer.IsDeleteEnabled;
}
return false;
}
}
private void AvaliabiltyOfOperationToolbarChanged()
{
RaisePropertyChanged( "IsWireframeEnabled" );
RaisePropertyChanged( "IsShadingEnabled" );
RaisePropertyChanged( "IsTransparencyEnabled" );
RaisePropertyChanged( "IsColorEnabled" );
RaisePropertyChanged( "IsMaterialEnabled" );
RaisePropertyChanged( "IsDeleteEnabled" );
}
public void OnAvaliabiltyOfOperationsChanged( object sender, EventArgs e )
{
AvaliabiltyOfOperationToolbarChanged();
}
private void OnViewerChanged( object sender, SelectionChangedEventArgs e )
{
if ( e.RemovedItems.Count > 0 )
{
WindowsFormsHost aHost = ( ( e.RemovedItems[0] as TabItem).Content ) as WindowsFormsHost;
if( aHost == null )
{
return;
}
OCCViewer aViewer = aHost.Child as OCCViewer;
if( aViewer != null )
{
aViewer.ZoomingFinished -= new EventHandler( OnZoomingFinished );
aViewer.AvaliabiltyOfOperationsChanged -= new EventHandler( OnAvaliabiltyOfOperationsChanged );
}
}
if ( e.AddedItems.Count > 0 )
{
WindowsFormsHost aHost = ( (e.AddedItems[0] as TabItem).Content ) as WindowsFormsHost;
if ( aHost == null )
{
return;
}
OCCViewer aViewer = aHost.Child as OCCViewer;
if ( aViewer != null )
{
aViewer.ZoomingFinished += new EventHandler( OnZoomingFinished );
aViewer.AvaliabiltyOfOperationsChanged += new EventHandler( OnAvaliabiltyOfOperationsChanged );
}
}
AvaliabiltyOfOperationToolbarChanged();
}
private void OnPreviewKeyDown( object sender, KeyEventArgs args )
{
if ( ActiveViewer != null )
{
ActiveViewer.OnKeyDown( args.Key );
}
}
private void OnPreviewKeyUp( object sender, KeyEventArgs args )
{
if ( ActiveViewer != null )
{
ActiveViewer.OnKeyUp();
}
}
}
}