private bool Reorder(IEnumerable <BSPImage> items) { var changed = false; if (physics != null) { changed |= physics.Apply(items.Cast <IPhysicsItem>(), camera); } var index = 0; foreach (var item in items) { if (physics == null && (!item.Transform.IsIdentity || item.Angle2D != 0)) { item.LinearVelocity = new Vector3D(); item.AngularVelocity2D = 0; item.AtRest = false; var m = RewindMatrix(item.Transform, 0.8); item.Transform = (Math.Abs(m.OffsetX) + Math.Abs(m.OffsetY) + Math.Abs(m.OffsetZ)) > 0.1 ? m : Matrix3D.Identity; item.Angle2D = (Math.Abs(item.Angle2D) > 0.01) ? item.Angle2D * 0.8 : 0; changed = true; } if (!item.Rendered) { photoCanvas.Children.Add(item.Visual); item.Rendered = true; changed = true; } if (!item.Visual.GetValue(Canvas.ZIndexProperty).Equals(index)) { item.Visual.SetValue(Canvas.ZIndexProperty, index); changed = true; } ++index; } return(changed); }