mirror of
				https://github.com/ethan-zf/cesium-plot-js.git
				synced 2025-11-04 01:04:18 +00:00 
			
		
		
		
	feat: 绘制多边形终点吸附效果
This commit is contained in:
		
							parent
							
								
									4ec2260835
								
							
						
					
					
						commit
						bb4373cf7c
					
				@ -22,17 +22,54 @@ export default class Polygon extends Base {
 | 
			
		||||
   * Add points only on click events
 | 
			
		||||
   */
 | 
			
		||||
  addPoint(cartesian: Cartesian3) {
 | 
			
		||||
    this.points.push(cartesian);
 | 
			
		||||
    let endPoint = cartesian;
 | 
			
		||||
    if (this.points.length > 2) {
 | 
			
		||||
      endPoint = this.getEndPoint(cartesian);
 | 
			
		||||
    }
 | 
			
		||||
    this.points.push(endPoint);
 | 
			
		||||
    if (this.points.length === 1) {
 | 
			
		||||
      this.onMouseMove();
 | 
			
		||||
    }
 | 
			
		||||
    if (this.points.length > 2 && this.comparePositions(this.points[0], endPoint)) {
 | 
			
		||||
      this.finishDrawing();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Compare whether the positions of two points are equal.
 | 
			
		||||
   */
 | 
			
		||||
  comparePositions(point1: Cartesian3, point2: Cartesian3) {
 | 
			
		||||
    const lnglat1 = this.cartesianToLnglat(point1);
 | 
			
		||||
    const lnglat2 = this.cartesianToLnglat(point2);
 | 
			
		||||
    return lnglat1[0] === lnglat2[0] && lnglat1[1] === lnglat2[1];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Calculate the distance between two points
 | 
			
		||||
   */
 | 
			
		||||
  calculateDistance(point1: Cartesian3, point2: Cartesian3) {
 | 
			
		||||
    return this.cesium.Cartesian3.distance(point1, point2);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * get end point
 | 
			
		||||
   */
 | 
			
		||||
  getEndPoint(cartesian: Cartesian3) {
 | 
			
		||||
    let endPoint = cartesian;
 | 
			
		||||
    let distance = this.calculateDistance(this.points[0], cartesian);
 | 
			
		||||
    if (distance < 100) endPoint = this.points[0];
 | 
			
		||||
    return endPoint;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Draw a shape based on mouse movement points during the initial drawing.
 | 
			
		||||
   */
 | 
			
		||||
  updateMovingPoint(cartesian: Cartesian3) {
 | 
			
		||||
    const tempPoints = [...this.points, cartesian];
 | 
			
		||||
    let endPoint = cartesian;
 | 
			
		||||
    if (this.points.length > 2) {
 | 
			
		||||
      endPoint = this.getEndPoint(cartesian);
 | 
			
		||||
    }
 | 
			
		||||
    const tempPoints = [...this.points, endPoint];
 | 
			
		||||
    this.setGeometryPoints(tempPoints);
 | 
			
		||||
    if (tempPoints.length === 2) {
 | 
			
		||||
      this.addTempLine();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user