Skip to content

Commit

Permalink
DrawTool support transform coordinate (#2357)
Browse files Browse the repository at this point in the history
* DrawTool support transform coordinate

* updates

* fixing

* Menu support scroll

* fixing
  • Loading branch information
deyihu authored Jul 3, 2024
1 parent 30c91bb commit a9bd958
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 22 deletions.
8 changes: 6 additions & 2 deletions src/map/tool/DrawTool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import Point from '../../geo/Point';
import Geometry from '../../geometry/Geometry';
import VectorLayer from '../../layer/VectorLayer';
import MapTool from './MapTool';
import { Coordinate } from '../../geo';
import { MapEventDataType } from '../Map.DomEvents';

export type DrawToolOptions = {
mode?: string,
Expand All @@ -20,7 +22,8 @@ export type DrawToolOptions = {
ignoreMouseleave?: boolean,
enableAltitude?: boolean,
interactive?: boolean,
edgeAutoComplete?: boolean
edgeAutoComplete?: boolean,
transformCoordinate?: (coordinate: Coordinate, e: MapEventDataType) => Coordinate | undefined
}

export type modeActionType = {
Expand Down Expand Up @@ -63,7 +66,8 @@ const options: DrawToolOptions = {
'blockGeometryEvents': false,
'zIndex': Number.MAX_VALUE,
'enableAltitude': true,
'interactive': true
'interactive': true,
'transformCoordinate': null
};

const registeredMode = {};
Expand Down
46 changes: 30 additions & 16 deletions src/map/tool/DrawToolRegister.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Ellipse from '../../geometry/Ellipse';
import ArcCurve from '../../geometry/ArcCurve';
import LineString from '../../geometry/LineString';
import { extendSymbol } from '../../core/util/style';
import { extend } from '../../core/util/';
import { extend, isFunction } from '../../core/util/';
import QuadBezierCurve from '../../geometry/QuadBezierCurve';
import Coordinate from '../../geo/Coordinate';
import Point from '../../geo/Point';
Expand All @@ -29,25 +29,39 @@ function queryTerrainCoordinates(projection: any, prjCoords: any, mapEvent: any)
prjCoords = [prjCoords];
}
let coordinates;
if (!mapEvent || !mapEvent.target || !mapEvent.target._queryTerrainInfo) {
let transformCoordinate;
if (mapEvent && mapEvent.drawTool && mapEvent.drawTool.options) {
transformCoordinate = mapEvent.drawTool.options.transformCoordinate;
}
if (transformCoordinate && isFunction(transformCoordinate)) {
coordinates = prjCoords.map(c => {
return projection.unproject(c);
});
return isArray ? coordinates : coordinates[0];
}
const map = mapEvent.target;
const enableAltitude = mapEvent.enableAltitude;
coordinates = prjCoords.map(c => {
//prj to container point
if (enableAltitude) {
const point = map.prjToContainerPoint(c);
const terrain = map._queryTerrainInfo(point);
if (terrain && terrain.coordinate) {
return terrain.coordinate;
}
coordinates = coordinates.map((c: Coordinate) => {
const newCoordinata = transformCoordinate(c, mapEvent);
return newCoordinata || c;
});
} else {
if (!mapEvent || !mapEvent.target || !mapEvent.target._queryTerrainInfo) {
coordinates = prjCoords.map(c => {
return projection.unproject(c);
});
return isArray ? coordinates : coordinates[0];
}
return projection.unproject(c);
});
const map = mapEvent.target;
const enableAltitude = mapEvent.enableAltitude;
coordinates = prjCoords.map(c => {
//prj to container point
if (enableAltitude) {
const point = map.prjToContainerPoint(c);
const terrain = map._queryTerrainInfo(point);
if (terrain && terrain.coordinate) {
return terrain.coordinate;
}
}
return projection.unproject(c);
});
}
return isArray ? coordinates : coordinates[0];
}

Expand Down
13 changes: 9 additions & 4 deletions src/ui/Menu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,18 @@ class Menu extends UIComponent {
* @return {HTMLElement} menu's DOM
*/
buildOn(): HTMLElement {
let dom: HTMLElement;
if (this.options['custom']) {
if (isString(this.options['items'])) {
const container = createEl('div');
container.innerHTML = this.options['items'];
this._appendCustomClass(container);
return container;
dom = container;
} else {
return this.options['items'] as any;
dom = this.options['items'] as any;
}
} else {
const dom = createEl('div');
dom = createEl('div');
if (this.options['containerClass']) {
addClass(dom, this.options['containerClass']);
}
Expand All @@ -120,8 +121,12 @@ class Menu extends UIComponent {
dom.appendChild(menuItems);
on(dom, 'contextmenu', preventDefault);
this._appendCustomClass(dom);
return dom;
}
if (dom) {
this._bindDomEvents(dom, 'off');
this._bindDomEvents(dom, 'on');
}
return dom;
}

/**
Expand Down

0 comments on commit a9bd958

Please sign in to comment.