# Source: Dot3D.js

    /*
     * @Description: In User Settings Edit
     * @author: lidafeng
     * @Date: 2019-09-19 15:48:58
     * @LastEditTime: 2019-09-20 10:14:15
     * @LastEditors: mayuanye
     */
    import { NativeModules } from 'react-native';
    let D3D = NativeModules.JSDot3D;

    /**
     * @class Dot3D
     * @description 实现对三维坐标点的类型定义
     */
    export default class Dot3D {
      /**
       * 构造一个新的Dot3D对象。有两种构造方法：
       * （1）无参构造
       * （2）通过createObj(x,y,z)构造，x,y,z均为double范围的Number
       * @memberof Dot3D
       * @returns {Promise<Dot3D>}
       */
      async createObj() {
        try {
          if (
            typeof arguments[0] === 'number' &&
            typeof arguments[1] === 'number' &&
            typeof arguments[2] === 'number'
          ) {
            let { Dot3DId } = await D3D.createObjByXYZ(
              arguments[0],
              arguments[1],
              arguments[2]
            );
            let dot3D = new Dot3D();
            dot3D._MGDot3DId = Dot3DId;
            return dot3D;
          } else {
            let { Dot3DId } = await D3D.createObj();
            let dot3D = new Dot3D();
            dot3D._MGDot3DId = Dot3DId;
            return dot3D;
          }
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 返回X值
       *
       * @memberof Dot3D
       * @returns {Number} X值（double范围的Number）
       */
      async getX() {
        try {
          let x = await D3D.getX(this._MGDot3DId);
          return x;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 返回y值
       *
       * @memberof Dot3D
       * @returns {Number} y值（double范围的Number）
       */
      async getY() {
        try {
          let y = await D3D.getY(this._MGDot3DId);
          return y;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 返回z值
       *
       * @memberof Dot3D
       * @returns {Number} z值（double范围的Number）
       */
      async getZ() {
        try {
          let z = await D3D.getZ(this._MGDot3DId);
          return z;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置X值
       *
       * @memberof Dot3D
       * @param {Number} x x坐标 （double范围的Number）
       * @returns {Promise<Void>}
       */
      async setX(x) {
        try {
          await D3D.setX(this._MGDot3DId, x);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置y值
       *
       * @memberof Dot3D
       * @param {Number} y x坐标 （double范围的Number）
       * @returns {Promise<Void>}
       */
      async setY(y) {
        try {
          await D3D.setY(this._MGDot3DId, y);
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 设置z值
       *
       * @memberof Dot3D
       * @param {Number} z z坐标 （double范围的Number）
       * @returns {Promise<Void>}
       */
      async setZ(z) {
        try {
          await D3D.setZ(this._MGDot3DId, z);
        } catch (e) {
          console.error(e);
        }
      }
    }