|
@@ -516,14 +516,13 @@ Relation.prototype.tick = function(){
|
|
|
}
|
|
|
var dx = x - sx,
|
|
|
dy = y - sy,
|
|
|
- dr = Math.sqrt(dx * dx + dy * dy);
|
|
|
+ dr = Math.sqrt(dx * dx + dy * dy),
|
|
|
theta = Math.atan2(dy, dx) + Math.PI / 7.85,
|
|
|
d90 = Math.PI / 2,
|
|
|
dtxs = x - Math.cos(theta),
|
|
|
dtys = y - Math.sin(theta);
|
|
|
- var dd = 39;
|
|
|
- return "M" + sx + "," + sy + "A" + dr + " " + dr + ",0 0 1," + x + "," + y;
|
|
|
- //return "M" + sx + "," + sy + "A" + dr + " " + dr + ",0 0 1," + x + "," + y + "A" + dr + " " + dr + ",0 0 0," + sx + "," + sy + "M" + dtxs + "," + dtys + "l" + (3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (-3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "L" + (dtxs - 3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (dtys + 3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "z";
|
|
|
+ //return "M" + sx + "," + sy + "A" + dr + " " + dr + ",0 1 1," + x + "," + y;
|
|
|
+ return "M" + sx + "," + sy + "A" + dr + " " + dr + ",0 0 1," + x + "," + y + "A" + dr + " " + dr + ",0 0 0," + sx + "," + sy + "M" + dtxs + "," + dtys + "l" + (3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (-3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "L" + (dtxs - 3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (dtys + 3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "z";
|
|
|
});
|
|
|
this.nodes.attr("transform", function(d) {
|
|
|
if(thisClass.tickFlag && d.type == "ce"){
|
|
@@ -532,14 +531,34 @@ Relation.prototype.tick = function(){
|
|
|
}
|
|
|
return "translate(" + d.x + "," + d.y + ")scale(" + thisClass.zoomlevel+ ")";
|
|
|
});
|
|
|
- this.lineLables.attr("transform",function(d){
|
|
|
+ /*this.lineLables.attr("transform",function(d){
|
|
|
var sx = d.source.x,
|
|
|
sy = d.source.y,
|
|
|
x = d.target.x,
|
|
|
y = d.target.y;
|
|
|
-
|
|
|
- return "translate("+(x)+","+(y)+")";
|
|
|
- });
|
|
|
+ if(sy > y){
|
|
|
+ sy -= 12;
|
|
|
+ }else{
|
|
|
+ sy += 5;
|
|
|
+ }
|
|
|
+ var line = new geo.LineSegment(sx, sy, x, y);
|
|
|
+ for (var e in d.target.edge) {
|
|
|
+ var ix = line.intersect(d.target.edge[e].offset(x, y));
|
|
|
+ if (ix.in1 && ix.in2) {
|
|
|
+ x = ix.x;
|
|
|
+ y = ix.y;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var dx = x - sx,
|
|
|
+ dy = y - sy,
|
|
|
+ dr = Math.sqrt(dx * dx + dy * dy);
|
|
|
+ var cx = (sx + x) / 2,
|
|
|
+ cy = (sy + y) / 2,
|
|
|
+ cr = dr - Math.sqrt(Math.pow(dr,2) - Math.pow(dr / 2,2));
|
|
|
+ //var c = convert(sx,sy,x,y,0,0,dr,dr,0);
|
|
|
+ return "translate("+(cx-cr)+","+(cy-cr)+")";
|
|
|
+ });*/
|
|
|
if(thisClass.tickFlag){
|
|
|
thisClass.force.tick();
|
|
|
}
|
|
@@ -637,17 +656,18 @@ Relation.prototype.makeRelation = function(){
|
|
|
.attr("stroke-width",function (e,i){
|
|
|
return e.linkVal;
|
|
|
});
|
|
|
- this.lineLables = gs.append("g").each(function(){
|
|
|
- d3.select(this).append("rect")
|
|
|
- .attr("rx", 5)
|
|
|
- .attr("ry", 5)
|
|
|
- .attr("x", -99)
|
|
|
- .attr("y", -18)
|
|
|
- .attr("height", 20)
|
|
|
- .attr("fill", "#1B9196")
|
|
|
- .attr("stroke", "#1B9196");
|
|
|
- d3.select(this).append("text").text("1000万元");
|
|
|
- });
|
|
|
+ /*this.lineLables = gs.append("g").each(function(d){
|
|
|
+ var invacconam = new Number(d.invacconam);
|
|
|
+ if(invacconam > 0){
|
|
|
+ var lenInvacconam = (invacconam + "").length;
|
|
|
+ if(lenInvacconam > 4 && (invacconam + "").indexOf(".") > -1 && (lenInvacconam - (invacconam + "").indexOf(".")) > 4){
|
|
|
+ invacconam = (new Number(invacconam)).toFixed(4);
|
|
|
+ }
|
|
|
+ d3.select(this).append("text").text(invacconam+"万元");
|
|
|
+ }else{
|
|
|
+ d3.select(this).remove();
|
|
|
+ }
|
|
|
+ });*/
|
|
|
|
|
|
this.lines.each(function (d,i){
|
|
|
var invacconam = new Number(d.invacconam);
|
|
@@ -821,4 +841,112 @@ Relation.prototype.makeTextBg = function(){
|
|
|
bottom : new geo.LineSegment(bounds.x1, bounds.y2, bounds.x2, bounds.y2)
|
|
|
};
|
|
|
});
|
|
|
+}
|
|
|
+// svg : [A | a] (rx ry x-axis-rotation large-arc-flag sweep-flag x y)+
|
|
|
+
|
|
|
+/* x1 y1 x2 y2 fA fS rx ry φ */
|
|
|
+function radian( ux, uy, vx, vy ) {
|
|
|
+ var dot = ux * vx + uy * vy;
|
|
|
+ var mod = Math.sqrt( ( ux * ux + uy * uy ) * ( vx * vx + vy * vy ) );
|
|
|
+ var rad = Math.acos( dot / mod );
|
|
|
+ if( ux * vy - uy * vx < 0.0 ) rad = -rad;
|
|
|
+ return rad;
|
|
|
+}
|
|
|
+//https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
|
|
|
+//conversion_from_endpoint_to_center_parameterization
|
|
|
+//sample : convert(200,200,300,200,1,1,50,50,0,{})
|
|
|
+function convert(x1, y1, x2, y2, fA, fS, rx, ry, phi) {
|
|
|
+ var cx,cy,theta1,delta_theta;
|
|
|
+
|
|
|
+ if( rx == 0.0 || ry == 0.0 ) return -1; // invalid arguments
|
|
|
+
|
|
|
+ var s_phi = Math.sin( phi );
|
|
|
+ var c_phi = Math.cos( phi );
|
|
|
+ var hd_x = ( x1 - x2 ) / 2.0; // half diff of x
|
|
|
+ var hd_y = ( y1 - y2 ) / 2.0; // half diff of y
|
|
|
+ var hs_x = ( x1 + x2 ) / 2.0; // half sum of x
|
|
|
+ var hs_y = ( y1 + y2 ) / 2.0; // half sum of y
|
|
|
+
|
|
|
+ // F6.5.1
|
|
|
+ var x1_ = c_phi * hd_x + s_phi * hd_y;
|
|
|
+ var y1_ = c_phi * hd_y - s_phi * hd_x;
|
|
|
+
|
|
|
+ var rxry = rx * ry;
|
|
|
+ var rxy1_ = rx * y1_;
|
|
|
+ var ryx1_ = ry * x1_;
|
|
|
+ var sum_of_sq = rxy1_ * rxy1_ + ryx1_ * ryx1_; // sum of square
|
|
|
+ var coe = Math.sqrt( ( rxry * rxry - sum_of_sq ) / sum_of_sq );
|
|
|
+ if( fA == fS ) coe = -coe;
|
|
|
+
|
|
|
+ // F6.5.2
|
|
|
+ var cx_ = coe * rxy1_ / ry;
|
|
|
+ var cy_ = -coe * ryx1_ / rx;
|
|
|
+
|
|
|
+ // F6.5.3
|
|
|
+ cx = c_phi * cx_ - s_phi * cy_ + hs_x;
|
|
|
+ cy = s_phi * cx_ + c_phi * cy_ + hs_y;
|
|
|
+
|
|
|
+ var xcr1 = ( x1_ - cx_ ) / rx;
|
|
|
+ var xcr2 = ( x1_ + cx_ ) / rx;
|
|
|
+ var ycr1 = ( y1_ - cy_ ) / ry;
|
|
|
+ var ycr2 = ( y1_ + cy_ ) / ry;
|
|
|
+
|
|
|
+ // F6.5.5
|
|
|
+ theta1 = radian( 1.0, 0.0, xcr1, ycr1 );
|
|
|
+
|
|
|
+ // F6.5.6
|
|
|
+ delta_theta = radian( xcr1, ycr1, -xcr2, -ycr2 );
|
|
|
+ var PIx2 = Math.PI * 2.0;
|
|
|
+ while( delta_theta > PIx2 ) delta_theta -= PIx2;
|
|
|
+ while( delta_theta < 0.0 ) delta_theta += PIx2;
|
|
|
+ if( fS == false ) delta_theta -= PIx2;
|
|
|
+
|
|
|
+ var outputObj = { /* cx, cy, theta1, delta_theta */
|
|
|
+ cx : cx,
|
|
|
+ cy : cy,
|
|
|
+ theta1 : theta1,
|
|
|
+ delta_theta : delta_theta
|
|
|
+ }
|
|
|
+ console.dir(outputObj);
|
|
|
+
|
|
|
+ return outputObj;
|
|
|
+}
|
|
|
+function convert_tmp(x1, y1, x2, y2, fA, fS, rx, ry, phi) {
|
|
|
+ var cx,cy,theta1,delta_theta;
|
|
|
+
|
|
|
+ if( rx == 0.0 || ry == 0.0 ) return -1; // invalid arguments
|
|
|
+
|
|
|
+ var s_phi = Math.sin( phi );
|
|
|
+ var c_phi = Math.cos( phi );
|
|
|
+ var hd_x = ( x1 - x2 ) / 2.0; // half diff of x
|
|
|
+ var hd_y = ( y1 - y2 ) / 2.0; // half diff of y
|
|
|
+ var hs_x = ( x1 + x2 ) / 2.0; // half sum of x
|
|
|
+ var hs_y = ( y1 + y2 ) / 2.0; // half sum of y
|
|
|
+
|
|
|
+ // F6.5.1
|
|
|
+ var x1_ = c_phi * hd_x + s_phi * hd_y;
|
|
|
+ var y1_ = c_phi * hd_y - s_phi * hd_x;
|
|
|
+
|
|
|
+ var rxry = rx * ry;
|
|
|
+ var rxy1_ = rx * y1_;
|
|
|
+ var ryx1_ = ry * x1_;
|
|
|
+ var sum_of_sq = rxy1_ * rxy1_ + ryx1_ * ryx1_; // sum of square
|
|
|
+ var coe = Math.sqrt( ( rxry * rxry - sum_of_sq ) / sum_of_sq );
|
|
|
+ if( fA == fS ) coe = -coe;
|
|
|
+
|
|
|
+ // F6.5.2
|
|
|
+ var cx_ = coe * rxy1_ / ry;
|
|
|
+ var cy_ = -coe * ryx1_ / rx;
|
|
|
+
|
|
|
+ // F6.5.3
|
|
|
+ cx = c_phi * cx_ - s_phi * cy_ + hs_x;
|
|
|
+ cy = s_phi * cx_ + c_phi * cy_ + hs_y;
|
|
|
+
|
|
|
+ var outputObj = { /* cx, cy */
|
|
|
+ cx : rxry,
|
|
|
+ cy : rxy1_
|
|
|
+ }
|
|
|
+ console.dir(outputObj);
|
|
|
+
|
|
|
+ return outputObj;
|
|
|
}
|