cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
73 lines (72 loc) • 2.68 kB
JavaScript
import Geo3DBuilder from "../common/Geo3DBuilder.mjs";
import "../../../../echarts/lib/echarts.mjs";
import graphicGL from "../../util/graphicGL.mjs";
import OrbitControl from "../../util/OrbitControl.mjs";
import SceneHelper from "../common/SceneHelper.mjs";
import ComponentView from "../../../../echarts/lib/view/Component.mjs";
var Geo3DView = ComponentView.extend({
type: "geo3D",
__ecgl__: true,
init: function(ecModel, api) {
this._geo3DBuilder = new Geo3DBuilder(api);
this.groupGL = new graphicGL.Node();
this._lightRoot = new graphicGL.Node();
this._sceneHelper = new SceneHelper(this._lightRoot);
this._sceneHelper.initLight(this._lightRoot);
this._control = new OrbitControl({
zr: api.getZr()
});
this._control.init();
},
render: function(geo3DModel, ecModel, api) {
this.groupGL.add(this._geo3DBuilder.rootNode);
var geo3D = geo3DModel.coordinateSystem;
if (!geo3D || !geo3D.viewGL) {
return;
}
geo3D.viewGL.add(this._lightRoot);
if (geo3DModel.get("show")) {
geo3D.viewGL.add(this.groupGL);
} else {
geo3D.viewGL.remove(this.groupGL);
}
var control = this._control;
control.setViewGL(geo3D.viewGL);
var viewControlModel = geo3DModel.getModel("viewControl");
control.setFromViewControlModel(viewControlModel, 0);
this._sceneHelper.setScene(geo3D.viewGL.scene);
this._sceneHelper.updateLight(geo3DModel);
geo3D.viewGL.setPostEffect(geo3DModel.getModel("postEffect"), api);
geo3D.viewGL.setTemporalSuperSampling(geo3DModel.getModel("temporalSuperSampling"));
this._geo3DBuilder.update(geo3DModel, ecModel, api, 0, geo3DModel.getData().count());
var srgbDefineMethod = geo3D.viewGL.isLinearSpace() ? "define" : "undefine";
this._geo3DBuilder.rootNode.traverse(function(mesh) {
if (mesh.material) {
mesh.material[srgbDefineMethod]("fragment", "SRGB_DECODE");
}
});
control.off("update");
control.on("update", function() {
api.dispatchAction({
type: "geo3DChangeCamera",
alpha: control.getAlpha(),
beta: control.getBeta(),
distance: control.getDistance(),
center: control.getCenter(),
from: this.uid,
geo3DId: geo3DModel.id
});
});
control.update();
},
afterRender: function(geo3DModel, ecModel, api, layerGL) {
var renderer = layerGL.renderer;
this._sceneHelper.updateAmbientCubemap(renderer, geo3DModel, api);
this._sceneHelper.updateSkybox(renderer, geo3DModel, api);
},
dispose: function() {
this._control.dispose();
this._geo3DBuilder.dispose();
}
});
export { Geo3DView as default };