fixing arrows and curved lines default control points

This commit is contained in:
Pablo Luna 2011-01-24 10:55:06 -03:00
parent 82a9dc8f24
commit 314df3ca68
8 changed files with 65 additions and 64 deletions

View File

@ -269,5 +269,5 @@ core.Utils.calculateDefaultControlPoints = function(srcPos, tarPos){
var x2 = tarPos.x + Math.sqrt(l*l/(1+(m*m)))*fix*-1; var x2 = tarPos.x + Math.sqrt(l*l/(1+(m*m)))*fix*-1;
var y2= m*(x2-tarPos.x)+tarPos.y; var y2= m*(x2-tarPos.x)+tarPos.y;
return [new core.Point(x1,y1),new core.Point(x2,y2)]; return [new core.Point(-srcPos.x + x1,-srcPos.y + y1),new core.Point(-tarPos.x + x2,-tarPos.y + y2)];
}; };

View File

@ -91,9 +91,11 @@ mindplot.ControlPoint.prototype._mouseMove = function(event, point) {
if(point==0){ if(point==0){
var cords = core.Utils.calculateRelationShipPointCoordinates(this._line.getSourceTopic(),pos); var cords = core.Utils.calculateRelationShipPointCoordinates(this._line.getSourceTopic(),pos);
this._line.setFrom(cords.x, cords.y); this._line.setFrom(cords.x, cords.y);
this._line.setSrcControlPoint(new core.Point(pos.x - cords.x,pos.y - cords.y));
}else{ }else{
var cords = core.Utils.calculateRelationShipPointCoordinates(this._line.getTargetTopic(),pos); var cords = core.Utils.calculateRelationShipPointCoordinates(this._line.getTargetTopic(),pos);
this._line.setTo(cords.x, cords.y); this._line.setTo(cords.x, cords.y);
this._line.setDestControlPoint(new core.Point(pos.x - cords.x,pos.y - cords.y));
} }
this._controls[point].x=(pos.x - cords.x); this._controls[point].x=(pos.x - cords.x);
this._controls[point].y=(pos.y - cords.y); this._controls[point].y=(pos.y - cords.y);

View File

@ -644,11 +644,11 @@ mindplot.MindmapDesigner.prototype._buildRelationship = function (model) {
var relationLine = new mindplot.RelationshipLine(fromTopic, toTopic, model.getLineType()); var relationLine = new mindplot.RelationshipLine(fromTopic, toTopic, model.getLineType());
if(core.Utils.isDefined(model.getSrcCtrlPoint())){ if(core.Utils.isDefined(model.getSrcCtrlPoint())){
var srcPoint = model.getSrcCtrlPoint().clone(); var srcPoint = model.getSrcCtrlPoint().clone();
relationLine.getLine().setSrcControlPoint(srcPoint); relationLine.setSrcControlPoint(srcPoint);
} }
if(core.Utils.isDefined(model.getDestCtrlPoint())){ if(core.Utils.isDefined(model.getDestCtrlPoint())){
var destPoint = model.getDestCtrlPoint().clone(); var destPoint = model.getDestCtrlPoint().clone();
relationLine.getLine().setDestControlPoint(destPoint); relationLine.setDestControlPoint(destPoint);
} }

View File

@ -61,10 +61,10 @@ mindplot.RelationshipLine.prototype.redraw = function()
var ctrlPoints = this._line2d.getControlPoints(); var ctrlPoints = this._line2d.getControlPoints();
if(!core.Utils.isDefined(ctrlPoints[0].x) || !core.Utils.isDefined(ctrlPoints[1].x)){ if(!core.Utils.isDefined(ctrlPoints[0].x) || !core.Utils.isDefined(ctrlPoints[1].x)){
var defaultPoints = core.Utils.calculateDefaultControlPoints(sourcePosition, targetPosition); var defaultPoints = core.Utils.calculateDefaultControlPoints(sourcePosition, targetPosition);
ctrlPoints[0].x=sourcePosition.x - defaultPoints[0].x; ctrlPoints[0].x=defaultPoints[0].x;
ctrlPoints[0].y=sourcePosition.y - defaultPoints[0].y; ctrlPoints[0].y=defaultPoints[0].y;
ctrlPoints[1].x=targetPosition.x - defaultPoints[1].x; ctrlPoints[1].x=defaultPoints[1].x;
ctrlPoints[1].y=targetPosition.y - defaultPoints[1].y; ctrlPoints[1].y=defaultPoints[1].y;
} }
var spoint = new core.Point(); var spoint = new core.Point();
spoint.x=parseInt(ctrlPoints[0].x)+parseInt(sourcePosition.x); spoint.x=parseInt(ctrlPoints[0].x)+parseInt(sourcePosition.x);
@ -233,4 +233,35 @@ mindplot.RelationshipLine.prototype.setTo = function(x,y){
this._endArrow.setFrom(x,y); this._endArrow.setFrom(x,y);
}; };
mindplot.RelationshipLine.prototype.setSrcControlPoint = function(control){
this._line2d.setSrcControlPoint(control);
this._startArrow.setControlPoint(control);
};
mindplot.RelationshipLine.prototype.setDestControlPoint = function(control){
this._line2d.setDestControlPoint(control);
this._endArrow.setControlPoint(control);
};
mindplot.RelationshipLine.prototype.getControlPoints = function(){
return this._line2d.getControlPoints();
};
mindplot.RelationshipLine.prototype.isSrcControlPointCustom = function(){
return this._line2d..isSrcControlPointCustom();
};
mindplot.RelationshipLine.prototype.isDestControlPointCustom = function(){
return this._line2d.isDestControlPointCustom();
};
mindplot.RelationshipLine.prototype.setIsSrcControlPointCustom = function(isCustom){
this._line2d.setIsSrcControlPointCustom(isCustom);
};
mindplot.RelationshipLine.prototype.setIsDestControlPointCustom = function(isCustom){
this._line2d.setIsDestControlPointCustom(isCustom);
};
mindplot.RelationshipLine.type = "RelationshipLine"; mindplot.RelationshipLine.type = "RelationshipLine";

View File

@ -45,16 +45,16 @@ mindplot.commands.MoveControlPointCommand = mindplot.Command.extend(
switch (this._point){ switch (this._point){
case 0: case 0:
model.setSrcCtrlPoint(this._controlPoint.clone()); model.setSrcCtrlPoint(this._controlPoint.clone());
this._line.getLine().setFrom(this._endPoint.x, this._endPoint.y); this._line.setFrom(this._endPoint.x, this._endPoint.y);
this._line.getLine().setIsSrcControlPointCustom(true); this._line.setIsSrcControlPointCustom(true);
this._line.getLine().setSrcControlPoint(this._controlPoint.clone()); this._line.setSrcControlPoint(this._controlPoint.clone());
break; break;
case 1: case 1:
model.setDestCtrlPoint(this._controlPoint.clone()); model.setDestCtrlPoint(this._controlPoint.clone());
this._wasCustom = this._line.getLine().isDestControlPointCustom(); this._wasCustom = this._line.getLine().isDestControlPointCustom();
this._line.getLine().setTo(this._endPoint.x, this._endPoint.y); this._line.setTo(this._endPoint.x, this._endPoint.y);
this._line.getLine().setIsDestControlPointCustom(true); this._line.setIsDestControlPointCustom(true);
this._line.getLine().setDestControlPoint(this._controlPoint.clone()); this._line.setDestControlPoint(this._controlPoint.clone());
break; break;
} }
if(this._line.isOnFocus()){ if(this._line.isOnFocus()){
@ -70,18 +70,18 @@ mindplot.commands.MoveControlPointCommand = mindplot.Command.extend(
switch (this._point){ switch (this._point){
case 0: case 0:
if(core.Utils.isDefined(this._oldControlPoint)){ if(core.Utils.isDefined(this._oldControlPoint)){
line.getLine().setFrom(this._originalEndPoint.x, this._originalEndPoint.y); line.setFrom(this._originalEndPoint.x, this._originalEndPoint.y);
model.setSrcCtrlPoint(this._oldControlPoint.clone()); model.setSrcCtrlPoint(this._oldControlPoint.clone());
line.getLine().setSrcControlPoint(this._oldControlPoint.clone()); line.setSrcControlPoint(this._oldControlPoint.clone());
line.getLine().setIsSrcControlPointCustom(this._wasCustom); line.setIsSrcControlPointCustom(this._wasCustom);
} }
break; break;
case 1: case 1:
if(core.Utils.isDefined(this._oldControlPoint)){ if(core.Utils.isDefined(this._oldControlPoint)){
line.getLine().setTo(this._originalEndPoint.x, this._originalEndPoint.y); line.setTo(this._originalEndPoint.x, this._originalEndPoint.y);
model.setDestCtrlPoint(this._oldControlPoint.clone()); model.setDestCtrlPoint(this._oldControlPoint.clone());
line.getLine().setDestControlPoint(this._oldControlPoint.clone()); line.setDestControlPoint(this._oldControlPoint.clone());
line.getLine().setIsDestControlPointCustom(this._wasCustom); line.setIsDestControlPointCustom(this._wasCustom);
} }
break; break;
} }

View File

@ -153,49 +153,6 @@ web2d.peer.svg.CurvedLinePeer.prototype.isShowStartArrow = function(){
web2d.peer.svg.CurvedLinePeer.prototype._updatePath = function(avoidControlPointFix) web2d.peer.svg.CurvedLinePeer.prototype._updatePath = function(avoidControlPointFix)
{ {
this._calculateAutoControlPoints(avoidControlPointFix); this._calculateAutoControlPoints(avoidControlPointFix);
var x,y, xp, yp;
if(this._showEndArrow){
if(this._control2.y == 0)
this._control2.y=1;
var y0 = this._control2.y;
var x0 = this._control2.x;
var x2=x0+y0;
var y2 = y0-x0;
var x3 = x0-y0;
var y3 = y0+x0;
var m = y2/x2;
var mp = y3/x3;
var l = 6;
var pow = Math.pow;
x = (x2==0?0:Math.sqrt(pow(l,2)/(1+pow(m,2))));
x *=Math.sign(x2);
y = (x2==0?l*Math.sign(y2):m*x);
xp = (x3==0?0:Math.sqrt(pow(l,2)/(1+pow(mp,2))));
xp *=Math.sign(x3);
yp = (x3==0?l*Math.sign(y3):mp*xp);
}
var xs2,ys2, xp2, yp2;
if(this._showStartArrow){
if(this._control1.y == 0)
this._control1.y=1;
var y02 = this._control1.y;
var x02 = this._control1.x;
var x22=x02+y02;
var y22 = y02-x02;
var x32 = x02-y02;
var y32 = y02+x02;
var m2 = y22/x22;
var mp2 = y32/x32;
var l2 = 6;
var pow2 = Math.pow;
xs2 = (x22==0?0:Math.sqrt(pow2(l2,2)/(1+pow2(m2,2))));
xs2 *=Math.sign(x22);
ys2 = (x22==0?l2*Math.sign(y22):m2*xs2);
xp2 = (x32==0?0:Math.sqrt(pow2(l2,2)/(1+pow2(mp2,2))));
xp2 *=Math.sign(x32);
yp2 = (x32==0?l2*Math.sign(y32):mp2*xp2);
}
var path = "M"+this._x1+","+this._y1 var path = "M"+this._x1+","+this._y1
+" C"+(this._control1.x+this._x1)+","+(this._control1.y+this._y1)+" " +" C"+(this._control1.x+this._x1)+","+(this._control1.y+this._y1)+" "
+(this._control2.x+this._x2)+","+(this._control2.y+this._y2)+" " +(this._control2.x+this._x2)+","+(this._control2.y+this._y2)+" "

View File

@ -645,7 +645,7 @@ ol#toc span {
} }
#workspaceContainer { #workspaceContainer {
/*background: url(../images/grid.gif) bottom left repeat !important;*/ background: url(../images/grid.gif) bottom left repeat !important;
} }
div#mapInfo { div#mapInfo {
@ -757,3 +757,14 @@ div#toolbar .topicRelation {
behavior: url(../css/iepngfix.htc); behavior: url(../css/iepngfix.htc);
z-index: 4; z-index: 4;
} }
div#toolbar .topicRelation:hover {
width:56px;
background: url(../images/topic_relationship.png) no-repeat center top;
behavior: url(../css/iepngfix.htc);
z-index: 4;
}
div#toolbar .relationshiplabel{
width:56px;
}

View File

@ -193,7 +193,7 @@
<div class="toolbarLabel"><p><spring:message code="LINK"/></p></div> <div class="toolbarLabel"><p><spring:message code="LINK"/></p></div>
</div> </div>
<div id="topicRelation" class="topicRelation button" title="<spring:message code="TOPIC_RELATIONSHIP"/>"> <div id="topicRelation" class="topicRelation button" title="<spring:message code="TOPIC_RELATIONSHIP"/>">
<div class="toolbarLabel"><p><spring:message code="TOPIC_RELATIONSHIP"/></p></div> <div class="relationshiplabel toolbarLabel"><p><spring:message code="TOPIC_RELATIONSHIP"/></p></div>
</div> </div>
</fieldset> </fieldset>
</div> </div>