1158291132e0fdc62b51968388fdb47d24128367
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / Path.cs
1 /*
2  * Copyright(c) 2017 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 using System;
19 using System.ComponentModel;
20
21 namespace Tizen.NUI
22 {
23
24     /// <summary>
25     /// A 3D parametric curve.<br />
26     /// Paths can be used to animate the position and orientation of actors.<br />
27     /// </summary>
28     /// <since_tizen> 3 </since_tizen>
29     public class Path : BaseHandle
30     {
31         private global::System.Runtime.InteropServices.HandleRef swigCPtr;
32
33         internal Path(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Path_SWIGUpcast(cPtr), cMemoryOwn)
34         {
35             swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
36         }
37
38         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Path obj)
39         {
40             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
41         }
42
43         /// <summary>
44         /// Dispose
45         /// </summary>
46         /// <param name="type">The dispoase type</param>
47         /// <since_tizen> 3 </since_tizen>
48         protected override void Dispose(DisposeTypes type)
49         {
50             if(disposed)
51             {
52                 return;
53             }
54
55             if(type == DisposeTypes.Explicit)
56             {
57                 //Called by User
58                 //Release your own managed resources here.
59                 //You should release all of your own disposable objects here.
60             }
61
62             //Release your own unmanaged resources here.
63             //You should not access any managed member here except static instance.
64             //because the execution order of Finalizes is non-deterministic.
65
66             if (swigCPtr.Handle != global::System.IntPtr.Zero)
67             {
68                 if (swigCMemOwn)
69                 {
70                     swigCMemOwn = false;
71                     NDalicPINVOKE.delete_Path(swigCPtr);
72                 }
73                 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
74             }
75
76             base.Dispose(type);
77         }
78
79
80         internal class Property
81         {
82             internal static readonly int POINTS = NDalicPINVOKE.Path_Property_POINTS_get();
83             internal static readonly int CONTROL_POINTS = NDalicPINVOKE.Path_Property_CONTROL_POINTS_get();
84         }
85
86         /// <summary>
87         /// Creates an initialized path handle.
88         /// </summary>
89         /// <since_tizen> 3 </since_tizen>
90         public Path() : this(NDalicPINVOKE.Path_New(), true)
91         {
92             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
93
94         }
95
96         /// <summary>
97         /// Downcasts a handle to Path handle.
98         /// </summary>
99         /// <since_tizen> 3 </since_tizen>
100         /// Please do not use! this will be deprecated!
101         /// Instead please use as keyword.
102         [Obsolete("Please DO NOT use! This will be deprecated, instead please USE as keyword.")]
103         [EditorBrowsable(EditorBrowsableState.Never)]
104         public static Path DownCast(BaseHandle handle)
105         {
106             Path ret =  Registry.GetManagedBaseHandleFromNativePtr(handle) as Path;
107             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
108             return ret;
109         }
110
111         /// <summary>
112         /// Adds an interpolation point.
113         /// </summary>
114         /// <param name="point">The new interpolation point to be added.</param>
115         /// <since_tizen> 3 </since_tizen>
116         public void AddPoint(Position point)
117         {
118             NDalicPINVOKE.Path_AddPoint(swigCPtr, Position.getCPtr(point));
119             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
120         }
121
122         /// <summary>
123         /// Adds a control point.
124         /// </summary>
125         /// <param name="point">The new control point to be added.</param>
126         /// <since_tizen> 3 </since_tizen>
127         public void AddControlPoint(Vector3 point)
128         {
129             NDalicPINVOKE.Path_AddControlPoint(swigCPtr, Vector3.getCPtr(point));
130             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
131         }
132
133         /// <summary>
134         /// Automatic generation of control points. Generated control points which result in a smooth join between the splines of each segment.<br />
135         /// The generating algorithm is as follows:<br />
136         /// For a given knot point K[N], find the vector that bisects K[N-1],[N] and [N],[N+1].<br />
137         /// Calculate the tangent vector by taking the normal of this bisector.<br />
138         /// The in control point is the length of the preceding segment back along this bisector multiplied by the curvature.<br />
139         /// The out control point is the length of the succeeding segment forward along this bisector multiplied by the curvature.<br />
140         /// </summary>
141         /// <param name="curvature">The curvature of the spline. 0 gives straight lines between the knots, negative values means the spline contains loops, positive values up to 0.5 result in a smooth curve, positive values between 0.5 and 1 result in looped curves where the loops are not distinct (i.e., the curve appears to be non-continuous), positive values higher than 1 result in looped curves.</param>
142         /// <since_tizen> 3 </since_tizen>
143         public void GenerateControlPoints(float curvature)
144         {
145             NDalicPINVOKE.Path_GenerateControlPoints(swigCPtr, curvature);
146             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
147         }
148
149         /// <summary>
150         /// Sample path at a given progress. Calculates the position and tangent at that point of the curve.
151         /// </summary>
152         /// <param name="progress">A floating point value between 0.0 and 1.0.</param>
153         /// <param name="position">The interpolated position at that progress.</param>
154         /// <param name="tangent">The interpolated tangent at that progress.</param>
155         /// <since_tizen> 3 </since_tizen>
156         public void Sample(float progress, Vector3 position, Vector3 tangent)
157         {
158             NDalicPINVOKE.Path_Sample(swigCPtr, progress, Vector3.getCPtr(position), Vector3.getCPtr(tangent));
159             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
160         }
161
162         /// <summary>
163         /// An accessor for the interpolation points.
164         /// </summary>
165         /// <param name="index">The index of the interpolation point.</param>
166         /// <since_tizen> 3 </since_tizen>
167         public Vector3 GetPoint(uint index)
168         {
169             Vector3 ret = new Vector3(NDalicPINVOKE.Path_GetPoint(swigCPtr, index), false);
170             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
171             return ret;
172         }
173
174         /// <summary>
175         /// An accessor for the control points.
176         /// </summary>
177         /// <param name="index">The index of the control point.</param>
178         /// <since_tizen> 3 </since_tizen>
179         public Vector3 GetControlPoint(uint index)
180         {
181             Vector3 ret = new Vector3(NDalicPINVOKE.Path_GetControlPoint(swigCPtr, index), false);
182             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
183             return ret;
184         }
185
186         /// <summary>
187         /// Gets the number of interpolation points in the path.
188         /// </summary>
189         /// <returns>The number of interpolation points in the path.</returns>
190         /// <since_tizen> 3 </since_tizen>
191         public uint GetPointCount()
192         {
193             uint ret = NDalicPINVOKE.Path_GetPointCount(swigCPtr);
194             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
195             return ret;
196         }
197
198         /// <summary>
199         /// Enumeration for the Points.
200         /// </summary>
201         /// <since_tizen> 3 </since_tizen>
202         public PropertyArray Points
203         {
204             get
205             {
206                 Tizen.NUI.PropertyArray temp = new Tizen.NUI.PropertyArray();
207                 Tizen.NUI.Object.GetProperty(swigCPtr, Path.Property.POINTS).Get(temp);
208                 return temp;
209             }
210             set
211             {
212                 Tizen.NUI.Object.SetProperty(swigCPtr, Path.Property.POINTS, new Tizen.NUI.PropertyValue(value));
213             }
214         }
215
216         /// <summary>
217         /// Enumeration for the ControlPoints.
218         /// </summary>
219         /// <since_tizen> 3 </since_tizen>
220         public PropertyArray ControlPoints
221         {
222             get
223             {
224                 Tizen.NUI.PropertyArray temp = new Tizen.NUI.PropertyArray();
225                 Tizen.NUI.Object.GetProperty(swigCPtr, Path.Property.CONTROL_POINTS).Get(temp);
226                 return temp;
227             }
228             set
229             {
230                 Tizen.NUI.Object.SetProperty(swigCPtr, Path.Property.CONTROL_POINTS, new Tizen.NUI.PropertyValue(value));
231             }
232         }
233
234     }
235
236 }