热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

拖拉切割直线

import flash.display.Sprite; import flash.geom.Point; import mx.controls.Alert; import


xmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/mx" min min
creatiOnComplete="onLoad();"
>


import
flash.display.Sprite;
import flash.geom.Point;

import
mx.controls.Alert;
import mx.core.DragSource;
import
mx.core.UIComponent;
import mx.events.DragEvent;
import
mx.events.MenuEvent;
import mx.managers.DragManager;

//
最原始的线条对象
private var uxLine:UXLine = new UXLine;
// 拖动初始点
private
var dragPoint:Point = new Point;

// 当前线条对象
private var
currentLine:UXLine = null;

private function onLoad():void{
//
初始化表格线
initGridLine(mxCanvas);

// 初始化uxLine
uxLine.xFrom =
50;
uxLine.yFrom = 50;
uxLine.xTo = 250;
uxLine.yTo =
250;
uxLine.draw();

mxCanvas.addElement(uxLine);

mxCanvas.addEventListener(UXLine.EVENT_LINE_BROKEN,
onLineBroken);
mxCanvas.addEventListener(UXLine.EVENT_LINE_NODE_MOVE,
onLineNodeMove);
}


// 线条分割事件
private function
onLineBroken(event:MouseEvent):void{
if(event.target is
UXLine){
currentLine =
UXLine(event.target);
systemManager.addEventListener(MouseEvent.MOUSE_MOVE,
onMouseMove4LB, true);

systemManager.addEventListener(MouseEvent.MOUSE_UP, onMouseUp4LB,
true);
}
}
// 线条分割选择点后 开始移动
private function
onMouseMove4LB(event:MouseEvent):void{
event.stopImmediatePropagation();
if(currentLine
!= null){
currentLine.draw2Line(currentLine.x, event.localY);
/*
Alert.show(event.localX.toString(),"title"); */
}
}
//
线条分割选择点后 移动完成
private function
onMouseUp4LB(event:MouseEvent):void{
event.stopImmediatePropagation();
systemManager.removeEventListener(MouseEvent.MOUSE_MOVE,
onMouseMove4LB, true);

systemManager.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp4LB,
true );

var pointX:Number = event.localX;
var pointY:Number =
event.localY;
// 把线条拆分开,即新增加一条线来实现
if(currentLine !=
null){
var newLine:UXLine = new UXLine;
newLine.xFrom =
currentLine.xFrom;
newLine.yFrom =
currentLine.yFrom;
newLine.xTo = pointX;
newLine.yTo =
pointY;
newLine.draw();
mxCanvas.addElement(newLine);

currentLine.graphics.clear();
currentLine.xFrom
= pointX;
currentLine.yFrom =
pointY;
currentLine.draw();
//mxCanvas.removeElement(currentLine);
}
currentLine
= null;
}

// 选择线起点或终点的移动事件
private function
onLineNodeMove(event:MouseEvent):void{
if(event.target is
UXLine){
currentLine =
UXLine(event.target);
systemManager.addEventListener(MouseEvent.MOUSE_MOVE,
onMouseMove4Line, true);

systemManager.addEventListener(MouseEvent.MOUSE_UP, onMouseUp4Line,
true);
}
}

// 选择线起点或终点的移动事件
private function
onMouseMove4Line(event:MouseEvent):void{
event.stopImmediatePropagation();

if(currentLine
!= null){
if(currentLine.selectedNode ==
UXLine.SELECTED_FROM_NODE){
currentLine.xFrom =
event.localX;
currentLine.yFrom = event.localY;
}else
if(currentLine.selectedNode ==
UXLine.SELECTED_TO_NODE){
currentLine.xTo =
event.localX;
currentLine.yTo =
event.localY;
}
currentLine.draw();
}
}

//
释放移动动作
private function
onMouseUp4Line(event:MouseEvent):void{
event.stopImmediatePropagation();

systemManager.removeEventListener(MouseEvent.MOUSE_MOVE,
onMouseMove4Line, true);

systemManager.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp4Line,
true );
currentLine = null;
}


/**
*
初始化表格线条
**/
private function
initGridLine(uiComponent:UIComponent):void{
const LINE_LENGTH:int =
4;
const LINE_MARGIN:int = 2;
const LINE_OFFSET:int =
24;
var rowIndex:int;
var colIndex:int;
var rowCount:int =
Math.floor(this.height / LINE_OFFSET);
var colCount:int =
Math.floor(this.width / LINE_OFFSET);
var startX:Number;
var
startY:Number;
var endX:Number;
var endY:Number;
var
lineIndex:int;
var lineCount:int;
var lineLength:int =
(LINE_LENGTH + LINE_MARGIN);
var thickness:Number = 0.5;
var
lineColor:uint =
0x000000;

uiComponent.graphics.clear();
uiComponent.graphics.beginFill(0xFFFFFF);
uiComponent.graphics.drawRect(0,
0, this.width,
this.height);
uiComponent.graphics.endFill();

uiComponent.graphics.lineStyle(thickness,
lineColor, 0.5);

// 画出横线
lineCount = Math.floor(uiComponent.width
/ lineLength);
for(rowIndex = 1; rowIndex <= rowCount; rowIndex
++){
startY = endY = rowIndex * LINE_OFFSET;
if(rowIndex%2 ==
0){
thickness = 1;
uiComponent.graphics.lineStyle(thickness,
lineColor, 0.3);
}else{
thickness =
0.5;
uiComponent.graphics.lineStyle(thickness, lineColor,
0.1);
}
for(lineIndex = 0; lineIndex ++){
startX = lineIndex * lineLength;
endX = startX +
LINE_LENGTH;
uiComponent.graphics.moveTo(startX,
startY);
uiComponent.graphics.lineTo(endX,
endY);
}
}
// 画出竖线
lineCount =
Math.floor(uiComponent.height / lineLength);
for(colIndex = 1; colIndex
<= colCount; colIndex ++){
startX = endX = colIndex *
LINE_OFFSET;
if(colIndex % 2 == 0){
thickness =
1;
uiComponent.graphics.lineStyle(thickness, lineColor,
0.3);
}else{
thickness =
0.5;
uiComponent.graphics.lineStyle(thickness, lineColor,
0.1);
}

for(lineIndex = 0; lineIndex lineIndex ++){
startY = lineIndex * lineLength;
endY = startY
+ LINE_LENGTH;
uiComponent.graphics.moveTo(startX,
startY);
uiComponent.graphics.lineTo(endX,
endY);
}
}
}

]]>

id="mxCanvas" >
text="提示:按住Ctrl再选择线条画折线,选择线的两端可移动线条" toolTip="按住Ctrl再选择线条画折线" x="278"
y="11"/>


拖拉切割直线,布布扣,bubuko.com


推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • JavaScript中属性节点的类型及应用
    本文深入探讨了JavaScript中属性节点的不同类型及其在实际开发中的应用,帮助开发者更好地理解和处理HTML元素的属性。通过具体的案例和代码示例,我们将详细解析如何操作这些属性节点。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 如何在窗口右下角添加调整大小的手柄
    本文探讨了如何在传统MFC/Win32 API编程中实现类似C# WinForms中的SizeGrip功能,即在窗口的右下角显示一个用于调整窗口大小的手柄。我们将介绍具体的实现方法和相关API。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
author-avatar
Angels萱萱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有