1

i am a real newbe in the world of helixtoolkit and Graphics 3D.

What i make:

I have the homework to code a programm which lets you decorate a christmastree with different types of decoration.

One type of decoration is a candle. The problem. The candle is too small in relation to the tree.

My question:

How can i resize my FileModelVisual3D inside of the view_tree with code behind?

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-Code

    <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>

Hope that anybode can help! I know for others its easy but i have no experiences in 3D-coding.

Thanks

1 Answers1

2

In addition to your TranslateTransform3D, apply a ScaleTransform3D. Put both of them into a Transform3DGroup and use this as Transform on your 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;

Of course, you may want to adjust the factor.

wkl
  • 1,896
  • 2
  • 15
  • 26
  • Thank you very much. Thats exactly what i askef or :) My problem was: I tried it with a Transform3DCollection. That was the wrong was ;) – Burtscher_Florian Jan 26 '17 at 20:15