//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_COMPOSITETRANSFORM3D_H__ #define __GUI_COMPOSITETRANSFORM3D_H__ #include #include namespace Noesis { NS_WARNING_PUSH NS_MSVC_WARNING_DISABLE(4251 4275) //////////////////////////////////////////////////////////////////////////////////////////////////// /// Represents 3-D scale, rotation, and translate transforms to be applied to an element. /// /// .. code-block:: xml /// /// /// /// /// /// /// /// /// /// https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.media3d.compositetransform3d //////////////////////////////////////////////////////////////////////////////////////////////////// class NS_GUI_CORE_API CompositeTransform3D final: public Transform3D { public: CompositeTransform3D(); ~CompositeTransform3D(); /// Constructs a 3D transform matrix from the CompositeTransform3D property values static Transform3 ConstructTransform3DMatrix( float centerX, float centerY, float centerZ, float rotX, float rotY, float rotZ, float scaleX, float scaleY, float scaleZ, float transX, float transY, float transZ); /// Gets or sets the x-coordinate of the transformation center in pixels //@{ float GetCenterX() const; void SetCenterX(float centerX); //@} /// Gets or sets the y-coordinate of the transformation center in pixels //@{ float GetCenterY() const; void SetCenterY(float centerY); //@} /// Gets or sets the z-coordinate of the transformation center in pixels //@{ float GetCenterZ() const; void SetCenterZ(float centerZ); //@} /// Gets or sets the number of degrees to rotate the object around the x-axis of rotation //@{ float GetRotationX() const; void SetRotationX(float rotationX); //@} /// Gets or sets the number of degrees to rotate the object around the y-axis of rotation //@{ float GetRotationY() const; void SetRotationY(float rotationY); //@} /// Gets or sets the number of degrees to rotate the object around the z-axis of rotation //@{ float GetRotationZ() const; void SetRotationZ(float rotationZ); //@} /// Gets or sets the x-axis scale factor //@{ float GetScaleX() const; void SetScaleX(float scaleX); //@} /// Gets or sets the y-axis scale factor //@{ float GetScaleY() const; void SetScaleY(float scaleY); //@} /// Gets or sets the z-axis scale factor //@{ float GetScaleZ() const; void SetScaleZ(float scaleZ); //@} /// Gets or sets the distance to translate along the x-axis in pixels //@{ float GetTranslateX() const; void SetTranslateX(float transX); //@} /// Gets or sets the distance to translate along the y-axis in pixels float GetTranslateY() const; void SetTranslateY(float transY); //@} /// Gets or sets the distance to translate along the z-axis in pixels //@{ float GetTranslateZ() const; void SetTranslateZ(float transZ); //@} // Hides Freezable methods for convenience //@{ Ptr Clone() const; Ptr CloneCurrentValue() const; //@} /// From Transform3D //@{ Transform3 GetTransform() const override; //@} /// From IRenderProxyCreator //@{ void CreateRenderProxy(RenderTreeUpdater& updater, uint32_t proxyIndex) override; void UpdateRenderProxy(RenderTreeUpdater& updater, uint32_t proxyIndex) override; void UnregisterRenderer(ViewId viewId) override; //@} public: /// Dependency properties //@{ static const DependencyProperty* CenterXProperty; static const DependencyProperty* CenterYProperty; static const DependencyProperty* CenterZProperty; static const DependencyProperty* RotationXProperty; static const DependencyProperty* RotationYProperty; static const DependencyProperty* RotationZProperty; static const DependencyProperty* ScaleXProperty; static const DependencyProperty* ScaleYProperty; static const DependencyProperty* ScaleZProperty; static const DependencyProperty* TranslateXProperty; static const DependencyProperty* TranslateYProperty; static const DependencyProperty* TranslateZProperty; //@} protected: /// From DependencyObject //@{ bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override; //@} /// From Freezable //@{ Ptr CreateInstanceCore() const override; //@} private: ProxyFlags mUpdateFlags; enum UpdateFlags { UpdateFlags_CenterX, UpdateFlags_CenterY, UpdateFlags_CenterZ, UpdateFlags_RotationX, UpdateFlags_RotationY, UpdateFlags_RotationZ, UpdateFlags_ScaleX, UpdateFlags_ScaleY, UpdateFlags_ScaleZ, UpdateFlags_TranslateX, UpdateFlags_TranslateY, UpdateFlags_TranslateZ }; NS_DECLARE_REFLECTION(CompositeTransform3D, Transform3D) }; NS_WARNING_POP } #endif