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