`
iMzw
  • 浏览: 193934 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex 线组件

    博客分类:
  • Flex
阅读更多
我在 OrgChart 中用的是Rule组件来划线,实际上最好用轻量级的 Shape 组件来画线。前几天刚好又有类似的工作,就顺便写了一个。

package mobi.imzw.control{
        import flash.display.Shape;
        import flash.geom.Point;
        
        public class LineDescriptor extends Shape {
                
                private var _start:Point = new Point(0, 0);
                private var _startX:Number;
                private var _startY:Number;
                
                private var _end:Point = new Point(0, 0);
                private var _endX:Number;
                private var _endY:Number;
                
                private var _hasArrowHead:Boolean=false;
                
                private var _thinkness:Number = 1;
                private var _color:uint = 0x000000;
                private var _alpha:Number = 1;
                private var _pixelHinting:Boolean = false;
                private var _scaleMode:String = "normal";
                
                
                public function LineDescriptor(startPoint:Point=null,
                                                                                endPoint:Point=null,
                                                                                hasArrow:Boolean=false){
                        start = startPoint;
                        end = endPoint;
                        hasArrowHead = hasArrowHead;
                }
                
                
                public function draw():void{
                        graphics.clear();
                        with(graphics){
                                lineStyle(_thinkness, _color, _alpha, _pixelHinting, _scaleMode);
                                moveTo(start.x, start.y);
                                lineTo(end.x, end.y);   
                        }
                        
                        if(hasArrowHead){
                                drawArrowHead();
                        }
                }
                
                /**
                 * 画箭头 
                 **/
                private function drawArrowHead():void{
                        var startX:Number = start.x;
                        var startY:Number = start.y;
                        var endX:Number = end.x;
                        var endY:Number = end.y;
                        
                        var arrowLength : Number = 10;
                        var arrowAngle : Number = Math.PI / 6;
                        var lineAngle : Number;
                        if(endX - startX != 0)                          
                                lineAngle = Math.atan((endY - startY) / (endX - startX));
                        else{
                                if(endY - startY < 0)
                                        lineAngle = Math.PI / 2;
                                else
                                        lineAngle = 3 * Math.PI / 2;
                        }                               
                        if(endY - startY >= 0 && endX - startX <= 0){
                                lineAngle = lineAngle + Math.PI;
                        }else if(endY - startY <= 0 && endX - startX <= 0){
                                lineAngle = lineAngle + Math.PI;
                        }
                        //定义三角形
                        var angleC : Number = arrowAngle;
                        var rimA : Number = arrowLength;
                        var rimB : Number = Math.pow(Math.pow(endY - startY,2) + Math.pow(endX - startX,2),1/2);
                        var rimC : Number = Math.pow(Math.pow(rimA,2) + Math.pow(rimB,2) - 2 * rimA * rimB * Math.cos(angleC),1/2);
                        var angleA : Number = Math.acos((rimB - rimA * Math.cos(angleC)) / rimC);
                        
                        var leftArrowAngle : Number = lineAngle + angleA;
                        var rightArrowAngle : Number = lineAngle - angleA;                      
                        var leftArrowX : Number = startX + rimC * Math.cos(leftArrowAngle);
                        var leftArrowY : Number = startY + rimC * Math.sin(leftArrowAngle);                     
                        var rightArrowX : Number = startX + rimC * Math.cos(rightArrowAngle);
                        var rightArrowY : Number = startY + rimC * Math.sin(rightArrowAngle);
                        
                        
                        with(graphics){
                                moveTo(end.x, end.y);
                                lineTo(leftArrowX, leftArrowY);
                                moveTo(end.x, end.y);
                                lineTo(rightArrowX, rightArrowY);
                        }
                }
                
                /**
                 * 是否有箭头
                 **/
                public function get hasArrowHead():Boolean{
                        return _hasArrowHead;
                }
                public function set hasArrowHead(value:Boolean):void{
                        _hasArrowHead = value;
                }
                
                /**
                 * 线的起点
                 **/
                public function get start():Point{
                        return _start;
                }
                public function set start(value:Point):void{
                        if(value){
                                _start = value;
                        }
                }
                
                public function get startX():Number{
                        return _start.x;
                }
                public function set startX(value:Number):void{
                        _start.x = value;
                }
                
                public function get startY():Number{
                        return _start.y;
                }
                public function set startY(value:Number):void{
                        _start.y = value;
                }
                
                /**
                 * 线的终点
                 **/
                public function get end():Point{
                        return _end;
                }
                public function set end(value:Point):void{
                        if(value){
                                _end = value;
                        }
                }
                
                public function get endX():Number{
                        return end.x;
                }
                public function set endX(value:Number):void{
                        _end.x = value;
                }
                
                public function get endY():Number{
                        return end.y;
                }
                public function set endY(value:Number):void{
                        _end.y = value;
                }
                
        }
}



其中画箭头的算法是同事小王写的,在此感谢小王。
8
0
分享到:
评论
4 楼 roger_588 2009-03-23  
谢谢指点!我已有思路了。
3 楼 iMzw 2009-03-19  
roger_588 写道

我想问下,折线怎么画?

^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
|_________|

好比如上图,都是直线(由于无法具体描述),折点可托拽。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;



折线不就是几条直线么。折点是独立的组件,拖动折点时,更改折点端相关直线的坐标。
2 楼 roger_588 2009-03-18  
我想问下,折线怎么画?

^         |
|_________|

好比如上图,都是直线(由于无法具体描述),折点可托拽。
     
1 楼 roger_588 2009-03-18  

相关推荐

    Flex Tree组件的实线连接线

    下面我们将深入探讨如何在Flex中实现Tree组件的实线连接线。 首先,要理解Flex Tree组件的工作原理。Tree组件是基于mx.controls.treeClasses.TreeItemRenderer类来渲染每个节点的。默认的渲染器提供了基本的样式和...

    Flex 组件边框线样式

    Flex组件边框线样式是前端开发中的一种设计技术,它主要应用于创建具有清晰边框的UI元素,使得用户界面更加美观且易于理解。在Flex框架中,边框线的样式可以自定义,以满足不同场景下的设计需求。下面将详细讨论Flex...

    flex组件时间轴组件

    在本文中,我们将深入探讨“Flex组件时间轴”,这是一种在现代Web开发中广泛使用的界面元素。Flex组件时间轴主要用于组织和展示按照时间顺序排列的数据,它在各种项目中都有着重要的应用,尤其对于需要呈现时间序列...

    数关系用 线连接的flex tree 组件

    "数关系用线连接的flex tree组件"是一种专为呈现层级数据结构而设计的图形化工具,它以树状结构展示信息,并通过线条连接各个节点,清晰地呈现出层次关系。这种组件常见于组织架构、文件系统、网络拓扑等领域,帮助...

    使用Flex图表组件

    在 Flex 开发中,图表组件是一个强大的工具,用于以图形化方式展示数据,使用户能够更直观地理解和分析信息。本文将深入探讨 Flex 图表组件的使用,包括柱状图、条状图、线图等多种图表类型,以及如何定义图表数据。...

    flex做拓扑图的组件

    在Flex中,我们可以利用其强大的图形绘制能力来实现拓扑图的组件。拓扑图通常用于网络监控、系统架构可视化或者数据流展示等场景,它能够清晰地展示节点之间的连接关系。 在Flex中创建拓扑图组件,你需要了解以下几...

    Flex UI组件使用全集

    ### Flex UI组件使用全集详解 #### 概述 本文档是基于阿树对Adobe Flex UI组件库的全面整理,并结合Adobe主页上提供的各种组件代码示例进行深度解析。Flex是一种用于构建高度交互式的Web应用的框架,尤其适用于创建...

    Flex 3 组件实例与应用(2009版)

    ### Flex 3 组件实例与应用(2009版) #### 一、概述 《Flex 3 组件实例与应用》是一本针对初学者学习Adobe Flex 3框架及其组件的指南书籍。这本书由作者Dason编写,内容覆盖了Flex 3中的多种组件及其用法,并通过...

    flex组件之数据可视化组件实例源码

    Flex组件是Adobe Flex框架中的重要组成部分,主要用于构建富互联网应用程序(RIA)。在Flex中,数据可视化组件是用于创建各种图表和图形的工具,使开发者能够将复杂的数据转化为易于理解的视觉表示。本实例源码提供...

    flash/flex画曲线,绘图板

    在IT行业中,Flash/Flex是一种...综上所述,"Flash/Flex画曲线,绘图板"这个主题涵盖了Flex开发、图形绘制API、用户交互以及组件设计等多个IT知识点。通过学习和实践,开发者可以提升在富互联网应用领域的专业技能。

    flex实时更新曲线图

    在本例中,"flex实时更新曲线图"涉及到的技术核心是Flex中的图表组件和数据驱动更新。 1. **Flex图表组件**:Flex提供了多种图表类型,包括折线图、柱状图、饼图等。曲线图,即折线图,用于展示数据随时间变化的...

    flex翻书组件

    Flex翻书组件是一种基于Adobe Flex技术开发的交互式电子书应用,它提供了逼真的翻书效果,让读者在数字环境中体验类似纸质书籍的阅读感受。Adobe Flex是一个用于构建富互联网应用程序(RIA)的框架,使用MXML和...

    Flex 的树加线条

    在Flex中,Tree组件是一种常用的用户界面元素,它允许用户以树形结构展示数据,常用于导航和层级数据的展示。在这个特定的情况下,我们讨论的是如何在Flex的Tree组件上添加自定义的线条,以提升视觉效果和用户体验。...

    Flex曲线图形实例

    下面将详细讨论Flex开发中的关键知识点以及与该实例相关的组件和文件。 1. **Flex SDK**: Flex软件开发工具包包含MXML和ActionScript编译器,用于创建可自定义的用户界面。它提供了丰富的组件库,包括各种图形元素...

    flex的组织结构图组件

    标题“flex的组织结构图组件”指的是一种特定的Flex组件,其功能是动态地显示和操作具有层次结构的数据。在Flex中,这种组件通常通过Tree或HierarchicalData类来实现,可以自定义节点的样式和交互行为。 描述中的...

    Flex做的贝塞尔曲线

    它提供了丰富的用户界面组件和强大的图形处理能力,使得开发者可以创建出交互性强、视觉效果精美的Web应用。而贝塞尔曲线是图形设计中的一个重要概念,常用于绘制平滑的曲线路径,广泛应用于动画、游戏、UI设计等...

    《Flex 3 组件实例与应用(2009版)》(PDF)

    HRule是一个简单的水平线组件,用于分隔不同部分的内容。 #### HScrollbar HScrollbar是水平滚动条,用于当内容超过容器宽度时,实现水平滚动功能。 #### HSlider HSlider是水平滑动条,用于控制数值范围的选择,...

    flex 画线,并连接到物体上,

    在Flex编程中,"flex 画线,并连接到物体上" 这一主题涉及到图形绘制、事件处理和对象定位等多个核心知识点。Flex是一款基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。下面将详细介绍如何...

    FlexChart平均线代码

    2. **创建FlexChart对象**:在MXML或ActionScript中实例化FlexChart组件,并设置其类型为适合显示平均线的图表类型,如折线图。 3. **数据绑定**:将数据源绑定到图表的系列,让图表知道应该用哪些数据来绘制线条。...

    Flex实现拓扑,可以拖动 画线等

    1. **Flex组件库**:Flex包含一套丰富的预定义组件,如Button、Canvas、Graph等,这些组件为构建拓扑图提供了基础。在本例中,可能使用了Canvas组件作为画布,承载拓扑图的元素。 2. **Drag and Drop功能**:Flex...

Global site tag (gtag.js) - Google Analytics