UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

105 lines (104 loc) 3.9 kB
import "../../../../echarts/lib/echarts.mjs"; import Geometry from "../../../../claygl/src/Geometry.mjs"; import dynamicConvertMixin from "./dynamicConvertMixin.mjs"; import { defaults } from "../../../../zrender/lib/core/util.mjs"; var squareTriangles = [0, 1, 2, 0, 2, 3]; var SpritesGeometry = Geometry.extend(function() { return { attributes: { position: new Geometry.Attribute("position", "float", 3, "POSITION"), texcoord: new Geometry.Attribute("texcoord", "float", 2, "TEXCOORD_0"), offset: new Geometry.Attribute("offset", "float", 2), color: new Geometry.Attribute("color", "float", 4, "COLOR") } }; }, { resetOffset: function() { this._vertexOffset = 0; this._faceOffset = 0; }, setSpriteCount: function(spriteCount) { this._spriteCount = spriteCount; var vertexCount = spriteCount * 4; var triangleCount = spriteCount * 2; if (this.vertexCount !== vertexCount) { this.attributes.position.init(vertexCount); this.attributes.offset.init(vertexCount); this.attributes.color.init(vertexCount); } if (this.triangleCount !== triangleCount) { this.indices = vertexCount > 65535 ? new Uint32Array(triangleCount * 3) : new Uint16Array(triangleCount * 3); } }, setSpriteAlign: function(spriteOffset, size, align, verticalAlign, margin) { if (align == null) { align = "left"; } if (verticalAlign == null) { verticalAlign = "top"; } var leftOffset, topOffset, rightOffset, bottomOffset; margin = margin || 0; switch (align) { case "left": leftOffset = margin; rightOffset = size[0] + margin; break; case "center": case "middle": leftOffset = -size[0] / 2; rightOffset = size[0] / 2; break; case "right": leftOffset = -size[0] - margin; rightOffset = -margin; break; } switch (verticalAlign) { case "bottom": topOffset = margin; bottomOffset = size[1] + margin; break; case "middle": topOffset = -size[1] / 2; bottomOffset = size[1] / 2; break; case "top": topOffset = -size[1] - margin; bottomOffset = -margin; break; } var vertexOffset = spriteOffset * 4; var offsetAttr = this.attributes.offset; offsetAttr.set(vertexOffset, [leftOffset, bottomOffset]); offsetAttr.set(vertexOffset + 1, [rightOffset, bottomOffset]); offsetAttr.set(vertexOffset + 2, [rightOffset, topOffset]); offsetAttr.set(vertexOffset + 3, [leftOffset, topOffset]); }, addSprite: function(position, size, coords, align, verticalAlign, screenMargin) { var vertexOffset = this._vertexOffset; this.setSprite(this._vertexOffset / 4, position, size, coords, align, verticalAlign, screenMargin); for (var i = 0; i < squareTriangles.length; i++) { this.indices[this._faceOffset * 3 + i] = squareTriangles[i] + vertexOffset; } this._faceOffset += 2; this._vertexOffset += 4; return vertexOffset / 4; }, setSprite: function(spriteOffset, position, size, coords, align, verticalAlign, screenMargin) { var vertexOffset = spriteOffset * 4; var attributes = this.attributes; for (var i = 0; i < 4; i++) { attributes.position.set(vertexOffset + i, position); } var texcoordAttr = attributes.texcoord; texcoordAttr.set(vertexOffset, [coords[0][0], coords[0][1]]); texcoordAttr.set(vertexOffset + 1, [coords[1][0], coords[0][1]]); texcoordAttr.set(vertexOffset + 2, [coords[1][0], coords[1][1]]); texcoordAttr.set(vertexOffset + 3, [coords[0][0], coords[1][1]]); this.setSpriteAlign(spriteOffset, size, align, verticalAlign, screenMargin); } }); defaults(SpritesGeometry.prototype, dynamicConvertMixin); var SpritesGeometry$1 = SpritesGeometry; export { SpritesGeometry$1 as default };