From 59144e85c4396f8642e354c1a92d830a2fe579b0 Mon Sep 17 00:00:00 2001 From: Sergey Nikitchenko Date: Tue, 3 Apr 2018 14:15:06 +0300 Subject: [PATCH] Fix update cache of changed objects --- dist/scheme-designer.js | 31 +++++++++++++++++++++++++------ dist/scheme-designer.min.js | 4 ++-- examples/index.html | 4 ++-- package.json | 2 +- src/Layer.ts | 5 +++-- src/Scheme.ts | 8 ++++++-- src/SchemeObject.ts | 23 +++++++++++++++++++++++ src/managers/StorageManager.ts | 4 ++-- 8 files changed, 64 insertions(+), 17 deletions(-) diff --git a/dist/scheme-designer.js b/dist/scheme-designer.js index 7463dcb..bf97643 100644 --- a/dist/scheme-designer.js +++ b/dist/scheme-designer.js @@ -58,6 +58,7 @@ var SchemeDesigner; * @param {SchemeObject} object */ Layer.prototype.addObject = function (object) { + object.setLayerId(this.id); this.objects.push(object); }; /** @@ -82,10 +83,10 @@ var SchemeDesigner; this.visible = value; }; /** - * Get visible + * Get is visible * @return {boolean} */ - Layer.prototype.getVisible = function () { + Layer.prototype.isVisible = function () { return this.visible; }; /** @@ -420,8 +421,12 @@ var SchemeDesigner; if (onlyChanged) { for (var _i = 0, _a = this.changedObjects; _i < _a.length; _i++) { var schemeObject = _a[_i]; - schemeObject.clear(this, this.cacheView); - schemeObject.render(this, this.cacheView); + var layer = this.storageManager.getLayerById(schemeObject.getLayerId()); + console.log(layer); + if (layer instanceof SchemeDesigner.Layer && layer.isVisible()) { + schemeObject.clear(this, this.cacheView); + schemeObject.render(this, this.cacheView); + } } } else { @@ -522,6 +527,20 @@ var SchemeDesigner; SchemeDesigner.Tools.configure(this, params); this.params = params; } + /** + * Set layer id + * @param {string} layerId + */ + SchemeObject.prototype.setLayerId = function (layerId) { + this.layerId = layerId; + }; + /** + * Get layer id + * @return {string} + */ + SchemeObject.prototype.getLayerId = function () { + return this.layerId; + }; /** * Get id * @returns {number} @@ -1799,7 +1818,7 @@ var SchemeDesigner; var layers = this.getSortedLayers(); for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) { var layer = layers_1[_i]; - if (layer.getVisible()) { + if (layer.isVisible()) { var objects = layer.getObjects(); if (typeof objects !== 'undefined' && objects.length) { result[layer.getId()] = objects; @@ -1833,7 +1852,7 @@ var SchemeDesigner; var layers = []; for (var layerId in this.layers) { var layer = this.layers[layerId]; - if (layer.getVisible()) { + if (layer.isVisible()) { layers.push(layer); } } diff --git a/dist/scheme-designer.min.js b/dist/scheme-designer.min.js index 8368390..4b308e6 100644 --- a/dist/scheme-designer.min.js +++ b/dist/scheme-designer.min.js @@ -1,5 +1,5 @@ /** - * https://github.com/NikitchenkoSergey/scheme-designer Generated on 03/19/2018 Author: Nikitchenko Sergey + * https://github.com/NikitchenkoSergey/scheme-designer Generated on 04/03/2018 Author: Nikitchenko Sergey */ -var SchemeDesigner;!function(t){var e=function(){function e(e,n){if(this.zIndex=0,this.active=!0,this.visible=!0,this.objects=[],0==e.length)throw new Error("Empty layer id");this.id=e,t.Tools.configure(this,n)}return e.prototype.removeObject=function(t){this.objects.filter(function(e){return e!==t})},e.prototype.removeObjects=function(){this.objects=[]},e.prototype.getObjects=function(){return this.objects},e.prototype.addObject=function(t){this.objects.push(t)},e.prototype.setZIndex=function(t){this.zIndex=t},e.prototype.setActive=function(t){this.active=t},e.prototype.setVisible=function(t){this.visible=t},e.prototype.getVisible=function(){return this.visible},e.prototype.isActive=function(){return this.active},e.prototype.getZIndex=function(){return this.zIndex},e.prototype.getId=function(){return this.id},e}();t.Layer=e}(SchemeDesigner||(SchemeDesigner={})),function(t){var e=function(){function e(e,n){this.renderingRequestId=0,this.devicePixelRatio=1,this.defaultCursorStyle="default",this.cacheSchemeRatio=2,this.changedObjects=[],this.view=new t.View(e),this.scrollManager=new t.ScrollManager(this),this.zoomManager=new t.ZoomManager(this),this.eventManager=new t.EventManager(this),this.storageManager=new t.StorageManager(this),this.resize(),this.requestFrameAnimation=t.Polyfill.getRequestAnimationFrameFunction(),this.cancelFrameAnimation=t.Polyfill.getCancelAnimationFunction(),this.devicePixelRatio=t.Polyfill.getDevicePixelRatio(),n&&(t.Tools.configure(this,n.options),t.Tools.configure(this.scrollManager,n.scroll),t.Tools.configure(this.zoomManager,n.zoom),t.Tools.configure(this.storageManager,n.storage)),this.disableCanvasSelection(),this.eventManager.bindEvents()}return e.prototype.resize=function(){var e=Math.max(0,Math.floor(t.Tools.getMaximumWidth(this.view.getCanvas()))),n=Math.max(0,Math.floor(t.Tools.getMaximumHeight(this.view.getCanvas())));this.view.setDimensions({width:e,height:n}),this.zoomManager.resetScale()},e.prototype.getEventManager=function(){return this.eventManager},e.prototype.getScrollManager=function(){return this.scrollManager},e.prototype.getZoomManager=function(){return this.zoomManager},e.prototype.getStorageManager=function(){return this.storageManager},e.prototype.getWidth=function(){return this.view.getWidth()},e.prototype.getHeight=function(){return this.view.getHeight()},e.prototype.requestFrameAnimationApply=function(t){return this.requestFrameAnimation.apply(window,[t])},e.prototype.cancelAnimationFrameApply=function(t){return this.cancelFrameAnimation.apply(window,[t])},e.prototype.clearContext=function(){var t=this.view.getContext();return t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,this.getWidth(),this.getHeight()),t.restore(),this},e.prototype.requestRenderAll=function(){var t=this;return this.renderingRequestId||(this.renderingRequestId=this.requestFrameAnimationApply(function(){t.renderAll()})),this},e.prototype.render=function(){this.storageManager.getTree(),this.zoomManager.setScale(this.zoomManager.getScaleWithAllObjects()),this.scrollManager.toCenter(),this.updateCache(!1),this.requestDrawFromCache()},e.prototype.renderAll=function(){this.renderingRequestId&&(this.cancelAnimationFrameApply(this.renderingRequestId),this.renderingRequestId=0),this.eventManager.sendEvent("beforeRenderAll"),this.clearContext();for(var t=this.scrollManager.getScrollLeft(),e=this.scrollManager.getScrollTop(),n=(this.zoomManager.getScale(),this.getWidth()/this.zoomManager.getScale()),i=this.getHeight()/this.zoomManager.getScale(),o=-t/this.zoomManager.getScale(),s=-e/this.zoomManager.getScale(),r=this.storageManager.findNodesByBoundingRect(null,{left:o,top:s,right:o+n,bottom:s+i}),h={},a=0,c=this.storageManager.getSortedLayers();a=s&&n.top<=r&&n.bottom>=r&&(o=!0),o},t.rotatePointByAxis=function(t,e,n){return n=n*Math.PI/180,{x:e.x+(t.x-e.x)*Math.cos(n)-(t.y-e.y)*Math.sin(n),y:e.y+(t.x-e.x)*Math.sin(n)+(t.y-e.y)*Math.cos(n)}},t.rectIntersectRect=function(t,e){return!(t.top>e.bottom||t.bottome.right)},t.filterObjectsByBoundingRect=function(t,e){for(var n=[],i=0,o=e;i1||i>1)&&(this.isDragging=!0,this.scheme.setCursorStyle("move"))}this.isDragging?this.scheme.getScrollManager().handleDragging(t):this.handleHover(t)},t.prototype.getPointer=function(t,e){var n="touchend"===t.type?"changedTouches":"touches",i=t;return i[n]&&i[n][0]?2==i[n].length?(i[n][0][e]+i[n][1][e])/2:i[n][0][e]:i[e]},t.prototype.handleHover=function(t){this.setLastClientPositionFromEvent(t);var e=this.findObjectsForEvent(t),n=!1,i=!1;if(this.hoveredObjects.length)for(var o=0,s=this.hoveredObjects;o(o*=this.maxHiddenPart)&&(t=o),e>(s*=this.maxHiddenPart)&&(e=s),t<(r+=this.scheme.getWidth()*(1-this.maxHiddenPart))&&(t=r),e<(h+=this.scheme.getHeight()*(1-this.maxHiddenPart))&&(e=h),this.scrollLeft=t,this.scrollTop=e,this.scheme.getView().setScrollTop(e),this.scheme.getView().setScrollLeft(t),this.scheme.getView().applyTransformation(),this.scheme.useSchemeCache()?this.scheme.requestDrawFromCache():this.scheme.requestRenderAll(),this.scheme.getEventManager().sendEvent("scroll",{left:t,top:e,maxScrollLeft:o,maxScrollTop:s,minScrollLeft:r,minScrollTop:h,boundingRect:n,scale:i})},t.prototype.toCenter=function(){this.scheme.getStorageManager().getObjectsBoundingRect();var t=this.scheme.getStorageManager().getObjectsDimensions(),e=this.scheme.getZoomManager().getScale(),n=(this.scheme.getWidth()/e-t.width)/2*e,i=(this.scheme.getHeight()/e-t.height)/2*e;this.scroll(n,i)},t.prototype.handleDragging=function(t){var e=this.scheme.getEventManager().getLastClientX(),n=this.scheme.getEventManager().getLastClientY();this.scheme.getEventManager().setLastClientPositionFromEvent(t);var i=this.scheme.getEventManager().getLastClientX()-e,o=this.scheme.getEventManager().getLastClientY()-n,s=i+this.getScrollLeft(),r=o+this.getScrollTop();this.scroll(s,r)},t.prototype.setMaxHiddenPart=function(t){this.maxHiddenPart=t},t}();t.ScrollManager=e}(SchemeDesigner||(SchemeDesigner={})),function(t){var e=function(){function e(t){this.treeDepth=6,this.layers={},this.scheme=t}return e.prototype.getLayerById=function(t){return void 0!==this.layers[t]?this.layers[t]:null},e.prototype.getVisibleObjects=function(){var t=[],e=this.getVisibleObjectsByLayers();for(var n in e){var i=e[n];void 0!==i&&i.length&&(t=t.concat(i))}return t},e.prototype.getVisibleObjectsByLayers=function(){for(var t={},e=0,n=this.getSortedLayers();ee.getZIndex()?1:0}),t},e.prototype.addLayer=function(e){if(this.getLayerById(e.getId())instanceof t.Layer)throw new Error("Layer with such id already exist");this.layers[e.getId()]=e},e.prototype.removeLayers=function(){this.layers={},this.applyStructureChange()},e.prototype.removeLayer=function(t){delete this.layers[t],this.applyStructureChange()},e.prototype.setLayerVisibility=function(e,n){var i=this.getLayerById(e);if(!(i instanceof t.Layer))throw new Error("Layer not found");i.setVisible(n),this.applyStructureChange()},e.prototype.setLayerActivity=function(e,n){var i=this.getLayerById(e);if(!(i instanceof t.Layer))throw new Error("Layer not found");i.setActive(n)},e.prototype.applyStructureChange=function(){this.requestBuildTree(),this.reCalcObjectsBoundingRect(),this.scheme.updateCache(!1),this.scheme.requestRenderAll()},e.prototype.findObjectsByCoordinates=function(e){var n=[],i=e.x,o=e.y;i-=this.scheme.getScrollManager().getScrollLeft(),o-=this.scheme.getScrollManager().getScrollTop(),i/=this.scheme.getZoomManager().getScale(),o/=this.scheme.getZoomManager().getScale();var s=this.getTree(),r=this.findNodeByCoordinates(s,{x:i,y:o}),h={};for(var a in r&&(h=r.getObjectsByLayers()),h){if(this.getLayerById(a).isActive())for(var c=0,u=h[a];cn)&&(n=h.right),(null==i||h.bottom>i)&&(i=h.bottom)}return{left:e,top:t,right:n,bottom:i}},e.prototype.setTreeDepth=function(t){this.treeDepth=t},e.prototype.requestBuildTree=function(){this.rootTreeNode=null},e.prototype.getTree=function(){return this.rootTreeNode||(this.rootTreeNode=this.buildTree()),this.rootTreeNode},e.prototype.buildTree=function(){var t=this.getObjectsBoundingRect();return this.rootTreeNode=new n(null,t,this.getVisibleObjectsByLayers(),0),this.explodeTreeNodes(this.rootTreeNode,this.treeDepth),this.rootTreeNode},e.prototype.explodeTreeNodes=function(t,e){if(this.explodeTreeNode(t),--e>0)for(var n=0,i=t.getChildren();n0},e.prototype.getLastChildren=function(){for(var t=[],e=0,n=this.children;en?e:n},t.prototype.zoomByFactor=function(t){var e=this;this.renderAllTimer&&clearTimeout(this.renderAllTimer);var n=this.scheme.getStorageManager().getObjectsDimensions(),i=!0,o=!0,s=this.scale,r=s*t;return t<1?(i=this.scheme.getWidth()*(1-this.padding)n.width*r,o=this.scheme.getHeight()*this.maxScale>n.height*r),!(!i&&!o)&&(this.scale=r,this.scheme.getView().setScale(r),this.scheme.getView().applyTransformation(),this.scheme.useSchemeCache()?(this.scheme.requestDrawFromCache(),this.renderAllTimer=setTimeout(function(){e.scheme.requestRenderAll()},300)):this.scheme.requestRenderAll(),this.scheme.getEventManager().sendEvent("zoom",{oldScale:s,newScale:r}),!0)},t.prototype.getScale=function(){return this.scale},t.prototype.resetScale=function(){this.scale=1},t.prototype.handleMouseWheel=function(t){var e=t.wheelDelta?t.wheelDelta/40:t.detail?-t.detail:0;return e&&this.zoomToPointer(t,e),t.preventDefault()&&!1},t.prototype.zoomToPointer=function(t,e){this.scheme.getEventManager().setLastClientPositionFromEvent(t),this.zoomToPoint({x:this.scheme.getEventManager().getLastClientX(),y:this.scheme.getEventManager().getLastClientY()},e)},t.prototype.zoomToCenter=function(t){this.zoomToPoint({x:this.scheme.getWidth()/2,y:this.scheme.getHeight()/2},t)},t.prototype.zoomToPoint=function(t,e){var n=this.scheme.getZoomManager().getScale();if(this.scheme.getZoomManager().zoom(e)){var i=this.scheme.getZoomManager().getScale(),o=t.x/n,s=t.y/n,r=n/i,h=(t.x/i-o)*i,a=(t.y/i-s)*i,c=this.scheme.getScrollManager().getScrollLeft()/r,u=this.scheme.getScrollManager().getScrollTop()/r;this.scheme.getScrollManager().scroll(c+h,u+a)}},t.prototype.setPadding=function(t){this.padding=t},t.prototype.setMaxScale=function(t){this.maxScale=t},t.prototype.setZoomCoefficient=function(t){this.zoomCoefficient=t},t}();t.ZoomManager=e}(SchemeDesigner||(SchemeDesigner={})); \ No newline at end of file +var SchemeDesigner;!function(t){var e=function(){function e(e,n){if(this.zIndex=0,this.active=!0,this.visible=!0,this.objects=[],0==e.length)throw new Error("Empty layer id");this.id=e,t.Tools.configure(this,n)}return e.prototype.removeObject=function(t){this.objects.filter(function(e){return e!==t})},e.prototype.removeObjects=function(){this.objects=[]},e.prototype.getObjects=function(){return this.objects},e.prototype.addObject=function(t){t.setLayerId(this.id),this.objects.push(t)},e.prototype.setZIndex=function(t){this.zIndex=t},e.prototype.setActive=function(t){this.active=t},e.prototype.setVisible=function(t){this.visible=t},e.prototype.isVisible=function(){return this.visible},e.prototype.isActive=function(){return this.active},e.prototype.getZIndex=function(){return this.zIndex},e.prototype.getId=function(){return this.id},e}();t.Layer=e}(SchemeDesigner||(SchemeDesigner={})),function(t){var e=function(){function e(e,n){this.renderingRequestId=0,this.devicePixelRatio=1,this.defaultCursorStyle="default",this.cacheSchemeRatio=2,this.changedObjects=[],this.view=new t.View(e),this.scrollManager=new t.ScrollManager(this),this.zoomManager=new t.ZoomManager(this),this.eventManager=new t.EventManager(this),this.storageManager=new t.StorageManager(this),this.resize(),this.requestFrameAnimation=t.Polyfill.getRequestAnimationFrameFunction(),this.cancelFrameAnimation=t.Polyfill.getCancelAnimationFunction(),this.devicePixelRatio=t.Polyfill.getDevicePixelRatio(),n&&(t.Tools.configure(this,n.options),t.Tools.configure(this.scrollManager,n.scroll),t.Tools.configure(this.zoomManager,n.zoom),t.Tools.configure(this.storageManager,n.storage)),this.disableCanvasSelection(),this.eventManager.bindEvents()}return e.prototype.resize=function(){var e=Math.max(0,Math.floor(t.Tools.getMaximumWidth(this.view.getCanvas()))),n=Math.max(0,Math.floor(t.Tools.getMaximumHeight(this.view.getCanvas())));this.view.setDimensions({width:e,height:n}),this.zoomManager.resetScale()},e.prototype.getEventManager=function(){return this.eventManager},e.prototype.getScrollManager=function(){return this.scrollManager},e.prototype.getZoomManager=function(){return this.zoomManager},e.prototype.getStorageManager=function(){return this.storageManager},e.prototype.getWidth=function(){return this.view.getWidth()},e.prototype.getHeight=function(){return this.view.getHeight()},e.prototype.requestFrameAnimationApply=function(t){return this.requestFrameAnimation.apply(window,[t])},e.prototype.cancelAnimationFrameApply=function(t){return this.cancelFrameAnimation.apply(window,[t])},e.prototype.clearContext=function(){var t=this.view.getContext();return t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,this.getWidth(),this.getHeight()),t.restore(),this},e.prototype.requestRenderAll=function(){var t=this;return this.renderingRequestId||(this.renderingRequestId=this.requestFrameAnimationApply(function(){t.renderAll()})),this},e.prototype.render=function(){this.storageManager.getTree(),this.zoomManager.setScale(this.zoomManager.getScaleWithAllObjects()),this.scrollManager.toCenter(),this.updateCache(!1),this.requestDrawFromCache()},e.prototype.renderAll=function(){this.renderingRequestId&&(this.cancelAnimationFrameApply(this.renderingRequestId),this.renderingRequestId=0),this.eventManager.sendEvent("beforeRenderAll"),this.clearContext();for(var t=this.scrollManager.getScrollLeft(),e=this.scrollManager.getScrollTop(),n=(this.zoomManager.getScale(),this.getWidth()/this.zoomManager.getScale()),i=this.getHeight()/this.zoomManager.getScale(),o=-t/this.zoomManager.getScale(),s=-e/this.zoomManager.getScale(),r=this.storageManager.findNodesByBoundingRect(null,{left:o,top:s,right:o+n,bottom:s+i}),h={},a=0,c=this.storageManager.getSortedLayers();a=s&&n.top<=r&&n.bottom>=r&&(o=!0),o},t.rotatePointByAxis=function(t,e,n){return n=n*Math.PI/180,{x:e.x+(t.x-e.x)*Math.cos(n)-(t.y-e.y)*Math.sin(n),y:e.y+(t.x-e.x)*Math.sin(n)+(t.y-e.y)*Math.cos(n)}},t.rectIntersectRect=function(t,e){return!(t.top>e.bottom||t.bottome.right)},t.filterObjectsByBoundingRect=function(t,e){for(var n=[],i=0,o=e;i1||i>1)&&(this.isDragging=!0,this.scheme.setCursorStyle("move"))}this.isDragging?this.scheme.getScrollManager().handleDragging(t):this.handleHover(t)},t.prototype.getPointer=function(t,e){var n="touchend"===t.type?"changedTouches":"touches",i=t;return i[n]&&i[n][0]?2==i[n].length?(i[n][0][e]+i[n][1][e])/2:i[n][0][e]:i[e]},t.prototype.handleHover=function(t){this.setLastClientPositionFromEvent(t);var e=this.findObjectsForEvent(t),n=!1,i=!1;if(this.hoveredObjects.length)for(var o=0,s=this.hoveredObjects;o(o*=this.maxHiddenPart)&&(t=o),e>(s*=this.maxHiddenPart)&&(e=s),t<(r+=this.scheme.getWidth()*(1-this.maxHiddenPart))&&(t=r),e<(h+=this.scheme.getHeight()*(1-this.maxHiddenPart))&&(e=h),this.scrollLeft=t,this.scrollTop=e,this.scheme.getView().setScrollTop(e),this.scheme.getView().setScrollLeft(t),this.scheme.getView().applyTransformation(),this.scheme.useSchemeCache()?this.scheme.requestDrawFromCache():this.scheme.requestRenderAll(),this.scheme.getEventManager().sendEvent("scroll",{left:t,top:e,maxScrollLeft:o,maxScrollTop:s,minScrollLeft:r,minScrollTop:h,boundingRect:n,scale:i})},t.prototype.toCenter=function(){this.scheme.getStorageManager().getObjectsBoundingRect();var t=this.scheme.getStorageManager().getObjectsDimensions(),e=this.scheme.getZoomManager().getScale(),n=(this.scheme.getWidth()/e-t.width)/2*e,i=(this.scheme.getHeight()/e-t.height)/2*e;this.scroll(n,i)},t.prototype.handleDragging=function(t){var e=this.scheme.getEventManager().getLastClientX(),n=this.scheme.getEventManager().getLastClientY();this.scheme.getEventManager().setLastClientPositionFromEvent(t);var i=this.scheme.getEventManager().getLastClientX()-e,o=this.scheme.getEventManager().getLastClientY()-n,s=i+this.getScrollLeft(),r=o+this.getScrollTop();this.scroll(s,r)},t.prototype.setMaxHiddenPart=function(t){this.maxHiddenPart=t},t}();t.ScrollManager=e}(SchemeDesigner||(SchemeDesigner={})),function(t){var e=function(){function e(t){this.treeDepth=6,this.layers={},this.scheme=t}return e.prototype.getLayerById=function(t){return void 0!==this.layers[t]?this.layers[t]:null},e.prototype.getVisibleObjects=function(){var t=[],e=this.getVisibleObjectsByLayers();for(var n in e){var i=e[n];void 0!==i&&i.length&&(t=t.concat(i))}return t},e.prototype.getVisibleObjectsByLayers=function(){for(var t={},e=0,n=this.getSortedLayers();ee.getZIndex()?1:0}),t},e.prototype.addLayer=function(e){if(this.getLayerById(e.getId())instanceof t.Layer)throw new Error("Layer with such id already exist");this.layers[e.getId()]=e},e.prototype.removeLayers=function(){this.layers={},this.applyStructureChange()},e.prototype.removeLayer=function(t){delete this.layers[t],this.applyStructureChange()},e.prototype.setLayerVisibility=function(e,n){var i=this.getLayerById(e);if(!(i instanceof t.Layer))throw new Error("Layer not found");i.setVisible(n),this.applyStructureChange()},e.prototype.setLayerActivity=function(e,n){var i=this.getLayerById(e);if(!(i instanceof t.Layer))throw new Error("Layer not found");i.setActive(n)},e.prototype.applyStructureChange=function(){this.requestBuildTree(),this.reCalcObjectsBoundingRect(),this.scheme.updateCache(!1),this.scheme.requestRenderAll()},e.prototype.findObjectsByCoordinates=function(e){var n=[],i=e.x,o=e.y;i-=this.scheme.getScrollManager().getScrollLeft(),o-=this.scheme.getScrollManager().getScrollTop(),i/=this.scheme.getZoomManager().getScale(),o/=this.scheme.getZoomManager().getScale();var s=this.getTree(),r=this.findNodeByCoordinates(s,{x:i,y:o}),h={};for(var a in r&&(h=r.getObjectsByLayers()),h){if(this.getLayerById(a).isActive())for(var c=0,u=h[a];cn)&&(n=h.right),(null==i||h.bottom>i)&&(i=h.bottom)}return{left:e,top:t,right:n,bottom:i}},e.prototype.setTreeDepth=function(t){this.treeDepth=t},e.prototype.requestBuildTree=function(){this.rootTreeNode=null},e.prototype.getTree=function(){return this.rootTreeNode||(this.rootTreeNode=this.buildTree()),this.rootTreeNode},e.prototype.buildTree=function(){var t=this.getObjectsBoundingRect();return this.rootTreeNode=new n(null,t,this.getVisibleObjectsByLayers(),0),this.explodeTreeNodes(this.rootTreeNode,this.treeDepth),this.rootTreeNode},e.prototype.explodeTreeNodes=function(t,e){if(this.explodeTreeNode(t),--e>0)for(var n=0,i=t.getChildren();n0},e.prototype.getLastChildren=function(){for(var t=[],e=0,n=this.children;en?e:n},t.prototype.zoomByFactor=function(t){var e=this;this.renderAllTimer&&clearTimeout(this.renderAllTimer);var n=this.scheme.getStorageManager().getObjectsDimensions(),i=!0,o=!0,s=this.scale,r=s*t;return t<1?(i=this.scheme.getWidth()*(1-this.padding)n.width*r,o=this.scheme.getHeight()*this.maxScale>n.height*r),!(!i&&!o)&&(this.scale=r,this.scheme.getView().setScale(r),this.scheme.getView().applyTransformation(),this.scheme.useSchemeCache()?(this.scheme.requestDrawFromCache(),this.renderAllTimer=setTimeout(function(){e.scheme.requestRenderAll()},300)):this.scheme.requestRenderAll(),this.scheme.getEventManager().sendEvent("zoom",{oldScale:s,newScale:r}),!0)},t.prototype.getScale=function(){return this.scale},t.prototype.resetScale=function(){this.scale=1},t.prototype.handleMouseWheel=function(t){var e=t.wheelDelta?t.wheelDelta/40:t.detail?-t.detail:0;return e&&this.zoomToPointer(t,e),t.preventDefault()&&!1},t.prototype.zoomToPointer=function(t,e){this.scheme.getEventManager().setLastClientPositionFromEvent(t),this.zoomToPoint({x:this.scheme.getEventManager().getLastClientX(),y:this.scheme.getEventManager().getLastClientY()},e)},t.prototype.zoomToCenter=function(t){this.zoomToPoint({x:this.scheme.getWidth()/2,y:this.scheme.getHeight()/2},t)},t.prototype.zoomToPoint=function(t,e){var n=this.scheme.getZoomManager().getScale();if(this.scheme.getZoomManager().zoom(e)){var i=this.scheme.getZoomManager().getScale(),o=t.x/n,s=t.y/n,r=n/i,h=(t.x/i-o)*i,a=(t.y/i-s)*i,c=this.scheme.getScrollManager().getScrollLeft()/r,u=this.scheme.getScrollManager().getScrollTop()/r;this.scheme.getScrollManager().scroll(c+h,u+a)}},t.prototype.setPadding=function(t){this.padding=t},t.prototype.setMaxScale=function(t){this.maxScale=t},t.prototype.setZoomCoefficient=function(t){this.zoomCoefficient=t},t}();t.ZoomManager=e}(SchemeDesigner||(SchemeDesigner={})); \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index d1eda6e..ce40722 100644 --- a/examples/index.html +++ b/examples/index.html @@ -8,7 +8,7 @@ - + @@ -313,7 +313,7 @@

Hall scheme example

}, false); canvas.addEventListener('schemeDesigner.zoom', function (e) { - // console.log('zoom', e.detail); + // console.log('zoom', e.detail); }, false); diff --git a/package.json b/package.json index 26b7b64..05eacd5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scheme-designer", - "version": "1.1.2", + "version": "1.1.3", "description": "Canvas scheme designer, scheme constructor on javascript (typescript)", "main": "scheme-designer.js", "scripts": { diff --git a/src/Layer.ts b/src/Layer.ts index af29dd6..fcda620 100644 --- a/src/Layer.ts +++ b/src/Layer.ts @@ -78,6 +78,7 @@ namespace SchemeDesigner { */ public addObject(object: SchemeObject): void { + object.setLayerId(this.id); this.objects.push(object); } @@ -110,10 +111,10 @@ namespace SchemeDesigner { } /** - * Get visible + * Get is visible * @return {boolean} */ - public getVisible(): boolean + public isVisible(): boolean { return this.visible; } diff --git a/src/Scheme.ts b/src/Scheme.ts index ee33f62..9440a60 100644 --- a/src/Scheme.ts +++ b/src/Scheme.ts @@ -433,8 +433,12 @@ namespace SchemeDesigner { if (onlyChanged) { for (let schemeObject of this.changedObjects) { - schemeObject.clear(this, this.cacheView); - schemeObject.render(this, this.cacheView); + let layer = this.storageManager.getLayerById(schemeObject.getLayerId()); + + if (layer instanceof Layer && layer.isVisible()) { + schemeObject.clear(this, this.cacheView); + schemeObject.render(this, this.cacheView); + } } } else { let boundingRect = this.storageManager.getObjectsBoundingRect(); diff --git a/src/SchemeObject.ts b/src/SchemeObject.ts index 84c9634..d6bdbad 100644 --- a/src/SchemeObject.ts +++ b/src/SchemeObject.ts @@ -80,6 +80,11 @@ namespace SchemeDesigner { */ protected params: any; + /** + * Layer id + */ + protected layerId: string; + /** * Constructor * @param {Object} params @@ -93,6 +98,24 @@ namespace SchemeDesigner { this.params = params; } + /** + * Set layer id + * @param {string} layerId + */ + public setLayerId(layerId: string) + { + this.layerId = layerId; + } + + /** + * Get layer id + * @return {string} + */ + public getLayerId(): string + { + return this.layerId; + } + /** * Get id * @returns {number} diff --git a/src/managers/StorageManager.ts b/src/managers/StorageManager.ts index a05f04f..426082a 100644 --- a/src/managers/StorageManager.ts +++ b/src/managers/StorageManager.ts @@ -83,7 +83,7 @@ namespace SchemeDesigner { let layers = this.getSortedLayers(); for (let layer of layers) { - if (layer.getVisible()) { + if (layer.isVisible()) { let objects = layer.getObjects(); if (typeof objects !== 'undefined' && objects.length) { result[layer.getId()] = objects; @@ -123,7 +123,7 @@ namespace SchemeDesigner { let layers: Layer[] = []; for (let layerId in this.layers) { let layer = this.layers[layerId]; - if (layer.getVisible()) { + if (layer.isVisible()) { layers.push(layer); } }