diff --git a/core/config/main.php b/core/config/main.php index 6d68c10..5fda9be 100755 --- a/core/config/main.php +++ b/core/config/main.php @@ -93,5 +93,5 @@ $g_config['vote'] = "./tmp/vote/vote.txt"; $g_config['voteTopics'] = "./tmp/vote/voteTopics.txt_"; $g_config['use_js_cache'] = true; - $g_config['engine_version'] = 91; + $g_config['engine_version'] = 92; ?> diff --git a/script/entities/edge/model/EdgeModel.js b/script/entities/edge/model/EdgeModel.js index d298b22..954fcb1 100644 --- a/script/entities/edge/model/EdgeModel.js +++ b/script/entities/edge/model/EdgeModel.js @@ -90,7 +90,7 @@ EdgeModel.prototype.GetBezierPoints = function(position1, position2) EdgeModel.prototype.HitTest = function(position1, position2, mousePos) { if (this.type == EdgeModels.line) - return this.HitTestLine(position1, position2, mousePos); + return this.HitTestLine(position1, position2, mousePos, 1.0, false); else if (this.type == EdgeModels.curve) return this.HitTestCurve(position1, position2, mousePos); @@ -98,20 +98,19 @@ EdgeModel.prototype.HitTest = function(position1, position2, mousePos) } -EdgeModel.prototype.HitTestLine = function(position1, position2, mousePos, factor) +EdgeModel.prototype.HitTestLine = function(position1, position2, mousePos, factor, ignoreSelfLoop) { if (factor === undefined) { factor = 1.0; } - var pos1 = position1; var pos2 = position2; var pos0 = mousePos; // Self loop case - if (pos1.equals(pos2)) + if (pos1.equals(pos2) && !ignoreSelfLoop) { var xCenter = pos1.x - Math.cos(this.GetLoopShiftAngel()) * this.GetLoopSize(); var yCenter = pos1.y - Math.sin(this.GetLoopShiftAngel()) * this.GetLoopSize(); @@ -161,7 +160,7 @@ EdgeModel.prototype.HitTestCurve = function(position1, position2, mousePos) { var finish = this.GetCurvePoint(position1, position2, i / interval_count); - if (this.HitTestLine(start, finish, mousePos, 2.0)) + if (this.HitTestLine(start, finish, mousePos, 2.0, true)) return true; start = finish; diff --git a/script/features/base_handler/index.js b/script/features/base_handler/index.js index 7fe5224..7751bca 100644 --- a/script/features/base_handler/index.js +++ b/script/features/base_handler/index.js @@ -49,22 +49,22 @@ BaseHandler.prototype.GetSelectedGraph = function(pos) } } - return res; } BaseHandler.prototype.GetSelectedArc = function(pos) { // Selected Arc. + let res = null; for (var i = 0; i < this.app.graph.edges.length; i ++) { var edge = this.app.graph.edges[i]; if (edge.HitTest(new Point(pos.x, pos.y))) - return edge; + res = edge; // Take last becase it will be on the top on rendering. } - return null; + return res; } BaseHandler.prototype.GetSelectedObject = function(pos) diff --git a/script/pages/create_graph_by_edge_list/api/index.js.cache b/script/pages/create_graph_by_edge_list/api/index.js.cache index 3f9c105..dcc2492 100644 --- a/script/pages/create_graph_by_edge_list/api/index.js.cache +++ b/script/pages/create_graph_by_edge_list/api/index.js.cache @@ -1,4 +1,4 @@ -moduleLoader.beginCacheLoading(["/script/entities/graph/api/index.js?v=91","/script/shared/point.js?v=91","/script/entities/edge/api/index.js?v=91","/script/entities/edge/model/BaseEdge.js?v=91","/script/entities/edge/model/EdgeModel.js?v=91","/script/entities/vertex/api/index.js?v=91","/script/entities/vertex/model/BaseVertex.js?v=91","/script/entities/vertex/model/VertexModel.js?v=91","/script/entities/graph/model/Graph.js?v=91",]);{let modulDir="pages/create_graph_by_edge_list/";doInclude([include("entities/graph/api/index.js")]);} +moduleLoader.beginCacheLoading(["/script/entities/graph/api/index.js?v=92","/script/shared/point.js?v=92","/script/entities/edge/api/index.js?v=92","/script/entities/edge/model/BaseEdge.js?v=92","/script/entities/edge/model/EdgeModel.js?v=92","/script/entities/vertex/api/index.js?v=92","/script/entities/vertex/model/BaseVertex.js?v=92","/script/entities/vertex/model/VertexModel.js?v=92","/script/entities/graph/model/Graph.js?v=92",]);{let modulDir="pages/create_graph_by_edge_list/";doInclude([include("entities/graph/api/index.js")]);} {let modulDir="entities/graph/";doInclude([include("shared/point.js"),include("entities/edge/api/index.js"),include("entities/vertex/api/index.js"),include("model/Graph.js",modulDir)])}function Point(x,y){this.x=x||0;this.y=y||0;};Point.prototype.x=null;Point.prototype.y=null;Point.prototype.add=function(v){return new Point(this.x+v.x,this.y+v.y);};Point.prototype.addValue=function(v){return new Point(this.x+v,this.y+v);};Point.prototype.clone=function(){return new Point(this.x,this.y);};Point.prototype.degreesTo=function(v){var dx=this.x-v.x;var dy=this.y-v.y;var angle=Math.atan2(dy,dx);return angle*(180/Math.PI);};Point.prototype.distance=function(v){return Math.sqrt(this.distanceSqr(v));};Point.prototype.distanceSqr=function(v){var x=this.x-v.x;var y=this.y-v.y;return x*x+y*y;};Point.prototype.equals=function(toCompare){return this.x==toCompare.x&&this.y==toCompare.y;};Point.prototype.interpolate=function(v,f){return new Point((this.x+v.x)*f,(this.y+v.y)*f);};Point.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y);};Point.prototype.normalize=function(thickness){var l=this.length();this.x=this.x/l*thickness;this.y=this.y/l*thickness;return new Point(this.x,this.y);};Point.prototype.normalizeCopy=function(thickness){var l=this.length();return new Point(this.x/l*thickness,this.y/l*thickness);};Point.prototype.orbit=function(origin,arcWidth,arcHeight,degrees){var radians=degrees*(Math.PI/180);this.x=origin.x+arcWidth*Math.cos(radians);this.y=origin.y+arcHeight*Math.sin(radians);};Point.prototype.rotate=function(center,degrees){var radians=degrees*(Math.PI/180);offset=this.subtract(center);this.x=offset.x*Math.cos(radians)-offset.y*Math.sin(radians);this.y=offset.x*Math.sin(radians)+offset.y*Math.cos(radians);this.x=this.x+center.x;this.y=this.y+center.y;return this;};Point.prototype.offset=function(dx,dy){this.x+=dx;this.y+=dy;};Point.prototype.subtract=function(v){return new Point(this.x-v.x,this.y-v.y);};Point.prototype.subtractValue=function(value){return new Point(this.x-value,this.y-value);};Point.prototype.multiply=function(value){return new Point(this.x*value,this.y*value);};Point.prototype.toString=function(){return"(x="+this.x+", y="+this.y+")";};Point.prototype.normal=function(){return new Point(-this.y,this.x);};Point.prototype.min=function(point) {return new Point(Math.min(this.x,point.x),Math.min(this.y,point.y));};Point.prototype.max=function(point) {return new Point(Math.max(this.x,point.x),Math.max(this.y,point.y));};Point.prototype.inverse=function() @@ -127,12 +127,12 @@ EdgeModel.prototype.GetBezierPoints=function(position1,position2) {var direction=position2.subtract(position1);var delta=direction.length();direction.normalize(1.0);var normal=direction.normal();var deltaOffsetPixels=delta*this.curveValue;var yOffset=normal.multiply(deltaOffsetPixels);var firstBezierPointShift=(direction.multiply(delta*0.2)).add(yOffset);var secondBezierPointShift=(direction.multiply(-delta*0.2)).add(yOffset);var firstBezierPoint=position1.add(firstBezierPointShift);var secondBezierPoint=position2.add(secondBezierPointShift);return[firstBezierPoint,secondBezierPoint];} EdgeModel.prototype.HitTest=function(position1,position2,mousePos) {if(this.type==EdgeModels.line) -return this.HitTestLine(position1,position2,mousePos);else if(this.type==EdgeModels.curve) +return this.HitTestLine(position1,position2,mousePos,1.0,false);else if(this.type==EdgeModels.curve) return this.HitTestCurve(position1,position2,mousePos);return false;} -EdgeModel.prototype.HitTestLine=function(position1,position2,mousePos,factor) +EdgeModel.prototype.HitTestLine=function(position1,position2,mousePos,factor,ignoreSelfLoop) {if(factor===undefined) {factor=1.0;} -var pos1=position1;var pos2=position2;var pos0=mousePos;if(pos1.equals(pos2)) +var pos1=position1;var pos2=position2;var pos0=mousePos;if(pos1.equals(pos2)&&!ignoreSelfLoop) {var xCenter=pos1.x-Math.cos(this.GetLoopShiftAngel())*this.GetLoopSize();var yCenter=pos1.y-Math.sin(this.GetLoopShiftAngel())*this.GetLoopSize();return Math.abs((Point.distance(new Point(xCenter,yCenter),pos0))-this.GetLoopSize())<=this.width*1.5*factor;} var r1=pos0.distance(pos1);var r2=pos0.distance(pos2);var r12=pos1.distance(pos2);if(r1>=(new Point(r2,r12)).length()||r2>=(new Point(r1,r12)).length()) {} @@ -144,7 +144,7 @@ EdgeModel.prototype.HitTestCurve=function(position1,position2,mousePos) {var pos1=position1;var pos2=position2;var pos0=mousePos;if(pos1.equals(pos2)) {var xCenter=pos1.x-Math.cos(this.GetLoopShiftAngel())*this.GetLoopSize();var yCenter=pos1.y-Math.sin(this.GetLoopShiftAngel())*this.GetLoopSize();return Math.abs((Point.distance(new Point(xCenter,yCenter),pos0))-this.GetLoopSize())<=this.width*1.5;} var interval_count=position1.distance(position2)/100*30;var start=position1;for(var i=0;i=(new Point(r2,r12)).length()||r2>=(new Point(r1,r12)).length()) {} @@ -144,7 +144,7 @@ EdgeModel.prototype.HitTestCurve=function(position1,position2,mousePos) {var pos1=position1;var pos2=position2;var pos0=mousePos;if(pos1.equals(pos2)) {var xCenter=pos1.x-Math.cos(this.GetLoopShiftAngel())*this.GetLoopSize();var yCenter=pos1.y-Math.sin(this.GetLoopShiftAngel())*this.GetLoopSize();return Math.abs((Point.distance(new Point(xCenter,yCenter),pos0))-this.GetLoopSize())<=this.width*1.5;} var interval_count=position1.distance(position2)/100*30;var start=position1;for(var i=0;i=(new Point(r2,r12)).length()||r2>=(new Point(r1,r12)).length()) {} @@ -144,7 +144,7 @@ EdgeModel.prototype.HitTestCurve=function(position1,position2,mousePos) {var pos1=position1;var pos2=position2;var pos0=mousePos;if(pos1.equals(pos2)) {var xCenter=pos1.x-Math.cos(this.GetLoopShiftAngel())*this.GetLoopSize();var yCenter=pos1.y-Math.sin(this.GetLoopShiftAngel())*this.GetLoopSize();return Math.abs((Point.distance(new Point(xCenter,yCenter),pos0))-this.GetLoopSize())<=this.width*1.5;} var interval_count=position1.distance(position2)/100*30;var start=position1;for(var i=0;i=(new Point(r2,r12)).length()||r2>=(new Point(r1,r12)).length()) {} @@ -172,7 +172,7 @@ EdgeModel.prototype.HitTestCurve=function(position1,position2,mousePos) {var pos1=position1;var pos2=position2;var pos0=mousePos;if(pos1.equals(pos2)) {var xCenter=pos1.x-Math.cos(this.GetLoopShiftAngel())*this.GetLoopSize();var yCenter=pos1.y-Math.sin(this.GetLoopShiftAngel())*this.GetLoopSize();return Math.abs((Point.distance(new Point(xCenter,yCenter),pos0))-this.GetLoopSize())<=this.width*1.5;} var interval_count=position1.distance(position2)/100*30;var start=position1;for(var i=0;i