2017-04-30 7 views
0

HelixViewport3Dで異なる種類の3Dオブジェクトを追加しました。私の質問は、3Dオブジェクト/モデルをファイルに保存し、典型的なCADアプリケーションのように遅く開く方法です。ビューポートの3Dオブジェクトをファイルに保存して遅く開くにはどうすればいいですか?

HelixViewport3Dは、コントロールUserControl.xamlでユーザー定義されています。

ユーザーコントロールは、次のようdefiendです:

<UserControl x:Class="SubWindows.UserControl1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:HelixToolkit="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf" 
     Height="350" Width="525" MouseRightButtonDown="OnMouseRightButtonDown" TabIndex="0" MouseMove="UserControl_MouseMove" Opacity="1"> 
<Grid> 
<HelixToolkit:HelixViewport3D x:Name="ViewPort" ZoomExtentsWhenLoaded="True" ItemsSource="{Binding}"> 
     <HelixToolkit:SunLight Brightness="0.4" Ambient="0.1" /> 
     <ModelVisual3D Content="{Binding Model}"/> 
     <ModelVisual3D x:Name="SolidModels"/> 
     <ModelVisual3D x:Name="ScreenLineModels"/> 
     <ModelVisual3D x:Name="DimLinesModels"/> 
     <ModelVisual3D x:Name="TagsModels"/> 
    </HelixToolkit:HelixViewport3D> 
    <Canvas Name="TagsOverlay" IsHitTestVisible="False" ClipToBounds="False"/> 
    <Canvas Name="DimsOverlay" IsHitTestVisible="False" ClipToBounds="False" /> 
</Grid> 

次のように保存したファイルのイベントは次のとおりです。

private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     SaveFileDialog saveFileDialog = new SaveFileDialog(); 
     saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
     saveFileDialog.Filter = "pvp Files (*.pvp)|*.pvp|Text Files (*.xaml)|*.xaml|All Files (*.*)|*.*"; 

     if (saveFileDialog.ShowDialog(this) == DialogResult.OK) 
     { 
      string FileName = saveFileDialog.FileName; 
      string fileNameExtention = System.IO.Path.GetExtension(FileName); 
      fileNameExtention = fileNameExtention.ToLower(); 
      if (fileNameExtention == ".xaml") 
      { 
       uc.ViewPort.Export(FileName); 
      } 
     } 
    } 

"私たち" は、インスタンスUserControl1あるUserControl1のUCと定義=新しいUserControl1();ファイルを保存するためにsaveToolStripMenuItem_Clickを実行すると、以下のスナップショットとしてエラーが発生します。

enter image description here

しかし、ビューポートの部分はXAML形式で保存されました。

問題を解決するためのコメントがあれば幸いです。

答えて

0

まず、Exportport()[を使用してビューポート3Dを書き出す必要があります。キー値が のXAMLファイル(モデルを.xamlにエクスポートする場合)を与えるHelix Vieport3Dのviewport.Export(/sample.xaml)メソッド。エクスポートしたXAMLファイルを後でプロジェクトディレクトリに追加し、以下を使用しますコード。

UserConrol.xamlのコード

HelixViewport3D viewport; //Extra viewport to store the childrens 
     viewport= (HelixViewport3D)FindResource("Model"); 
     // "Model" is the key value of my exported XAML file 

     List<Visual3D> items = new List<Visual3D>(); // List is use to store the childrens of ResourceDirectories xaml. 

     //Adds the children inside List 
     for (int i=(viewport.Children.Count - 1);i>=0;i--) 
     { 
      items.Add(viewport.Children[i]); 
      viewport.Children.RemoveAt(i); 
     } 

     //viewport3D.Children.Clear(); 

     foreach(Visual3D item in items) 
     { 
      viewport3D.Children.Add(item); 
     } 
XAMLファイルをインポートするため

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="<Path towards your exported xaml file>\sample.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

</UserControl.Resources> 

コードを提出

関連する問題