102 lines
3.6 KiB
JavaScript
102 lines
3.6 KiB
JavaScript
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(['<metadata id="CorelCorpID_WWPTCorel-Layer"/>']).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(['<metadata id="CorelCorpID_WWITCorel-Layer"/>']).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 };
|
|
},
|
|
};
|