今日
sigleBordLine类 <?xml version="1.0" encoding="utf-8"?> ? ? ? package aaRight.z.test { ?? ?import aaRight.util.RectHandle; ?? ? ?? ?import com.roguedevelopment.objecthandles.example.SimpleSpriteShape; ?? ? ?? ?import flash.display.Sprite; ?? ?import flash.events.Event; ?? ?import flash.events.MouseEvent; ?? ?import flash.geom.Point; ?? ? ?? ?import maodian.BrokenLineRect; ?? ? ?? ?import mx.core.UIComponent; ?? ?import mx.managers.ToolTipManager; ?? ? ?? ?import spark.components.Button; ?? ? ?? ?public class MyLineAngle extends Sprite ?? ??? ? ?? ?{ ?? ??? ?public var startPoint:Point;???????? ??? ??? ? //起始节点 ?? ??? ?public var endPoint:Point;??????????? ??? ?//结束节点、 ?? ??? ?public var isArrow:Boolean = true;???? ??? ? //是否有箭头 ?? ??? ?public var arrowSize:uint = 6;???????? ??? ?//箭头大小 ?? ??? ?public var lineColor:uint = 0x000000;?????? //颜色 ?? ??? ?public var tip:String = "线条";??????? ??? ? //提示语 ?? ??? ? ?? ??? ?public var isHead:Boolean;?? ??? ??? ??? ??? ?//是否是箭头,移动的时候用到的 ?? ??? ? ?? ??? ?public function MyLineAngle() ?? ??? ?{ ?? ??? ??? ?super(); ?? ??? ?} ?? ??? ? ?? ??? ?public function drawLine():void ?? ??? ?{?????????????? ? ?? ??? ??? ?//************还要扩展,扩展成能够拉的折线的,参考UXine********** ?? ??? ??? ?this.graphics.clear(); ?? ??? ??? ?this.graphics.lineStyle(2,lineColor); ?? ??? ??? ?this.graphics.moveTo(startPoint.x,startPoint.y); ?? ??? ??? ?this.graphics.lineTo(endPoint.x,endPoint.y); //?? ??? ??? ?this.toolTip = tip; ?? ??? ??? ? ?? ??? ??? ?//-----画箭头------ ?? ??? ??? ?if(isArrow) ?? ??? ??? ?{ ?? ??? ??? ??? ?var angle:Number? = this.getAngle(); ?? ??? ??? ??? ?var centerX:Number = endPoint.x - arrowSize * Math.cos(angle*(Math.PI/180)); ?? ??? ??? ??? ?var centerY:Number = endPoint.y + arrowSize * Math.sin(angle*(Math.PI/180)); ?? ??? ??? ??? ? ?? ??? ??? ??? ?var leftX:Number = centerX + arrowSize * Math.cos((angle+120)*(Math.PI/180)); ?? ??? ??? ??? ?var leftY:Number = centerY - arrowSize * Math.sin((angle+120)*(Math.PI/180)); ?? ??? ??? ??? ?var rightX:Number = centerX + arrowSize * Math.cos((angle+240)*(Math.PI/180)); ?? ??? ??? ??? ?var rightY:Number = centerY - arrowSize * Math.sin((angle+240)*(Math.PI/180)); ?? ??? ??? ??? ? ?? ??? ??? ??? ?this.graphics.lineStyle(2,lineColor,1); ?? ??? ??? ??? ?this.graphics.moveTo(endPoint.x,endPoint.y); ?? ??? ??? ??? ? ?? ??? ??? ??? ?this.graphics.lineTo(leftX,leftY); ?? ??? ??? ??? ?this.graphics.lineTo(centerX,centerY); ?? ??? ??? ??? ? ?? ??? ??? ??? ?this.graphics.lineTo(rightX,rightY); ?? ??? ??? ??? ?this.graphics.lineTo(endPoint.x,endPoint.y); ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ??? ?//得到线的角度 ?? ??? ?public function getAngle():Number ?? ??? ?{ ?? ??? ??? ?var temX:Number = endPoint.x - startPoint.x; ?? ??? ??? ?var temY:Number = startPoint.y - endPoint.y; ?? ??? ??? ?var angle:Number = Math.atan2(temY,temX) * (180/Math.PI) ?? ??? ??? ?return angle; ?? ??? ?} ?? ??? ? ?? ??? ?//联系节点与鼠标坐标,并获得交叉点 ?? ??? ?public static function getStartLinkPoint(fromPoint:Point,targetPoint:Point,acrossNode:Button):Point{ ?? ??? ??? ?/** ?? ??? ??? ? *? 需要说明的是,BaseNode是用在canvans中间的,flex4中间用BasicLayout加上组件来进行的 ?? ??? ??? ? */ ?? ??? ??? ?var angle:Number = getAngle(fromPoint,targetPoint); ?? ??? ??? ? ?? ??? ??? ?var distanceX:Number = Math.abs(( acrossNode.width/2 )*( targetPoint.x-fromPoint.x )/(targetPoint.y-fromPoint.y)); ?? ??? ??? ?var distanceY:Number = Math.abs(( acrossNode.width/2 )*( targetPoint.y-fromPoint.y )/(targetPoint.x-fromPoint.x)); ?? ??? ??? ? ?? ??? ??? ?if(targetPoint.x < fromPoint.x) ?? ??? ??? ?{ ?? ??? ??? ??? ?distanceX= -distanceX; ?? ??? ??? ?} ?? ??? ??? ?if(targetPoint.y < fromPoint.y) ?? ??? ??? ?{ ?? ??? ??? ??? ?distanceY = -distanceY; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?//最终的x,y坐标的 ?? ??? ??? ?var x:Number = 0; ?? ??? ??? ?var y:Number = 0 ?? ??? ??? ? ?? ??? ??? ?if(angle >= 45 && angle < 135)?????????????? //应该是八种情况来处理的 ?? ??? ??? ?{ ?? ??? ??? ??? ?x = fromPoint.x + distanceX; ?? ??? ??? ??? ?y = acrossNode.y; ?? ??? ??? ??? ? ?? ??? ??? ?}else if(angle >= 135 && angle <225) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = acrossNode.x; ?? ??? ??? ??? ?y = fromPoint.y + distanceY; ?? ??? ??? ??? ? ?? ??? ??? ?}else if(angle >= 225&&angle <= 315) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = fromPoint.x + distanceX; ?? ??? ??? ??? ?y = fromPoint.y + acrossNode.height/2; ?? ??? ??? ??? ? ?? ??? ??? ?}else ?? ??? ??? ?{ ?? ??? ??? ??? ?x = fromPoint.x + acrossNode.width/2; ?? ??? ??? ??? ?y = fromPoint.y + distanceY; ?? ??? ??? ?} ?? ??? ??? ?return new Point(x,y); ?? ??? ?} ?? ??? ? ?? ??? ?public static function getAngle(fromPoint:Point,targetPoint:Point):Number{ ?? ??? ??? ? ?? ??? ??? ?/**为了与三角坐标一致,y坐标的值要反过来??????怎么反*/ ?? ??? ??? ? ?? ??? ??? ?var radian:Number=Math.abs(Math.atan((targetPoint.x-fromPoint.x)/(targetPoint.y-fromPoint.y))); ?? ??? ??? ? ?? ??? ??? ?var angle:Number = radian*180/Math.PI; ?? ??? ??? ? ?? ??? ??? ?if((targetPoint.x >= fromPoint.x) && (targetPoint.y <= fromPoint.y))????????? //0~90区域 ?? ??? ??? ?{ ?? ??? ??? ??? ?angle = 90 - angle; ?? ??? ??? ?} ?? ??? ??? ?else if((targetPoint.x <= fromPoint.x) && (targetPoint.y <= fromPoint.y))??? //90~180区域 ?? ??? ??? ?{ ?? ??? ??? ??? ?angle = 90 + angle; ?? ??? ??? ?} ?? ??? ??? ?else if((targetPoint.x <= fromPoint.x) && (targetPoint.y >= fromPoint.y))???? //180~270区域 ?? ??? ??? ?{ ?? ??? ??? ??? ?angle = 270 - angle; ?? ??? ??? ?} ?? ??? ??? ?else if((targetPoint.x >= fromPoint.x) && (targetPoint.y >= fromPoint.y))???? //270~360区域 ?? ??? ??? ?{ ?? ??? ??? ??? ?angle = 270 + angle; ?? ??? ??? ?} ?? ??? ??? ?return angle; ? ?? ??? ?} ?? ??? ? ?? ??? ?public static function getEndLinkPoint(fromPoint:Point,y坐标的 ?? ??? ??? ?var x:Number = 0; ?? ??? ??? ?var y:Number = 0 ?? ??? ??? ? ?? ??? ??? ?if(angle >= 45 && angle < 135) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = targetPoint.x - distanceX; ?? ??? ??? ??? ?y = targetPoint.y + acrossNode.height/2; ?? ??? ??? ??? ? ?? ??? ??? ?}else if(angle >= 135 && angle <225) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = targetPoint.x + acrossNode.width/2; ?? ??? ??? ??? ?y = targetPoint.y + distanceY; ?? ??? ??? ??? ? ?? ??? ??? ?}else if(angle >= 225&&angle <= 315) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = targetPoint.x + distanceX; ?? ??? ??? ??? ?y = targetPoint.y - acrossNode.height/2; ?? ??? ??? ??? ? ?? ??? ??? ?}else ?? ??? ??? ?{ ?? ??? ??? ??? ?x = targetPoint.x - acrossNode.width/2; ?? ??? ??? ??? ?y = targetPoint.y - distanceY; ?? ??? ??? ?} ?? ??? ??? ?return new Point(x,y); ?? ??? ?} ?? ??? ? ?? ??? ?public function removeLine():void ?? ??? ?{ ?? ??? ??? ?this.graphics.clear(); ?? ??? ?} ?? ??? ? ?? ??? ?//-----------------------------------------------------------------------------------------------------------------???? ? ?? ??? ? ?? ??? ?/** 直角线的画出来 ?? ??? ? * */? ? ?? ??? ? ?? ??? ?public var XPoint:Point = new Point(); ?? ??? ? ?? ??? ?public function draw2Line(pointX:int,pointY:int):void ?? ??? ?{?????????? ? ?? ??? ??? ?//还应该判断起始点,确定线段和箭头的 ?? ??? ??? ? ?? ??? ??? ?XPoint.x = pointX; ?? ??? ??? ?XPoint.y = pointY; ?? ??? ??? ? ?? ??? ??? ?this.graphics.clear(); ?? ??? ??? ?this.graphics.lineStyle(2,lineColor); ? ?? ??? ??? ? ?? ??? ??? ?this.graphics.moveTo(startPoint.x,startPoint.y); ?? ??? ??? ?this.graphics.lineTo(pointX,pointY); ?? ??? ??? ?this.graphics.moveTo(pointX,pointY); ?? ??? ??? ?this.graphics.lineTo(endPoint.x,endPoint.y); ?? ??? ??? ? //?? ??? ??? ?this.toolTip = tip; ?? ??? ??? ? ?? ??? ??? ? ?? ??? ??? ?if(isArrow){ ?? ??? ??? ??? ? ?? ??? ??? ??? ?var angle:Number? = this.get2Angle(pointX,pointY); ?? ??? ??? ??? ?var centerX:Number = endPoint.x - arrowSize * Math.cos(angle * (Math.PI/180)); ?? ??? ??? ??? ?var centerY:Number = endPoint.y + arrowSize * Math.sin(angle * (Math.PI/180)); ?? ??? ??? ??? ? ?? ??? ??? ??? ? ?? ??? ??? ??? ?var leftX:Number = centerX + arrowSize * Math.cos((angle+120) * (Math.PI/180)); ?? ??? ??? ??? ?var leftY:Number = centerY - arrowSize * Math.sin((angle+120) * (Math.PI/180)); ?? ??? ??? ??? ?var rightX:Number = centerX + arrowSize * Math.cos((angle+240) * (Math.PI/180)); ?? ??? ??? ??? ?var rightY:Number = centerY - arrowSize * Math.sin((angle+240) * (Math.PI/180)); ?? ??? ??? ??? ? ?? ??? ??? ??? ? ?? ??? ??? ??? ?this.graphics.lineStyle(2,endPoint.y); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?//控制中间点与终点的角度来计算角度 ?? ??? ?public function get2Angle(pointX:Number,pointY:Number):Number ?? ??? ?{ ?? ??? ??? ?var temX:Number = endPoint.x - pointX; ?? ??? ??? ?var temY:Number = pointY - endPoint.y; ?? ??? ??? ?var angle:Number = Math.atan2(temY,temX) * (180/Math.PI); ?? ??? ??? ?return angle; ?? ??? ?} ?? ?} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |