1 |
- {"ast":null,"code":"import { __decorate } from \"../../../tslib.es6.js\";\nimport { RegisterClass } from \"../../../Misc/typeStore.js\";\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes.js\";\nimport { NodeGeometryBlock } from \"../nodeGeometryBlock.js\";\nimport { editableInPropertyPage } from \"../../../Decorators/nodeDecorator.js\";\nimport { VertexData } from \"../../../Meshes/mesh.vertexData.js\";\nimport { WithinEpsilon } from \"../../../Maths/math.scalar.functions.js\";\nimport { Epsilon } from \"../../../Maths/math.constants.js\";\n/**\n * Block used to extract unique positions from a geometry\n */\nexport class GeometryOptimizeBlock extends NodeGeometryBlock {\n /**\n * Gets the current index in the current flow\n * @returns the current index\n */\n getExecutionIndex() {\n return this._currentIndex;\n }\n /**\n * Gets the current loop index in the current flow\n * @returns the current loop index\n */\n getExecutionLoopIndex() {\n return this._currentIndex;\n }\n /**\n * Gets the current face index in the current flow\n * @returns the current face index\n */\n getExecutionFaceIndex() {\n return 0;\n }\n /**\n * Creates a new GeometryOptimizeBlock\n * @param name defines the block name\n */\n constructor(name) {\n super(name);\n /**\n * Gets or sets a boolean indicating that this block can evaluate context\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\n */\n this.evaluateContext = true;\n /**\n * Define the epsilon used to compare similar positions\n */\n this.epsilon = Epsilon;\n /**\n * Optimize faces (by removing duplicates)\n */\n this.optimizeFaces = false;\n this.registerInput(\"geometry\", NodeGeometryBlockConnectionPointTypes.Geometry);\n this.registerInput(\"selector\", NodeGeometryBlockConnectionPointTypes.Int, true);\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\n }\n /**\n * Gets the current class name\n * @returns the class name\n */\n getClassName() {\n return \"GeometryOptimizeBlock\";\n }\n /**\n * Gets the geometry component\n */\n get geometry() {\n return this._inputs[0];\n }\n /**\n * Gets the selector component\n */\n get selector() {\n return this._inputs[1];\n }\n /**\n * Gets the output component\n */\n get output() {\n return this._outputs[0];\n }\n _buildBlock(state) {\n const func = state => {\n if (!this.geometry.isConnected) {\n return null;\n }\n const vertexData = this.geometry.getConnectedValue(state);\n const newPositions = [];\n const newIndicesMap = {};\n state.pushExecutionContext(this);\n state.pushGeometryContext(vertexData);\n // Optimize positions\n for (let index = 0; index < vertexData.positions.length; index += 3) {\n this._currentIndex = index / 3;\n if (this.selector.isConnected) {\n const selector = this.selector.getConnectedValue(state);\n if (!selector) {\n continue;\n }\n }\n const x = vertexData.positions[index];\n const y = vertexData.positions[index + 1];\n const z = vertexData.positions[index + 2];\n // check if we already have it\n let found = false;\n for (let checkIndex = 0; checkIndex < newPositions.length; checkIndex += 3) {\n if (WithinEpsilon(x, newPositions[checkIndex], this.epsilon) && WithinEpsilon(y, newPositions[checkIndex + 1], this.epsilon) && WithinEpsilon(z, newPositions[checkIndex + 2], this.epsilon)) {\n newIndicesMap[index / 3] = checkIndex / 3;\n found = true;\n continue;\n }\n }\n if (!found) {\n newIndicesMap[index / 3] = newPositions.length / 3;\n newPositions.push(x, y, z);\n }\n }\n const newVertexData = new VertexData();\n newVertexData.positions = newPositions;\n const indices = vertexData.indices.map(index => newIndicesMap[index]);\n const newIndices = [];\n if (this.optimizeFaces) {\n // Optimize indices\n for (let index = 0; index < indices.length; index += 3) {\n const a = indices[index];\n const b = indices[index + 1];\n const c = indices[index + 2];\n if (a === b || b == c || c === a) {\n continue;\n }\n // check if we already have it\n let found = false;\n for (let checkIndex = 0; checkIndex < newIndices.length; checkIndex += 3) {\n if (a === newIndices[checkIndex] && b === newIndices[checkIndex + 1] && c === newIndices[checkIndex + 2]) {\n found = true;\n continue;\n }\n if (a === newIndices[checkIndex + 1] && b === newIndices[checkIndex + 2] && c === newIndices[checkIndex]) {\n found = true;\n continue;\n }\n if (a === newIndices[checkIndex + 2] && b === newIndices[checkIndex] && c === newIndices[checkIndex + 1]) {\n found = true;\n continue;\n }\n }\n if (!found) {\n newIndices.push(a, b, c);\n }\n }\n newVertexData.indices = newIndices;\n } else {\n newVertexData.indices = indices;\n }\n return newVertexData;\n };\n state.restoreGeometryContext();\n state.restoreExecutionContext();\n if (this.evaluateContext) {\n this.output._storedFunction = func;\n } else {\n this.output._storedFunction = null;\n this.output._storedValue = func(state);\n }\n }\n _dumpPropertiesCode() {\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\n codeString += `${this._codeVariableName}.epsilon = ${this.epsilon};\\n`;\n codeString += `${this._codeVariableName}.optimizeFaces = ${this.optimizeFaces ? \"true\" : \"false\"};\\n`;\n return codeString;\n }\n /**\n * Serializes this block in a JSON representation\n * @returns the serialized block object\n */\n serialize() {\n const serializationObject = super.serialize();\n serializationObject.evaluateContext = this.evaluateContext;\n serializationObject.epsilon = this.epsilon;\n serializationObject.optimizeFaces = this.optimizeFaces;\n return serializationObject;\n }\n _deserialize(serializationObject) {\n super._deserialize(serializationObject);\n this.evaluateContext = serializationObject.evaluateContext;\n this.epsilon = serializationObject.epsilon;\n this.optimizeFaces = serializationObject.optimizeFaces;\n }\n}\n__decorate([editableInPropertyPage(\"Evaluate context\", 0 /* PropertyTypeForEdition.Boolean */, \"ADVANCED\", {\n embedded: true,\n notifiers: {\n rebuild: true\n }\n})], GeometryOptimizeBlock.prototype, \"evaluateContext\", void 0);\n__decorate([editableInPropertyPage(\"Epsilon\", 1 /* PropertyTypeForEdition.Float */, \"ADVANCED\", {\n embedded: true,\n notifiers: {\n rebuild: true\n }\n})], GeometryOptimizeBlock.prototype, \"epsilon\", void 0);\n__decorate([editableInPropertyPage(\"Optimize faces\", 0 /* PropertyTypeForEdition.Boolean */, \"ADVANCED\", {\n embedded: true,\n notifiers: {\n rebuild: true\n }\n})], GeometryOptimizeBlock.prototype, \"optimizeFaces\", void 0);\nRegisterClass(\"BABYLON.GeometryOptimizeBlock\", GeometryOptimizeBlock);","map":{"version":3,"names":["__decorate","RegisterClass","NodeGeometryBlockConnectionPointTypes","NodeGeometryBlock","editableInPropertyPage","VertexData","WithinEpsilon","Epsilon","GeometryOptimizeBlock","getExecutionIndex","_currentIndex","getExecutionLoopIndex","getExecutionFaceIndex","constructor","name","evaluateContext","epsilon","optimizeFaces","registerInput","Geometry","Int","registerOutput","getClassName","geometry","_inputs","selector","output","_outputs","_buildBlock","state","func","isConnected","vertexData","getConnectedValue","newPositions","newIndicesMap","pushExecutionContext","pushGeometryContext","index","positions","length","x","y","z","found","checkIndex","push","newVertexData","indices","map","newIndices","a","b","c","restoreGeometryContext","restoreExecutionContext","_storedFunction","_storedValue","_dumpPropertiesCode","codeString","_codeVariableName","serialize","serializationObject","_deserialize","embedded","notifiers","rebuild","prototype"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Meshes/Node/Blocks/geometryOptimizeBlock.js"],"sourcesContent":["import { __decorate } from \"../../../tslib.es6.js\";\nimport { RegisterClass } from \"../../../Misc/typeStore.js\";\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes.js\";\nimport { NodeGeometryBlock } from \"../nodeGeometryBlock.js\";\nimport { editableInPropertyPage } from \"../../../Decorators/nodeDecorator.js\";\nimport { VertexData } from \"../../../Meshes/mesh.vertexData.js\";\nimport { WithinEpsilon } from \"../../../Maths/math.scalar.functions.js\";\nimport { Epsilon } from \"../../../Maths/math.constants.js\";\n/**\n * Block used to extract unique positions from a geometry\n */\nexport class GeometryOptimizeBlock extends NodeGeometryBlock {\n /**\n * Gets the current index in the current flow\n * @returns the current index\n */\n getExecutionIndex() {\n return this._currentIndex;\n }\n /**\n * Gets the current loop index in the current flow\n * @returns the current loop index\n */\n getExecutionLoopIndex() {\n return this._currentIndex;\n }\n /**\n * Gets the current face index in the current flow\n * @returns the current face index\n */\n getExecutionFaceIndex() {\n return 0;\n }\n /**\n * Creates a new GeometryOptimizeBlock\n * @param name defines the block name\n */\n constructor(name) {\n super(name);\n /**\n * Gets or sets a boolean indicating that this block can evaluate context\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\n */\n this.evaluateContext = true;\n /**\n * Define the epsilon used to compare similar positions\n */\n this.epsilon = Epsilon;\n /**\n * Optimize faces (by removing duplicates)\n */\n this.optimizeFaces = false;\n this.registerInput(\"geometry\", NodeGeometryBlockConnectionPointTypes.Geometry);\n this.registerInput(\"selector\", NodeGeometryBlockConnectionPointTypes.Int, true);\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\n }\n /**\n * Gets the current class name\n * @returns the class name\n */\n getClassName() {\n return \"GeometryOptimizeBlock\";\n }\n /**\n * Gets the geometry component\n */\n get geometry() {\n return this._inputs[0];\n }\n /**\n * Gets the selector component\n */\n get selector() {\n return this._inputs[1];\n }\n /**\n * Gets the output component\n */\n get output() {\n return this._outputs[0];\n }\n _buildBlock(state) {\n const func = (state) => {\n if (!this.geometry.isConnected) {\n return null;\n }\n const vertexData = this.geometry.getConnectedValue(state);\n const newPositions = [];\n const newIndicesMap = {};\n state.pushExecutionContext(this);\n state.pushGeometryContext(vertexData);\n // Optimize positions\n for (let index = 0; index < vertexData.positions.length; index += 3) {\n this._currentIndex = index / 3;\n if (this.selector.isConnected) {\n const selector = this.selector.getConnectedValue(state);\n if (!selector) {\n continue;\n }\n }\n const x = vertexData.positions[index];\n const y = vertexData.positions[index + 1];\n const z = vertexData.positions[index + 2];\n // check if we already have it\n let found = false;\n for (let checkIndex = 0; checkIndex < newPositions.length; checkIndex += 3) {\n if (WithinEpsilon(x, newPositions[checkIndex], this.epsilon) &&\n WithinEpsilon(y, newPositions[checkIndex + 1], this.epsilon) &&\n WithinEpsilon(z, newPositions[checkIndex + 2], this.epsilon)) {\n newIndicesMap[index / 3] = checkIndex / 3;\n found = true;\n continue;\n }\n }\n if (!found) {\n newIndicesMap[index / 3] = newPositions.length / 3;\n newPositions.push(x, y, z);\n }\n }\n const newVertexData = new VertexData();\n newVertexData.positions = newPositions;\n const indices = vertexData.indices.map((index) => newIndicesMap[index]);\n const newIndices = [];\n if (this.optimizeFaces) {\n // Optimize indices\n for (let index = 0; index < indices.length; index += 3) {\n const a = indices[index];\n const b = indices[index + 1];\n const c = indices[index + 2];\n if (a === b || b == c || c === a) {\n continue;\n }\n // check if we already have it\n let found = false;\n for (let checkIndex = 0; checkIndex < newIndices.length; checkIndex += 3) {\n if (a === newIndices[checkIndex] && b === newIndices[checkIndex + 1] && c === newIndices[checkIndex + 2]) {\n found = true;\n continue;\n }\n if (a === newIndices[checkIndex + 1] && b === newIndices[checkIndex + 2] && c === newIndices[checkIndex]) {\n found = true;\n continue;\n }\n if (a === newIndices[checkIndex + 2] && b === newIndices[checkIndex] && c === newIndices[checkIndex + 1]) {\n found = true;\n continue;\n }\n }\n if (!found) {\n newIndices.push(a, b, c);\n }\n }\n newVertexData.indices = newIndices;\n }\n else {\n newVertexData.indices = indices;\n }\n return newVertexData;\n };\n state.restoreGeometryContext();\n state.restoreExecutionContext();\n if (this.evaluateContext) {\n this.output._storedFunction = func;\n }\n else {\n this.output._storedFunction = null;\n this.output._storedValue = func(state);\n }\n }\n _dumpPropertiesCode() {\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\n codeString += `${this._codeVariableName}.epsilon = ${this.epsilon};\\n`;\n codeString += `${this._codeVariableName}.optimizeFaces = ${this.optimizeFaces ? \"true\" : \"false\"};\\n`;\n return codeString;\n }\n /**\n * Serializes this block in a JSON representation\n * @returns the serialized block object\n */\n serialize() {\n const serializationObject = super.serialize();\n serializationObject.evaluateContext = this.evaluateContext;\n serializationObject.epsilon = this.epsilon;\n serializationObject.optimizeFaces = this.optimizeFaces;\n return serializationObject;\n }\n _deserialize(serializationObject) {\n super._deserialize(serializationObject);\n this.evaluateContext = serializationObject.evaluateContext;\n this.epsilon = serializationObject.epsilon;\n this.optimizeFaces = serializationObject.optimizeFaces;\n }\n}\n__decorate([\n editableInPropertyPage(\"Evaluate context\", 0 /* PropertyTypeForEdition.Boolean */, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\n], GeometryOptimizeBlock.prototype, \"evaluateContext\", void 0);\n__decorate([\n editableInPropertyPage(\"Epsilon\", 1 /* PropertyTypeForEdition.Float */, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\n], GeometryOptimizeBlock.prototype, \"epsilon\", void 0);\n__decorate([\n editableInPropertyPage(\"Optimize faces\", 0 /* PropertyTypeForEdition.Boolean */, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\n], GeometryOptimizeBlock.prototype, \"optimizeFaces\", void 0);\nRegisterClass(\"BABYLON.GeometryOptimizeBlock\", GeometryOptimizeBlock);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|