@anov/3d-ability 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/line/round-curve.d.ts +1 -0
- package/dist/line/round-curve.js +6 -3
- package/dist/line/round-curve.js.map +1 -1
- package/dist/poi/2D/index.d.ts +12 -0
- package/dist/poi/{core/Css2D.js → 2D/index.js} +117 -118
- package/dist/poi/2D/index.js.map +1 -0
- package/dist/{poiBack → poi/3D}/index.d.ts +2 -2
- package/dist/{poiBack → poi/3D}/index.js +3 -4
- package/dist/poi/3D/index.js.map +1 -0
- package/dist/poi/3D/type.js.map +1 -0
- package/dist/poi/Poi.d.ts +12 -0
- package/dist/poi/{core/SpriteBase.js → Poi.js} +31 -34
- package/dist/poi/Poi.js.map +1 -0
- package/dist/poi/Sprite/index.d.ts +22 -0
- package/dist/poi/Sprite/index.js +271 -0
- package/dist/poi/Sprite/index.js.map +1 -0
- package/dist/poi/Sprite/index2.d.ts +14 -0
- package/dist/poi/{core/Sprite.js → Sprite/index2.js} +93 -54
- package/dist/poi/Sprite/index2.js.map +1 -0
- package/dist/poi/index.d.ts +4 -12
- package/dist/poi/index.js +4 -28
- package/dist/poi/index.js.map +1 -1
- package/dist/poi/utils/element.d.ts +5 -0
- package/dist/poi/utils/element.js +96 -0
- package/dist/poi/utils/element.js.map +1 -0
- package/dist/poi/utils/type.d.ts +13 -22
- package/dist/poi/utils/type.js +4 -16
- package/dist/poi/utils/type.js.map +1 -1
- package/package.json +3 -3
- package/dist/poi/core/Base.d.ts +0 -7
- package/dist/poi/core/Base.js +0 -24
- package/dist/poi/core/Base.js.map +0 -1
- package/dist/poi/core/Css2D.js.map +0 -1
- package/dist/poi/core/Css3D.d.ts +0 -1
- package/dist/poi/core/Css3D.js +0 -24
- package/dist/poi/core/Css3D.js.map +0 -1
- package/dist/poi/core/Sprite.d.ts +0 -12
- package/dist/poi/core/Sprite.js.map +0 -1
- package/dist/poi/core/SpriteBase.d.ts +0 -11
- package/dist/poi/core/SpriteBase.js.map +0 -1
- package/dist/poi/utils/base64.d.ts +0 -3
- package/dist/poi/utils/base64.js +0 -4
- package/dist/poi/utils/base64.js.map +0 -1
- package/dist/poi/utils/css.d.ts +0 -35
- package/dist/poi/utils/css.js +0 -45
- package/dist/poi/utils/css.js.map +0 -1
- package/dist/poiBack/assets.d.ts +0 -2
- package/dist/poiBack/assets.js +0 -3
- package/dist/poiBack/assets.js.map +0 -1
- package/dist/poiBack/dom.d.ts +0 -2
- package/dist/poiBack/dom.js +0 -36
- package/dist/poiBack/dom.js.map +0 -1
- package/dist/poiBack/index.js.map +0 -1
- package/dist/poiBack/type.js.map +0 -1
- /package/dist/{poiBack → poi/3D}/type.d.ts +0 -0
- /package/dist/{poiBack → poi/3D}/type.js +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ import createVolumetricCloud from './environment/volumetricCloud/inex';
|
|
|
11
11
|
import createSkyCloud from './environment/shaderCloud/index';
|
|
12
12
|
import Snow from './environment/showShader';
|
|
13
13
|
import Rain from './environment/rainShader';
|
|
14
|
-
import
|
|
14
|
+
import { Css2DPoi, EAnimationType, SpritePoi } from './poi';
|
|
15
15
|
import HeatMap from './heatmap/index';
|
|
16
16
|
import SkyBox from './environment/skyBox';
|
|
17
17
|
import Camera from './camera/index';
|
|
@@ -19,5 +19,5 @@ import { RoundLineGeometry, createRoundLineWallMesh } from './line/round-curve';
|
|
|
19
19
|
import Fog2DMesh from './weather/fog2DMesh';
|
|
20
20
|
export * from './scene';
|
|
21
21
|
export { SceneControl, // todo remove
|
|
22
|
-
createRain, createSnow, createSun, createSkySystem, createVolumetricCloud, createSkyCloud, Snow, Rain,
|
|
22
|
+
createRain, createSnow, createSun, createSkySystem, createVolumetricCloud, createSkyCloud, Snow, Rain, Css2DPoi, SpritePoi, EAnimationType, HeatMap, initPostEffects, // effect
|
|
23
23
|
createHighSelectedTool, GridMaterial, SkyBox, ViewHelper, Camera, RoundLineGeometry, createRoundLineWallMesh, Fog2DMesh, };
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import createVolumetricCloud from "./environment/volumetricCloud/inex";
|
|
|
11
11
|
import createSkyCloud from "./environment/shaderCloud/index";
|
|
12
12
|
import Snow from "./environment/showShader";
|
|
13
13
|
import Rain from "./environment/rainShader";
|
|
14
|
-
import
|
|
14
|
+
import { Css2DPoi, EAnimationType, SpritePoi } from "./poi";
|
|
15
15
|
import HeatMap from "./heatmap/index";
|
|
16
16
|
import SkyBox from "./environment/skyBox";
|
|
17
17
|
import Camera from "./camera/index";
|
|
@@ -20,7 +20,7 @@ import Fog2DMesh from "./weather/fog2DMesh";
|
|
|
20
20
|
export * from "./scene";
|
|
21
21
|
export { SceneControl,
|
|
22
22
|
// todo remove
|
|
23
|
-
createRain, createSnow, createSun, createSkySystem, createVolumetricCloud, createSkyCloud, Snow, Rain,
|
|
23
|
+
createRain, createSnow, createSun, createSkySystem, createVolumetricCloud, createSkyCloud, Snow, Rain, Css2DPoi, SpritePoi, EAnimationType, HeatMap, initPostEffects,
|
|
24
24
|
// effect
|
|
25
25
|
createHighSelectedTool, GridMaterial, SkyBox, ViewHelper, Camera, RoundLineGeometry, createRoundLineWallMesh, Fog2DMesh };
|
|
26
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SceneControl","createSnow","createRain","initPostEffects","createHighSelectedTool","createSun","GridMaterial","ViewHelper","createSkySystem","createVolumetricCloud","createSkyCloud","Snow","Rain","
|
|
1
|
+
{"version":3,"names":["SceneControl","createSnow","createRain","initPostEffects","createHighSelectedTool","createSun","GridMaterial","ViewHelper","createSkySystem","createVolumetricCloud","createSkyCloud","Snow","Rain","Css2DPoi","EAnimationType","SpritePoi","HeatMap","SkyBox","Camera","RoundLineGeometry","createRoundLineWallMesh","Fog2DMesh"],"sources":["../src/index.ts"],"sourcesContent":["import { SceneControl } from '@anov/3d-core'\nimport { createSnow } from './environment/snow'\nimport { createRain } from './environment/rain'\nimport { initPostEffects } from './postEffects'\nimport createHighSelectedTool from './postEffects/outlinePass'\nimport { createSun } from './environment/sun'\nimport GridMaterial from './material/pristineGridMaterial'\nimport ViewHelper from './helper/view'\nimport createSkySystem from './environment/sky'\nimport createVolumetricCloud from './environment/volumetricCloud/inex'\nimport createSkyCloud from './environment/shaderCloud/index'\nimport Snow from './environment/showShader'\nimport Rain from './environment/rainShader'\nimport { Css2DPoi, EAnimationType, SpritePoi } from './poi'\nimport HeatMap from './heatmap/index'\nimport SkyBox from './environment/skyBox'\nimport Camera from './camera/index'\nimport { RoundLineGeometry, createRoundLineWallMesh } from './line/round-curve'\nimport Fog2DMesh from './weather/fog2DMesh'\n\nexport * from './scene'\n\nexport {\n SceneControl, // todo remove\n createRain,\n createSnow,\n createSun,\n createSkySystem,\n createVolumetricCloud,\n createSkyCloud,\n Snow,\n Rain,\n Css2DPoi,\n SpritePoi,\n EAnimationType,\n HeatMap,\n initPostEffects, // effect\n createHighSelectedTool,\n GridMaterial,\n SkyBox,\n ViewHelper,\n Camera,\n RoundLineGeometry,\n createRoundLineWallMesh,\n Fog2DMesh,\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,eAAe;AAC5C,SAASC,UAAU;AACnB,SAASC,UAAU;AACnB,SAASC,eAAe;AACxB,OAAOC,sBAAsB;AAC7B,SAASC,SAAS;AAClB,OAAOC,YAAY;AACnB,OAAOC,UAAU;AACjB,OAAOC,eAAe;AACtB,OAAOC,qBAAqB;AAC5B,OAAOC,cAAc;AACrB,OAAOC,IAAI;AACX,OAAOC,IAAI;AACX,SAASC,QAAQ,EAAEC,cAAc,EAAEC,SAAS;AAC5C,OAAOC,OAAO;AACd,OAAOC,MAAM;AACb,OAAOC,MAAM;AACb,SAASC,iBAAiB,EAAEC,uBAAuB;AACnD,OAAOC,SAAS;AAEhB;AAEA,SACErB,YAAY;AAAE;AACdE,UAAU,EACVD,UAAU,EACVI,SAAS,EACTG,eAAe,EACfC,qBAAqB,EACrBC,cAAc,EACdC,IAAI,EACJC,IAAI,EACJC,QAAQ,EACRE,SAAS,EACTD,cAAc,EACdE,OAAO,EACPb,eAAe;AAAE;AACjBC,sBAAsB,EACtBE,YAAY,EACZW,MAAM,EACNV,UAAU,EACVW,MAAM,EACNC,iBAAiB,EACjBC,uBAAuB,EACvBC,SAAS"}
|
|
@@ -13,6 +13,7 @@ declare type RoundLineGeometryOption = {
|
|
|
13
13
|
height?: number;
|
|
14
14
|
};
|
|
15
15
|
declare class RoundLineGeometry extends BufferGeometry {
|
|
16
|
+
curve: any;
|
|
16
17
|
constructor(points: Vector3[], option: RoundLineGeometryOption);
|
|
17
18
|
}
|
|
18
19
|
declare const createRoundLineWallMesh: (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => any;
|
package/dist/line/round-curve.js
CHANGED
|
@@ -7,8 +7,6 @@ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefine
|
|
|
7
7
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
8
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
9
9
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
10
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
11
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
12
10
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
13
11
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
14
12
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
@@ -17,6 +15,9 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) ===
|
|
|
17
15
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
18
16
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
19
17
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
18
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
19
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
20
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
20
21
|
/* eslint-disable no-void */
|
|
21
22
|
import { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Group, LineCurve3, Mesh, MeshBasicMaterial, QuadraticBezierCurve3, Quaternion, ShaderMaterial, Shape, Vector3 } from '@anov/3d-core';
|
|
22
23
|
/**
|
|
@@ -190,13 +191,15 @@ var RoundLineGeometry = /*#__PURE__*/function (_BufferGeometry) {
|
|
|
190
191
|
var _this;
|
|
191
192
|
_classCallCheck(this, RoundLineGeometry);
|
|
192
193
|
_this = _super.call(this);
|
|
194
|
+
_defineProperty(_assertThisInitialized(_this), "curve", void 0);
|
|
193
195
|
var _createCurve = createCurve(points, (_option$radius = option.radius) !== null && _option$radius !== void 0 ? _option$radius : 20, void 0, option.close || false),
|
|
194
196
|
_createCurve2 = _slicedToArray(_createCurve, 1),
|
|
195
197
|
curve = _createCurve2[0];
|
|
196
198
|
var currentPoints = curve.getPoints(option.pointNum || 1000);
|
|
197
199
|
var geometry = new BufferGeometry();
|
|
198
200
|
geometry.setFromPoints(currentPoints);
|
|
199
|
-
|
|
201
|
+
_this.curve = curve;
|
|
202
|
+
return _this;
|
|
200
203
|
}
|
|
201
204
|
return _createClass(RoundLineGeometry);
|
|
202
205
|
}(BufferGeometry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BoxGeometry","BufferGeometry","Color","CurvePath","ExtrudeGeometry","Group","LineCurve3","Mesh","MeshBasicMaterial","QuadraticBezierCurve3","Quaternion","ShaderMaterial","Shape","Vector3","createBoxGeometryByPoints","a","b","height","depth","material","width","distanceTo","box","currentMaterial","color","mesh","midpoint","addVectors","multiplyScalar","position","x","y","z","direction","subVectors","normalize","axis","angle","angleTo","quaternion","setFromAxisAngle","newDirection","applyQuaternion","rotateOnAxis","rectangle","w","h","shape","moveTo","lineTo","defMaterial","uniforms","u_color","value","u_height","u_opacity","vertexShader","fragmentShader","transparent","side","depthTest","createCurve","points","radius","close","curve","length","Error","line","curves","push","lines","i","dir","clone","sub","realEndPoints","add","firstPoint","dir1","dir2","dir3","nextDir1","nextDir2","p1","p2","p3","beziercurve","realLastPoints","dir4","p4","p5","p6","beziercurve2","laseLine","group","forEach","type","extrudeSettings","steps","bevelEnabled","extrudePath","geometry","arcWall","translateY","v1","v2","RoundLineGeometry","option","currentPoints","getPoints","pointNum","setFromPoints","createRoundLineWallMesh","_"],"sources":["../../src/line/round-curve.ts"],"sourcesContent":["/* eslint-disable no-void */\nimport { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Group, LineCurve3, Mesh, MeshBasicMaterial, QuadraticBezierCurve3, Quaternion, ShaderMaterial, Shape, Vector3 } from '@anov/3d-core'\n\nexport interface TextureParamsType {\n texture?: string\n repeatX?: number\n repeatY?: number\n wrapS?: number\n wrapT?: number\n}\n\n/**\n * TODO: 参数优化\n * create box geometry by two points\n * just provide data not create mesh\n * @param a\n * @param b\n * @param height\n * @param depth\n */\nconst createBoxGeometryByPoints = (a: Vector3, b: Vector3, height = 30, depth = 10, material?: ShaderMaterial) => {\n const width = a.distanceTo(b)\n const box = new BoxGeometry(width, height, depth)\n\n let currentMaterial: MeshBasicMaterial | ShaderMaterial = new MeshBasicMaterial({ color: new Color('#fff') })\n if (material)\n currentMaterial = material\n\n const mesh = new Mesh(box, currentMaterial)\n const midpoint = new Vector3().addVectors(a, b).multiplyScalar(0.5)\n\n mesh.position.x = midpoint.x\n mesh.position.y = midpoint.y + height / 2\n mesh.position.z = midpoint.z\n\n const direction = new Vector3()\n direction.subVectors(a, b)\n direction.normalize()\n\n const axis = new Vector3(0, 1, 0) // axis\n const angle = new Vector3(1, 0, 0).angleTo(direction)\n\n const quaternion = new Quaternion().setFromAxisAngle(axis, angle)\n const newDirection = new Vector3(1, 0, 0).applyQuaternion(quaternion)\n\n if (!newDirection.angleTo(direction))\n mesh.rotateOnAxis(axis, angle)\n else\n mesh.rotateOnAxis(axis, -angle)\n\n return mesh\n}\n\n/**\n * rectangle shape\n * @param w\n * @param h\n * @returns\n */\nconst rectangle = (w = 0.1, h = 50) => {\n const shape = new Shape()\n\n shape.moveTo(0, 0)\n shape.lineTo(0, w)\n shape.lineTo(h, w)\n shape.lineTo(h, 0)\n shape.lineTo(0, 0)\n\n return shape\n}\n\nconst defMaterial = new ShaderMaterial({\n uniforms: {\n u_color: { value: new Color('#fab73f') },\n u_height: { value: 100 },\n u_opacity: { value: 1.0 },\n },\n\n vertexShader: `\n uniform float u_height;\n uniform float u_speed;\n varying float v_opacity;\n\n void main() {\n v_opacity = mix(1.0, 0.0, position.y / u_height);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform vec3 u_color;\n uniform float u_opacity;\n varying float v_opacity;\n\n void main() {\n gl_FragColor = vec4(u_color, 1.0);\n }\n `,\n transparent: true,\n side: 2,\n depthTest: false,\n})\n\n// const material = new MeshBasicMaterial({ color: new Color('#fab73f'), side: DoubleSide })\n\n/**\n * create round curve\n * @param points\n * @param radius\n * @param close\n * @returns\n */\nconst createCurve = (points: Vector3[], radius = 20, height = 50, close = false, material?: ShaderMaterial) => {\n if (!material)\n material = defMaterial\n\n const curve = new CurvePath()\n const shape = rectangle(0.1, height)\n\n if (points.length < 2)\n throw new Error('At least two points are required to create a curve')\n\n if (points.length === 2) {\n const line = new LineCurve3(points[0], points[1])\n curve.curves.push(line)\n\n return curve\n }\n\n const lines = []\n\n for (let i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n const dir = points[0].clone().sub(points[1]).normalize()\n const realEndPoints = points[1].clone().add(dir.multiplyScalar(radius))\n\n let firstPoint = points[0]\n\n if (close)\n firstPoint = points[0].clone().add(points[1].clone().sub(points[0]).normalize().multiplyScalar(radius))\n\n lines.push(new LineCurve3(firstPoint, realEndPoints))\n }\n else if (i === points.length - 1) {\n //\n }\n else {\n const dir1 = points[i - 1].clone().sub(points[i]).normalize()\n const dir2 = points[i + 1].clone().sub(points[i]).normalize()\n const dir3 = points[i].clone().sub(points[i + 1]).normalize()\n\n const nextDir1 = dir2.clone()\n const nextDir2 = points[i].clone().sub(points[i + 1]).normalize()\n\n const p1 = points[i].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[i].clone()\n const p3 = points[i].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p1, p2, p3)\n\n const realLastPoints = points[i].clone().add(nextDir1.multiplyScalar(radius))\n const realEndPoints = points[i + 1].clone().add(nextDir2.multiplyScalar(radius))\n\n lines.push(beziercurve)\n lines.push(new LineCurve3(realLastPoints, i + 1 === points.length - 1\n ? close\n ? points[i + 1].clone().add(dir3.multiplyScalar(radius))\n : points[i + 1]\n : realEndPoints))\n }\n }\n\n if (close) {\n // first point\n const dir1 = points[1].clone().sub(points[0]).normalize()\n const dir2 = points[points.length - 1].clone().sub(points[0]).normalize()\n\n const p1 = points[0].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[0]\n const p3 = points[0].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p3, p2, p1)\n\n // last point\n const dir3 = points[0].clone().sub(points[points.length - 1]).normalize()\n const dir4 = points[points.length - 2].clone().sub(points[points.length - 1]).normalize()\n\n const p4 = points[points.length - 1].clone().add(dir3.multiplyScalar(radius))\n const p5 = points[points.length - 1]\n const p6 = points[points.length - 1].clone().add(dir4.multiplyScalar(radius))\n\n const beziercurve2 = new QuadraticBezierCurve3(p6, p5, p4)\n\n // last line\n const laseLine = new LineCurve3(p4, p3)\n\n lines.push(beziercurve2)\n lines.push(laseLine)\n lines.push(beziercurve)\n }\n\n const group = new Group()\n\n lines.forEach((line) => {\n curve.curves.push(line)\n\n if (line.type === 'QuadraticBezierCurve3') {\n const extrudeSettings = {\n steps: 100,\n bevelEnabled: false,\n extrudePath: line,\n }\n\n const geometry = new ExtrudeGeometry(shape, extrudeSettings)\n const arcWall = new Mesh(geometry, material)\n\n arcWall.translateY(arcWall.position.y + height)\n\n if (radius)\n group.add(arcWall)\n }\n else {\n const mesh = createBoxGeometryByPoints(line.v1, line.v2, height, 0.1, material)\n group.add(mesh)\n }\n })\n\n return [curve, group] as any\n}\n\ntype RoundLineGeometryOption = {\n radius: number\n close: boolean\n pointNum?: number\n height?: number\n}\n\nclass RoundLineGeometry extends BufferGeometry {\n constructor(points: Vector3[], option: RoundLineGeometryOption) {\n super()\n\n const [curve] = createCurve(points, option.radius ?? 20, void 0, option.close || false)\n const currentPoints = curve.getPoints(option.pointNum || 1000)\n\n const geometry = new BufferGeometry()\n geometry.setFromPoints(currentPoints)\n\n return geometry\n }\n}\n\nconst createRoundLineWallMesh = (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => {\n const [_, group] = createCurve(points, option.radius ?? 20, option.height ?? 50, option.close || false, material)\n\n return group\n}\n\nexport {\n RoundLineGeometry,\n createRoundLineWallMesh,\n}"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AACA,SAASA,WAAW,EAAEC,cAAc,EAAEC,KAAK,EAAEC,SAAS,EAAEC,eAAe,EAAEC,KAAK,EAAEC,UAAU,EAAEC,IAAI,EAAEC,iBAAiB,EAAEC,qBAAqB,EAAEC,UAAU,EAAEC,cAAc,EAAEC,KAAK,EAAEC,OAAO,QAAQ,eAAe;AAU7M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,yBAAyB,GAAG,SAA5BA,yBAAyB,CAAIC,CAAU,EAAEC,CAAU,EAAyD;EAAA,IAAvDC,MAAM,uEAAG,EAAE;EAAA,IAAEC,KAAK,uEAAG,EAAE;EAAA,IAAEC,QAAyB;EAC3G,IAAMC,KAAK,GAAGL,CAAC,CAACM,UAAU,CAACL,CAAC,CAAC;EAC7B,IAAMM,GAAG,GAAG,IAAItB,WAAW,CAACoB,KAAK,EAAEH,MAAM,EAAEC,KAAK,CAAC;EAEjD,IAAIK,eAAmD,GAAG,IAAIf,iBAAiB,CAAC;IAAEgB,KAAK,EAAE,IAAItB,KAAK,CAAC,MAAM;EAAE,CAAC,CAAC;EAC7G,IAAIiB,QAAQ,EACVI,eAAe,GAAGJ,QAAQ;EAE5B,IAAMM,IAAI,GAAG,IAAIlB,IAAI,CAACe,GAAG,EAAEC,eAAe,CAAC;EAC3C,IAAMG,QAAQ,GAAG,IAAIb,OAAO,EAAE,CAACc,UAAU,CAACZ,CAAC,EAAEC,CAAC,CAAC,CAACY,cAAc,CAAC,GAAG,CAAC;EAEnEH,IAAI,CAACI,QAAQ,CAACC,CAAC,GAAGJ,QAAQ,CAACI,CAAC;EAC5BL,IAAI,CAACI,QAAQ,CAACE,CAAC,GAAGL,QAAQ,CAACK,CAAC,GAAGd,MAAM,GAAG,CAAC;EACzCQ,IAAI,CAACI,QAAQ,CAACG,CAAC,GAAGN,QAAQ,CAACM,CAAC;EAE5B,IAAMC,SAAS,GAAG,IAAIpB,OAAO,EAAE;EAC/BoB,SAAS,CAACC,UAAU,CAACnB,CAAC,EAAEC,CAAC,CAAC;EAC1BiB,SAAS,CAACE,SAAS,EAAE;EAErB,IAAMC,IAAI,GAAG,IAAIvB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC;EAClC,IAAMwB,KAAK,GAAG,IAAIxB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAACyB,OAAO,CAACL,SAAS,CAAC;EAErD,IAAMM,UAAU,GAAG,IAAI7B,UAAU,EAAE,CAAC8B,gBAAgB,CAACJ,IAAI,EAAEC,KAAK,CAAC;EACjE,IAAMI,YAAY,GAAG,IAAI5B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC6B,eAAe,CAACH,UAAU,CAAC;EAErE,IAAI,CAACE,YAAY,CAACH,OAAO,CAACL,SAAS,CAAC,EAClCR,IAAI,CAACkB,YAAY,CAACP,IAAI,EAAEC,KAAK,CAAC,MAE9BZ,IAAI,CAACkB,YAAY,CAACP,IAAI,EAAE,CAACC,KAAK,CAAC;EAEjC,OAAOZ,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,IAAMmB,SAAS,GAAG,SAAZA,SAAS,GAAwB;EAAA,IAApBC,CAAC,uEAAG,GAAG;EAAA,IAAEC,CAAC,uEAAG,EAAE;EAChC,IAAMC,KAAK,GAAG,IAAInC,KAAK,EAAE;EAEzBmC,KAAK,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAClBD,KAAK,CAACE,MAAM,CAAC,CAAC,EAAEJ,CAAC,CAAC;EAClBE,KAAK,CAACE,MAAM,CAACH,CAAC,EAAED,CAAC,CAAC;EAClBE,KAAK,CAACE,MAAM,CAACH,CAAC,EAAE,CAAC,CAAC;EAClBC,KAAK,CAACE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAElB,OAAOF,KAAK;AACd,CAAC;AAED,IAAMG,WAAW,GAAG,IAAIvC,cAAc,CAAC;EACrCwC,QAAQ,EAAE;IACRC,OAAO,EAAE;MAAEC,KAAK,EAAE,IAAInD,KAAK,CAAC,SAAS;IAAE,CAAC;IACxCoD,QAAQ,EAAE;MAAED,KAAK,EAAE;IAAI,CAAC;IACxBE,SAAS,EAAE;MAAEF,KAAK,EAAE;IAAI;EAC1B,CAAC;EAEDG,YAAY,6RASJ;EACRC,cAAc,6LAQb;EACDC,WAAW,EAAE,IAAI;EACjBC,IAAI,EAAE,CAAC;EACPC,SAAS,EAAE;AACb,CAAC,CAAC;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAAIC,MAAiB,EAAyE;EAAA,IAAvEC,MAAM,uEAAG,EAAE;EAAA,IAAE9C,MAAM,uEAAG,EAAE;EAAA,IAAE+C,KAAK,uEAAG,KAAK;EAAA,IAAE7C,QAAyB;EACxG,IAAI,CAACA,QAAQ,EACXA,QAAQ,GAAG+B,WAAW;EAExB,IAAMe,KAAK,GAAG,IAAI9D,SAAS,EAAE;EAC7B,IAAM4C,KAAK,GAAGH,SAAS,CAAC,GAAG,EAAE3B,MAAM,CAAC;EAEpC,IAAI6C,MAAM,CAACI,MAAM,GAAG,CAAC,EACnB,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EAEvE,IAAIL,MAAM,CAACI,MAAM,KAAK,CAAC,EAAE;IACvB,IAAME,IAAI,GAAG,IAAI9D,UAAU,CAACwD,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC;IACjDG,KAAK,CAACI,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC;IAEvB,OAAOH,KAAK;EACd;EAEA,IAAMM,KAAK,GAAG,EAAE;EAEhB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,MAAM,CAACI,MAAM,GAAG,CAAC,EAAEM,CAAC,EAAE,EAAE;IAC1C,IAAIA,CAAC,KAAK,CAAC,EAAE;MACX,IAAMC,GAAG,GAAGX,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE;MACxD,IAAMyC,aAAa,GAAGd,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACJ,GAAG,CAAC7C,cAAc,CAACmC,MAAM,CAAC,CAAC;MAEvE,IAAIe,UAAU,GAAGhB,MAAM,CAAC,CAAC,CAAC;MAE1B,IAAIE,KAAK,EACPc,UAAU,GAAGhB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACf,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE,CAACP,cAAc,CAACmC,MAAM,CAAC,CAAC;MAEzGQ,KAAK,CAACD,IAAI,CAAC,IAAIhE,UAAU,CAACwE,UAAU,EAAEF,aAAa,CAAC,CAAC;IACvD,CAAC,MACI,IAAIJ,CAAC,KAAKV,MAAM,CAACI,MAAM,GAAG,CAAC,EAAE;MAChC;IAAA,CACD,MACI;MACH,IAAMa,IAAI,GAAGjB,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAC7D,IAAM6C,IAAI,GAAGlB,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAC7D,IAAM8C,IAAI,GAAGnB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAE7D,IAAM+C,QAAQ,GAAGF,IAAI,CAACN,KAAK,EAAE;MAC7B,IAAMS,QAAQ,GAAGrB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAEjE,IAAMiD,EAAE,GAAGtB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACE,IAAI,CAACnD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAC7D,IAAMsB,EAAE,GAAGvB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE;MAC5B,IAAMY,EAAE,GAAGxB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACG,IAAI,CAACpD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAE7D,IAAMwB,WAAW,GAAG,IAAI9E,qBAAqB,CAAC2E,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC;MAEzD,IAAME,cAAc,GAAG1B,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACK,QAAQ,CAACtD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAC7E,IAAMa,cAAa,GAAGd,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACM,QAAQ,CAACvD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAEhFQ,KAAK,CAACD,IAAI,CAACiB,WAAW,CAAC;MACvBhB,KAAK,CAACD,IAAI,CAAC,IAAIhE,UAAU,CAACkF,cAAc,EAAEhB,CAAC,GAAG,CAAC,KAAKV,MAAM,CAACI,MAAM,GAAG,CAAC,GACjEF,KAAK,GACHF,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACI,IAAI,CAACrD,cAAc,CAACmC,MAAM,CAAC,CAAC,GACtDD,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,GACfI,cAAa,CAAC,CAAC;IACrB;EACF;EAEA,IAAIZ,KAAK,EAAE;IACT;IACA,IAAMe,IAAI,GAAGjB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE;IACzD,IAAM6C,KAAI,GAAGlB,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE;IAEzE,IAAMiD,EAAE,GAAGtB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACE,IAAI,CAACnD,cAAc,CAACmC,MAAM,CAAC,CAAC;IAC7D,IAAMsB,GAAE,GAAGvB,MAAM,CAAC,CAAC,CAAC;IACpB,IAAMwB,GAAE,GAAGxB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACG,KAAI,CAACpD,cAAc,CAACmC,MAAM,CAAC,CAAC;IAE7D,IAAMwB,YAAW,GAAG,IAAI9E,qBAAqB,CAAC6E,GAAE,EAAED,GAAE,EAAED,EAAE,CAAC;;IAEzD;IACA,IAAMH,KAAI,GAAGnB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC/B,SAAS,EAAE;IACzE,IAAMsD,IAAI,GAAG3B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC/B,SAAS,EAAE;IAEzF,IAAMuD,EAAE,GAAG5B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACG,GAAG,CAACI,KAAI,CAACrD,cAAc,CAACmC,MAAM,CAAC,CAAC;IAC7E,IAAM4B,EAAE,GAAG7B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC;IACpC,IAAM0B,EAAE,GAAG9B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACG,GAAG,CAACY,IAAI,CAAC7D,cAAc,CAACmC,MAAM,CAAC,CAAC;IAE7E,IAAM8B,YAAY,GAAG,IAAIpF,qBAAqB,CAACmF,EAAE,EAAED,EAAE,EAAED,EAAE,CAAC;;IAE1D;IACA,IAAMI,QAAQ,GAAG,IAAIxF,UAAU,CAACoF,EAAE,EAAEJ,GAAE,CAAC;IAEvCf,KAAK,CAACD,IAAI,CAACuB,YAAY,CAAC;IACxBtB,KAAK,CAACD,IAAI,CAACwB,QAAQ,CAAC;IACpBvB,KAAK,CAACD,IAAI,CAACiB,YAAW,CAAC;EACzB;EAEA,IAAMQ,KAAK,GAAG,IAAI1F,KAAK,EAAE;EAEzBkE,KAAK,CAACyB,OAAO,CAAC,UAAC5B,IAAI,EAAK;IACtBH,KAAK,CAACI,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC;IAEvB,IAAIA,IAAI,CAAC6B,IAAI,KAAK,uBAAuB,EAAE;MACzC,IAAMC,eAAe,GAAG;QACtBC,KAAK,EAAE,GAAG;QACVC,YAAY,EAAE,KAAK;QACnBC,WAAW,EAAEjC;MACf,CAAC;MAED,IAAMkC,QAAQ,GAAG,IAAIlG,eAAe,CAAC2C,KAAK,EAAEmD,eAAe,CAAC;MAC5D,IAAMK,OAAO,GAAG,IAAIhG,IAAI,CAAC+F,QAAQ,EAAEnF,QAAQ,CAAC;MAE5CoF,OAAO,CAACC,UAAU,CAACD,OAAO,CAAC1E,QAAQ,CAACE,CAAC,GAAGd,MAAM,CAAC;MAE/C,IAAI8C,MAAM,EACRgC,KAAK,CAAClB,GAAG,CAAC0B,OAAO,CAAC;IACtB,CAAC,MACI;MACH,IAAM9E,IAAI,GAAGX,yBAAyB,CAACsD,IAAI,CAACqC,EAAE,EAAErC,IAAI,CAACsC,EAAE,EAAEzF,MAAM,EAAE,GAAG,EAAEE,QAAQ,CAAC;MAC/E4E,KAAK,CAAClB,GAAG,CAACpD,IAAI,CAAC;IACjB;EACF,CAAC,CAAC;EAEF,OAAO,CAACwC,KAAK,EAAE8B,KAAK,CAAC;AACvB,CAAC;AAAA,IASKY,iBAAiB;EAAA;EAAA;EACrB,2BAAY7C,MAAiB,EAAE8C,MAA+B,EAAE;IAAA;IAAA;IAAA;IAC9D;IAEA,mBAAgB/C,WAAW,CAACC,MAAM,oBAAE8C,MAAM,CAAC7C,MAAM,2DAAI,EAAE,EAAE,KAAK,CAAC,EAAE6C,MAAM,CAAC5C,KAAK,IAAI,KAAK,CAAC;MAAA;MAAhFC,KAAK;IACZ,IAAM4C,aAAa,GAAG5C,KAAK,CAAC6C,SAAS,CAACF,MAAM,CAACG,QAAQ,IAAI,IAAI,CAAC;IAE9D,IAAMT,QAAQ,GAAG,IAAIrG,cAAc,EAAE;IACrCqG,QAAQ,CAACU,aAAa,CAACH,aAAa,CAAC;IAErC,yCAAOP,QAAQ;EACjB;EAAC;AAAA,EAX6BrG,cAAc;AAc9C,IAAMgH,uBAAuB,GAAG,SAA1BA,uBAAuB,CAAInD,MAAiB,EAAE8C,MAA+B,EAAEzF,QAAyB,EAAK;EAAA;EACjH,oBAAmB0C,WAAW,CAACC,MAAM,qBAAE8C,MAAM,CAAC7C,MAAM,6DAAI,EAAE,oBAAE6C,MAAM,CAAC3F,MAAM,2DAAI,EAAE,EAAE2F,MAAM,CAAC5C,KAAK,IAAI,KAAK,EAAE7C,QAAQ,CAAC;IAAA;IAA1G+F,CAAC;IAAEnB,KAAK;EAEf,OAAOA,KAAK;AACd,CAAC;AAED,SACEY,iBAAiB,EACjBM,uBAAuB"}
|
|
1
|
+
{"version":3,"names":["BoxGeometry","BufferGeometry","Color","CurvePath","ExtrudeGeometry","Group","LineCurve3","Mesh","MeshBasicMaterial","QuadraticBezierCurve3","Quaternion","ShaderMaterial","Shape","Vector3","createBoxGeometryByPoints","a","b","height","depth","material","width","distanceTo","box","currentMaterial","color","mesh","midpoint","addVectors","multiplyScalar","position","x","y","z","direction","subVectors","normalize","axis","angle","angleTo","quaternion","setFromAxisAngle","newDirection","applyQuaternion","rotateOnAxis","rectangle","w","h","shape","moveTo","lineTo","defMaterial","uniforms","u_color","value","u_height","u_opacity","vertexShader","fragmentShader","transparent","side","depthTest","createCurve","points","radius","close","curve","length","Error","line","curves","push","lines","i","dir","clone","sub","realEndPoints","add","firstPoint","dir1","dir2","dir3","nextDir1","nextDir2","p1","p2","p3","beziercurve","realLastPoints","dir4","p4","p5","p6","beziercurve2","laseLine","group","forEach","type","extrudeSettings","steps","bevelEnabled","extrudePath","geometry","arcWall","translateY","v1","v2","RoundLineGeometry","option","currentPoints","getPoints","pointNum","setFromPoints","createRoundLineWallMesh","_"],"sources":["../../src/line/round-curve.ts"],"sourcesContent":["/* eslint-disable no-void */\nimport { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Group, LineCurve3, Mesh, MeshBasicMaterial, QuadraticBezierCurve3, Quaternion, ShaderMaterial, Shape, Vector3 } from '@anov/3d-core'\n\nexport interface TextureParamsType {\n texture?: string\n repeatX?: number\n repeatY?: number\n wrapS?: number\n wrapT?: number\n}\n\n/**\n * TODO: 参数优化\n * create box geometry by two points\n * just provide data not create mesh\n * @param a\n * @param b\n * @param height\n * @param depth\n */\nconst createBoxGeometryByPoints = (a: Vector3, b: Vector3, height = 30, depth = 10, material?: ShaderMaterial) => {\n const width = a.distanceTo(b)\n const box = new BoxGeometry(width, height, depth)\n\n let currentMaterial: MeshBasicMaterial | ShaderMaterial = new MeshBasicMaterial({ color: new Color('#fff') })\n if (material)\n currentMaterial = material\n\n const mesh = new Mesh(box, currentMaterial)\n const midpoint = new Vector3().addVectors(a, b).multiplyScalar(0.5)\n\n mesh.position.x = midpoint.x\n mesh.position.y = midpoint.y + height / 2\n mesh.position.z = midpoint.z\n\n const direction = new Vector3()\n direction.subVectors(a, b)\n direction.normalize()\n\n const axis = new Vector3(0, 1, 0) // axis\n const angle = new Vector3(1, 0, 0).angleTo(direction)\n\n const quaternion = new Quaternion().setFromAxisAngle(axis, angle)\n const newDirection = new Vector3(1, 0, 0).applyQuaternion(quaternion)\n\n if (!newDirection.angleTo(direction))\n mesh.rotateOnAxis(axis, angle)\n else\n mesh.rotateOnAxis(axis, -angle)\n\n return mesh\n}\n\n/**\n * rectangle shape\n * @param w\n * @param h\n * @returns\n */\nconst rectangle = (w = 0.1, h = 50) => {\n const shape = new Shape()\n\n shape.moveTo(0, 0)\n shape.lineTo(0, w)\n shape.lineTo(h, w)\n shape.lineTo(h, 0)\n shape.lineTo(0, 0)\n\n return shape\n}\n\nconst defMaterial = new ShaderMaterial({\n uniforms: {\n u_color: { value: new Color('#fab73f') },\n u_height: { value: 100 },\n u_opacity: { value: 1.0 },\n },\n\n vertexShader: `\n uniform float u_height;\n uniform float u_speed;\n varying float v_opacity;\n\n void main() {\n v_opacity = mix(1.0, 0.0, position.y / u_height);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform vec3 u_color;\n uniform float u_opacity;\n varying float v_opacity;\n\n void main() {\n gl_FragColor = vec4(u_color, 1.0);\n }\n `,\n transparent: true,\n side: 2,\n depthTest: false,\n})\n\n// const material = new MeshBasicMaterial({ color: new Color('#fab73f'), side: DoubleSide })\n\n/**\n * create round curve\n * @param points\n * @param radius\n * @param close\n * @returns\n */\nconst createCurve = (points: Vector3[], radius = 20, height = 50, close = false, material?: ShaderMaterial) => {\n if (!material)\n material = defMaterial\n\n const curve = new CurvePath()\n const shape = rectangle(0.1, height)\n\n if (points.length < 2)\n throw new Error('At least two points are required to create a curve')\n\n if (points.length === 2) {\n const line = new LineCurve3(points[0], points[1])\n curve.curves.push(line)\n\n return curve\n }\n\n const lines = []\n\n for (let i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n const dir = points[0].clone().sub(points[1]).normalize()\n const realEndPoints = points[1].clone().add(dir.multiplyScalar(radius))\n\n let firstPoint = points[0]\n\n if (close)\n firstPoint = points[0].clone().add(points[1].clone().sub(points[0]).normalize().multiplyScalar(radius))\n\n lines.push(new LineCurve3(firstPoint, realEndPoints))\n }\n else if (i === points.length - 1) {\n //\n }\n else {\n const dir1 = points[i - 1].clone().sub(points[i]).normalize()\n const dir2 = points[i + 1].clone().sub(points[i]).normalize()\n const dir3 = points[i].clone().sub(points[i + 1]).normalize()\n\n const nextDir1 = dir2.clone()\n const nextDir2 = points[i].clone().sub(points[i + 1]).normalize()\n\n const p1 = points[i].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[i].clone()\n const p3 = points[i].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p1, p2, p3)\n\n const realLastPoints = points[i].clone().add(nextDir1.multiplyScalar(radius))\n const realEndPoints = points[i + 1].clone().add(nextDir2.multiplyScalar(radius))\n\n lines.push(beziercurve)\n lines.push(new LineCurve3(realLastPoints, i + 1 === points.length - 1\n ? close\n ? points[i + 1].clone().add(dir3.multiplyScalar(radius))\n : points[i + 1]\n : realEndPoints))\n }\n }\n\n if (close) {\n // first point\n const dir1 = points[1].clone().sub(points[0]).normalize()\n const dir2 = points[points.length - 1].clone().sub(points[0]).normalize()\n\n const p1 = points[0].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[0]\n const p3 = points[0].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p3, p2, p1)\n\n // last point\n const dir3 = points[0].clone().sub(points[points.length - 1]).normalize()\n const dir4 = points[points.length - 2].clone().sub(points[points.length - 1]).normalize()\n\n const p4 = points[points.length - 1].clone().add(dir3.multiplyScalar(radius))\n const p5 = points[points.length - 1]\n const p6 = points[points.length - 1].clone().add(dir4.multiplyScalar(radius))\n\n const beziercurve2 = new QuadraticBezierCurve3(p6, p5, p4)\n\n // last line\n const laseLine = new LineCurve3(p4, p3)\n\n lines.push(beziercurve2)\n lines.push(laseLine)\n lines.push(beziercurve)\n }\n\n const group = new Group()\n\n lines.forEach((line) => {\n curve.curves.push(line)\n\n if (line.type === 'QuadraticBezierCurve3') {\n const extrudeSettings = {\n steps: 100,\n bevelEnabled: false,\n extrudePath: line,\n }\n\n const geometry = new ExtrudeGeometry(shape, extrudeSettings)\n const arcWall = new Mesh(geometry, material)\n\n arcWall.translateY(arcWall.position.y + height)\n\n if (radius)\n group.add(arcWall)\n }\n else {\n const mesh = createBoxGeometryByPoints(line.v1, line.v2, height, 0.1, material)\n group.add(mesh)\n }\n })\n\n return [curve, group] as any\n}\n\ntype RoundLineGeometryOption = {\n radius: number\n close: boolean\n pointNum?: number\n height?: number\n}\n\nclass RoundLineGeometry extends BufferGeometry {\n public curve: any\n\n constructor(points: Vector3[], option: RoundLineGeometryOption) {\n super()\n\n const [curve] = createCurve(points, option.radius ?? 20, void 0, option.close || false)\n const currentPoints = curve.getPoints(option.pointNum || 1000)\n\n const geometry = new BufferGeometry()\n geometry.setFromPoints(currentPoints)\n\n this.curve = curve\n }\n}\n\nconst createRoundLineWallMesh = (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => {\n const [_, group] = createCurve(points, option.radius ?? 20, option.height ?? 50, option.close || false, material)\n\n return group\n}\n\nexport {\n RoundLineGeometry,\n createRoundLineWallMesh,\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA,SAASA,WAAW,EAAEC,cAAc,EAAEC,KAAK,EAAEC,SAAS,EAAEC,eAAe,EAAEC,KAAK,EAAEC,UAAU,EAAEC,IAAI,EAAEC,iBAAiB,EAAEC,qBAAqB,EAAEC,UAAU,EAAEC,cAAc,EAAEC,KAAK,EAAEC,OAAO,QAAQ,eAAe;AAU7M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,yBAAyB,GAAG,SAA5BA,yBAAyB,CAAIC,CAAU,EAAEC,CAAU,EAAyD;EAAA,IAAvDC,MAAM,uEAAG,EAAE;EAAA,IAAEC,KAAK,uEAAG,EAAE;EAAA,IAAEC,QAAyB;EAC3G,IAAMC,KAAK,GAAGL,CAAC,CAACM,UAAU,CAACL,CAAC,CAAC;EAC7B,IAAMM,GAAG,GAAG,IAAItB,WAAW,CAACoB,KAAK,EAAEH,MAAM,EAAEC,KAAK,CAAC;EAEjD,IAAIK,eAAmD,GAAG,IAAIf,iBAAiB,CAAC;IAAEgB,KAAK,EAAE,IAAItB,KAAK,CAAC,MAAM;EAAE,CAAC,CAAC;EAC7G,IAAIiB,QAAQ,EACVI,eAAe,GAAGJ,QAAQ;EAE5B,IAAMM,IAAI,GAAG,IAAIlB,IAAI,CAACe,GAAG,EAAEC,eAAe,CAAC;EAC3C,IAAMG,QAAQ,GAAG,IAAIb,OAAO,EAAE,CAACc,UAAU,CAACZ,CAAC,EAAEC,CAAC,CAAC,CAACY,cAAc,CAAC,GAAG,CAAC;EAEnEH,IAAI,CAACI,QAAQ,CAACC,CAAC,GAAGJ,QAAQ,CAACI,CAAC;EAC5BL,IAAI,CAACI,QAAQ,CAACE,CAAC,GAAGL,QAAQ,CAACK,CAAC,GAAGd,MAAM,GAAG,CAAC;EACzCQ,IAAI,CAACI,QAAQ,CAACG,CAAC,GAAGN,QAAQ,CAACM,CAAC;EAE5B,IAAMC,SAAS,GAAG,IAAIpB,OAAO,EAAE;EAC/BoB,SAAS,CAACC,UAAU,CAACnB,CAAC,EAAEC,CAAC,CAAC;EAC1BiB,SAAS,CAACE,SAAS,EAAE;EAErB,IAAMC,IAAI,GAAG,IAAIvB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC;EAClC,IAAMwB,KAAK,GAAG,IAAIxB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAACyB,OAAO,CAACL,SAAS,CAAC;EAErD,IAAMM,UAAU,GAAG,IAAI7B,UAAU,EAAE,CAAC8B,gBAAgB,CAACJ,IAAI,EAAEC,KAAK,CAAC;EACjE,IAAMI,YAAY,GAAG,IAAI5B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC6B,eAAe,CAACH,UAAU,CAAC;EAErE,IAAI,CAACE,YAAY,CAACH,OAAO,CAACL,SAAS,CAAC,EAClCR,IAAI,CAACkB,YAAY,CAACP,IAAI,EAAEC,KAAK,CAAC,MAE9BZ,IAAI,CAACkB,YAAY,CAACP,IAAI,EAAE,CAACC,KAAK,CAAC;EAEjC,OAAOZ,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,IAAMmB,SAAS,GAAG,SAAZA,SAAS,GAAwB;EAAA,IAApBC,CAAC,uEAAG,GAAG;EAAA,IAAEC,CAAC,uEAAG,EAAE;EAChC,IAAMC,KAAK,GAAG,IAAInC,KAAK,EAAE;EAEzBmC,KAAK,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAClBD,KAAK,CAACE,MAAM,CAAC,CAAC,EAAEJ,CAAC,CAAC;EAClBE,KAAK,CAACE,MAAM,CAACH,CAAC,EAAED,CAAC,CAAC;EAClBE,KAAK,CAACE,MAAM,CAACH,CAAC,EAAE,CAAC,CAAC;EAClBC,KAAK,CAACE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAElB,OAAOF,KAAK;AACd,CAAC;AAED,IAAMG,WAAW,GAAG,IAAIvC,cAAc,CAAC;EACrCwC,QAAQ,EAAE;IACRC,OAAO,EAAE;MAAEC,KAAK,EAAE,IAAInD,KAAK,CAAC,SAAS;IAAE,CAAC;IACxCoD,QAAQ,EAAE;MAAED,KAAK,EAAE;IAAI,CAAC;IACxBE,SAAS,EAAE;MAAEF,KAAK,EAAE;IAAI;EAC1B,CAAC;EAEDG,YAAY,6RASJ;EACRC,cAAc,6LAQb;EACDC,WAAW,EAAE,IAAI;EACjBC,IAAI,EAAE,CAAC;EACPC,SAAS,EAAE;AACb,CAAC,CAAC;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAAIC,MAAiB,EAAyE;EAAA,IAAvEC,MAAM,uEAAG,EAAE;EAAA,IAAE9C,MAAM,uEAAG,EAAE;EAAA,IAAE+C,KAAK,uEAAG,KAAK;EAAA,IAAE7C,QAAyB;EACxG,IAAI,CAACA,QAAQ,EACXA,QAAQ,GAAG+B,WAAW;EAExB,IAAMe,KAAK,GAAG,IAAI9D,SAAS,EAAE;EAC7B,IAAM4C,KAAK,GAAGH,SAAS,CAAC,GAAG,EAAE3B,MAAM,CAAC;EAEpC,IAAI6C,MAAM,CAACI,MAAM,GAAG,CAAC,EACnB,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EAEvE,IAAIL,MAAM,CAACI,MAAM,KAAK,CAAC,EAAE;IACvB,IAAME,IAAI,GAAG,IAAI9D,UAAU,CAACwD,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC;IACjDG,KAAK,CAACI,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC;IAEvB,OAAOH,KAAK;EACd;EAEA,IAAMM,KAAK,GAAG,EAAE;EAEhB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,MAAM,CAACI,MAAM,GAAG,CAAC,EAAEM,CAAC,EAAE,EAAE;IAC1C,IAAIA,CAAC,KAAK,CAAC,EAAE;MACX,IAAMC,GAAG,GAAGX,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE;MACxD,IAAMyC,aAAa,GAAGd,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACJ,GAAG,CAAC7C,cAAc,CAACmC,MAAM,CAAC,CAAC;MAEvE,IAAIe,UAAU,GAAGhB,MAAM,CAAC,CAAC,CAAC;MAE1B,IAAIE,KAAK,EACPc,UAAU,GAAGhB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACf,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE,CAACP,cAAc,CAACmC,MAAM,CAAC,CAAC;MAEzGQ,KAAK,CAACD,IAAI,CAAC,IAAIhE,UAAU,CAACwE,UAAU,EAAEF,aAAa,CAAC,CAAC;IACvD,CAAC,MACI,IAAIJ,CAAC,KAAKV,MAAM,CAACI,MAAM,GAAG,CAAC,EAAE;MAChC;IAAA,CACD,MACI;MACH,IAAMa,IAAI,GAAGjB,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAC7D,IAAM6C,IAAI,GAAGlB,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAC7D,IAAM8C,IAAI,GAAGnB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAE7D,IAAM+C,QAAQ,GAAGF,IAAI,CAACN,KAAK,EAAE;MAC7B,IAAMS,QAAQ,GAAGrB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAAC,CAACrC,SAAS,EAAE;MAEjE,IAAMiD,EAAE,GAAGtB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACE,IAAI,CAACnD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAC7D,IAAMsB,EAAE,GAAGvB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE;MAC5B,IAAMY,EAAE,GAAGxB,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACG,IAAI,CAACpD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAE7D,IAAMwB,WAAW,GAAG,IAAI9E,qBAAqB,CAAC2E,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC;MAEzD,IAAME,cAAc,GAAG1B,MAAM,CAACU,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACK,QAAQ,CAACtD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAC7E,IAAMa,cAAa,GAAGd,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACM,QAAQ,CAACvD,cAAc,CAACmC,MAAM,CAAC,CAAC;MAEhFQ,KAAK,CAACD,IAAI,CAACiB,WAAW,CAAC;MACvBhB,KAAK,CAACD,IAAI,CAAC,IAAIhE,UAAU,CAACkF,cAAc,EAAEhB,CAAC,GAAG,CAAC,KAAKV,MAAM,CAACI,MAAM,GAAG,CAAC,GACjEF,KAAK,GACHF,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,CAACE,KAAK,EAAE,CAACG,GAAG,CAACI,IAAI,CAACrD,cAAc,CAACmC,MAAM,CAAC,CAAC,GACtDD,MAAM,CAACU,CAAC,GAAG,CAAC,CAAC,GACfI,cAAa,CAAC,CAAC;IACrB;EACF;EAEA,IAAIZ,KAAK,EAAE;IACT;IACA,IAAMe,IAAI,GAAGjB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE;IACzD,IAAM6C,KAAI,GAAGlB,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC3B,SAAS,EAAE;IAEzE,IAAMiD,EAAE,GAAGtB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACE,IAAI,CAACnD,cAAc,CAACmC,MAAM,CAAC,CAAC;IAC7D,IAAMsB,GAAE,GAAGvB,MAAM,CAAC,CAAC,CAAC;IACpB,IAAMwB,GAAE,GAAGxB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACG,GAAG,CAACG,KAAI,CAACpD,cAAc,CAACmC,MAAM,CAAC,CAAC;IAE7D,IAAMwB,YAAW,GAAG,IAAI9E,qBAAqB,CAAC6E,GAAE,EAAED,GAAE,EAAED,EAAE,CAAC;;IAEzD;IACA,IAAMH,KAAI,GAAGnB,MAAM,CAAC,CAAC,CAAC,CAACY,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC/B,SAAS,EAAE;IACzE,IAAMsD,IAAI,GAAG3B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACC,GAAG,CAACb,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC/B,SAAS,EAAE;IAEzF,IAAMuD,EAAE,GAAG5B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACG,GAAG,CAACI,KAAI,CAACrD,cAAc,CAACmC,MAAM,CAAC,CAAC;IAC7E,IAAM4B,EAAE,GAAG7B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC;IACpC,IAAM0B,EAAE,GAAG9B,MAAM,CAACA,MAAM,CAACI,MAAM,GAAG,CAAC,CAAC,CAACQ,KAAK,EAAE,CAACG,GAAG,CAACY,IAAI,CAAC7D,cAAc,CAACmC,MAAM,CAAC,CAAC;IAE7E,IAAM8B,YAAY,GAAG,IAAIpF,qBAAqB,CAACmF,EAAE,EAAED,EAAE,EAAED,EAAE,CAAC;;IAE1D;IACA,IAAMI,QAAQ,GAAG,IAAIxF,UAAU,CAACoF,EAAE,EAAEJ,GAAE,CAAC;IAEvCf,KAAK,CAACD,IAAI,CAACuB,YAAY,CAAC;IACxBtB,KAAK,CAACD,IAAI,CAACwB,QAAQ,CAAC;IACpBvB,KAAK,CAACD,IAAI,CAACiB,YAAW,CAAC;EACzB;EAEA,IAAMQ,KAAK,GAAG,IAAI1F,KAAK,EAAE;EAEzBkE,KAAK,CAACyB,OAAO,CAAC,UAAC5B,IAAI,EAAK;IACtBH,KAAK,CAACI,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC;IAEvB,IAAIA,IAAI,CAAC6B,IAAI,KAAK,uBAAuB,EAAE;MACzC,IAAMC,eAAe,GAAG;QACtBC,KAAK,EAAE,GAAG;QACVC,YAAY,EAAE,KAAK;QACnBC,WAAW,EAAEjC;MACf,CAAC;MAED,IAAMkC,QAAQ,GAAG,IAAIlG,eAAe,CAAC2C,KAAK,EAAEmD,eAAe,CAAC;MAC5D,IAAMK,OAAO,GAAG,IAAIhG,IAAI,CAAC+F,QAAQ,EAAEnF,QAAQ,CAAC;MAE5CoF,OAAO,CAACC,UAAU,CAACD,OAAO,CAAC1E,QAAQ,CAACE,CAAC,GAAGd,MAAM,CAAC;MAE/C,IAAI8C,MAAM,EACRgC,KAAK,CAAClB,GAAG,CAAC0B,OAAO,CAAC;IACtB,CAAC,MACI;MACH,IAAM9E,IAAI,GAAGX,yBAAyB,CAACsD,IAAI,CAACqC,EAAE,EAAErC,IAAI,CAACsC,EAAE,EAAEzF,MAAM,EAAE,GAAG,EAAEE,QAAQ,CAAC;MAC/E4E,KAAK,CAAClB,GAAG,CAACpD,IAAI,CAAC;IACjB;EACF,CAAC,CAAC;EAEF,OAAO,CAACwC,KAAK,EAAE8B,KAAK,CAAC;AACvB,CAAC;AAAA,IASKY,iBAAiB;EAAA;EAAA;EAGrB,2BAAY7C,MAAiB,EAAE8C,MAA+B,EAAE;IAAA;IAAA;IAAA;IAC9D;IAAO;IAEP,mBAAgB/C,WAAW,CAACC,MAAM,oBAAE8C,MAAM,CAAC7C,MAAM,2DAAI,EAAE,EAAE,KAAK,CAAC,EAAE6C,MAAM,CAAC5C,KAAK,IAAI,KAAK,CAAC;MAAA;MAAhFC,KAAK;IACZ,IAAM4C,aAAa,GAAG5C,KAAK,CAAC6C,SAAS,CAACF,MAAM,CAACG,QAAQ,IAAI,IAAI,CAAC;IAE9D,IAAMT,QAAQ,GAAG,IAAIrG,cAAc,EAAE;IACrCqG,QAAQ,CAACU,aAAa,CAACH,aAAa,CAAC;IAErC,MAAK5C,KAAK,GAAGA,KAAK;IAAA;EACpB;EAAC;AAAA,EAb6BhE,cAAc;AAgB9C,IAAMgH,uBAAuB,GAAG,SAA1BA,uBAAuB,CAAInD,MAAiB,EAAE8C,MAA+B,EAAEzF,QAAyB,EAAK;EAAA;EACjH,oBAAmB0C,WAAW,CAACC,MAAM,qBAAE8C,MAAM,CAAC7C,MAAM,6DAAI,EAAE,oBAAE6C,MAAM,CAAC3F,MAAM,2DAAI,EAAE,EAAE2F,MAAM,CAAC5C,KAAK,IAAI,KAAK,EAAE7C,QAAQ,CAAC;IAAA;IAA1G+F,CAAC;IAAEnB,KAAK;EAEf,OAAOA,KAAK;AACd,CAAC;AAED,SACEY,iBAAiB,EACjBM,uBAAuB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Vector2 } from '@anov/3d-core';
|
|
2
|
+
import type { IOption } from '../utils/type';
|
|
3
|
+
import Poi from '../Poi';
|
|
4
|
+
declare class Css2DPoi extends Poi {
|
|
5
|
+
element: HTMLElement;
|
|
6
|
+
isCSS2DObject: boolean;
|
|
7
|
+
center: Vector2;
|
|
8
|
+
constructor(data: any, option?: IOption);
|
|
9
|
+
getElement(): HTMLElement;
|
|
10
|
+
play(): void;
|
|
11
|
+
}
|
|
12
|
+
export default Css2DPoi;
|
|
@@ -14,70 +14,80 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
|
|
|
14
14
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
15
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
16
16
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
|
|
17
|
+
/* eslint-disable no-case-declarations */
|
|
18
|
+
import { Vector2 } from '@anov/3d-core';
|
|
19
|
+
import gsap from 'gsap';
|
|
20
|
+
import { EAnimationType, EventType } from "../utils/type";
|
|
21
|
+
import { createContentElement, createTitleElement } from "../utils/element";
|
|
22
|
+
import Poi from "../Poi";
|
|
23
|
+
var _default = {
|
|
21
24
|
animation: {
|
|
22
25
|
type: EAnimationType.fadeIn,
|
|
23
26
|
duration: 0.3
|
|
24
27
|
}
|
|
25
28
|
};
|
|
26
|
-
var
|
|
27
|
-
_inherits(
|
|
28
|
-
var _super = _createSuper(
|
|
29
|
-
function
|
|
29
|
+
var Css2DPoi = /*#__PURE__*/function (_Poi) {
|
|
30
|
+
_inherits(Css2DPoi, _Poi);
|
|
31
|
+
var _super = _createSuper(Css2DPoi);
|
|
32
|
+
function Css2DPoi(data) {
|
|
30
33
|
var _this;
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
35
|
+
_classCallCheck(this, Css2DPoi);
|
|
36
|
+
_this = _super.call(this, data, option);
|
|
33
37
|
_defineProperty(_assertThisInitialized(_this), "element", void 0);
|
|
34
|
-
_defineProperty(_assertThisInitialized(_this), "contentDom", void 0);
|
|
35
38
|
_defineProperty(_assertThisInitialized(_this), "isCSS2DObject", void 0);
|
|
36
39
|
_defineProperty(_assertThisInitialized(_this), "center", void 0);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
_this.
|
|
41
|
-
_this.data = data;
|
|
42
|
-
_this.option = _objectSpread(_objectSpread({}, DafultOption), option);
|
|
43
|
-
_this.element = _this.createElement();
|
|
40
|
+
_this.option = _objectSpread(_objectSpread({}, _default), option);
|
|
41
|
+
|
|
42
|
+
// 创建容器
|
|
43
|
+
_this.element = _this.getElement();
|
|
44
44
|
if (!_this.element) throw new Error('Cannot generate HTMLElement element');
|
|
45
|
-
|
|
45
|
+
|
|
46
|
+
// 保留Css2D 初始设置
|
|
46
47
|
_this.element.style.position = 'absolute';
|
|
47
48
|
_this.element.style.userSelect = 'none';
|
|
48
49
|
_this.element.setAttribute('draggable', 'false');
|
|
50
|
+
_this.isCSS2DObject = true;
|
|
49
51
|
_this.center = new Vector2(0.5, 0.5); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right
|
|
50
52
|
|
|
53
|
+
_this.option.animation && _this.setAnimation(_this.option.animation);
|
|
54
|
+
// 执行动画
|
|
55
|
+
_this.play();
|
|
56
|
+
|
|
57
|
+
// 保留Css2D 事件监听
|
|
51
58
|
_this.addEventListener('removed', function () {
|
|
52
59
|
_this.traverse(function (object) {
|
|
53
|
-
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
if (object.element instanceof Element && object.element.parentNode !== null)
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
object.element.parentNode.removeChild(object.element);
|
|
54
64
|
});
|
|
55
65
|
});
|
|
56
|
-
_this.setAttribute();
|
|
57
66
|
return _this;
|
|
58
67
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
|
|
69
|
+
// 创建2D容器
|
|
70
|
+
_createClass(Css2DPoi, [{
|
|
71
|
+
key: "getElement",
|
|
72
|
+
value: function getElement() {
|
|
62
73
|
var _this2 = this;
|
|
63
74
|
var element;
|
|
64
75
|
// 直接传递DOM元素
|
|
65
76
|
if (this.data instanceof HTMLElement) {
|
|
66
77
|
element = this.data;
|
|
67
78
|
} else {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
element = this.contentPanel(this.data);
|
|
76
|
-
break;
|
|
79
|
+
if (typeof this.data === 'string') {
|
|
80
|
+
element = createTitleElement(this.data, this.option);
|
|
81
|
+
} else if (_typeof(this.data) === 'object') {
|
|
82
|
+
var _this$data = this.data,
|
|
83
|
+
title = _this$data.title,
|
|
84
|
+
content = _this$data.content;
|
|
85
|
+
if (title && content) element = createContentElement(this.data, this.option);else if (title) element = createTitleElement(title, this.option);
|
|
77
86
|
}
|
|
78
87
|
}
|
|
79
88
|
EventType.forEach(function (type) {
|
|
80
|
-
element.addEventListener(type.name, function (event) {
|
|
89
|
+
element && element.addEventListener(type.name, function (event) {
|
|
90
|
+
// @ts-ignore
|
|
81
91
|
(_this2._listeners[type.name] || []).forEach(function (cb) {
|
|
82
92
|
cb(event);
|
|
83
93
|
});
|
|
@@ -85,97 +95,86 @@ var Css2D = /*#__PURE__*/function (_Object3D) {
|
|
|
85
95
|
});
|
|
86
96
|
return element;
|
|
87
97
|
}
|
|
98
|
+
|
|
99
|
+
// 播放动画
|
|
88
100
|
}, {
|
|
89
|
-
key: "
|
|
90
|
-
value: function
|
|
101
|
+
key: "play",
|
|
102
|
+
value: function play() {
|
|
91
103
|
var _this3 = this;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.onAfterRender = function () {
|
|
95
|
-
if (hasExecuted) return;
|
|
96
|
-
setTimeout(function () {
|
|
97
|
-
_this3.element.style.opacity = '1';
|
|
98
|
-
var print = _this3.option.print;
|
|
99
|
-
if (_this3.poiType === EPoiType.Panel && print) _this3.print(_this3.contentDom, _this3.data.content);
|
|
100
|
-
});
|
|
101
|
-
hasExecuted = true;
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
}, {
|
|
105
|
-
key: "titlePanel",
|
|
106
|
-
value: function titlePanel(data) {
|
|
107
|
-
var defaultStyle = getBasePoiStyle();
|
|
108
|
-
this.assignStyle(defaultStyle);
|
|
109
|
-
var containerDom = document.createElement('div');
|
|
110
|
-
Object.keys(defaultStyle).forEach(function (key) {
|
|
111
|
-
containerDom.style[key] = defaultStyle[key];
|
|
112
|
-
});
|
|
113
|
-
containerDom.innerText = data;
|
|
114
|
-
return containerDom;
|
|
115
|
-
}
|
|
116
|
-
}, {
|
|
117
|
-
key: "contentPanel",
|
|
118
|
-
value: function contentPanel(data) {
|
|
119
|
-
var _this4 = this;
|
|
120
|
-
var defaultStyle = getPanelStyle();
|
|
121
|
-
this.assignStyle(defaultStyle.container);
|
|
122
|
-
var containerDom = document.createElement('div');
|
|
123
|
-
Object.keys(defaultStyle.container).forEach(function (key) {
|
|
124
|
-
containerDom.style[key] = defaultStyle.container[key];
|
|
125
|
-
});
|
|
126
|
-
var titleDom = document.createElement('div');
|
|
127
|
-
titleDom.innerText = data.title;
|
|
128
|
-
Object.keys(defaultStyle.title).forEach(function (key) {
|
|
129
|
-
titleDom.style[key] = defaultStyle.title[key];
|
|
130
|
-
});
|
|
131
|
-
containerDom.appendChild(titleDom);
|
|
132
|
-
this.contentDom = document.createElement('div');
|
|
133
|
-
if (!this.option.print) this.contentDom.innerText = data.content;
|
|
134
|
-
Object.keys(defaultStyle.content).forEach(function (key) {
|
|
135
|
-
_this4.contentDom.style[key] = defaultStyle.content[key];
|
|
136
|
-
});
|
|
137
|
-
containerDom.appendChild(this.contentDom);
|
|
138
|
-
return containerDom;
|
|
139
|
-
}
|
|
140
|
-
}, {
|
|
141
|
-
key: "assignStyle",
|
|
142
|
-
value: function assignStyle(style) {
|
|
143
|
-
var _this$option = this.option,
|
|
144
|
-
width = _this$option.width,
|
|
145
|
-
height = _this$option.height,
|
|
146
|
-
img = _this$option.img,
|
|
147
|
-
animation = _this$option.animation;
|
|
148
|
-
if (animation) {
|
|
149
|
-
switch (animation.type) {
|
|
150
|
-
case EAnimationType.appear:
|
|
104
|
+
this.animation.forEach(function (item) {
|
|
105
|
+
switch (item.type) {
|
|
151
106
|
case EAnimationType.fadeIn:
|
|
152
|
-
style.opacity = 0;
|
|
153
|
-
style.transition = "opacity ".concat(animation.duration, "s ease");
|
|
107
|
+
_this3.element.style.opacity = '0';
|
|
154
108
|
break;
|
|
155
109
|
case EAnimationType.grow:
|
|
110
|
+
_this3.element.style.scale = '.2';
|
|
111
|
+
break;
|
|
112
|
+
case EAnimationType.print:
|
|
113
|
+
var contentElement = _this3.element.querySelector('[tag="content"]');
|
|
114
|
+
if (contentElement) contentElement.innerHTML = '';else _this3.element.innerHTML = '';
|
|
156
115
|
break;
|
|
157
116
|
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
117
|
+
});
|
|
118
|
+
var hasExecuted = false;
|
|
119
|
+
this.onAfterRender = function () {
|
|
120
|
+
if (hasExecuted) return;
|
|
121
|
+
_this3.animation.forEach(function (item) {
|
|
122
|
+
switch (item.type) {
|
|
123
|
+
case EAnimationType.fadeIn:
|
|
124
|
+
gsap.fromTo(_this3.element, {
|
|
125
|
+
opacity: 0
|
|
126
|
+
}, {
|
|
127
|
+
opacity: 1,
|
|
128
|
+
duration: item.duration,
|
|
129
|
+
repeat: 0,
|
|
130
|
+
ease: 'none'
|
|
131
|
+
});
|
|
132
|
+
break;
|
|
133
|
+
case EAnimationType.grow:
|
|
134
|
+
gsap.fromTo(_this3.element, {
|
|
135
|
+
scale: 0.2
|
|
136
|
+
}, {
|
|
137
|
+
scale: 1,
|
|
138
|
+
duration: item.duration,
|
|
139
|
+
repeat: 0,
|
|
140
|
+
ease: 'power2.out'
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
case EAnimationType.print:
|
|
144
|
+
var element = _this3.element.querySelector('[tag="content"]');
|
|
145
|
+
var text;
|
|
146
|
+
if (element) {
|
|
147
|
+
text = _this3.data.content;
|
|
148
|
+
} else {
|
|
149
|
+
element = _this3.element;
|
|
150
|
+
text = _this3.data.title || _this3.data;
|
|
151
|
+
}
|
|
152
|
+
var index = 0;
|
|
153
|
+
var print = function print() {
|
|
154
|
+
// 添加当前字符到文本元素
|
|
155
|
+
element.innerHTML += text.charAt(index);
|
|
156
|
+
index++;
|
|
157
|
+
// 使用GSAP创建动画
|
|
158
|
+
gsap.to(element, {
|
|
159
|
+
duration: item.duration,
|
|
160
|
+
// 每个字符的持续时间
|
|
161
|
+
ease: 'power1.inOut',
|
|
162
|
+
// 缓动函数
|
|
163
|
+
onComplete: function onComplete() {
|
|
164
|
+
return index < text.length ? print() : null;
|
|
165
|
+
} // 如果还有字符,则继续打印,否则完成动画
|
|
166
|
+
});
|
|
167
|
+
};
|
|
174
168
|
|
|
175
|
-
|
|
169
|
+
print();
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
hasExecuted = true;
|
|
174
|
+
};
|
|
176
175
|
}
|
|
177
176
|
}]);
|
|
178
|
-
return
|
|
179
|
-
}(
|
|
180
|
-
export default
|
|
181
|
-
//# sourceMappingURL=
|
|
177
|
+
return Css2DPoi;
|
|
178
|
+
}(Poi);
|
|
179
|
+
export default Css2DPoi;
|
|
180
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Vector2","gsap","EAnimationType","EventType","createContentElement","createTitleElement","Poi","_default","animation","type","fadeIn","duration","Css2DPoi","data","option","element","getElement","Error","style","position","userSelect","setAttribute","isCSS2DObject","center","setAnimation","play","addEventListener","traverse","object","Element","parentNode","removeChild","HTMLElement","title","content","forEach","name","event","_listeners","cb","item","opacity","grow","scale","print","contentElement","querySelector","innerHTML","hasExecuted","onAfterRender","fromTo","repeat","ease","text","index","charAt","to","onComplete","length"],"sources":["../../../src/poi/2D/index.ts"],"sourcesContent":["/* eslint-disable no-case-declarations */\nimport { Vector2 } from '@anov/3d-core'\nimport gsap from 'gsap'\nimport { EAnimationType, EventType } from '../utils/type'\nimport type { IEventType, IOption } from '../utils/type'\nimport { createContentElement, createTitleElement } from '../utils/element'\nimport Poi from '../Poi'\n\nconst _default = {\n animation: {\n type: EAnimationType.fadeIn,\n duration: 0.3,\n },\n}\n\nclass Css2DPoi extends Poi {\n element!: HTMLElement\n isCSS2DObject!: boolean\n center!: Vector2\n\n constructor(data: any, option: IOption = {}) {\n super(data, option)\n\n this.option = { ..._default, ...option }\n\n // 创建容器\n this.element = this.getElement()\n\n if (!this.element)\n throw new Error('Cannot generate HTMLElement element')\n\n // 保留Css2D 初始设置\n this.element.style.position = 'absolute'\n this.element.style.userSelect = 'none'\n this.element.setAttribute('draggable', 'false')\n\n this.isCSS2DObject = true\n this.center = new Vector2(0.5, 0.5) // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right\n\n this.option.animation && this.setAnimation(this.option.animation)\n // 执行动画\n this.play()\n\n // 保留Css2D 事件监听\n this.addEventListener('removed', () => {\n this.traverse((object) => {\n // @ts-ignore\n if (object.element instanceof Element && object.element.parentNode !== null)\n // @ts-ignore\n object.element.parentNode.removeChild(object.element)\n })\n })\n }\n\n // 创建2D容器\n getElement() {\n let element!: HTMLElement\n // 直接传递DOM元素\n if (this.data instanceof HTMLElement) {\n element = this.data\n }\n else {\n if (typeof this.data === 'string') {\n element = createTitleElement(this.data, this.option)\n }\n else if (typeof this.data === 'object') {\n const { title, content } = this.data\n if (title && content)\n element = createContentElement(this.data, this.option)\n else if (title)\n element = createTitleElement(title, this.option)\n }\n }\n\n EventType.forEach((type: IEventType) => {\n element && element.addEventListener(type.name, (event) => {\n // @ts-ignore\n (this._listeners[type.name] || []).forEach((cb: Function) => {\n cb(event)\n })\n })\n })\n return element\n }\n\n // 播放动画\n play() {\n this.animation.forEach((item) => {\n switch (item.type) {\n case EAnimationType.fadeIn:\n this.element.style.opacity = '0'\n break\n case EAnimationType.grow:\n this.element.style.scale = '.2'\n break\n case EAnimationType.print:\n const contentElement = this.element.querySelector('[tag=\"content\"]')\n if (contentElement)\n contentElement.innerHTML = ''\n else\n this.element.innerHTML = ''\n break\n }\n })\n\n let hasExecuted = false\n this.onAfterRender = () => {\n if (hasExecuted)\n return\n this.animation.forEach((item) => {\n switch (item.type) {\n case EAnimationType.fadeIn:\n gsap.fromTo(this.element, { opacity: 0 }, {\n opacity: 1,\n duration: item.duration,\n repeat: 0,\n ease: 'none',\n })\n break\n case EAnimationType.grow:\n gsap.fromTo(this.element, { scale: 0.2 }, {\n scale: 1,\n duration: item.duration,\n repeat: 0,\n ease: 'power2.out',\n })\n break\n case EAnimationType.print:\n\n let element = this.element.querySelector('[tag=\"content\"]') as HTMLElement\n let text: string\n if (element) {\n text = this.data.content\n }\n else {\n element = this.element\n text = this.data.title || this.data\n }\n\n let index = 0\n const print = () => {\n // 添加当前字符到文本元素\n element.innerHTML += text.charAt(index)\n index++\n // 使用GSAP创建动画\n gsap.to(element, {\n duration: item.duration, // 每个字符的持续时间\n ease: 'power1.inOut', // 缓动函数\n onComplete: () => index < text.length ? print() : null, // 如果还有字符,则继续打印,否则完成动画\n })\n }\n print()\n break\n }\n })\n hasExecuted = true\n }\n }\n}\n\nexport default Css2DPoi"],"mappings":"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"}
|
|
@@ -6,8 +6,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
6
6
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
7
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
8
|
import { Vector3, create3DLabel, use } from '@anov/3d-core';
|
|
9
|
-
import { getLastValue } from "
|
|
10
|
-
import { getDom } from "./dom";
|
|
9
|
+
import { getLastValue } from "../../utils";
|
|
11
10
|
// 距离限制范围的值,用于计算缩放比例
|
|
12
11
|
var minDistance = 0.1;
|
|
13
12
|
var maxDistance = 1000000;
|
|
@@ -87,8 +86,8 @@ var Poi = /*#__PURE__*/function () {
|
|
|
87
86
|
}
|
|
88
87
|
|
|
89
88
|
/**
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
* 是否锁定镜头,标牌一直面向镜头
|
|
90
|
+
*/
|
|
92
91
|
}, {
|
|
93
92
|
key: "updateAxis",
|
|
94
93
|
value: function updateAxis(object) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Vector3","create3DLabel","use","getLastValue","minDistance","maxDistance","Poi","option","visible","position","name","scale","poiLabel","getDom","receiveShadow","copy","fromArray","devicePixelRatio","window","vScale","multiplyScalar","clone","useScene","scene","camera","console","log","add","cssObjects","push","cube","useframe","objectName","traverse","child","cubeWorldPosition","getWorldPosition","orbitControls","addEventListener","lockAxis","updateAxis","autoSize","updateScale","id","object","oriEuler","rotation","cameraPosition","objectPosition","distance","distanceTo","clampedDistance","Math","max","min","i","length","remove"],"sources":["../../../src/poi/3D/index.ts"],"sourcesContent":["import {\n Vector3,\n create3DLabel,\n use,\n} from '@anov/3d-core'\nimport { getLastValue } from '../../utils'\nimport type { CustomCssObjec, IPOIOption } from './type'\n\n// 距离限制范围的值,用于计算缩放比例\nconst minDistance = 0.1\nconst maxDistance = 1000000\n\nclass Poi {\n private cssObjects: CustomCssObjec[] = []\n\n constructor() { }\n // 添加POI点信息\n public create(option: IPOIOption) {\n const { visible, position, name, scale } = option\n\n const poiLabel = create3DLabel(getDom(option)) as CustomCssObjec\n // 对象名称\n poiLabel.name = getLastValue(name, 'poiLabel')\n poiLabel.receiveShadow = true\n poiLabel.option = option\n // 是否可见\n poiLabel.visible = getLastValue(visible, true)\n // 设置poi局部位置\n position && poiLabel.position.copy(new Vector3().fromArray(position))\n // poiLabel.position.set(0, (200 * 0.023) / 2 + 3, 0);\n\n const devicePixelRatio = window.devicePixelRatio || 1\n // 调整场景中对象的缩放比例\n\n const vScale = new Vector3(0.023, 0.023, 0.023)\n vScale.multiplyScalar(scale)\n poiLabel.scale.copy(vScale.clone())\n const { scene, camera } = use.useScene()\n console.log('scene:', scene)\n // 添加到场景\n scene?.add(poiLabel)\n this.cssObjects.push(poiLabel)\n let cube\n use.useframe(() => {\n if (!cube) {\n // 假设需要查找的对象名称为 'myObject'\n const objectName = 'GY_zj_gangjiegou_01'\n // 遍历场景中的所有对象\n scene.traverse((child) => {\n // 检查对象的名称是否匹配所需名称\n if (child.name === objectName) {\n // 找到了匹配的对象,可以对其进行操作或者保存引用\n console.log('Found object with name:', objectName)\n cube = child\n }\n })\n }\n if (cube) {\n // 根据目标物体的位置和相机的位置,更新 POI 点的位置\n const cubeWorldPosition = new Vector3()\n cube.getWorldPosition(cubeWorldPosition)\n // console.log('cubeWorldPosition:', cubeWorldPosition)\n\n poiLabel.position.copy(cubeWorldPosition.clone())\n }\n })\n\n use.useScene().orbitControls?.addEventListener('change', () => {\n option.lockAxis && this.updateAxis(poiLabel)\n if ('autoSize' in option && !option.autoSize)\n this.updateScale(poiLabel)\n })\n\n return {\n id: poiLabel.id,\n name,\n visible,\n position,\n }\n }\n\n /**\n * 是否锁定镜头,标牌一直面向镜头\n */\n private updateAxis(object: CustomCssObjec) {\n const { camera } = use.useScene()\n // 获取原有的旋转角度\n const oriEuler = object.rotation\n // 根据锁定的轴进行旋转\n camera && object.rotation.copy(camera.rotation)\n }\n\n /// <summary>\n /// 按照距离缩放,距离越远,缩放越大\n /// </summary>\n private updateScale(object: CustomCssObjec) {\n const { camera } = use.useScene()\n // 获取相机和物体的世界坐标位置\n const cameraPosition = camera?.position\n const objectPosition = object.position\n\n // 计算相机和物体之间的距离\n const distance = cameraPosition?.distanceTo(objectPosition) || 0.1\n\n // 使用 Math.min() 和 Math.max() 方法限制 resultDistance 的范围\n const clampedDistance = Math.max(minDistance, Math.min(maxDistance, distance))\n\n // 按照缩放系数和距离进行缩放,缩放系数应该约定好一个固定值\n object.scale.copy(new Vector3(1, 1, 1).multiplyScalar(clampedDistance * 0.0012))\n }\n\n // 删除POI点信息\n public delete(option: IPOIOption) {\n const { scene } = use.useScene()\n for (let i = 0; i < this.cssObjects.length; i++) {\n if (this.cssObjects[i].id === option.id) {\n scene?.remove(this.cssObjects[i])\n break\n }\n }\n }\n\n public update(option: IPOIOption) { }\n}\n\nexport default Poi\n"],"mappings":";;;;;;;AAAA,SACEA,OAAO,EACPC,aAAa,EACbC,GAAG,QACE,eAAe;AACtB,SAASC,YAAY;AAGrB;AACA,IAAMC,WAAW,GAAG,GAAG;AACvB,IAAMC,WAAW,GAAG,OAAO;AAAA,IAErBC,GAAG;EAGP,eAAc;IAAA;IAAA,oCAFyB,EAAE;EAEzB;EAChB;EAAA;IAAA;IAAA,OACA,gBAAcC,MAAkB,EAAE;MAAA;QAAA;MAChC,IAAQC,OAAO,GAA4BD,MAAM,CAAzCC,OAAO;QAAEC,QAAQ,GAAkBF,MAAM,CAAhCE,QAAQ;QAAEC,IAAI,GAAYH,MAAM,CAAtBG,IAAI;QAAEC,KAAK,GAAKJ,MAAM,CAAhBI,KAAK;MAEtC,IAAMC,QAAQ,GAAGX,aAAa,CAACY,MAAM,CAACN,MAAM,CAAC,CAAmB;MAChE;MACAK,QAAQ,CAACF,IAAI,GAAGP,YAAY,CAACO,IAAI,EAAE,UAAU,CAAC;MAC9CE,QAAQ,CAACE,aAAa,GAAG,IAAI;MAC7BF,QAAQ,CAACL,MAAM,GAAGA,MAAM;MACxB;MACAK,QAAQ,CAACJ,OAAO,GAAGL,YAAY,CAACK,OAAO,EAAE,IAAI,CAAC;MAC9C;MACAC,QAAQ,IAAIG,QAAQ,CAACH,QAAQ,CAACM,IAAI,CAAC,IAAIf,OAAO,EAAE,CAACgB,SAAS,CAACP,QAAQ,CAAC,CAAC;MACrE;;MAEA,IAAMQ,gBAAgB,GAAGC,MAAM,CAACD,gBAAgB,IAAI,CAAC;MACrD;;MAEA,IAAME,MAAM,GAAG,IAAInB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;MAC/CmB,MAAM,CAACC,cAAc,CAACT,KAAK,CAAC;MAC5BC,QAAQ,CAACD,KAAK,CAACI,IAAI,CAACI,MAAM,CAACE,KAAK,EAAE,CAAC;MACnC,oBAA0BnB,GAAG,CAACoB,QAAQ,EAAE;QAAhCC,KAAK,iBAALA,KAAK;QAAEC,MAAM,iBAANA,MAAM;MACrBC,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEH,KAAK,CAAC;MAC5B;MACAA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEI,GAAG,CAACf,QAAQ,CAAC;MACpB,IAAI,CAACgB,UAAU,CAACC,IAAI,CAACjB,QAAQ,CAAC;MAC9B,IAAIkB,IAAI;MACR5B,GAAG,CAAC6B,QAAQ,CAAC,YAAM;QACjB,IAAI,CAACD,IAAI,EAAE;UACT;UACA,IAAME,UAAU,GAAG,qBAAqB;UACxC;UACAT,KAAK,CAACU,QAAQ,CAAC,UAACC,KAAK,EAAK;YACxB;YACA,IAAIA,KAAK,CAACxB,IAAI,KAAKsB,UAAU,EAAE;cAC7B;cACAP,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAEM,UAAU,CAAC;cAClDF,IAAI,GAAGI,KAAK;YACd;UACF,CAAC,CAAC;QACJ;QACA,IAAIJ,IAAI,EAAE;UACR;UACA,IAAMK,iBAAiB,GAAG,IAAInC,OAAO,EAAE;UACvC8B,IAAI,CAACM,gBAAgB,CAACD,iBAAiB,CAAC;UACxC;;UAEAvB,QAAQ,CAACH,QAAQ,CAACM,IAAI,CAACoB,iBAAiB,CAACd,KAAK,EAAE,CAAC;QACnD;MACF,CAAC,CAAC;MAEF,yBAAAnB,GAAG,CAACoB,QAAQ,EAAE,CAACe,aAAa,0DAA5B,sBAA8BC,gBAAgB,CAAC,QAAQ,EAAE,YAAM;QAC7D/B,MAAM,CAACgC,QAAQ,IAAI,KAAI,CAACC,UAAU,CAAC5B,QAAQ,CAAC;QAC5C,IAAI,UAAU,IAAIL,MAAM,IAAI,CAACA,MAAM,CAACkC,QAAQ,EAC1C,KAAI,CAACC,WAAW,CAAC9B,QAAQ,CAAC;MAC9B,CAAC,CAAC;MAEF,OAAO;QACL+B,EAAE,EAAE/B,QAAQ,CAAC+B,EAAE;QACfjC,IAAI,EAAJA,IAAI;QACJF,OAAO,EAAPA,OAAO;QACPC,QAAQ,EAARA;MACF,CAAC;IACH;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAGA,oBAAmBmC,MAAsB,EAAE;MACzC,qBAAmB1C,GAAG,CAACoB,QAAQ,EAAE;QAAzBE,MAAM,kBAANA,MAAM;MACd;MACA,IAAMqB,QAAQ,GAAGD,MAAM,CAACE,QAAQ;MAChC;MACAtB,MAAM,IAAIoB,MAAM,CAACE,QAAQ,CAAC/B,IAAI,CAACS,MAAM,CAACsB,QAAQ,CAAC;IACjD;;IAEA;IACA;IACA;EAAA;IAAA;IAAA,OACA,qBAAoBF,MAAsB,EAAE;MAC1C,qBAAmB1C,GAAG,CAACoB,QAAQ,EAAE;QAAzBE,MAAM,kBAANA,MAAM;MACd;MACA,IAAMuB,cAAc,GAAGvB,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEf,QAAQ;MACvC,IAAMuC,cAAc,GAAGJ,MAAM,CAACnC,QAAQ;;MAEtC;MACA,IAAMwC,QAAQ,GAAG,CAAAF,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEG,UAAU,CAACF,cAAc,CAAC,KAAI,GAAG;;MAElE;MACA,IAAMG,eAAe,GAAGC,IAAI,CAACC,GAAG,CAACjD,WAAW,EAAEgD,IAAI,CAACE,GAAG,CAACjD,WAAW,EAAE4C,QAAQ,CAAC,CAAC;;MAE9E;MACAL,MAAM,CAACjC,KAAK,CAACI,IAAI,CAAC,IAAIf,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAACoB,cAAc,CAAC+B,eAAe,GAAG,MAAM,CAAC,CAAC;IAClF;;IAEA;EAAA;IAAA;IAAA,OACA,iBAAc5C,MAAkB,EAAE;MAChC,qBAAkBL,GAAG,CAACoB,QAAQ,EAAE;QAAxBC,KAAK,kBAALA,KAAK;MACb,KAAK,IAAIgC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC3B,UAAU,CAAC4B,MAAM,EAAED,CAAC,EAAE,EAAE;QAC/C,IAAI,IAAI,CAAC3B,UAAU,CAAC2B,CAAC,CAAC,CAACZ,EAAE,KAAKpC,MAAM,CAACoC,EAAE,EAAE;UACvCpB,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEkC,MAAM,CAAC,IAAI,CAAC7B,UAAU,CAAC2B,CAAC,CAAC,CAAC;UACjC;QACF;MACF;IACF;EAAC;IAAA;IAAA,OAED,gBAAchD,MAAkB,EAAE,CAAE;EAAC;EAAA;AAAA;AAGvC,eAAeD,GAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EPOIType"],"sources":["../../../src/poi/3D/type.ts"],"sourcesContent":["import type {\n CSS3DObject,\n} from '@anov/3d-core'\n\nexport enum EPOIType {\n base,\n line,\n}\n\nexport interface CustomCssObjec extends CSS3DObject {\n option: IPOIOption\n}\n\nexport interface IPOIOption {\n id?: number | string // 唯一ID\n name?: string // 别名\n title: string\n type?: EPOIType\n position?: Array<number> // 聚焦目标位置[x,y,z] 单位cm positon和location字段必须有一个非空\n location?: Array<number> // 聚焦目标位置[经度,纬度,高度] 单位m positon和location字段必须有一个非空\n visible?: boolean\n autoSize?: boolean // 是否支持缩放\n lockAxis?: Boolean // 是否锁定镜头(标牌一直面向镜头)\n style?: object // POI样式字符串\n}\n"],"mappings":"AAIA,WAAYA,QAAQ;AAGnB,WAHWA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;EAARA,QAAQ,CAARA,QAAQ;AAAA,GAARA,QAAQ,KAARA,QAAQ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Object3D } from '@anov/3d-core';
|
|
2
|
+
import type { IOption } from './utils/type';
|
|
3
|
+
declare class Poi extends Object3D {
|
|
4
|
+
data: any;
|
|
5
|
+
option: IOption;
|
|
6
|
+
animation: Array<any>;
|
|
7
|
+
constructor(data: any, option: IOption);
|
|
8
|
+
setAnimation(animation: object | Array<any>): void;
|
|
9
|
+
play(): void;
|
|
10
|
+
destroy(): void;
|
|
11
|
+
}
|
|
12
|
+
export default Poi;
|