2017-01-26 4 views
1

Я настоящий новый мир в мире helixtoolkit и Graphics 3D.Как изменить размер FileModelVisual3D в видовом экране с помощью Codebehind WPF

Что я делаю:

У меня есть домашние задания закодировать программка, которая позволяет украсить ChristmasTree с различными видами отделки.

Один вид украшения - свеча. Проблема. Свеча слишком мала по отношению к дереву.

Мой вопрос:

Как я могу изменить размер моего FileModelVisual3D внутри view_tree с кодом позади?

private void view_tree_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     if (typeOfdecoration == 1) 
     { 
      Decoration1Visual3D decoration; 
      decoration = new Decoration1Visual3D(); 
      decoration.Fill = Brushes.Red; 
      Point3D? pt = view_tree.FindNearestPoint(e.GetPosition(view_tree)); 
      if (pt.HasValue) 
      { 
       Point3D p = pt.Value; 
       decoration.Transform = new TranslateTransform3D(p.X, p.Y, p.Z); 
       view_tree.Children.Add(decoration); 
       MessageBox.Show(decoration.ToString()); 
       decoration = null; 
      } 
     } 
     else if (typeOfdecoration == 2) 
     { 
      FileModelVisual3D fmv3D = new FileModelVisual3D(); 
      fmv3D.Source = "C:/Users/flori/Documents/Schulisches/WFSST/christmastree_burtscherflorian/christmastree_burtscherflorian/2245176fd65db964db79f88f870f8154/candle.3DS"; 

      Point3D? pt = view_tree.FindNearestPoint(e.GetPosition(view_tree)); 
      if (pt.HasValue) 
      { 
       Point3D p = pt.Value; 

       fmv3D.Transform = new TranslateTransform3D(p.X, p.Y, p.Z); 

       view_tree.Children.Add(fmv3D); 

       MessageBox.Show(fmv3D.ToString()); 
       fmv3D = null; 
      } 
     } 

    } 

XAML-код

<helix:HelixViewport3D x:Name="view_tree" Camera="{helix:PerspectiveCamera 5.3,-12.3,900,-6.3,11,-6.6}" CameraChanged="view_tree_CameraChanged" MouseDown="view_tree_MouseDown" Grid.Row="0" Grid.Column="0"> 
     <helix:SunLight/> 
     <helix:FileModelVisual3D x:Name="model_tree" Source="c:/Users/flori/Documents/Schulisches/WFSST/christmastree_burtscherflorian/christmastree_burtscherflorian/Conifers tree 1 N100616.3DS"/> 
    </helix:HelixViewport3D> 
    <StackPanel Grid.Row="0" Grid.Column="1"> 
     <RadioButton Name="rb_candle" Margin="10,10,10,0" IsChecked="True" Checked="rb_candle_Checked">Kerze</RadioButton> 
     <RadioButton Name="rb_ball" Margin="10,10,10,10" Checked="rb_candle_Checked">Kugel</RadioButton> 
    </StackPanel> 

Надежда, что anybode может помочь! Я знаю, что для других это легко, но у меня нет опыта в 3D-кодировании.

Благодаря

ответ

1

В дополнение к вашему TranslateTransform3D, нанесите ScaleTransform3D. Поместите их обоих в Transform3DGroup и использовать это как Transform на вашем FileModelVisual3D:

double factor = 2.0; 
var transformGroup = new Transform3DGroup(); 
transformGroup.Children.Add(new TranslateTransform3D(p.X, p.Y, p.Z)); 
transformGroup.Children.Add(new ScaleTransform3D(factor, factor, factor)); 
fmv3D.Transform = transformGroup; 

Конечно, вы можете настроить фактор.

+0

спасибо. То точно, что я спросил или :) Моя проблема была: я попробовал это с Transform3DCollection. Это было неправильно;) –