mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
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.
This commit is contained in:
614
samples/CSharp/WPF_WinForms/MainWindow.xaml.cs
Normal file
614
samples/CSharp/WPF_WinForms/MainWindow.xaml.cs
Normal file
@@ -0,0 +1,614 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user