@anov/3d 0.0.74 → 0.0.76
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/anov3d.js +2 -0
- package/dist/anov3d.js.map +1 -1
- package/dist/factory/unit/inspection/InspectionObject.d.ts +5 -0
- package/dist/factory/unit/inspection/InspectionObject.js +61 -14
- package/dist/factory/unit/inspection/InspectionObject.js.map +1 -1
- package/dist/factory/unit/inspection/tubeGeometry.d.ts +16 -0
- package/dist/factory/unit/inspection/tubeGeometry.js +152 -0
- package/dist/factory/unit/inspection/tubeGeometry.js.map +1 -0
- package/package.json +1 -1
package/dist/anov3d.js
CHANGED
|
@@ -51,7 +51,9 @@ var Anov3D = /*#__PURE__*/function () {
|
|
|
51
51
|
reset: true,
|
|
52
52
|
css2DRenderer: true,
|
|
53
53
|
ambientLight: true
|
|
54
|
+
// fog: 'FogExp2' as any,
|
|
54
55
|
});
|
|
56
|
+
|
|
55
57
|
scene.render(opts.container);
|
|
56
58
|
(_scene$controls = scene.controls) === null || _scene$controls === void 0 ? void 0 : _scene$controls.target.copy((_opts$camera = opts.camera) !== null && _opts$camera !== void 0 && _opts$camera.target ? new Vector3().fromArray(opts.camera.target) : object2Vector3(defaultCameraParams.lookAt));
|
|
57
59
|
utils.emitter.emit('scene-completed', scene);
|
package/dist/anov3d.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PMREMGenerator","SceneControl","Vector3","lib","use","utils","EventBus","EWeatherType","object2Vector3","Model","defaultCameraParams","RoomEnvironment","Anov3D","opts","camera","cameraParams","fov","near","far","position","fromArray","scene","orbitControls","controls","defCameraOps","aspect","size","width","container","clientWidth","height","clientHeight","rendererOps","shadowMap","reset","css2DRenderer","ambientLight","render","target","copy","lookAt","emitter","emit","sceneControl","eventBus","model","load","changeSceneEnvironment","storeManagement","set","openFlag","useScene","renderer","pmremGenerator","compileEquirectangularShader","roomEnvironment"],"sources":["../src/anov3d.ts"],"sourcesContent":["import { PMREMGenerator, SceneControl, Vector3, lib, use, utils } from '@anov/3d-core'\nimport EventBus from './module/eventBus'\nimport { EWeatherType } from './module/environment/weather/type'\nimport type { InitOptions } from './applicationApi'\nimport { object2Vector3 } from './utils/index'\nimport Model from './module/model'\nimport { defaultCameraParams } from './index'\n\ntype Anov3DOptions = {\n container: HTMLElement\n size?: {\n width: number\n height: number\n }\n camera?: InitOptions['camera']\n environment?: InitOptions['environment']\n model?: InitOptions['model']\n controls?: InitOptions['controls']\n}\n\nconst { RoomEnvironment } = lib\n\nclass Anov3D {\n zoomRatio = 1\n opts: Anov3DOptions\n sceneControl: SceneControl\n eventBus: EventBus\n EWeatherType: typeof EWeatherType = EWeatherType\n model: Model\n\n constructor(opts: Anov3DOptions) {\n this.opts = opts\n const { camera = {} } = opts || {}\n\n const cameraParams = {\n fov: camera.fov ?? defaultCameraParams.fov,\n near: camera.near ?? defaultCameraParams.near,\n far: camera.far ?? defaultCameraParams.far,\n position: camera.position ? new Vector3().fromArray(camera.position) : object2Vector3(defaultCameraParams.position),\n }\n\n const scene = new SceneControl({\n orbitControls: opts.controls || { use: true },\n defCameraOps: {\n aspect: (opts?.size?.width ?? opts.container.clientWidth) / (opts?.size?.height ?? opts.container.clientHeight),\n ...cameraParams,\n },\n rendererOps: {\n shadowMap: true,\n size: {\n width: opts?.size?.width ?? opts.container.clientWidth,\n height: opts?.size?.height ?? opts.container.clientHeight,\n },\n },\n reset: true,\n css2DRenderer: true,\n ambientLight: true,\n })\n\n scene.render(opts.container)\n\n scene.controls?.target.copy(opts.camera?.target ? new Vector3().fromArray(opts.camera.target) : object2Vector3(defaultCameraParams.lookAt))\n\n utils.emitter.emit('scene-completed', scene)\n\n // 不考虑 tree-shaking\n this.sceneControl = scene\n\n this.eventBus = new EventBus()\n this.model = new Model()\n this.opts.model && (this.model.load(this.opts.model))\n this.changeSceneEnvironment()\n utils.storeManagement.set('event-bus', this.eventBus)\n\n utils.emitter.emit('instantiation-completed', this)\n }\n\n changeSceneEnvironment(openFlag = true) {\n const { renderer, scene } = use.useScene()\n const pmremGenerator = new PMREMGenerator(renderer!)\n pmremGenerator.compileEquirectangularShader()\n const roomEnvironment = new (RoomEnvironment as any)()\n\n // if (openFlag)\n // // scene!.environment = pmremGenerator.fromScene(roomEnvironment, 0.04).texture\n\n // else\n // scene!.environment = null\n }\n}\n\nexport default Anov3D"],"mappings":";;;;;;;;;AAAA,SAASA,cAAc,EAAEC,YAAY,EAAEC,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAEC,KAAK,QAAQ,eAAe;AACtF,OAAOC,QAAQ;AACf,SAASC,YAAY;AAErB,SAASC,cAAc;AACvB,OAAOC,KAAK;AACZ,SAASC,mBAAmB;AAc5B,IAAQC,eAAe,GAAKR,GAAG,CAAvBQ,eAAe;AAAQ,IAEzBC,MAAM;EAQV,gBAAYC,IAAmB,EAAE;IAAA;IAAA;IAAA,mCAPrB,CAAC;IAAA;IAAA;IAAA;IAAA,sCAIuBN,YAAY;IAAA;IAI9C,IAAI,CAACM,IAAI,GAAGA,IAAI;IAChB,WAAwBA,IAAI,IAAI,CAAC,CAAC;MAAA,mBAA1BC,MAAM;MAANA,MAAM,4BAAG,CAAC,CAAC;IAEnB,IAAMC,YAAY,GAAG;MACnBC,GAAG,iBAAEF,MAAM,CAACE,GAAG,qDAAIN,mBAAmB,CAACM,GAAG;MAC1CC,IAAI,kBAAEH,MAAM,CAACG,IAAI,uDAAIP,mBAAmB,CAACO,IAAI;MAC7CC,GAAG,iBAAEJ,MAAM,CAACI,GAAG,qDAAIR,mBAAmB,CAACQ,GAAG;MAC1CC,QAAQ,EAAEL,MAAM,CAACK,QAAQ,GAAG,IAAIjB,OAAO,EAAE,CAACkB,SAAS,CAACN,MAAM,CAACK,QAAQ,CAAC,GAAGX,cAAc,CAACE,mBAAmB,CAACS,QAAQ;IACpH,CAAC;IAED,IAAME,KAAK,GAAG,IAAIpB,YAAY,CAAC;MAC7BqB,aAAa,EAAET,IAAI,CAACU,QAAQ,IAAI;QAAEnB,GAAG,EAAE;MAAK,CAAC;MAC7CoB,YAAY;QACVC,MAAM,EAAE,qBAACZ,IAAI,aAAJA,IAAI,qCAAJA,IAAI,CAAEa,IAAI,+CAAV,WAAYC,KAAK,+DAAId,IAAI,CAACe,SAAS,CAACC,WAAW,0BAAKhB,IAAI,aAAJA,IAAI,sCAAJA,IAAI,CAAEa,IAAI,gDAAV,YAAYI,MAAM,iEAAIjB,IAAI,CAACe,SAAS,CAACG,YAAY;MAAC,GAC5GhB,YAAY,CAChB;MACDiB,WAAW,EAAE;QACXC,SAAS,EAAE,IAAI;QACfP,IAAI,EAAE;UACJC,KAAK,uBAAEd,IAAI,aAAJA,IAAI,sCAAJA,IAAI,CAAEa,IAAI,gDAAV,YAAYC,KAAK,iEAAId,IAAI,CAACe,SAAS,CAACC,WAAW;UACtDC,MAAM,wBAAEjB,IAAI,aAAJA,IAAI,sCAAJA,IAAI,CAAEa,IAAI,gDAAV,YAAYI,MAAM,mEAAIjB,IAAI,CAACe,SAAS,CAACG;QAC/C;MACF,CAAC;MACDG,KAAK,EAAE,IAAI;MACXC,aAAa,EAAE,IAAI;MACnBC,YAAY,EAAE;
|
|
1
|
+
{"version":3,"names":["PMREMGenerator","SceneControl","Vector3","lib","use","utils","EventBus","EWeatherType","object2Vector3","Model","defaultCameraParams","RoomEnvironment","Anov3D","opts","camera","cameraParams","fov","near","far","position","fromArray","scene","orbitControls","controls","defCameraOps","aspect","size","width","container","clientWidth","height","clientHeight","rendererOps","shadowMap","reset","css2DRenderer","ambientLight","render","target","copy","lookAt","emitter","emit","sceneControl","eventBus","model","load","changeSceneEnvironment","storeManagement","set","openFlag","useScene","renderer","pmremGenerator","compileEquirectangularShader","roomEnvironment"],"sources":["../src/anov3d.ts"],"sourcesContent":["import { PMREMGenerator, SceneControl, Vector3, lib, use, utils } from '@anov/3d-core'\nimport EventBus from './module/eventBus'\nimport { EWeatherType } from './module/environment/weather/type'\nimport type { InitOptions } from './applicationApi'\nimport { object2Vector3 } from './utils/index'\nimport Model from './module/model'\nimport { defaultCameraParams } from './index'\n\ntype Anov3DOptions = {\n container: HTMLElement\n size?: {\n width: number\n height: number\n }\n camera?: InitOptions['camera']\n environment?: InitOptions['environment']\n model?: InitOptions['model']\n controls?: InitOptions['controls']\n}\n\nconst { RoomEnvironment } = lib\n\nclass Anov3D {\n zoomRatio = 1\n opts: Anov3DOptions\n sceneControl: SceneControl\n eventBus: EventBus\n EWeatherType: typeof EWeatherType = EWeatherType\n model: Model\n\n constructor(opts: Anov3DOptions) {\n this.opts = opts\n const { camera = {} } = opts || {}\n\n const cameraParams = {\n fov: camera.fov ?? defaultCameraParams.fov,\n near: camera.near ?? defaultCameraParams.near,\n far: camera.far ?? defaultCameraParams.far,\n position: camera.position ? new Vector3().fromArray(camera.position) : object2Vector3(defaultCameraParams.position),\n }\n\n const scene = new SceneControl({\n orbitControls: opts.controls || { use: true },\n defCameraOps: {\n aspect: (opts?.size?.width ?? opts.container.clientWidth) / (opts?.size?.height ?? opts.container.clientHeight),\n ...cameraParams,\n },\n rendererOps: {\n shadowMap: true,\n size: {\n width: opts?.size?.width ?? opts.container.clientWidth,\n height: opts?.size?.height ?? opts.container.clientHeight,\n },\n },\n reset: true,\n css2DRenderer: true,\n ambientLight: true,\n // fog: 'FogExp2' as any,\n })\n\n scene.render(opts.container)\n\n scene.controls?.target.copy(opts.camera?.target ? new Vector3().fromArray(opts.camera.target) : object2Vector3(defaultCameraParams.lookAt))\n\n utils.emitter.emit('scene-completed', scene)\n\n // 不考虑 tree-shaking\n this.sceneControl = scene\n\n this.eventBus = new EventBus()\n this.model = new Model()\n this.opts.model && (this.model.load(this.opts.model))\n this.changeSceneEnvironment()\n utils.storeManagement.set('event-bus', this.eventBus)\n\n utils.emitter.emit('instantiation-completed', this)\n }\n\n changeSceneEnvironment(openFlag = true) {\n const { renderer, scene } = use.useScene()\n const pmremGenerator = new PMREMGenerator(renderer!)\n pmremGenerator.compileEquirectangularShader()\n const roomEnvironment = new (RoomEnvironment as any)()\n\n // if (openFlag)\n // // scene!.environment = pmremGenerator.fromScene(roomEnvironment, 0.04).texture\n\n // else\n // scene!.environment = null\n }\n}\n\nexport default Anov3D"],"mappings":"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"}
|
|
@@ -8,7 +8,10 @@ declare class InspectionObject {
|
|
|
8
8
|
private isLock;
|
|
9
9
|
private isAnimation;
|
|
10
10
|
walkCurveMesh: any;
|
|
11
|
+
tempPathMesh: any;
|
|
11
12
|
css2d: Css2DPoi;
|
|
13
|
+
temp: any;
|
|
14
|
+
tempDemo: any;
|
|
12
15
|
constructor(inspection: any);
|
|
13
16
|
private loadModel;
|
|
14
17
|
startMove(curve: any): Promise<void>;
|
|
@@ -19,6 +22,8 @@ declare class InspectionObject {
|
|
|
19
22
|
private checkAnimation;
|
|
20
23
|
generateTempPath(currentPosition: Vector3, targetPosition: Vector3): LineCurve3;
|
|
21
24
|
private startRotate;
|
|
25
|
+
private generateTempPathMesh;
|
|
26
|
+
private cleanTempPathMesh;
|
|
22
27
|
gotoTarget(targetPosition: Vector3, targetProgress: number): void;
|
|
23
28
|
setSpeed(speed: number): void;
|
|
24
29
|
stop(): void;
|
|
@@ -8,7 +8,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
8
8
|
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; }
|
|
9
9
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
10
10
|
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); }
|
|
11
|
-
import { Clock, Color, EdgesGeometry, Group, LineBasicMaterial, LineCurve3, LineSegments, Matrix4, MeshBasicMaterial, ModelLoader, Quaternion, Vector3, use, utils } from '@anov/3d-core';
|
|
11
|
+
import { Clock, Color, EdgesGeometry, Group, LineBasicMaterial, LineCurve3, LineSegments, Matrix4, Mesh, MeshBasicMaterial, MirroredRepeatWrapping, ModelLoader, Quaternion, RepeatWrapping, TextureLoader, Vector3, use, utils } from '@anov/3d-core';
|
|
12
12
|
import { SpritePoi } from '@anov/3d-ability';
|
|
13
13
|
import { Tween } from '@tweenjs/tween.js';
|
|
14
14
|
import { createFinirMaterial } from "../../utils/finirMaterial";
|
|
@@ -16,6 +16,7 @@ import { usePath } from "../../3d";
|
|
|
16
16
|
import { MessageType, sendToMessage } from "../../../utils/messageFn";
|
|
17
17
|
import { EMessageStatus } from "../../../messageStatus";
|
|
18
18
|
import { isCheck, targetProgresspoints } from "./lineData";
|
|
19
|
+
import TubeGeometryV2 from "./tubeGeometry";
|
|
19
20
|
var modelLoader = new ModelLoader();
|
|
20
21
|
var InspectionObject = /*#__PURE__*/function () {
|
|
21
22
|
function InspectionObject(inspection) {
|
|
@@ -27,7 +28,10 @@ var InspectionObject = /*#__PURE__*/function () {
|
|
|
27
28
|
_defineProperty(this, "isLock", false);
|
|
28
29
|
_defineProperty(this, "isAnimation", false);
|
|
29
30
|
_defineProperty(this, "walkCurveMesh", void 0);
|
|
31
|
+
_defineProperty(this, "tempPathMesh", void 0);
|
|
30
32
|
_defineProperty(this, "css2d", void 0);
|
|
33
|
+
_defineProperty(this, "temp", void 0);
|
|
34
|
+
_defineProperty(this, "tempDemo", void 0);
|
|
31
35
|
_defineProperty(this, "startRotate", function (targetQuaternion, mesh, cb) {
|
|
32
36
|
var clock = new Clock();
|
|
33
37
|
if (mesh.quaternion.equals(targetQuaternion)) return cb();
|
|
@@ -43,6 +47,12 @@ var InspectionObject = /*#__PURE__*/function () {
|
|
|
43
47
|
});
|
|
44
48
|
});
|
|
45
49
|
this.inspection = inspection;
|
|
50
|
+
var temp = new TextureLoader().load("".concat(usePath, "test07.png"));
|
|
51
|
+
temp.wrapS = RepeatWrapping;
|
|
52
|
+
temp.wrapT = MirroredRepeatWrapping;
|
|
53
|
+
temp.repeat.set(1, 2);
|
|
54
|
+
temp.rotation = Math.PI;
|
|
55
|
+
this.temp = temp;
|
|
46
56
|
}
|
|
47
57
|
_createClass(InspectionObject, [{
|
|
48
58
|
key: "loadModel",
|
|
@@ -343,10 +353,38 @@ var InspectionObject = /*#__PURE__*/function () {
|
|
|
343
353
|
value: function generateTempPath(currentPosition, targetPosition) {
|
|
344
354
|
return new LineCurve3(currentPosition, targetPosition);
|
|
345
355
|
}
|
|
356
|
+
}, {
|
|
357
|
+
key: "generateTempPathMesh",
|
|
358
|
+
value: function generateTempPathMesh(curve) {
|
|
359
|
+
var _this4 = this;
|
|
360
|
+
// @ts-ignore
|
|
361
|
+
var tube = new TubeGeometryV2(curve, 100, 5, 2, false);
|
|
362
|
+
var tempPathMesh = new Mesh(tube, new MeshBasicMaterial({
|
|
363
|
+
map: this.temp,
|
|
364
|
+
transparent: true,
|
|
365
|
+
depthTest: true
|
|
366
|
+
}));
|
|
367
|
+
this.inspection.gobal.scene.add(tempPathMesh);
|
|
368
|
+
this.tempPathMesh = tempPathMesh;
|
|
369
|
+
this.temp.repeat.set(curve.getLength() / 500, 2);
|
|
370
|
+
this.tempDemo = use.useframe(function () {
|
|
371
|
+
_this4.temp.offset.x -= -0.0009;
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}, {
|
|
375
|
+
key: "cleanTempPathMesh",
|
|
376
|
+
value: function cleanTempPathMesh() {
|
|
377
|
+
if (this.tempPathMesh) {
|
|
378
|
+
this.tempDemo();
|
|
379
|
+
this.tempPathMesh.geometry.dispose();
|
|
380
|
+
this.tempPathMesh.material.dispose();
|
|
381
|
+
this.tempPathMesh.removeFromParent();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
346
384
|
}, {
|
|
347
385
|
key: "gotoTarget",
|
|
348
386
|
value: function gotoTarget(targetPosition, targetProgress) {
|
|
349
|
-
var
|
|
387
|
+
var _this5 = this;
|
|
350
388
|
if (this.isAnimation) return;
|
|
351
389
|
this.isAnimation = true;
|
|
352
390
|
this.control.stop();
|
|
@@ -355,36 +393,45 @@ var InspectionObject = /*#__PURE__*/function () {
|
|
|
355
393
|
rotationMatrix.lookAt(targetPosition, this.model.position, this.model.up);
|
|
356
394
|
targetQuaternion.setFromRotationMatrix(rotationMatrix);
|
|
357
395
|
this.startRotate(targetQuaternion, this.model, function () {
|
|
358
|
-
var
|
|
396
|
+
var tempPathMeshtargetPosition = new Vector3(targetPosition.x, 1.1, targetPosition.z);
|
|
397
|
+
_this5.generateTempPathMesh(_this5.generateTempPath(new Vector3(_this5.model.position.x, 1.1, _this5.model.position.z), tempPathMeshtargetPosition));
|
|
398
|
+
var currentPosition = _this5.model.position;
|
|
359
399
|
var upCurve = new LineCurve3(currentPosition, new Vector3(currentPosition.x, currentPosition.y + 100, currentPosition.z));
|
|
360
|
-
var upControl = utils.moveWithLine(
|
|
400
|
+
var upControl = utils.moveWithLine(_this5.model, upCurve, 10, {
|
|
361
401
|
loop: false,
|
|
362
402
|
lookat: targetPosition
|
|
363
403
|
});
|
|
404
|
+
|
|
405
|
+
// up end
|
|
364
406
|
upControl.addEventListener('end', function () {
|
|
365
|
-
var tempCurve =
|
|
366
|
-
var tempControl = utils.moveWithLine(
|
|
407
|
+
var tempCurve = _this5.generateTempPath(currentPosition, new Vector3(targetPosition.x, targetPosition.y + 100, targetPosition.z));
|
|
408
|
+
var tempControl = utils.moveWithLine(_this5.model, tempCurve, 50, {
|
|
367
409
|
loop: false,
|
|
368
410
|
lookat: false
|
|
369
411
|
});
|
|
412
|
+
|
|
413
|
+
// temp end
|
|
370
414
|
tempControl.addEventListener('end', function () {
|
|
371
|
-
var lastPosition =
|
|
415
|
+
var lastPosition = _this5.model.position;
|
|
372
416
|
var downCurve = new LineCurve3(lastPosition, new Vector3(lastPosition.x, lastPosition.y - 100, lastPosition.z));
|
|
373
|
-
var downControl = utils.moveWithLine(
|
|
417
|
+
var downControl = utils.moveWithLine(_this5.model, downCurve, 10, {
|
|
374
418
|
loop: false,
|
|
375
419
|
lookat: false
|
|
376
420
|
});
|
|
421
|
+
|
|
422
|
+
// down end
|
|
377
423
|
downControl.addEventListener('end', function () {
|
|
378
424
|
var rotationMatrix2 = new Matrix4();
|
|
379
425
|
var targetQuaternion2 = new Quaternion();
|
|
380
|
-
var targetPosition2 =
|
|
381
|
-
rotationMatrix2.lookAt(targetPosition2,
|
|
426
|
+
var targetPosition2 = _this5.inspection.curve.getPointAt((targetProgress + 0.01) % 1);
|
|
427
|
+
rotationMatrix2.lookAt(targetPosition2, _this5.model.position, _this5.model.up);
|
|
382
428
|
targetQuaternion2.setFromRotationMatrix(rotationMatrix2);
|
|
383
|
-
|
|
429
|
+
_this5.startRotate(targetQuaternion2, _this5.model, function () {
|
|
384
430
|
setTimeout(function () {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
431
|
+
_this5.cleanTempPathMesh();
|
|
432
|
+
_this5.isAnimation = false;
|
|
433
|
+
_this5.control.setProgress(targetProgress);
|
|
434
|
+
_this5.control.contine();
|
|
388
435
|
}, 500);
|
|
389
436
|
});
|
|
390
437
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Clock","Color","EdgesGeometry","Group","LineBasicMaterial","LineCurve3","LineSegments","Matrix4","MeshBasicMaterial","ModelLoader","Quaternion","Vector3","use","utils","SpritePoi","Tween","createFinirMaterial","usePath","MessageType","sendToMessage","EMessageStatus","isCheck","targetProgresspoints","modelLoader","InspectionObject","inspection","targetQuaternion","mesh","cb","clock","quaternion","equals","animation","useframe","delta","getDelta","step","rotateTowards","loadGLTF","glb","div","document","createElement","style","position","img","src","span","innerText","top","left","transform","color","fontSize","fontWeight","appendChild","poi","width","height","img2","poi2","scale","set","fly1","scene","getObjectByName","fly2","fly3","fly4","copy","clone","add","rotation","z","getSportsProgress","isLock","stop","checkAnimation","group","minCamera","y","rotateY","Math","PI","model","gobal","interactionManager","traverse","child","layers","enable","curve","loadModel","control","moveWithLine","groundCurve","getPointAt","groundMaterial","uniforms","u_time","value","Event","Success","undefined","percentage","getProgress","targetMesh","updateMatrixWorld","localForward","worldForward","applyQuaternion","normalize","target","direction","sub","setFromUnitVectors","dotProduct","dot","angleRadians","acos","angleDegrees","flipQuaternion","setFromAxisAngle","multiply","lastFromPositin","currentPositin","targetPosition","vTo","vFrom","Promise","resolve","emitter","on","data","progress","isAnimation","key","Object","keys","find","p","num","parseFloat","targetMeshId","lookAt","pipeline","realModl","contineMove","setTimeout","currentAnchor","anchorObject","get","name","material","rotationMatrix","startQuaternion","up","setFromRotationMatrix","forwardTween","t","to","onUpdate","obj","slerp","backwardTween","onComplete","finirMesh","Number","finirMaterialV2","type","lineSegments","geometry","visible","subscription","then","start","off","currentPosition","targetProgress","startRotate","upCurve","x","upControl","loop","lookat","addEventListener","tempCurve","generateTempPath","tempControl","lastPosition","downCurve","downControl","rotationMatrix2","targetQuaternion2","targetPosition2","setProgress","contine","speed","setSpeed","emit"],"sources":["../../../../src/factory/unit/inspection/InspectionObject.ts"],"sourcesContent":["import type { Camera } from '@anov/3d-core'\nimport { BoxGeometry, Clock, Color, EdgesGeometry, Group, LineBasicMaterial, LineCurve3, LineSegments, Matrix4, Mesh, MeshBasicMaterial, ModelLoader, Quaternion, ShaderChunk, ShaderMaterial, TubeGeometry, Vector3, use, utils } from '@anov/3d-core'\nimport type { Css2DPoi } from '@anov/3d-ability'\nimport { SpritePoi, addColorifyPass, createHighSelectedTool } from '@anov/3d-ability'\nimport { Tween } from '@tweenjs/tween.js'\nimport { createFinirMaterial } from '../../utils/finirMaterial'\nimport { usePath } from '../../3d'\nimport { MessageType, sendToMessage } from '../../../utils/messageFn'\nimport { EMessageStatus } from '../../../messageStatus'\nimport { invertMap } from '../handle'\nimport fragmentShader from '../glsl/highway/fragmentShader'\nimport vertexShader from '../glsl/highway/vertexShader'\nimport { isCheck, targetProgresspoints } from './lineData'\n\nconst modelLoader = new ModelLoader()\n\nclass InspectionObject {\n model\n private inspection\n private control\n private tempLine\n private isLock = false\n private isAnimation = false\n walkCurveMesh\n css2d: Css2DPoi\n\n constructor(inspection) {\n this.inspection = inspection\n }\n\n private async loadModel() {\n const glb = await (await modelLoader.loadGLTF(`${usePath}car.glb`, false, true, './draco/'))\n\n const div = document.createElement('div')\n div.style.position = 'relative'\n\n const img = document.createElement('img')\n img.src = `${usePath}aerialVehicle02.png`\n\n const span = document.createElement('span')\n span.innerText = '巡检无人机'\n span.style.position = 'absolute'\n span.style.top = '10px'\n span.style.left = '50%'\n span.style.transform = 'translateX(-30%)'\n\n span.style.color = 'white'\n span.style.fontSize = '20px'\n span.style.fontWeight = 'bold'\n\n div.appendChild(img)\n div.appendChild(span)\n\n const poi = new SpritePoi(div, {\n width: 100 * 2,\n height: 40 * 2,\n })\n\n const img2 = document.createElement('img')\n img2.src = `${usePath}aerialVehicle01.png`\n\n const poi2 = new SpritePoi(img2, {\n width: 200 * 2,\n height: 80 * 2,\n })\n\n poi.scale.set(100, 40, 1)\n poi2.scale.set(200, 80, 1)\n\n const fly1 = glb.scene.getObjectByName('fly1')\n const fly2 = glb.scene.getObjectByName('fly1_1')\n const fly3 = glb.scene.getObjectByName('fly1_2')\n const fly4 = glb.scene.getObjectByName('fly1_3')\n\n use.useframe(() => {\n poi.position.copy(glb.scene.position.clone().add(new Vector3(0, 10, 0)))\n poi2.position.copy(glb.scene.position.clone().add(new Vector3(0, 10, 0)))\n\n fly1.rotation.z += 1.3\n fly2.rotation.z += 1.3\n fly3.rotation.z += 1.3\n fly4.rotation.z += 1.3\n\n if (isCheck(this.getSportsProgress)\n && !this.isLock) {\n this.stop()\n this.checkAnimation(this.getSportsProgress)\n }\n })\n\n const group = new Group()\n group.add(glb.scene)\n group.add(poi)\n group.add(this.inspection.minCamera)\n\n this.inspection.minCamera.position.copy(glb.scene.position)\n this.inspection.minCamera.position.z -= 15\n this.inspection.minCamera.position.y += 4\n this.inspection.minCamera.rotateY(Math.PI)\n\n this.model = group\n\n this.inspection.gobal.interactionManager.add(poi)\n\n // poi.addEventListener('click', () => {\n // group.add(poi2)\n // poi.visible = false\n // })\n\n glb.scene.scale.set(5, 5, 5)\n glb.scene.traverse((child) => {\n child.layers.enable(2)\n })\n\n this.inspection.gobal.scene.add(this.model)\n }\n\n async startMove(curve) {\n if (!this.model)\n await this.loadModel()\n\n this.control = utils.moveWithLine(this.model, curve, 10, {\n groundCurve: this.inspection.groundCurve,\n })\n\n this.model.position.copy(curve.getPointAt(0))\n\n this.stop()\n\n use.useframe(() => {\n this.inspection.groundMaterial.uniforms.u_time.value = this.getSportsProgress - 0.01\n sendToMessage(MessageType.Event, 'onInspectProgress', EMessageStatus.Success, undefined, {\n percentage: this.getSportsProgress,\n })\n })\n }\n\n get getSportsProgress() {\n if (!this.control)\n return 0\n\n return this.control.getProgress()\n }\n\n private getTargetQuaternion(targetMesh: Group) {\n targetMesh.updateMatrixWorld(true)\n const localForward = new Vector3(0, 0, -1)\n const worldForward = localForward.applyQuaternion(targetMesh.quaternion.clone()).normalize()\n\n const target = targetMesh.position.clone()\n const direction = target.sub(this.model.position).normalize()\n\n const targetQuaternion = new Quaternion().setFromUnitVectors(worldForward, direction)\n\n const dotProduct = worldForward.dot(direction)\n const angleRadians = Math.acos(dotProduct)\n const angleDegrees = angleRadians * (180 / Math.PI)\n\n // todo: some problem\n if (angleDegrees < 60) {\n const flipQuaternion = new Quaternion()\n flipQuaternion.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI)\n targetQuaternion.multiply(flipQuaternion)\n }\n }\n\n private getTargetQuaternionV2(lastFromPositin: Vector3, currentPositin: Vector3, targetPosition: Vector3) {\n const vTo = targetPosition.clone().sub(currentPositin).normalize()\n const vFrom = currentPositin.clone().sub(lastFromPositin).normalize()\n\n const targetQuaternion = new Quaternion().setFromUnitVectors(vFrom, vTo)\n\n const flipQuaternion = new Quaternion()\n flipQuaternion.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI)\n targetQuaternion.multiply(flipQuaternion)\n\n return targetQuaternion\n }\n\n subscription() {\n return new Promise((resolve) => {\n utils.emitter.on('continue', (data) => {\n resolve(data)\n })\n })\n }\n\n private checkAnimation(progress: number) {\n this.isLock = true\n this.isAnimation = true\n\n const key = Object.keys(targetProgresspoints).find((p) => {\n const num = parseFloat(p)\n if (progress >= num && progress < num + 0.01)\n return true\n })\n\n const targetMeshId = targetProgresspoints[key].lookAt\n\n let targetMesh: Group | null = null\n\n if (targetMeshId === 'GY_GD_guandaofamen_5')\n targetMesh = this.inspection.gobal.pipeline.getObjectByName(targetMeshId) as Group\n\n else\n targetMesh = this.inspection.gobal.realModl.getObjectByName(targetMeshId) as Group\n\n if (!targetMesh) {\n this.contineMove()\n this.isAnimation = false\n setTimeout(() => {\n this.isLock = false\n }, 500)\n return\n }\n\n const currentAnchor = this.inspection.anchorObject.get(targetProgresspoints[key].name)\n\n currentAnchor.traverse((child) => {\n if (child.name === 'cylinder')\n child.material = new MeshBasicMaterial({ color: new Color('yellow') })\n else\n child.material = new MeshBasicMaterial({ color: new Color('#facb2b') })\n })\n\n setTimeout(() => {\n const rotationMatrix = new Matrix4()\n\n const targetQuaternion = new Quaternion()\n const startQuaternion = this.model.quaternion.clone()\n\n rotationMatrix.lookAt(targetMesh.position, this.model.position, this.model.up)\n targetQuaternion.setFromRotationMatrix(rotationMatrix)\n\n const forwardTween = new Tween({ t: 0 })\n .to({ t: 1 }, 2000)\n .onUpdate((obj) => {\n this.model.quaternion.copy(startQuaternion).slerp(targetQuaternion, obj.t)\n })\n\n const backwardTween = new Tween({ t: 1 })\n .to({ t: 0 }, 2000)\n .onUpdate((obj) => {\n this.model.quaternion.copy(startQuaternion).slerp(targetQuaternion, obj.t)\n })\n\n forwardTween.onComplete(() => {\n let finirMesh: Group | null = null\n\n sendToMessage(MessageType.Event, 'onReachTarget', EMessageStatus.Success, undefined, {\n target: targetProgresspoints[key].name,\n })\n\n if (Number(key) === 0.04 || Number(key) === 0.68)\n (this.inspection.minCamera as Camera).layers.set(2)\n\n if (Number(key) === 0.15 || Number(key) === 0.24 || Number(key) === 0.40) {\n (this.inspection.minCamera as Camera).layers.enable(3)\n // @ts-ignore\n if (!targetMesh.finirMesh) {\n finirMesh = targetMesh.clone() as any as Group\n\n const finirMaterialV2 = createFinirMaterial('yellow', 5.3)\n\n finirMesh.traverse((child) => {\n child.layers.set(3)\n\n if (child.type === 'Mesh') {\n // @ts-ignore\n child.material = finirMaterialV2\n\n // @ts-ignore\n const lineSegments = new LineSegments(new EdgesGeometry(child.geometry as any), new LineBasicMaterial({ color: 'yellow' }))\n\n lineSegments.layers.set(3)\n finirMesh.add(lineSegments)\n }\n })\n\n // @ts-ignore\n targetMesh.finirMesh = finirMesh\n\n this.inspection.gobal.scene.add(finirMesh)\n }\n else {\n // @ts-ignore\n finirMesh = targetMesh.finirMesh\n\n finirMesh.visible = true\n }\n }\n\n if (Number(key) === 0.15 || Number(key) === 0.24) {\n this.subscription().then((data) => {\n if (data) {\n finirMesh.visible = false\n backwardTween.start()\n\n utils.emitter.off('continue')\n }\n })\n }\n else {\n setTimeout(() => {\n if (Number(key) === 0.04 || Number(key) === 0.68)\n (this.inspection.minCamera as Camera).layers.set(0)\n\n if (Number(key) === 0.40)\n finirMesh.visible = false\n\n backwardTween.start()\n }, 6000)\n }\n })\n\n setTimeout(() => {\n forwardTween.start()\n }, 1000)\n\n backwardTween.onComplete(() => {\n this.isAnimation = false\n this.contineMove()\n\n currentAnchor.traverse((child) => {\n if (child.name === 'cylinder')\n child.material = new MeshBasicMaterial({ color: new Color('#cdccca') })\n else\n child.material = new MeshBasicMaterial({ color: new Color('#fff') })\n })\n\n setTimeout(() => {\n this.isLock = false\n }, 500)\n })\n }, 1000)\n }\n\n generateTempPath(currentPosition: Vector3, targetPosition: Vector3) {\n return new LineCurve3(currentPosition, targetPosition)\n }\n\n private startRotate = (targetQuaternion: Quaternion, mesh: Group, cb: () => void) => {\n const clock = new Clock()\n\n if (mesh.quaternion.equals(targetQuaternion))\n return cb()\n\n const animation = use.useframe(() => {\n const delta = clock.getDelta()\n if (!mesh.quaternion.equals(targetQuaternion)) {\n const step = 1 * delta\n mesh.quaternion.rotateTowards(targetQuaternion, step)\n }\n else {\n animation()\n cb()\n }\n },\n )\n }\n\n gotoTarget(targetPosition: Vector3, targetProgress: number) {\n if (this.isAnimation)\n return\n\n this.isAnimation = true\n\n this.control.stop()\n\n const rotationMatrix = new Matrix4()\n const targetQuaternion = new Quaternion()\n\n rotationMatrix.lookAt(targetPosition, this.model.position, this.model.up)\n targetQuaternion.setFromRotationMatrix(rotationMatrix)\n\n this.startRotate(targetQuaternion, this.model,\n () => {\n const currentPosition = this.model.position\n const upCurve = new LineCurve3(currentPosition, new Vector3(currentPosition.x, currentPosition.y + 100, currentPosition.z))\n const upControl = utils.moveWithLine(this.model, upCurve, 10, { loop: false, lookat: targetPosition })\n\n upControl.addEventListener('end', () => {\n const tempCurve = this.generateTempPath(currentPosition, new Vector3(targetPosition.x, targetPosition.y + 100, targetPosition.z))\n const tempControl = utils.moveWithLine(this.model, tempCurve, 50, { loop: false, lookat: false })\n\n tempControl.addEventListener('end', () => {\n const lastPosition = this.model.position\n const downCurve = new LineCurve3(lastPosition, new Vector3(lastPosition.x, lastPosition.y - 100, lastPosition.z))\n const downControl = utils.moveWithLine(this.model, downCurve, 10, { loop: false, lookat: false })\n\n downControl.addEventListener('end', () => {\n const rotationMatrix2 = new Matrix4()\n const targetQuaternion2 = new Quaternion()\n\n const targetPosition2 = this.inspection.curve.getPointAt((targetProgress + 0.01) % 1)\n\n rotationMatrix2.lookAt(targetPosition2, this.model.position, this.model.up)\n targetQuaternion2.setFromRotationMatrix(rotationMatrix2)\n\n this.startRotate(targetQuaternion2, this.model, () => {\n setTimeout(() => {\n this.isAnimation = false\n this.control.setProgress(targetProgress)\n this.control.contine()\n }, 500)\n })\n })\n })\n })\n })\n }\n\n setSpeed(speed: number) {\n if (this.control)\n this.control.setSpeed(speed)\n }\n\n stop() {\n if (this.control)\n this.control.stop()\n }\n\n contineMove() {\n if (this.control)\n this.control.contine()\n\n utils.emitter.emit('continue', true)\n }\n\n /**\n * todo: now temporarily not implemented\n */\n dispose() { }\n}\n\nexport default InspectionObject"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Clock","Color","EdgesGeometry","Group","LineBasicMaterial","LineCurve3","LineSegments","Matrix4","Mesh","MeshBasicMaterial","MirroredRepeatWrapping","ModelLoader","Quaternion","RepeatWrapping","TextureLoader","Vector3","use","utils","SpritePoi","Tween","createFinirMaterial","usePath","MessageType","sendToMessage","EMessageStatus","isCheck","targetProgresspoints","TubeGeometryV2","modelLoader","InspectionObject","inspection","targetQuaternion","mesh","cb","clock","quaternion","equals","animation","useframe","delta","getDelta","step","rotateTowards","temp","load","wrapS","wrapT","repeat","set","rotation","Math","PI","loadGLTF","glb","div","document","createElement","style","position","img","src","span","innerText","top","left","transform","color","fontSize","fontWeight","appendChild","poi","width","height","img2","poi2","scale","fly1","scene","getObjectByName","fly2","fly3","fly4","copy","clone","add","z","getSportsProgress","isLock","stop","checkAnimation","group","minCamera","y","rotateY","model","gobal","interactionManager","traverse","child","layers","enable","curve","loadModel","control","moveWithLine","groundCurve","getPointAt","groundMaterial","uniforms","u_time","value","Event","Success","undefined","percentage","getProgress","targetMesh","updateMatrixWorld","localForward","worldForward","applyQuaternion","normalize","target","direction","sub","setFromUnitVectors","dotProduct","dot","angleRadians","acos","angleDegrees","flipQuaternion","setFromAxisAngle","multiply","lastFromPositin","currentPositin","targetPosition","vTo","vFrom","Promise","resolve","emitter","on","data","progress","isAnimation","key","Object","keys","find","p","num","parseFloat","targetMeshId","lookAt","pipeline","realModl","contineMove","setTimeout","currentAnchor","anchorObject","get","name","material","rotationMatrix","startQuaternion","up","setFromRotationMatrix","forwardTween","t","to","onUpdate","obj","slerp","backwardTween","onComplete","finirMesh","Number","finirMaterialV2","type","lineSegments","geometry","visible","subscription","then","start","off","currentPosition","tube","tempPathMesh","map","transparent","depthTest","getLength","tempDemo","offset","x","dispose","removeFromParent","targetProgress","startRotate","tempPathMeshtargetPosition","generateTempPathMesh","generateTempPath","upCurve","upControl","loop","lookat","addEventListener","tempCurve","tempControl","lastPosition","downCurve","downControl","rotationMatrix2","targetQuaternion2","targetPosition2","cleanTempPathMesh","setProgress","contine","speed","setSpeed","emit"],"sources":["../../../../src/factory/unit/inspection/InspectionObject.ts"],"sourcesContent":["import type { Camera, Curve } from '@anov/3d-core'\nimport { BoxGeometry, Clock, Color, EdgesGeometry, Group, LineBasicMaterial, LineCurve3, LineSegments, Matrix4, Mesh, MeshBasicMaterial, MirroredRepeatWrapping, ModelLoader, Quaternion, RepeatWrapping, ShaderChunk, ShaderMaterial, TextureLoader, TubeGeometry, Vector3, use, utils } from '@anov/3d-core'\nimport type { Css2DPoi } from '@anov/3d-ability'\nimport { SpritePoi, addColorifyPass, createHighSelectedTool } from '@anov/3d-ability'\nimport { Tween } from '@tweenjs/tween.js'\nimport { createFinirMaterial } from '../../utils/finirMaterial'\nimport { usePath } from '../../3d'\nimport { MessageType, sendToMessage } from '../../../utils/messageFn'\nimport { EMessageStatus } from '../../../messageStatus'\nimport { invertMap } from '../handle'\nimport fragmentShader from '../glsl/highway/fragmentShader'\nimport vertexShader from '../glsl/highway/vertexShader'\nimport { isCheck, targetProgresspoints } from './lineData'\nimport TubeGeometryV2 from './tubeGeometry'\n\nconst modelLoader = new ModelLoader()\n\nclass InspectionObject {\n model\n private inspection\n private control\n private tempLine\n private isLock = false\n private isAnimation = false\n walkCurveMesh\n tempPathMesh\n css2d: Css2DPoi\n temp\n tempDemo\n\n constructor(inspection) {\n this.inspection = inspection\n\n const temp = new TextureLoader().load(`${usePath}test07.png`)\n temp.wrapS = RepeatWrapping\n temp.wrapT = MirroredRepeatWrapping\n temp.repeat.set(1, 2)\n temp.rotation = Math.PI\n\n this.temp = temp\n }\n\n private async loadModel() {\n const glb = await (await modelLoader.loadGLTF(`${usePath}car.glb`, false, true, './draco/'))\n\n const div = document.createElement('div')\n div.style.position = 'relative'\n\n const img = document.createElement('img')\n img.src = `${usePath}aerialVehicle02.png`\n\n const span = document.createElement('span')\n span.innerText = '巡检无人机'\n span.style.position = 'absolute'\n span.style.top = '10px'\n span.style.left = '50%'\n span.style.transform = 'translateX(-30%)'\n\n span.style.color = 'white'\n span.style.fontSize = '20px'\n span.style.fontWeight = 'bold'\n\n div.appendChild(img)\n div.appendChild(span)\n\n const poi = new SpritePoi(div, {\n width: 100 * 2,\n height: 40 * 2,\n })\n\n const img2 = document.createElement('img')\n img2.src = `${usePath}aerialVehicle01.png`\n\n const poi2 = new SpritePoi(img2, {\n width: 200 * 2,\n height: 80 * 2,\n })\n\n poi.scale.set(100, 40, 1)\n poi2.scale.set(200, 80, 1)\n\n const fly1 = glb.scene.getObjectByName('fly1')\n const fly2 = glb.scene.getObjectByName('fly1_1')\n const fly3 = glb.scene.getObjectByName('fly1_2')\n const fly4 = glb.scene.getObjectByName('fly1_3')\n\n use.useframe(() => {\n poi.position.copy(glb.scene.position.clone().add(new Vector3(0, 10, 0)))\n poi2.position.copy(glb.scene.position.clone().add(new Vector3(0, 10, 0)))\n\n fly1.rotation.z += 1.3\n fly2.rotation.z += 1.3\n fly3.rotation.z += 1.3\n fly4.rotation.z += 1.3\n\n if (isCheck(this.getSportsProgress)\n && !this.isLock) {\n this.stop()\n this.checkAnimation(this.getSportsProgress)\n }\n })\n\n const group = new Group()\n group.add(glb.scene)\n group.add(poi)\n group.add(this.inspection.minCamera)\n\n this.inspection.minCamera.position.copy(glb.scene.position)\n this.inspection.minCamera.position.z -= 15\n this.inspection.minCamera.position.y += 4\n this.inspection.minCamera.rotateY(Math.PI)\n\n this.model = group\n\n this.inspection.gobal.interactionManager.add(poi)\n\n // poi.addEventListener('click', () => {\n // group.add(poi2)\n // poi.visible = false\n // })\n\n glb.scene.scale.set(5, 5, 5)\n glb.scene.traverse((child) => {\n child.layers.enable(2)\n })\n\n this.inspection.gobal.scene.add(this.model)\n }\n\n async startMove(curve) {\n if (!this.model)\n await this.loadModel()\n\n this.control = utils.moveWithLine(this.model, curve, 10, {\n groundCurve: this.inspection.groundCurve,\n })\n\n this.model.position.copy(curve.getPointAt(0))\n\n this.stop()\n\n use.useframe(() => {\n this.inspection.groundMaterial.uniforms.u_time.value = this.getSportsProgress - 0.01\n sendToMessage(MessageType.Event, 'onInspectProgress', EMessageStatus.Success, undefined, {\n percentage: this.getSportsProgress,\n })\n })\n }\n\n get getSportsProgress() {\n if (!this.control)\n return 0\n\n return this.control.getProgress()\n }\n\n private getTargetQuaternion(targetMesh: Group) {\n targetMesh.updateMatrixWorld(true)\n const localForward = new Vector3(0, 0, -1)\n const worldForward = localForward.applyQuaternion(targetMesh.quaternion.clone()).normalize()\n\n const target = targetMesh.position.clone()\n const direction = target.sub(this.model.position).normalize()\n\n const targetQuaternion = new Quaternion().setFromUnitVectors(worldForward, direction)\n\n const dotProduct = worldForward.dot(direction)\n const angleRadians = Math.acos(dotProduct)\n const angleDegrees = angleRadians * (180 / Math.PI)\n\n // todo: some problem\n if (angleDegrees < 60) {\n const flipQuaternion = new Quaternion()\n flipQuaternion.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI)\n targetQuaternion.multiply(flipQuaternion)\n }\n }\n\n private getTargetQuaternionV2(lastFromPositin: Vector3, currentPositin: Vector3, targetPosition: Vector3) {\n const vTo = targetPosition.clone().sub(currentPositin).normalize()\n const vFrom = currentPositin.clone().sub(lastFromPositin).normalize()\n\n const targetQuaternion = new Quaternion().setFromUnitVectors(vFrom, vTo)\n\n const flipQuaternion = new Quaternion()\n flipQuaternion.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI)\n targetQuaternion.multiply(flipQuaternion)\n\n return targetQuaternion\n }\n\n subscription() {\n return new Promise((resolve) => {\n utils.emitter.on('continue', (data) => {\n resolve(data)\n })\n })\n }\n\n private checkAnimation(progress: number) {\n this.isLock = true\n this.isAnimation = true\n\n const key = Object.keys(targetProgresspoints).find((p) => {\n const num = parseFloat(p)\n if (progress >= num && progress < num + 0.01)\n return true\n })\n\n const targetMeshId = targetProgresspoints[key].lookAt\n\n let targetMesh: Group | null = null\n\n if (targetMeshId === 'GY_GD_guandaofamen_5')\n targetMesh = this.inspection.gobal.pipeline.getObjectByName(targetMeshId) as Group\n\n else\n targetMesh = this.inspection.gobal.realModl.getObjectByName(targetMeshId) as Group\n\n if (!targetMesh) {\n this.contineMove()\n this.isAnimation = false\n setTimeout(() => {\n this.isLock = false\n }, 500)\n return\n }\n\n const currentAnchor = this.inspection.anchorObject.get(targetProgresspoints[key].name)\n\n currentAnchor.traverse((child) => {\n if (child.name === 'cylinder')\n child.material = new MeshBasicMaterial({ color: new Color('yellow') })\n else\n child.material = new MeshBasicMaterial({ color: new Color('#facb2b') })\n })\n\n setTimeout(() => {\n const rotationMatrix = new Matrix4()\n\n const targetQuaternion = new Quaternion()\n const startQuaternion = this.model.quaternion.clone()\n\n rotationMatrix.lookAt(targetMesh.position, this.model.position, this.model.up)\n targetQuaternion.setFromRotationMatrix(rotationMatrix)\n\n const forwardTween = new Tween({ t: 0 })\n .to({ t: 1 }, 2000)\n .onUpdate((obj) => {\n this.model.quaternion.copy(startQuaternion).slerp(targetQuaternion, obj.t)\n })\n\n const backwardTween = new Tween({ t: 1 })\n .to({ t: 0 }, 2000)\n .onUpdate((obj) => {\n this.model.quaternion.copy(startQuaternion).slerp(targetQuaternion, obj.t)\n })\n\n forwardTween.onComplete(() => {\n let finirMesh: Group | null = null\n\n sendToMessage(MessageType.Event, 'onReachTarget', EMessageStatus.Success, undefined, {\n target: targetProgresspoints[key].name,\n })\n\n if (Number(key) === 0.04 || Number(key) === 0.68)\n (this.inspection.minCamera as Camera).layers.set(2)\n\n if (Number(key) === 0.15 || Number(key) === 0.24 || Number(key) === 0.40) {\n (this.inspection.minCamera as Camera).layers.enable(3)\n // @ts-ignore\n if (!targetMesh.finirMesh) {\n finirMesh = targetMesh.clone() as any as Group\n\n const finirMaterialV2 = createFinirMaterial('yellow', 5.3)\n\n finirMesh.traverse((child) => {\n child.layers.set(3)\n\n if (child.type === 'Mesh') {\n // @ts-ignore\n child.material = finirMaterialV2\n\n // @ts-ignore\n const lineSegments = new LineSegments(new EdgesGeometry(child.geometry as any), new LineBasicMaterial({ color: 'yellow' }))\n\n lineSegments.layers.set(3)\n finirMesh.add(lineSegments)\n }\n })\n\n // @ts-ignore\n targetMesh.finirMesh = finirMesh\n\n this.inspection.gobal.scene.add(finirMesh)\n }\n else {\n // @ts-ignore\n finirMesh = targetMesh.finirMesh\n\n finirMesh.visible = true\n }\n }\n\n if (Number(key) === 0.15 || Number(key) === 0.24) {\n this.subscription().then((data) => {\n if (data) {\n finirMesh.visible = false\n backwardTween.start()\n\n utils.emitter.off('continue')\n }\n })\n }\n else {\n setTimeout(() => {\n if (Number(key) === 0.04 || Number(key) === 0.68)\n (this.inspection.minCamera as Camera).layers.set(0)\n\n if (Number(key) === 0.40)\n finirMesh.visible = false\n\n backwardTween.start()\n }, 6000)\n }\n })\n\n setTimeout(() => {\n forwardTween.start()\n }, 1000)\n\n backwardTween.onComplete(() => {\n this.isAnimation = false\n this.contineMove()\n\n currentAnchor.traverse((child) => {\n if (child.name === 'cylinder')\n child.material = new MeshBasicMaterial({ color: new Color('#cdccca') })\n else\n child.material = new MeshBasicMaterial({ color: new Color('#fff') })\n })\n\n setTimeout(() => {\n this.isLock = false\n }, 500)\n })\n }, 1000)\n }\n\n generateTempPath(currentPosition: Vector3, targetPosition: Vector3) {\n return new LineCurve3(currentPosition, targetPosition)\n }\n\n private startRotate = (targetQuaternion: Quaternion, mesh: Group, cb: () => void) => {\n const clock = new Clock()\n\n if (mesh.quaternion.equals(targetQuaternion))\n return cb()\n\n const animation = use.useframe(() => {\n const delta = clock.getDelta()\n if (!mesh.quaternion.equals(targetQuaternion)) {\n const step = 1 * delta\n mesh.quaternion.rotateTowards(targetQuaternion, step)\n }\n else {\n animation()\n cb()\n }\n },\n )\n }\n\n private generateTempPathMesh(curve: Curve<Vector3>) {\n // @ts-ignore\n const tube = new TubeGeometryV2(curve, 100, 5, 2, false)\n const tempPathMesh = new Mesh(tube, new MeshBasicMaterial({ map: this.temp, transparent: true, depthTest: true }))\n\n this.inspection.gobal.scene.add(tempPathMesh)\n this.tempPathMesh = tempPathMesh\n\n this.temp.repeat.set(curve.getLength() / 500, 2)\n this.tempDemo = use.useframe(() => {\n this.temp.offset.x -= -0.0009\n })\n }\n\n private cleanTempPathMesh() {\n if (this.tempPathMesh) {\n this.tempDemo()\n this.tempPathMesh.geometry.dispose()\n this.tempPathMesh.material.dispose();\n (this.tempPathMesh as Mesh).removeFromParent()\n }\n }\n\n gotoTarget(targetPosition: Vector3, targetProgress: number) {\n if (this.isAnimation)\n return\n\n this.isAnimation = true\n\n this.control.stop()\n\n const rotationMatrix = new Matrix4()\n const targetQuaternion = new Quaternion()\n\n rotationMatrix.lookAt(targetPosition, this.model.position, this.model.up)\n targetQuaternion.setFromRotationMatrix(rotationMatrix)\n\n this.startRotate(targetQuaternion, this.model,\n () => {\n const tempPathMeshtargetPosition = new Vector3(targetPosition.x, 1.1, targetPosition.z)\n this.generateTempPathMesh(this.generateTempPath(new Vector3(this.model.position.x, 1.1, this.model.position.z), tempPathMeshtargetPosition))\n\n const currentPosition = this.model.position\n const upCurve = new LineCurve3(currentPosition, new Vector3(currentPosition.x, currentPosition.y + 100, currentPosition.z))\n const upControl = utils.moveWithLine(this.model, upCurve, 10, { loop: false, lookat: targetPosition })\n\n // up end\n upControl.addEventListener('end', () => {\n const tempCurve = this.generateTempPath(currentPosition, new Vector3(targetPosition.x, targetPosition.y + 100, targetPosition.z))\n const tempControl = utils.moveWithLine(this.model, tempCurve, 50, { loop: false, lookat: false })\n\n // temp end\n tempControl.addEventListener('end', () => {\n const lastPosition = this.model.position\n const downCurve = new LineCurve3(lastPosition, new Vector3(lastPosition.x, lastPosition.y - 100, lastPosition.z))\n const downControl = utils.moveWithLine(this.model, downCurve, 10, { loop: false, lookat: false })\n\n // down end\n downControl.addEventListener('end', () => {\n const rotationMatrix2 = new Matrix4()\n const targetQuaternion2 = new Quaternion()\n\n const targetPosition2 = this.inspection.curve.getPointAt((targetProgress + 0.01) % 1)\n\n rotationMatrix2.lookAt(targetPosition2, this.model.position, this.model.up)\n targetQuaternion2.setFromRotationMatrix(rotationMatrix2)\n\n this.startRotate(targetQuaternion2, this.model, () => {\n setTimeout(() => {\n this.cleanTempPathMesh()\n this.isAnimation = false\n this.control.setProgress(targetProgress)\n this.control.contine()\n }, 500)\n })\n })\n })\n })\n })\n }\n\n setSpeed(speed: number) {\n if (this.control)\n this.control.setSpeed(speed)\n }\n\n stop() {\n if (this.control)\n this.control.stop()\n }\n\n contineMove() {\n if (this.control)\n this.control.contine()\n\n utils.emitter.emit('continue', true)\n }\n\n /**\n * todo: now temporarily not implemented\n */\n dispose() { }\n}\n\nexport default InspectionObject"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BufferGeometry, QuadraticBezierCurve3, Vector3 } from '@anov/3d-core';
|
|
2
|
+
declare class TubeGeometry extends BufferGeometry {
|
|
3
|
+
type: string;
|
|
4
|
+
parameters: {
|
|
5
|
+
path: QuadraticBezierCurve3;
|
|
6
|
+
tubularSegments: number;
|
|
7
|
+
radius: number;
|
|
8
|
+
radialSegments: number;
|
|
9
|
+
closed: boolean;
|
|
10
|
+
};
|
|
11
|
+
tangents: Vector3[];
|
|
12
|
+
normals: Vector3[];
|
|
13
|
+
binormals: Vector3[];
|
|
14
|
+
constructor(path?: QuadraticBezierCurve3, tubularSegments?: number, radius?: number, radialSegments?: number, closed?: boolean);
|
|
15
|
+
}
|
|
16
|
+
export default TubeGeometry;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
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); } }
|
|
3
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
4
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
5
|
+
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); }
|
|
6
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
7
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
8
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
9
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
10
|
+
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; } }
|
|
11
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
12
|
+
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; }
|
|
13
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
14
|
+
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); }
|
|
15
|
+
import { BufferGeometry, Float32BufferAttribute, QuadraticBezierCurve3, Vector2, Vector3 } from '@anov/3d-core';
|
|
16
|
+
var TubeGeometry = /*#__PURE__*/function (_BufferGeometry) {
|
|
17
|
+
_inherits(TubeGeometry, _BufferGeometry);
|
|
18
|
+
var _super = _createSuper(TubeGeometry);
|
|
19
|
+
function TubeGeometry() {
|
|
20
|
+
var _this;
|
|
21
|
+
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0));
|
|
22
|
+
var tubularSegments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 64;
|
|
23
|
+
var radius = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
24
|
+
var radialSegments = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 8;
|
|
25
|
+
var closed = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
26
|
+
_classCallCheck(this, TubeGeometry);
|
|
27
|
+
_this = _super.call(this);
|
|
28
|
+
_defineProperty(_assertThisInitialized(_this), "type", void 0);
|
|
29
|
+
_defineProperty(_assertThisInitialized(_this), "parameters", void 0);
|
|
30
|
+
_defineProperty(_assertThisInitialized(_this), "tangents", void 0);
|
|
31
|
+
_defineProperty(_assertThisInitialized(_this), "normals", void 0);
|
|
32
|
+
_defineProperty(_assertThisInitialized(_this), "binormals", void 0);
|
|
33
|
+
_this.type = 'TubeGeometry';
|
|
34
|
+
_this.parameters = {
|
|
35
|
+
path: path,
|
|
36
|
+
tubularSegments: tubularSegments,
|
|
37
|
+
radius: radius,
|
|
38
|
+
radialSegments: radialSegments,
|
|
39
|
+
closed: closed
|
|
40
|
+
};
|
|
41
|
+
var frames = path.computeFrenetFrames(tubularSegments, closed);
|
|
42
|
+
|
|
43
|
+
// expose internals
|
|
44
|
+
|
|
45
|
+
_this.tangents = frames.tangents;
|
|
46
|
+
_this.normals = frames.normals;
|
|
47
|
+
_this.binormals = frames.binormals;
|
|
48
|
+
|
|
49
|
+
// helper variables
|
|
50
|
+
|
|
51
|
+
var vertex = new Vector3();
|
|
52
|
+
var normal = new Vector3();
|
|
53
|
+
var uv = new Vector2();
|
|
54
|
+
var P = new Vector3();
|
|
55
|
+
|
|
56
|
+
// buffer
|
|
57
|
+
|
|
58
|
+
var vertices = [];
|
|
59
|
+
var normals = [];
|
|
60
|
+
var uvs = [];
|
|
61
|
+
var indices = [];
|
|
62
|
+
|
|
63
|
+
// create buffer data
|
|
64
|
+
|
|
65
|
+
generateBufferData();
|
|
66
|
+
|
|
67
|
+
// build geometry
|
|
68
|
+
|
|
69
|
+
_this.setIndex(indices);
|
|
70
|
+
_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));
|
|
71
|
+
_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));
|
|
72
|
+
_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
|
|
73
|
+
|
|
74
|
+
// functions
|
|
75
|
+
|
|
76
|
+
function generateBufferData() {
|
|
77
|
+
for (var i = 0; i < tubularSegments; i++) generateSegment(i);
|
|
78
|
+
|
|
79
|
+
// if the geometry is not closed, generate the last row of vertices and normals
|
|
80
|
+
// at the regular position on the given path
|
|
81
|
+
//
|
|
82
|
+
// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)
|
|
83
|
+
|
|
84
|
+
generateSegment(closed === false ? tubularSegments : 0);
|
|
85
|
+
|
|
86
|
+
// uvs are generated in a separate function.
|
|
87
|
+
// this makes it easy compute correct values for closed geometries
|
|
88
|
+
|
|
89
|
+
generateUVs();
|
|
90
|
+
|
|
91
|
+
// finally create faces
|
|
92
|
+
|
|
93
|
+
generateIndices();
|
|
94
|
+
}
|
|
95
|
+
function generateSegment(i) {
|
|
96
|
+
P = path.getPointAt(i / tubularSegments, P);
|
|
97
|
+
var T = frames.tangents[i];
|
|
98
|
+
var referenceVector = new Vector3(0, 1, 0);
|
|
99
|
+
if (T.y > 0.999) referenceVector.set(1, 0, 0);
|
|
100
|
+
var N = new Vector3();
|
|
101
|
+
var B = new Vector3();
|
|
102
|
+
N.crossVectors(T, referenceVector).normalize();
|
|
103
|
+
B.crossVectors(T, N).normalize();
|
|
104
|
+
for (var j = 0; j <= radialSegments; j++) {
|
|
105
|
+
var v = j / radialSegments * Math.PI * 2;
|
|
106
|
+
var sin = Math.sin(v);
|
|
107
|
+
var cos = -Math.cos(v);
|
|
108
|
+
|
|
109
|
+
// 使用切线来生成法线
|
|
110
|
+
normal.x = cos * N.x + sin * B.x;
|
|
111
|
+
normal.y = cos * N.y + sin * B.y;
|
|
112
|
+
normal.z = cos * N.z + sin * B.z;
|
|
113
|
+
normal.normalize();
|
|
114
|
+
normals.push(normal.x, normal.y, normal.z);
|
|
115
|
+
|
|
116
|
+
// 使用切线生成顶点
|
|
117
|
+
vertex.x = P.x + radius * normal.x;
|
|
118
|
+
vertex.y = P.y + radius * normal.y;
|
|
119
|
+
vertex.z = P.z + radius * normal.z;
|
|
120
|
+
vertices.push(vertex.x, vertex.y, vertex.z);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function generateIndices() {
|
|
124
|
+
for (var j = 1; j <= tubularSegments; j++) {
|
|
125
|
+
for (var i = 1; i <= radialSegments; i++) {
|
|
126
|
+
var a = (radialSegments + 1) * (j - 1) + (i - 1);
|
|
127
|
+
var b = (radialSegments + 1) * j + (i - 1);
|
|
128
|
+
var c = (radialSegments + 1) * j + i;
|
|
129
|
+
var d = (radialSegments + 1) * (j - 1) + i;
|
|
130
|
+
|
|
131
|
+
// faces
|
|
132
|
+
|
|
133
|
+
indices.push(a, b, d);
|
|
134
|
+
indices.push(b, c, d);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function generateUVs() {
|
|
139
|
+
for (var i = 0; i <= tubularSegments; i++) {
|
|
140
|
+
for (var j = 0; j <= radialSegments; j++) {
|
|
141
|
+
uv.x = i / tubularSegments;
|
|
142
|
+
uv.y = j / radialSegments;
|
|
143
|
+
uvs.push(uv.x, uv.y);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return _this;
|
|
148
|
+
}
|
|
149
|
+
return _createClass(TubeGeometry);
|
|
150
|
+
}(BufferGeometry);
|
|
151
|
+
export default TubeGeometry;
|
|
152
|
+
//# sourceMappingURL=tubeGeometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BufferGeometry","Float32BufferAttribute","QuadraticBezierCurve3","Vector2","Vector3","TubeGeometry","path","tubularSegments","radius","radialSegments","closed","type","parameters","frames","computeFrenetFrames","tangents","normals","binormals","vertex","normal","uv","P","vertices","uvs","indices","generateBufferData","setIndex","setAttribute","i","generateSegment","generateUVs","generateIndices","getPointAt","T","referenceVector","y","set","N","B","crossVectors","normalize","j","v","Math","PI","sin","cos","x","z","push","a","b","c","d"],"sources":["../../../../src/factory/unit/inspection/tubeGeometry.ts"],"sourcesContent":["import { BufferGeometry, Color, Float32BufferAttribute, LineCurve3, Mesh, MeshBasicMaterial, QuadraticBezierCurve3, SceneControl as Scene, Vector2, Vector3 } from '@anov/3d-core'\n\nclass TubeGeometry extends BufferGeometry {\n type: string\n parameters: {\n path: QuadraticBezierCurve3\n tubularSegments: number\n radius: number\n radialSegments: number\n closed: boolean\n }\n\n tangents: Vector3[]\n normals: Vector3[]\n binormals: Vector3[]\n constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0)), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false) {\n super()\n\n this.type = 'TubeGeometry'\n\n this.parameters = {\n path,\n tubularSegments,\n radius,\n radialSegments,\n closed,\n }\n\n const frames = path.computeFrenetFrames(tubularSegments, closed)\n\n // expose internals\n\n this.tangents = frames.tangents\n this.normals = frames.normals\n this.binormals = frames.binormals\n\n // helper variables\n\n const vertex = new Vector3()\n const normal = new Vector3()\n const uv = new Vector2()\n let P = new Vector3()\n\n // buffer\n\n const vertices = []\n const normals = []\n const uvs = []\n const indices = []\n\n // create buffer data\n\n generateBufferData()\n\n // build geometry\n\n this.setIndex(indices)\n this.setAttribute('position', new Float32BufferAttribute(vertices, 3))\n this.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2))\n\n // functions\n\n function generateBufferData() {\n for (let i = 0; i < tubularSegments; i++)\n\n generateSegment(i)\n\n // if the geometry is not closed, generate the last row of vertices and normals\n // at the regular position on the given path\n //\n // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n generateSegment((closed === false) ? tubularSegments : 0)\n\n // uvs are generated in a separate function.\n // this makes it easy compute correct values for closed geometries\n\n generateUVs()\n\n // finally create faces\n\n generateIndices()\n }\n\n function generateSegment(i) {\n P = path.getPointAt(i / tubularSegments, P)\n\n const T = frames.tangents[i]\n\n const referenceVector = new Vector3(0, 1, 0)\n if (T.y > 0.999)\n referenceVector.set(1, 0, 0)\n\n const N = new Vector3()\n const B = new Vector3()\n\n N.crossVectors(T, referenceVector).normalize()\n B.crossVectors(T, N).normalize()\n\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2\n const sin = Math.sin(v)\n const cos = -Math.cos(v)\n\n // 使用切线来生成法线\n normal.x = cos * N.x + sin * B.x\n normal.y = cos * N.y + sin * B.y\n normal.z = cos * N.z + sin * B.z\n normal.normalize()\n\n normals.push(normal.x, normal.y, normal.z)\n\n // 使用切线生成顶点\n vertex.x = P.x + radius * normal.x\n vertex.y = P.y + radius * normal.y\n vertex.z = P.z + radius * normal.z\n\n vertices.push(vertex.x, vertex.y, vertex.z)\n }\n }\n\n function generateIndices() {\n for (let j = 1; j <= tubularSegments; j++) {\n for (let i = 1; i <= radialSegments; i++) {\n const a = (radialSegments + 1) * (j - 1) + (i - 1)\n const b = (radialSegments + 1) * j + (i - 1)\n const c = (radialSegments + 1) * j + i\n const d = (radialSegments + 1) * (j - 1) + i\n\n // faces\n\n indices.push(a, b, d)\n indices.push(b, c, d)\n }\n }\n }\n\n function generateUVs() {\n for (let i = 0; i <= tubularSegments; i++) {\n for (let j = 0; j <= radialSegments; j++) {\n uv.x = i / tubularSegments\n uv.y = j / radialSegments\n\n uvs.push(uv.x, uv.y)\n }\n }\n }\n }\n}\n\nexport default TubeGeometry"],"mappings":"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"}
|