sketch-json-parse
Version:
sketch-json解析
48 lines (47 loc) • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
*
* 坐标格式转换,将相对坐标系转换为绝对坐标系
* symbolInstance的frame需要根据symbolMaster的frame进行缩放,symbolMaster放在symbolInstance的layers中
*
*/
const formatCoordinate = (layers, groupX = 0, groupY = 0, sizeX = 1, sizeY = 1, parentList = []) => {
layers = layers.map((layer) => {
// 背景色记录
let bg = '0-0-0-0';
if (layer.backgroundColor && layer.hasBackgroundColor && layer.includeBackgroundColorInExport) {
const { red, green, blue, alpha } = layer.backgroundColor;
bg = `${red}-${green}-${blue}-${alpha}`;
}
// 当前父图层属性列表
let currParentList = [`${layer.frame.x},${layer.frame.y},${layer.frame.imgWidth},${layer.frame.imgHeight},${layer.do_objectID},${layer._class},${bg}`, ...parentList];
layer.parentList = currParentList;
layer.frame = {
_class: 'rect',
x: layer.frame.x * sizeX + groupX,
y: layer.frame.y * sizeY + groupY,
imgWidth: layer.frame.width,
imgHeight: layer.frame.height,
width: layer.frame.width * sizeX,
height: layer.frame.height * sizeY,
sizeX,
sizeY,
};
// 当前缩放比例
let currSizeX = sizeX, currSizeY = sizeY;
//基础缩放比例计算
if (layer._class === 'symbolInstance' && Array.isArray(layer.layers) && layer.layers.length === 1 && layer.layers[0]._class === 'symbolMaster') {
let symbolInstanceRect = layer.frame;
let symbolMasterRect = layer.layers[0].frame;
currSizeX = sizeX * symbolInstanceRect.width / symbolMasterRect.width;
currSizeY = sizeY * symbolInstanceRect.height / symbolMasterRect.height;
}
if (Array.isArray(layer.layers)) {
layer.layers = formatCoordinate(layer.layers, layer.frame.x, layer.frame.y, currSizeX, currSizeY, currParentList);
}
return layer;
});
return layers;
};
exports.default = formatCoordinate;