import evas_types;

class Evas.Canvas3D.Primitive (Evas.Canvas3D.Object, Evas.Common_Interface)
{
   legacy_prefix: null;
   data: Evas_Canvas3D_Primitive_Data;

   methods {
      @property form {
         set {
            [[Set the form of the given primitive.

              Form defines which function will be chosen to set data to mesh
              on call of evas_canvas3d_mesh_primitive_set.

              Now available next forms of primitives are tabulated primitives (SQUARE and CUBE),
              solids of revolution (CYLINDER, CONE, SPHERE and TORUS) and surfaces (SURFACE and TERRAIN).

              Default form is EVAS_CANVAS3D_MESH_PRIMITIVE_NONE.]]
         }
         get {
             [[Get the form of the given primitive.

               See also @.form.set.]]
         }
         values {
            form: Evas.Canvas3D.Mesh_Primitive; [[Form of primitive.]]
         }
      }
      @property mode {
         set {
             [[Set the mode of the given primitive.

               Mode defines which function will be chosen to set data to mesh
               on call of evas_canvas3d_mesh_primitive_set. It helps to choose
               alternative algorithm for primitive with given form
               (like cone without base or sphere textured in alternative way).

               Now available next mods of primitives are
               witout base (bases) (supported for cylinder and cone) and
               with alternative UV (supported by sphere).

               Default form is EVAS_CANVAS3D_PRIMITIVE_MODE_DEFAULT.]]
         }
         get {
             [[Get the mode of the given primitive.

               See also @.mode.set.]]
         }
         values {
            mode: Evas.Canvas3D.Primitive_Mode; [[Mode of primitive.]]
         }
      }
      @property ratio {
         set {
             [[Set the ratio of the given primitive.

               Now ratio uses only in torus as the ratio of the
               major radius and minor radius. For this usage
               Available values is from 1.0 to infinity.
               If ratio for torus has a bad value,
               will be used 3.0 as ratio. Like ratio of usual doughnut.

               Default ratio is 3.0.]]
         }
         get {
             [[Get the ratio of the given primitive.

               See also @.ratio.set.]]
         }
         values {
            ratio: Evas.Real; [[Ratio of primitive.]]
         }
      }
      @property precision {
         set {
             [[Set the precision of the given primitive.

               Precision uses in all non tabulated primitives and defines
               precision of created primitives.
               Available values is from 3 to infinity.
               But if value will be more than 100, should be a warning
               about possibility of incorrect or slow work.

               Default ratio is 10.]]
         }
         get {
             [[Get the precision of the given primitive.

               See also @.precision.set.]]
         }
         values {
            precision: int; [[Precision of primitive.]]
         }
      }
      @property surface {
         set {
             [[Set the surface of the given primitive.

               Surface uses only in surface primitive and defines
               equation of filling mesh data on call of
               evas_canvas3d_mesh_primitive_set.

               It gives possibility to create customers primitives like
               shell, heart, hyperbolic paraboloid etc. See _shell_func in
               examples/evas/evas-3d-visual-test.c or _perlin_terrain in
               modules/evas/primitives/surfaces/terrain.c as an example of usage.

               Default surface is $null]]
         }
         values {
            surface: Evas.Canvas3D.Surface_Func *; [[Pointer to customers surface function.]]
         }
      }
      @property tex_scale {
         set {
             [[Set the texture scale of the given primitive.

               Texture scale uses in all non tabulated primitives
               and defines scale of texture coords or primitives.

               It uses to create periodical textured meshes.

               Default tex_scale is {1.0, 1.0}]]
         }
         get {
             [[Get the texture scale of the given primitive.

               See also @.tex_scale.set.]]
         }
         values {
            tex_scale_x: Evas.Real;
            tex_scale_y: Evas.Real;
         }
      }
   }
   implements {
      Eo.Base.constructor;
      Eo.Base.destructor;
   }
}
