diff --git a/libs/bbox.js b/libs/bbox.js
index a6b0cf4..3f27d52 100644
--- a/libs/bbox.js
+++ b/libs/bbox.js
@@ -71,6 +71,22 @@ class BBox {
clone(){
return BBox.fromLTRB(this.l, this.t, this.r, this.b)
}
+
+ expand(dx, dy){
+ dy = dy === null ? dx : dy
+ console.log(dx, dy)
+ this.l -= dx
+ this.r += dx
+ this.t -= dy
+ this.b += dy
+ return this
+ }
+
+ expandPerc(perc){
+ const w = this.w() * perc / 100
+ const h = this.h() * perc / 100
+ return this.expand(w, h)
+ }
}
module.exports = BBox
diff --git a/svgmap/drawers/corel-layer.js b/svgmap/drawers/corel-layer.js
index 1965f55..77436e5 100644
--- a/svgmap/drawers/corel-layer.js
+++ b/svgmap/drawers/corel-layer.js
@@ -1,3 +1,3 @@
const SvgNodes = require("./svg-nodes");
-module.exports = (name) => SvgNodes.group(['']).set_attr("id", name);
\ No newline at end of file
+module.exports = (name) => SvgNodes.group([``]).set_attr("id", name);
\ No newline at end of file
diff --git a/svgmap/drawers/svg-nodes.js b/svgmap/drawers/svg-nodes.js
index 8f5788a..29b8f10 100644
--- a/svgmap/drawers/svg-nodes.js
+++ b/svgmap/drawers/svg-nodes.js
@@ -94,7 +94,7 @@ function ring_sectors(r0, r1, sectors) {
function text(text) {
let node = new SvgNode("text");
- node.items = [text];
+ node.items = text ? [text] : [];
node.set_attrs({ x: 0, y: 0 });
return node;
}
@@ -117,6 +117,10 @@ const defs = {
},
};
+function corel_layer(name) {
+ return new SvgNode('g', null, [``]).set_attr("id", name)
+}
+
module.exports = {
node,
svg,
@@ -129,6 +133,7 @@ module.exports = {
ring_sector,
ring_sectors,
text,
+ corel_layer
};
module.exports.default = module.exports;
diff --git a/svgmap/svg-map-builder.js b/svgmap/svg-map-builder.js
index d1706a3..c2c8681 100644
--- a/svgmap/svg-map-builder.js
+++ b/svgmap/svg-map-builder.js
@@ -2,6 +2,8 @@ const well_ring = require('./drawers/well-ring')
const well_head = require('./drawers/well-head')
const corel_layer = require('./drawers/corel-layer')
const BBox = require('../libs/bbox')
+const SvgNode = require('./svg-node')
+const svg_nodes = require('./drawers/svg-nodes')
function get_bbox(data, min_size = 1000) {
let bbox = BBox.from_array(data)
@@ -14,7 +16,6 @@ function get_bbox(data, min_size = 1000) {
return bbox;
}
-
function build_pt_layer(wells, settings, style) {
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)
@@ -23,19 +24,22 @@ function build_pt_layer(wells, settings, style) {
let { ppu } = settings;
- let svg = corel_layer("WWPT");
+ const wells_layer = corel_layer("wells");
+ const rings_layer = corel_layer("rings");
// Круги
- svg.append(wells.map((x) => well_ring.pt(x.wopt, x.wwpt, t2r(x.wlpt), ppu, style).move(x.lx, x.ly)));
+ rings_layer.append(wells.map((x) => well_ring.pt(x.wopt, x.wwpt, t2r(x.wlpt), ppu, style).move(x.lx, x.ly)));
// Знак скважины
- svg.append(
+ wells_layer.append(
wells.map((x) => well_head[t2r(x.wlpt) > 1.6 ? "prod" : "gray"](ppu, style).move(x.lx, x.ly))
);
// Имя скважины
- svg.append(wells.map((x) => well_head.name(x.name, ppu, style).move(x.lx, x.ly)));
+ wells_layer.append(wells.map((x) => well_head.name(x.name, ppu, style).move(x.lx, x.ly)));
// Обводненность
- svg.append(wells.map((x) => well_head.wlp(x.wlf, ppu, style).move(x.lx, x.ly)));
+ wells_layer.append(wells.map((x) => well_head.wlp(x.wlf, ppu, style).move(x.lx, x.ly)));
+
+ let svg = svg_nodes.container([rings_layer, wells_layer])
return { svg };
}
@@ -48,18 +52,21 @@ function build_it_layer(wells, settings, style) {
let { ppu } = settings;
- let svg = corel_layer("WWIT");
+ const wells_layer = corel_layer("wells");
+ const rings_layer = corel_layer("rings");
// Круги
- svg.append(wells.map((x) => well_ring.it(t2r(x.wwit), ppu, style).move(x.lx, x.ly)));
+ rings_layer.append(wells.map((x) => well_ring.it(t2r(x.wwit), ppu, style).move(x.lx, x.ly)));
// Знак скважины
- svg.append(
+ wells_layer.append(
wells.map((x) => well_head[t2r(x.wwit) > 1.6 ? "inj" : "gray"](ppu, style).move(x.lx, x.ly))
);
// Имя скважины
- svg.append(wells.map((x) => well_head.name(x.name, ppu, style).move(x.lx, x.ly)));
+ wells_layer.append(wells.map((x) => well_head.name(x.name, ppu, style).move(x.lx, x.ly)));
+
+ let svg = svg_nodes.container([rings_layer, wells_layer])
return { svg };
}
diff --git a/svgmap/svg-map-saver.js b/svgmap/svg-map-saver.js
index d4daa03..daae502 100644
--- a/svgmap/svg-map-saver.js
+++ b/svgmap/svg-map-saver.js
@@ -35,10 +35,12 @@ module.exports = class SvgSaver {
}
append_defs(defs) {
+ if (!defs) return
this.svg.append(defs);
}
append_svg(svg) {
+ if (!svg) return
this.svg.append(svg);
}
diff --git a/svgmap/svg-node.js b/svgmap/svg-node.js
index ca19a47..8cfc260 100644
--- a/svgmap/svg-node.js
+++ b/svgmap/svg-node.js
@@ -6,7 +6,7 @@ class SvgNode {
}
append(...items){
- this.items.push(...items)
+ this.items = [...this.items, ...items.filter(x => x)]
return this
}
@@ -46,19 +46,18 @@ class SvgNode {
// console.log(typeof node)
// if (typeof node == 'undefined') return ''
if (typeof node == 'string') return node
- else if (typeof node == 'object' && node.tag) return node.render()
+ else if (typeof node == 'object' && node.render) return node.render()
else if (Array.isArray(node)) return node.map(this._render_node).join('')
else return ''
}
render() {
- let attrs = Object.keys(this.attrs).filter(x => this.attrs[x]).map(x => ` ${x}="${this.attrs[x]}"`).join('')
+ let attrs = Object.keys(this.attrs).map(x => ` ${x}="${this.attrs[x]}"`).join('')
// console.log(this.style ? Object.keys(this.style).map(x => `${x}:${this.style[x]}`) : '')
let style = this.style ? ' style="' + Object.keys(this.style).map(x => `${x}:${this.style[x]}`).join('; ') + '"' : ''
let transfrom = this.transform ? ` transform="translate(${this.transform.x},${this.transform.y})"` : ''
- let items = this.items ? this.items.map(x => this._render_node(x)).join('') : ''
+ let items = this.items ? Array.isArray(this.items) ? this.items.map(x => this._render_node(x)).join('') : this._render_node(this.items) : ''
- // console.log('this.items', this.items, items)
if (this.tag)
return `<${this.tag}${attrs}${style}${transfrom}>${items}${this.tag}>`
else