123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import { Marker, Coordinate } from 'maptalks'
- import { mapGoto } from './statusManagement'
- import { threeLayer, vector } from './initScene3D'
- function structText(args) {
- var point = new Marker(args.point,
- {
- properties: {
- altitude: args.top
- },
- visible: true,
- editable: true,
- cursor: 'pointer',
- shadowBlur: 0,
- shadowColor: 'black',
- draggable: false,
- dragShadow: false, // display a shadow during dragging
- drawOnAxis: null, // force dragging stick on a axis, can be: x, y
- symbol: {
- 'textFaceName': 'sans-serif',
- 'textName': args.name,
- 'textFill': '#000000',
- 'textHaloFill': '#fff',
- 'textHaloRadius': 2,
- 'textHorizontalAlignment': 'center',
- 'textVerticalAlignment': 'top',
- 'textSize': 12
- }
- }
- );
- point.on('click', () => {
- mapGoto({ center: args.point, zoom: 19 })
- })
- point.__id = args.id
- return point
- }
- function addToAttr(args) {
- var point = new Coordinate(args.point),
- containerPoint = map.coordinateToContainerPoint(point).round();
- args.position = [
- Number(containerPoint.x),
- Number(containerPoint.y)
- ]
- }
- function checkIsAdd(texts, args) {
- addToAttr(args)
- let tMinX = args.position[0] - args.width / 2
- let tMaxX = args.position[0] + args.width / 2
- let tMinY = args.position[1]
- let tMaxY = args.position[1] + args.height
- let index = texts.findIndex(text => {
- let minX = text._struct_attribute.position[0] - text._struct_attribute.width / 2
- let minY = text._struct_attribute.position[1]
- let maxX = text._struct_attribute.position[0] + text._struct_attribute.width / 2
- let maxY = text._struct_attribute.position[1] + text._struct_attribute.height
- return !(
- (tMinX < minX && tMaxX < minX) ||
- (tMinX > maxX && tMaxX > maxX) ||
- (tMinY < minY && tMaxY < minY) ||
- (tMinY > maxY && tMaxY > maxY)
- )
- })
-
- return !~index
- }
- function addText(mesh, textjsons) {
- if (textjsons.length === 0) return;
- let children = threeLayer.getScene().children
- let texts = []
- let newTexts = []
- children.forEach(mesh => {
- mesh.texts && texts.push(...mesh.texts)
- })
- textjsons.forEach(item => {
- if (checkIsAdd(texts, item)) {
- let text = structText(item)
- newTexts.push(text)
- text._struct_attribute = item
- texts.push(text)
- }
- })
- vector.addGeometry(newTexts)
- mesh.texts = newTexts
- mesh.textjsons = textjsons
- }
- function referText() {
- let children = threeLayer.getScene().children
- let checkTexts = []
-
- children.forEach(mesh => {
-
- if (mesh.texts) {
- for (let i = 0; i < mesh.texts.length; i++) {
- let text = mesh.texts[i]
- if (checkIsAdd(checkTexts, text._struct_attribute)) {
- checkTexts.push(text)
- } else {
- vector.removeGeometry(text)
- mesh.texts.splice(i, 1)
- --i
- }
- }
- }
-
-
- if (mesh.textjsons) {
- mesh.textjsons.map(item => {
- let index = mesh.texts.findIndex(text => text.__id === item.id)
- if (!~index && checkIsAdd(checkTexts, item)) {
- let text = structText(item)
- checkTexts.push(text)
- text._struct_attribute = item
- vector.addGeometry(text)
- mesh.texts.push(text)
- }
- })
- }
- })
- }
- export { referText }
- export default addText
|