`
shlei
  • 浏览: 291492 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

springGraph edge Renderer

    博客分类:
  • FLEX
 
阅读更多
package controls
{
	import com.adobe.flex.extras.controls.springgraph.Graph;
	import com.adobe.flex.extras.controls.springgraph.IEdgeRenderer;
	import com.adobe.flex.extras.controls.springgraph.Item;
	
	import flash.display.BitmapData;
	import flash.display.Graphics;
	import flash.geom.Matrix;
	import flash.text.TextFieldAutoSize;
	
	import mx.core.IDataRenderer;
	import mx.core.UIComponent;
	import mx.core.UITextField;
	import mx.graphics.ImageSnapshot;

	public class CusEdge implements IEdgeRenderer
	{
		private var thickness:int=2;
		private var lineColor:uint=0x232323;
		private var arrowSize:int=5;
		
		public function CusEdge()
		{
		}
		
		/** 实现画线接口 **/
		public function draw(g:Graphics, fromView:UIComponent, toView:UIComponent, fX:int, fY:int, tX:int, tY:int, graph:Graph):Boolean
		{
			var fromItem: Item = (fromView as IDataRenderer).data as Item;
			var toItem: Item = (toView as IDataRenderer).data as Item;
			var node:Object=graph.getLinkData(fromItem,toItem);
			if (node.@fromID!=(fromView as CusNode).id && node.@fromID==(toView as CusNode).id)
			{
				return drawNew(g,toView,fromView,tX,tY,fX,fY,graph);
			}	
			else
			{
				return drawNew(g,fromView,toView,fX,fY,tX,tY,graph);
			}
			return true;
		}
		
		/** 画线函数 **/
		public function drawNew(g:Graphics, fromView:UIComponent, toView:UIComponent, fX:int, fY:int, tX:int, tY:int, graph:Graph):Boolean
		{
			var fromX:int;
			var fromY:int;
			var toX:int;
			var toY:int;
			var totoX:int;
			var totoY:int;
			var eid:String;
			
			var halfFromH:Number=fromView.height/2;
			var halfFromW:Number=fromView.width/2;
			var halfToH:Number=toView.height/2;
			var halfToW:Number=toView.width/2;
			
			var angle:Number  = getAngle( fX, fY, tX, tY);			
			var toAngle:Number=Math.atan2(halfToH,halfToW)*(180/Math.PI);
			var fromAngle:Number=Math.atan2(halfFromH,halfFromW)*(180/Math.PI);
			var k:Number=Math.tan(angle*(Math.PI/180));
			
			///to坐标换算
			if (angle>=0 && angle<90)//1象限
			{
				if (angle>toAngle)
				{
					toX=tX - halfToH / k;
					toY=tY + halfToH;				
				}
				else
				{
					toX=tX - halfToW;
					toY=tY + halfToW * k;
				}
			}
			if (angle>=90 && angle<=180)//2象限
			{
				if (angle+toAngle>180)
				{
					toX=tX + halfToW ;
					toY=tY - halfToW * k;				
				}
				else
				{
					toX=tX - halfToH / k;
					toY=tY + halfToH;	
				}
			}
			if (angle>=-90 && angle<0)//4象限
			{
				if (Math.abs(angle)>toAngle)
				{
					toX=tX + halfToH / k;					
					toY=tY - halfToH;				
				}
				else
				{
					toX=tX - halfToW;
					toY=tY + halfToW * k;
				}
			}
			if (angle<-90 && angle>=-180)//3象限
			{
				if (angle+180>toAngle)
				{
					toX=tX + halfToH / k;
					toY=tY - halfToH;				
				}
				else
				{
					toX=tX + halfToW;
					toY=tY - halfToW * k;	
				}
			}
			///from坐标换算
			if (angle>0 && angle<=90)
			{			
				if (angle>fromAngle)
				{
					fromX=fX + halfFromH / k;
					fromY=fY - halfFromH;
				}
				else
				{
					fromX=fX + halfFromW;
					fromY=fY - halfFromW * k;
				}
			}
			if (angle>90 && angle<=180)
			{
				if (angle+fromAngle>180)
				{
					fromX=fX - halfFromW;
					fromY=fY + halfFromW * k;			
				}
				else
				{
					fromX=fX + halfFromH / k;
					fromY=fY - halfFromH;
				}
			}
			if (angle>=-90 && angle<=0)
			{
				if (Math.abs(angle)>fromAngle)
				{
					fromX=fX - halfFromH / k;
					fromY=fY + halfFromH;
				}
				else
				{
					fromX=fX + halfFromW;
					fromY=fY - halfFromW * k;
				}
			}
			if (angle<-90 && angle>=-180)
			{
				if (angle+180>fromAngle)
				{
					fromX=fX - halfFromH / k;
					fromY=fY + halfFromH;
				}
				else
				{
					fromX=fX - halfFromW;
					fromY=fY + halfFromW * k;
				}
			}
			
			
			
			totoX=toX - arrowSize * Math.cos(angle*(Math.PI/180));
			totoY=toY + arrowSize * Math.sin(angle*(Math.PI/180));
			
			g.lineStyle(thickness,lineColor);
			g.moveTo(fromX,fromY);			
			g.lineTo(totoX,totoY);

			
			var fromItem: Item = (fromView as IDataRenderer).data as Item;
			var toItem: Item = (toView as IDataRenderer).data as Item;
			var node:Object=graph.getLinkData(fromItem,toItem);
			if (node!=null)
			{
				if (node.@id)			
					eid=node.@prop;
//				if (node.width)
//					weight=node.width;
//				if (node.bytewidth)
//					bytewidth=node.bytewidth;
			}
			var uit:UITextField = new UITextField();
			uit.textColor = lineColor;
			uit.text = eid;
			uit.autoSize =   TextFieldAutoSize.LEFT;
			var textBitmapData:BitmapData = ImageSnapshot.captureBitmapData(uit);
			var sizeMatrix:Matrix = new Matrix();
			var coef:Number = Math.min(uit.measuredWidth/textBitmapData.width,uit.measuredHeight/textBitmapData.height);
			sizeMatrix.a = coef;
			sizeMatrix.d = coef;
			textBitmapData = ImageSnapshot.captureBitmapData(uit,sizeMatrix);
			g.lineStyle(0,0,0);
			var sm:Matrix = new Matrix();
			sm.tx = (fromX+toX)/2;
			sm.ty = (fromY+toY)/2;
			g.beginBitmapFill(textBitmapData,sm,false);
			g.drawRect((fromX+toX)/2,(fromY+toY)/2,uit.measuredWidth,uit.measuredHeight);
			g.endFill();
			
			
			drawArrowHead(fromX,fromY,toX,toY,g);
			return true;
		}
		
		/** 画箭头 **/
		private function drawArrowHead(startX:int,startY:int,endX:int,endY:int,graphics:Graphics):void{
			//得到箭头的角度
			var angle:Number  = this.getAngle(startX,startY,endX,endY);
			var centerX:Number = endX - arrowSize * Math.cos(angle*(Math.PI/180));
			var centerY:Number = endY + 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)); 
			
			graphics.lineStyle(2,lineColor,1);
			graphics.beginFill(lineColor);
			graphics.moveTo(endX,endY);
			
			graphics.lineTo(leftX,leftY);
			graphics.lineTo(centerX,centerY);
			
			graphics.lineTo(rightX,rightY);
			graphics.lineTo(endX,endY);
			graphics.endFill();
		}
		
		/** 得到箭头的角度 **/
		private function getAngle(startX:int,startY:int,endX:int,endY:int):Number{
			var temX:Number = endX - startX;
			var temY:Number = startY - endY;
			var angle:Number = Math.atan2(temY,temX)*(180/Math.PI);
			return angle;
		}
	}
}
分享到:
评论

相关推荐

    《基于YOLOv8的八段锦练习指导系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    大语言模型教育应用中的知识冲突挑战与应对策略

    内容概要:本文详细探讨了大语言模型(LLMs)在教育应用中遇到的知识冲突问题,包括概念定义、事实陈述和逻辑推理层面的认知不一致性。文章分析了知识冲突的技术成因,如训练数据噪声、参数化知识表示的局限、推理机制的缺陷、模型架构的不足及外部知识的偏差,并探讨了这些因素对教育应用的深远影响。文中提出了多维度的解决路径,如通过数据增强优化知识表示、利用提示强化上下文连贯、开发量规完善模型评估等。此外,文章从社会文化的宏观视角剖析了知识冲突的外部驱动因素,探讨如何在多元异质、动态演进的社会建构语境中构建开放进取、兼容融通的智能教育应用体系。 适合人群:从事教育技术研究的学者、教育工作者、人工智能研究人员和技术开发者。 使用场景及目标:①帮助教育工作者理解大语言模型在教育应用中的局限性;②为技术人员提供优化大语言模型教育应用的具体策略;③促进教育人工智能技术的可靠性、适应性和普及性提升。 其他说明:文章强调了知识冲突的有效化解不仅能够提升大语言模型在教育场景中的应用价值,还将为人工智能在更广泛领域的可持续发展奠定坚实基础。

    《基于YOLOv8的家具鉴定系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    数据结构day1-思维导图顺序表

    数据结构day1-思维导图顺序表

    STM32超声波红外避障小车

    STM32超声波红外避障小车项目通过STM32微控制器实现自动避障功能。硬件部分主要包括STM32开发板、超声波传感器、红外传感器、直流电机、电池模块和电机驱动模块。超声波传感器用于测量前方障碍物的距离,红外传感器帮助小车检测地面线路或障碍物。电机驱动模块通过STM32控制直流电机的转动,从而实现小车的前进、后退和转向。 在软件方面,STM32通过编写简单的避障算法,实时读取传感器数据,并根据环境信息控制小车的运动。当超声波传感器检测到障碍物时,系统会触发后退或转向操作,避免碰撞。

    哈尔滨工业大学DeepSeek公开课-从图灵测试到DeepSeek.pdf

    哈尔滨工业大学DeepSeek公开课-从图灵测试到DeepSeek.pdf

    《基于YOLOv8的冰上运动监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    《基于YOLOv8的体育产业监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    《基于YOLOv8的港口机械识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    oooooomy_vchat_1742859071.zip

    app开发

    《基于YOLOv8的3D打印缺陷检测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    Screenshot_2025-03-31-19-36-01-657_com.UCMobile.jpg

    Screenshot_2025-03-31-19-36-01-657_com.UCMobile.jpg

    半导体过程控制篇 集成电路的可靠性仿真_03_31_153111.docx

    半导体过程控制篇 集成电路的可靠性仿真_03_31_153111.docx

    社交应用_鸿蒙OS_API12_高仿微信APP_开发示例_1742847098.zip

    社交应用_鸿蒙OS_API12_高仿微信APP_开发示例_1742847098.zip

    《基于YOLOv8的民间体育监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    安卓_热更新_简化编译_HTHotFix框架_1742849446.zip

    app开发

    2024 最新版智慧消防全流程解决方案(含 BIM+IoT 技术应用 + 典型案例分析)

    2024 最新版智慧消防全流程解决方案(含 BIM+IoT 技术应用 + 典型案例分析)

    电商_微信小程序_学习项目_电商功能演示_1742849441.zip

    电商_微信小程序_学习项目_电商功能演示_1742849441.zip

    jiguang.zip

    jiguang.zip

    《基于YOLOv8的画作真伪鉴别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics