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 };
},
};