2009-08-17 3 views
1

Ich habe eine Methode, die eine Anzahl von Zylindern transformiert. Wenn ich die Methode ein zweites Mal benutze, werden die Zylinder von ihrer ursprünglichen Position und nicht von ihrer neuen Position transformiert.WPF 3D - Wenden Sie eine Transformation an, ändern Sie die zugrunde liegenden Objektwerte

Gibt es sowieso eine "Anwendung" der Transformation, so dass sie die zugrunde liegenden Werte der Zylinder ändert, damit ich mich von den neuen Werten umwandeln kann?

Kann jemand helfen?

Cheers,

Andy

void TransformCylinders(double angle) 
    { 

     var rotateTransform3D = new RotateTransform3D { CenterX = 0, CenterY = 0, CenterZ = 0 }; 
     var axisAngleRotation3D = new AxisAngleRotation3D { Axis = new Vector3D(1, 1, 1), Angle = angle }; 
     rotateTransform3D.Rotation = axisAngleRotation3D; 
     var myTransform3DGroup = new Transform3DGroup(); 
     myTransform3DGroup.Children.Add(rotateTransform3D); 
     _cylinders.ForEach(x => x.Transform = myTransform3DGroup); 

    } 

Antwort

4

Du remaking das Transform3DGroup jedes Mal, wenn die Methode aufgerufen wird:

var myTransform3DGroup = new Transform3DGroup(); 

Wandelt ist im Wesentlichen ein Stapel von Matrizen, die miteinander multipliziert bekommen. Sie löschen diesen Stapel jedes Mal, wenn Sie eine neue Gruppe erstellen. Sie müssen aufeinanderfolgende Transformationen in die vorhandene Gruppe einfügen, statt sie neu zu erstellen.

+0

Ausgezeichnet, danke dafür! –

Verwandte Themen