{"version":3,"file":"ThreePolygon.mjs","sources":["../../../../packages/ThreePolygon/ThreePolygon.ts"],"sourcesContent":["import {\r\n  Group, Shape, ExtrudeGeometry, MeshLambertMaterial,\r\n  Mesh, TextureLoader, DoubleSide, RepeatWrapping, Vector2,\r\n  Vector4, Path, ShaderMaterial, Color, UniformsUtils, UniformsLib, CanvasTexture\r\n} from 'three';\r\nimport {getRgbNumber, getAlpha} from \"../../utils/colorUtil\";\r\nimport {clearGroup} from \"../../utils/threeUtil\";\r\nimport {vertex, fragment} from './meshlambert.glsl'\r\nimport type {Polygon} from \"./Type\";\r\nimport type CustomThreeLayer from '../ThreeLayer/CustomThreeLayer'\r\n\r\ninterface Options {\r\n  sideTopColor: string // 侧面顶部颜色。缺省值为 '#ffffff'。\r\n  sideBottomColor: string // 侧面顶部颜色。缺省值为 '#ffffff'。\r\n  sideTexture?: string\r\n  topColor: string\r\n  bottomColor: string\r\n  height: number\r\n  depthTest: boolean // 是否开启深度检测，深度检测的话会面会进行融合\r\n  source: Polygon\r\n}\r\n\r\ninterface Properties {\r\n  height?: number\r\n}\r\n\r\nclass ThreePolygon {\r\n  object: any // Group\r\n  layer?: CustomThreeLayer // threejs的图层对象\r\n  bottomMaterial?: MeshLambertMaterial //底部材质\r\n  topMaterial?: MeshLambertMaterial // 顶部材质\r\n  sideImgMaterial?: MeshLambertMaterial // 侧面贴图材质\r\n  canvasTexture?: CanvasTexture\r\n\r\n  constructor(layer: CustomThreeLayer, options: Options) {\r\n    this.layer = layer;\r\n    this.object = new Group();\r\n    this.createGlobalMaterial(options);\r\n    this.layer.add(this.object);\r\n    this.init(options);\r\n  }\r\n\r\n  createGlobalMaterial(options: Options){\r\n    if(options.sideTexture){\r\n      const sideTexture = new TextureLoader().load(options.sideTexture);\r\n      sideTexture.wrapS = sideTexture.wrapT = RepeatWrapping;\r\n      sideTexture.offset.set(0, 0.5);\r\n      sideTexture.repeat.set(0.1,0.1);\r\n      this.sideImgMaterial = new MeshLambertMaterial({\r\n        depthTest: options.depthTest,\r\n        map: sideTexture,\r\n        side: DoubleSide\r\n      })\r\n    }else{\r\n      const canvas = document.createElement('canvas')\r\n      canvas.width = 512\r\n      canvas.height = 512\r\n      canvas.style.background = 'transparent'\r\n      const ctx = canvas.getContext('2d')\r\n      if(ctx){\r\n        const gradient=ctx.createLinearGradient(0,0,0,512);\r\n        gradient.addColorStop(0,options.sideTopColor);\r\n        gradient.addColorStop(1,options.sideBottomColor);\r\n        ctx.fillStyle=gradient;\r\n        ctx.fillRect(0,0,512,512);\r\n      }\r\n      // console.log('canvas: ', canvas.toDataURL())\r\n      this.canvasTexture = new CanvasTexture(canvas)\r\n    }\r\n    this.bottomMaterial = new MeshLambertMaterial({\r\n      depthTest: options.depthTest,\r\n      transparent: true,\r\n      color: getRgbNumber(options.bottomColor),\r\n      opacity: getAlpha(options.bottomColor),\r\n    })\r\n    this.topMaterial = new MeshLambertMaterial({\r\n      depthTest: options.depthTest,\r\n      transparent: true,\r\n      color: getRgbNumber(options.topColor),\r\n      opacity: getAlpha(options.topColor)\r\n    })\r\n  }\r\n\r\n  init(options: Options) {\r\n    options.source.features.forEach( feature => {\r\n      if(feature.geometry.type === 'Polygon'){\r\n        this.createMesh(feature.geometry.coordinates, feature.properties as Properties, options);\r\n      }else if(feature.geometry.type === 'MultiPolygon'){\r\n        feature.geometry.coordinates.forEach( cood => {\r\n          this.createMesh(cood, feature.properties as Properties, options);\r\n        })\r\n      }\r\n    })\r\n    this.refresh();\r\n  }\r\n\r\n  createMesh(paths: number[][][], properties:Properties, options: Options ) {\r\n    if(paths.length === 0){\r\n      return\r\n    }\r\n    properties = properties || {}\r\n    const height = properties.height !== undefined ? properties.height : options.height;\r\n    const path = paths[0];\r\n    const outPolygonArray: Vector2[] = []\r\n    const holesArray: Path[] = [];\r\n    // 生成面的外围圈\r\n    for(let i=0;i<path.length;i++){\r\n      const point = this.convertLngLat(path[i]);\r\n      outPolygonArray.push(new Vector2(point[0], point[1]))\r\n    }\r\n    // 生成孔洞\r\n    for(let i=1;i<paths.length;i++){\r\n      const inPolygonPath = paths[i];\r\n      const array:Vector2[] = [];\r\n      for(let j=0;j<inPolygonPath.length;j++){\r\n        const inPoint = this.convertLngLat(inPolygonPath[j]);\r\n        array.push(new Vector2(inPoint[0], inPoint[1]))\r\n      }\r\n      holesArray.push(new Path(array));\r\n    }\r\n    const shape = new Shape(outPolygonArray);\r\n    shape.holes = holesArray;\r\n    // 由于需要对顶面，侧面，地面单独控制，因此在此处划分了3个mesh\r\n    if(height > 0){\r\n      // 生成侧面结构\r\n      const sideExtrudeGeometry = new ExtrudeGeometry(shape, {\r\n        depth: height,\r\n        bevelEnabled: false,\r\n        steps: 1,\r\n        bevelSize: 0\r\n      })\r\n      const hideMaterial = new MeshLambertMaterial({\r\n        visible: false\r\n      })\r\n      const materialList = [hideMaterial]\r\n      // 生成侧面\r\n      let sideMaterial;\r\n      if(options.sideTexture){\r\n        sideMaterial = this.sideImgMaterial;\r\n      }else{\r\n        /*sideMaterial = new MeshLambertMaterial({\r\n          depthTest: options.depthTest,\r\n          transparent: true,\r\n          color: getRgbNumber(options.sideColor),\r\n          opacity: getAlpha(options.sideColor),\r\n          side: DoubleSide\r\n        })*/\r\n        const uniforms = UniformsUtils.merge( [\r\n          UniformsLib.common,\r\n          UniformsLib.specularmap,\r\n          UniformsLib.envmap,\r\n          UniformsLib.aomap,\r\n          UniformsLib.lightmap,\r\n          UniformsLib.emissivemap,\r\n          UniformsLib.fog,\r\n          UniformsLib.lights,\r\n          {\r\n            emissive: { value: new Color( '#000' ) },\r\n            \"height\": {value: height},\r\n            \"texture\": {value: this.canvasTexture}\r\n          }\r\n\r\n        ] )\r\n        sideMaterial = new ShaderMaterial({\r\n          depthTest: options.depthTest,\r\n          depthWrite: true,\r\n          side: DoubleSide,\r\n          transparent: true,\r\n          lights: true,\r\n          uniforms,\r\n          vertexShader: vertex,\r\n          fragmentShader: fragment\r\n        })\r\n      }\r\n      materialList.push(sideMaterial);\r\n\r\n      // 生成底面\r\n      const bottomExtrudeGeometry = new ExtrudeGeometry(shape, {\r\n        depth: 0\r\n      })\r\n      const bottomMesh = new Mesh(bottomExtrudeGeometry, this.bottomMaterial);\r\n      this.object.add(bottomMesh);\r\n      const sideMesh = new Mesh(sideExtrudeGeometry, materialList);\r\n      this.object.add(sideMesh);\r\n    }\r\n    // 生成顶面\r\n    const topExtrudeGeometry = new ExtrudeGeometry(shape, {\r\n      depth: 0\r\n    })\r\n    const topMesh = new Mesh(topExtrudeGeometry, this.topMaterial);\r\n    topMesh.translateZ(height);\r\n    this.object.add(topMesh);\r\n  }\r\n\r\n  convertLngLat(lnglat: number[]) {\r\n    return this.layer?.convertLngLat(lnglat);\r\n  }\r\n\r\n  refresh() {\r\n    this.layer?.update();\r\n  }\r\n\r\n  show() {\r\n    this.object.visible = true;\r\n    this.refresh();\r\n  }\r\n\r\n  hide() {\r\n    this.object.visible = false;\r\n    this.refresh();\r\n  }\r\n\r\n  remove(){\r\n    if (this.object) {\r\n      this.layer?.remove(this.object)\r\n    }\r\n  }\r\n\r\n  destroy() {\r\n    if (this.object) {\r\n      clearGroup(this.object);\r\n      if(this.bottomMaterial){\r\n        this.bottomMaterial.dispose();\r\n        this.bottomMaterial = undefined;\r\n      }\r\n      if(this.canvasTexture){\r\n        this.canvasTexture.dispose();\r\n      }\r\n      if(this.topMaterial){\r\n        this.topMaterial.dispose();\r\n        this.topMaterial = undefined;\r\n      }\r\n      if(this.sideImgMaterial){\r\n        this.sideImgMaterial.dispose();\r\n        this.sideImgMaterial = undefined\r\n      }\r\n      this.object = null;\r\n      this.layer = undefined;\r\n    }\r\n  }\r\n}\r\n\r\nexport default ThreePolygon\r\n"],"names":[],"mappings":"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"}