import SvgNode from "./SvgNode.js"; import SvgNodes from "./SvgNodes.js"; import SvgWellNodes from "./SvgWellNodes.js"; export default { /** * Преобразовать размер шрифта в единицы карты * @param { string | Number } v Значение для перевода "10mm", "22pt" * @param {*} ppu Pixel per unit * @returns */ fontsize2ppu(v, ppu) { if (typeof v !== "string") return v; if (v.endsWith("mm")) { return parseFloat(v.substring(0, v.length - 2) * ppu * 100) / 69; } if (v.endsWith("pt")) { return (parseFloat(v.slice(0, v.length - 2)) * ppu * 100) / 283.46; } }, /** * Перегоняет стиль в единицы карты (возвращает новый объект) * @param {*} style Объект стиля для преобразования * @param {*} ppu Pixel per unit */ update_style(style, ppu) { let s = Object.assign({}, style); const convertable = ["font-size", "stroke-width"]; Object.keys(s).forEach((k) => { if (convertable.includes(k)) s[k] = this.fontsize2ppu(s[k], ppu); }); return s; }, /** * Перегоняет все стили в единицы карты (возвращает новый объект) * @param {*} style Объект стиля для преобразования * @param {*} ppu Pixel per unit */ update_styles(styles, ppu) { return Object.keys(styles).reduce((s, c) => ({ ...s, [c]: this.update_style(styles[c], ppu) }), {}); }, build_tp_layer(wells, settings) { function t2r(tons) { // tonns/mm2 = tonns/cm2 / 100. S(mm)=Pi*r*r=tons/tons_in_cm2*100. r = sqrt(tons/tons_in_cm2*100 / PI) return Math.sqrt(((tons / settings.tons_in_cm2) * 100) / Math.PI); } let { ppu, styles } = settings; let defs = new SvgNode("defs"); defs.append(SvgNodes.defs.simple.radialGradient("rg_opt", "#fff", "#B86B41")); defs.append(SvgNodes.defs.simple.radialGradient("rg_wpt", "#fff", "#67c2e5")); let svg = SvgNodes.group(['']).set_attr("id", "WWPT"); // Круги svg.append(wells.map((x) => SvgWellNodes.ring.pt(x.wopt, x.wwpt, t2r(x.wlpt), ppu, styles).move(x.lx, x.ly))); // Знак скважины svg.append( wells.map((x) => SvgWellNodes.wellhead[t2r(x.wlpt) > 1.6 ? "prod" : "gray"](ppu, styles).move(x.lx, x.ly)) ); // Имя скважины svg.append(wells.map((x) => SvgWellNodes.wellhead.name(x.well, ppu, styles).move(x.lx, x.ly))); // Обводненность svg.append(wells.map((x) => SvgWellNodes.wellhead.wlp(x.wlf, ppu, styles).move(x.lx, x.ly))); return { defs, svg }; }, build_ti_layer(wells, settings) { function t2r(tons) { // tonns/mm2 = tonns/cm2 / 100. S(mm)=Pi*r*r=tons/tons_in_cm2*100. r = sqrt(tons/tons_in_cm2*100 / PI) return Math.sqrt(((tons / settings.tons_in_cm2) * 100) / Math.PI); } let { ppu, styles } = settings; let defs = new SvgNode("defs"); defs.append(SvgNodes.defs.simple.radialGradient("rg1", "#fff", "#c1ff5e")); let svg = SvgNodes.group(['']).set_attr("id", "WWIT"); // Круги svg.append(wells.map((x) => SvgWellNodes.ring.it(t2r(x.wwit), ppu, styles).move(x.lx, x.ly))); // Знак скважины svg.append( wells.map((x) => SvgWellNodes.wellhead[t2r(x.wwit) > 1.6 ? "inj" : "gray"](ppu, styles).move(x.lx, x.ly)) ); // Имя скважины svg.append(wells.map((x) => SvgWellNodes.wellhead.name(x.well, ppu, styles).move(x.lx, x.ly))); return { defs, svg }; }, };