MCPcopy Index your code
hub / github.com/SuperMap/iClient-JavaScript / toShaders

Method toShaders

src/common/style/CartoCSS.js:895–997  ·  view source on GitHub ↗

* @function CartoCSS.prototype.toShaders * @description 将 CartoCSS 规则集转化为着色器。 * @returns {Array} CartoCSS 着色器集。

()

Source from the content-addressed store, hash-verified

893 * @returns {Array} CartoCSS 着色器集。
894 */
895 toShaders() {
896 if (this.ruleSet) {
897 var ruleset = this.ruleSet;
898 if (ruleset) {
899 var defs = ruleset.toList(this.env);
900 defs.reverse();
901
902 var shaders = {};
903 var keys = [];
904 this._toShaders(shaders,keys,defs);
905
906 var ordered_shaders = [];
907
908 var done = {};
909 for (var i = 0, len0 = defs.length; i < len0; ++i) {
910 var def = defs[i];
911 var k = def.attachment;
912 var shader = shaders[keys[i]];
913 var shaderArray = [];
914 if (!done[k]) {
915 var j = 0;
916 for (var prop in shader) {
917 if (prop !== 'zoom' && prop !== 'frames' && prop !== "attachment" && prop != "elements") {
918 //对layer-index作特殊处理以实现图层的控制
919 if (prop === "layer-index") {
920 /*var getLayerIndex = Function("attributes", "zoom", "var _value = null;" + shader[prop].join('\n') + "; return _value; ");*/
921 var getLayerIndex = function (attributes, zoom) {//NOSONAR
922 var _value = null;
923 shader[prop].join('\n');
924 return _value;
925 };
926 var layerIndex = getLayerIndex();
927 Object.defineProperty(shaderArray, "layerIndex", {
928 configurable: true,
929 enumerable: false,
930 value: layerIndex
931 });
932 } else {
933 shaderArray[j++] = function (ops, shaderArray) {//NOSONAR
934 if (!Array.isArray(ops)) {
935 return ops;
936 }
937 var body = ops.join('\n');
938 var myKeyword = 'attributes["FEATUREID"]&&attributes["FEATUREID"]';
939 var index = body.indexOf(myKeyword);
940 if (index >= 0) {
941 //对featureID作一些特殊处理,以将featureID提取出来
942 if (!shaderArray.featureFilter) {
943 var featureFilterStart = index + myKeyword.length;
944 var featureFilterEnd = body.indexOf(")", featureFilterStart + 1);
945 var featureFilterStr = "featureId&&(featureId" + body.substring(featureFilterStart, featureFilterEnd) + ")";
946 /*var featureFilter = Function("featureId", "if(" + featureFilterStr + "){return true;}return false;");*/
947 var featureFilter = function (featureId) {
948 if (featureFilterStr) {
949 return true;
950 }
951 return false;
952 }

Callers 1

constructorMethod · 0.95

Calls 4

_toShadersMethod · 0.95
reverseMethod · 0.80
indexOfMethod · 0.80
pushMethod · 0.80

Tested by

no test coverage detected