/*
* @Description: In User Settings Edit
* @Author: xiaoying
* @Date: 2019-09-10 19:43:30
* @LastEditTime: 2019-09-20 16:22:43
* @LastEditors: mayuanye
*/
import { NativeModules } from 'react-native';
import SketchStyle from './SketchStyle';
import SnappingOption from './SnappingOption';
import Dot from './Dot';
import SRefData from './SRefData';
import Geometry from './Geometry.js';
// import GeoPoint from "./GeoPoint";
import GeoPoints from './GeoPoints';
// import GeoCir from "./GeoCir";
// import GeoCir3 from "./GeoCir3";
// import GeoEllipse from "./GeoEllipse";
// import GeoArc from "./GeoArc";
// import GeoArc3 from "./GeoArc3";
// import GeoRect from "./GeoRect";
// import GeoRect1 from "./GeoRect1";
// import GeoSpline from "./GeoSpline";
import GeoVarLine from './GeoVarLine';
import GeoLines from './GeoLines';
import GeoPolygon from './GeoPolygon';
import GeoPolygons from './GeoPolygons';
// import GeoGeometrys from "./GeoGeometrys";
import GeoAnno from './GeoAnno';
// import ArcAnno from "./ArcAnno";
// import CircleAnno from "./CircleAnno";
// import HtmlAnno from "./HtmlAnno";
// import ImageAnno from "./ImageAnno";
import TextAnno from './TextAnno';
import MeasureOption from './MeasureOption';
let SE = NativeModules.JSSketchEditor;
/**
* @class SketchEditor
* @description 草图编辑器
*/
export default class SketchEditor {
/**
* 构造一个新的SketchEditor对象
*
* @memberof SketchEditor
* @param {Object} mapView 地图视图对象
* @returns {Promise<SketchEditor>}
*/
async createObj(mapView) {
try {
var { SketchEditorId } = await SE.createObj(mapView._MGMapViewId);
var sketchEditor = null;
if (SketchEditorId != null) {
sketchEditor = new SketchEditor();
sketchEditor._MGSketchEditorId = SketchEditorId;
}
return sketchEditor;
} catch (e) {
console.error(e);
}
}
/**
* 添加状态改变监听
*
* @memberof SketchEditor
* @returns {Promise<Void>}
*/
async addStateChangedListener() {
try {
await SE.addStateChangedListener(this._MGSketchEditorId);
} catch (e) {
console.error(e);
}
}
/**
* 移除状态改变监听
*
* @memberof SketchEditor
* @returns {Promise<Void>}
*/
async removeStateChangedListener() {
try {
await SE.removeStateChangedListener(this._MGSketchEditorId);
} catch (e) {
console.error(e);
}
}
/**
* 获取草图样式
* @memberof SketchEditor
* @returns {Promise<SketchStyle>}
*/
async getSketchStyle() {
try {
var { SketchStyleId } = await SE.getSketchStyle(this._MGSketchEditorId);
var sketchStyle = null;
if (SketchStyleId != null) {
sketchStyle = new SketchStyle();
sketchStyle._MGSketchStyleId = SketchStyleId;
}
return sketchStyle;
} catch (e) {
console.error(e);
}
}
/**
* 设置草图样式
* @memberof SketchEditor
* @param {Object} sketchStyle 草图样式(SketchStyle类型的Object)
* @returns {Promise<Void>}
*/
async setSketchStyle(sketchStyle) {
try {
await SE.setSketchStyle(
this._MGSketchEditorId,
sketchStyle._MGSketchStyleId
);
} catch (e) {
console.error(e);
}
}
/**
* 获取捕捉选项
* @memberof SketchEditor
* @returns {Promise<SnappingOption>}
*/
async getSnappingOption() {
try {
var { SnappingOptionId } = await SE.getSnappingOption(
this._MGSketchEditorId
);
var snappingOption = null;
if (SnappingOptionId != null) {
snappingOption = new SnappingOption();
snappingOption._MGSnappingOptionId = SnappingOptionId;
}
return snappingOption;
} catch (e) {
console.error(e);
}
}
/**
* 设置捕捉选项
* @memberof SketchEditor
* @param {Object} snappingOption 捕捉选项(SnappingOption类型的Object)
* @returns {Promise<Void>}
*/
async setSnappingOption(snappingOption) {
try {
await SE.setSnappingOption(
this._MGSketchEditorId,
snappingOption._MGSnappingOptionId
);
} catch (e) {
console.error(e);
}
}
/**
* 依据指定的数据类型开始新的几何编辑
* @memberof SketchEditor
* @param {Number} sketchDataType 几何类型(int类型的Number,例:1--SketchDataType.POINT)
* @returns {Promise<Void>}
*/
async startByType(sketchDataType) {
try {
await SE.startByType(this._MGSketchEditorId, sketchDataType);
} catch (e) {
console.error(e);
}
}
/**
* 开始编辑已有的几何对象
* @memberof SketchEditor
* @param {Object} geometry 几何对象
* @returns {Promise<Void>}
*/
async start(geometry) {
try {
await SE.start(this._MGSketchEditorId, geometry._MGGeometryId);
} catch (e) {
console.error(e);
}
}
/**
* 获取编辑的数据类型
* @memberof SketchEditor
* @returns {Number} 几何类型(int类型的Number,例:1--SketchDataType.POINT,-1表示获取失败)
*/
async getSketchDataType() {
try {
let result = await SE.getSketchDataType(this._MGSketchEditorId);
return result;
} catch (e) {
console.error(e);
}
}
/**
* 替换当前的编辑几何对象
* @memberof SketchEditor
* @param {Object} geometry 几何对象
* @returns {Promise<Void>}
*/
async replaceGeometry(geometry) {
try {
await SE.replaceGeometry(this._MGSketchEditorId, geometry._MGGeometryId);
} catch (e) {
console.error(e);
}
}
/**
* 获取当前的编辑几何
* @memberof SketchEditor
* @returns {Promise<Geometry>} 成功返回几何对象
*/
async getGeometry() {
try {
let { GeometryId, GeometryType, GeometryAnnoType } = await SE.getGeometry(
this._MGSketchEditorId
);
let geometry = SketchEditor.getGeometryByType(
GeometryId,
GeometryType,
GeometryAnnoType
);
return geometry;
} catch (e) {
console.error(e);
}
}
/**
* 清除当前的编辑几何
* @memberof SketchEditor
* @returns {Promise<Void>}
*/
async clearGeometry() {
try {
await SE.clearGeometry(this._MGSketchEditorId);
} catch (e) {
console.error(e);
}
}
/**
* 停止编辑
* @memberof SketchEditor
* @returns {Promise<Void>}
*/
async stop() {
try {
await SE.stop(this._MGSketchEditorId);
} catch (e) {
console.error(e);
}
}
/**
* 删除当前被选中的顶点
* @memberof SketchEditor
* @returns {boolean}
*/
async deleteSelectedVertex() {
try {
let result = await SE.deleteSelectedVertex(this._MGSketchEditorId);
return result;
} catch (e) {
console.error(e);
}
}
/**
* 移动当前被选中的顶点到指定的位置(地图坐标)
* @memberof SketchEditor
* @param {Number} x坐标的值
* @param {Number} y坐标的值
* @returns {boolean}
*/
async moveSelectedVertexTo(x, y) {
try {
let result = await SE.moveSelectedVertexTo(this._MGSketchEditorId, x, y);
return result;
} catch (e) {
console.error(e);
}
}
/**
* 添加新的顶点(地图坐标)
* @memberof SketchEditor
* @param {Number} x坐标的值
* @param {Number} y坐标的值
* @returns {Promise<Void>}
*/
async addVertex(x, y) {
try {
await SE.addVertex(this._MGSketchEditorId, x, y);
} catch (e) {
console.error(e);
}
}
/**
* 试图捕捉指定点(地图坐标,返回被捕捉到的点,返回null表示捕捉失败
* @memberof SketchEditor
* @param {Number} x坐标的值
* @param {Number} y坐标的值
* @returns {Promise<Dot>} 返回null表示捕捉失败
*/
async snapping(x, y) {
try {
var { point2DId } = await SE.snapping(this._MGSketchEditorId, x, y);
var dot = null;
if (point2DId != null) {
dot = new Dot();
dot._MGDotId = point2DId;
}
return dot;
} catch (e) {
console.error(e);
}
}
/**
* 撤销
* @memberof SketchEditor
* @returns {boolean} true-成功;false-失败
*/
async undo() {
try {
let result = await SE.undo(this._MGSketchEditorId);
return result;
} catch (e) {
console.error(e);
}
}
/**
* 重做
* @memberof SketchEditor
* @returns {boolean} true-成功;false-失败
*/
async redo() {
try {
let result = await SE.redo(this._MGSketchEditorId);
return result;
} catch (e) {
console.error(e);
}
}
/**
* 草图几何是否有效(点几何必须有1个顶点、线必须有2个顶点、区必须有3个顶点)
* @memberof SketchEditor
* @returns {boolean}
*/
async isSketchValid() {
try {
let result = await SE.isSketchValid(this._MGSketchEditorId);
return result;
} catch (e) {
console.error(e);
}
}
/**
* 设置地图位置组件
*
* @memberof SketchEditor
* @param {Object} magnifierOption 地图位置组件
* @returns {Promise<Void>}
*/
async setMagnifierOption(magnifierOption) {
try {
await SE.setMagnifierOption(
this._MGSketchEditorId,
magnifierOption._MGMagnifierOptionId
);
} catch (e) {
console.error(e);
}
}
/**
* 设置编辑数据的空间参考系,用于计算实地距离和面积
* @memberof SketchEditor
* @param {SRefData} 空间参考系
* @returns {Promise<Void>}
*/
async setSRS(sRefData) {
try {
await SE.setSRS(this._MGSketchEditorId, sRefData._MGSRefDataId);
} catch (e) {
console.error(e);
}
}
/**
* 获取空间参考系
* @memberof SketchEditor
* @returns {Promise<SRefData>}
*/
async getSRS() {
try {
var { SRefDataId } = await SE.getSRS(this._MGSketchEditorId);
var sRefData = null;
if (SRefDataId != null) {
sRefData = new SRefData();
sRefData._MGSRefDataId = SRefDataId;
}
return sRefData;
} catch (e) {
console.error(e);
}
}
/**
* 设置量算参数选项
*
* @memberof SketchEditor
* @param {MeasureOption} measureOption 量算参数选项
* @returns {Promise<Void>}
*/
async setMeasureOption(measureOption){
try {
if(measureOption === undefined || measureOption === null){
console.error('measureOption is undefined or null');
return;
}
await SE.setMeasureOption(this._MGSketchEditorId, measureOption._MGMeasureOptionId);
} catch (e) {
console.error(e);
}
}
/**
* 获取量算参数选项
*
* @memberof SketchEditor
* @returns {Promise<MeasureOption>}
*/
async getMeasureOption(){
try {
let {MeasureOptionId} = await SE.getMeasureOption(this._MGSketchEditorId);
let measureOption = null;
if(MeasureOptionId !== null){
measureOption = new MeasureOption();
measureOption._MGMeasureOptionId = MeasureOptionId;
}
return measureOption;
} catch (e) {
console.error(e);
}
}
/**
* 根据返回的geometryId,geometryType,geometryAnnType构造geometry对象
*
* @param {String} geometryId 几何对象对应的Id
* @param {int} geometryType 几何对象类型
* @param {int} geometryAnnType 几何对象为GeoAnno类型时候的AnnType
* @returns {Geometry} geometry或子类对象
*/
static async getGeometryByType(GeometryId, geometryType, geometryAnnType) {
try {
let geometry = null;
if (GeometryId != null) {
switch (geometryType) {
case -1: // GeoUnknown_Type : -1
geometry = new Geometry();
geometry._MGGeometryId = GeometryId;
break;
case 1: // GeoPoint_Type : 1
// geometry = new GeoPoint();
// geometry._MGGeometryId = GeometryId;
break;
case 2: // GeoPoints_Type : 2
geometry = new GeoPoints();
geometry._MGGeometryId = GeometryId;
break;
case 3: // GeoCir_Type : 3
// geometry = new GeoCir();
// geometry._MGGeometryId = GeometryId;
break;
case 4: // GeoCir3_Type : 4
// geometry = new GeoCir3();
// geometry._MGGeometryId = GeometryId;
break;
case 5: // GeoEllipse_Type : 5
// geometry = new GeoEllipse();
// geometry._MGGeometryId = GeometryId;
break;
case 6: // GeoArc_Type: 6
// geometry = new GeoArc();
// geometry._MGGeometryId = GeometryId;
break;
case 7: // GeoArc3_Type : 7
// geometry = new GeoArc3();
// geometry._MGGeometryId = GeometryId;
break;
case 8: // GeoRect_Type : 8
// geometry = new GeoRect();
// geometry._MGGeometryId = GeometryId;
break;
case 9: // GeoRect1_Type : 9
// geometry = new GeoRect1();
// geometry._MGGeometryId = GeometryId;
break;
case 10: // GeoSpline_Type : 10
// geometry = new GeoSpline();
// geometry._MGGeometryId = GeometryId;
break;
case 11: // GeoBezier_Type : 11
// geometry = new GeoBezier();
// geometry._MGGeometryId = GeometryId;
break;
case 12: // GeoVarLine_Type : 12
geometry = new GeoVarLine();
geometry._MGGeometryId = GeometryId;
break;
case 13: // GeoLines_Type : 13
geometry = new GeoLines();
geometry._MGGeometryId = GeometryId;
break;
case 14: // GeoPolygon_Type : 14
geometry = new GeoPolygon();
geometry._MGGeometryId = GeometryId;
break;
case 15: // GeoPolygons_Type : 15
geometry = new GeoPolygons();
geometry._MGGeometryId = GeometryId;
break;
case 16: // GeoGeometrys_Type : 16
// geometry = new GeoGeometrys();
// geometry._MGGeometryId = GeometryId;
break;
case 17: // GeoAnno_Type : 17
switch (geometryAnnType) {
case -1: // 未知类型:-1-AnnType.AnnUnknown,直接返回GeoAnno
geometry = new GeoAnno();
geometry._MGGeometryId = GeometryId;
break;
case 0: //字符串注记类型标志:0-AnnType.AnnText
geometry = new TextAnno();
geometry._MGGeometryId = GeometryId;
break;
case 1: // html版面注记类型标志:1-AnnType.AnnHTML
// geometry = new HtmlAnno();
// geometry._MGGeometryId = GeometryId;
break;
case 2: // 2-AnnType.AnnAtt
break;
case 3: // 2-AnnType.AnnDim
break;
case 4: // 弧注记类型标志:4-AnnType.AnnDim
// geometry = new ArcAnno();
// geometry._MGGeometryId = GeometryId;
break;
case 5: // 圆注记类型标志:5-AnnType.AnnCirCle
// geometry = new CircleAnno();
// geometry._MGGeometryId = GeometryId;
break;
case 6: // 图像注记类型标志:6-AnnType.AnnImage
// geometry = new ImageAnno();
// geometry._MGGeometryId = GeometryId;
break;
}
break;
}
}
return geometry;
} catch (e) {
console.error(e);
}
}
}