From cf5956e24887cfce586e82f297e96b545e99c766 Mon Sep 17 00:00:00 2001 From: djerom Date: Mon, 23 May 2022 14:30:34 +0500 Subject: [PATCH] updates --- libs/bbox.js | 16 ++++++++++++++++ svgmap/drawers/corel-layer.js | 2 +- svgmap/drawers/svg-nodes.js | 7 ++++++- svgmap/svg-map-builder.js | 27 +++++++++++++++++---------- svgmap/svg-map-saver.js | 2 ++ svgmap/svg-node.js | 9 ++++----- 6 files changed, 46 insertions(+), 17 deletions(-) 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}` else