1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-03 17:56:21 +03:00
occt/samples/CSharp/WPF_WinForms/MainWindow.xaml.cs
dln 15534713ba 0024699: Visualization - prototype interoperation of TKOpenGl viewer with Direct3D viewer
Add new C# sample which allow to render the OCCT scene to a Direct3D context in a WPF application.
DirectX SDK is required in order to build this sample.
2014-10-10 15:06:42 +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_WinForms
{
/// <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();
}
}
}
}