• TransformTool 的使用


    import flash.display.Shape;
    import com.senocular.display.TransformTool;

    // default tool
    var defaultTool:TransformTool 
    = new TransformTool();
    addChild(defaultTool);

    // custom tool with some custom options
    var customTool:TransformTool 
    = new TransformTool();
    addChild(customTool);

    customTool.raiseNewTargets 
    = false;
    customTool.moveNewTargets 
    = true;
    customTool.moveUnderObjects 
    = false;

    customTool.registrationEnabled 
    = false;
    customTool.rememberRegistration 
    = false;

    customTool.rotationEnabled 
    = false;
    customTool.constrainRotation 
    = true;
    customTool.constrainRotationAngle 
    = 90/4;

    customTool.constrainScale 
    = true;
    customTool.maxScaleX 
    = 2;
    customTool.maxScaleY 
    = 2;

    customTool.skewEnabled 
    = false;

    customTool.setSkin(TransformTool.SCALE_TOP_LEFT, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_TOP_RIGHT, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_BOTTOM_RIGHT, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_BOTTOM_LEFT, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_TOP, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_RIGHT, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_BOTTOM, 
    new ScaleCircle());
    customTool.setSkin(TransformTool.SCALE_LEFT, 
    new ScaleCircle());

    customTool.addControl(
    new CustomRotationControl());
    customTool.addControl(
    new CustomResetControl());

    // keep track of the current tool being used
    var currTool:TransformTool 
    = defaultTool;

    // selecting objects on the screen
    function select(event){
        
    if (event.target is Stage) {
            currTool.target 
    = null;
        }
    else if (event.target is Sprite) {
            currTool.target 
    = event.target as Sprite;
            toolInit();
        }
    }

    // changing tools using the toolChange button
    function setTool(event:MouseEvent):void {
        
        
    // get other tool
        var newTool:TransformTool 
    = (currTool == defaultTool) ? customTool : defaultTool;
        
        
    // make sure moveNewTargets is not set when setting tool this way
        var moveTargets:
    Boolean = newTool.moveNewTargets;
        newTool.moveNewTargets 
    = false;
        newTool.target 
    = currTool.target;
        newTool.moveNewTargets 
    = moveTargets;
        
        
    // unset currTool
        currTool.target 
    = null;
        currTool 
    = newTool;
        
        toolInit();
    }

    // for setting a new tool
    function toolInit():void {
        
    // raise
        currTool.parent.setChildIndex(currTool, currTool.parent.numChildren 
    - 1);
        
        
    // center registration for customTool
        
    if (currTool == customTool) {
            currTool.registration 
    = currTool.boundsCenter;
        }
    }

    // event handlers for selecting objects and changing tools
    stage.addEventListener(MouseEvent.MOUSE_DOWN, 
    select);
    toolChange.addEventListener(MouseEvent.CLICK, setTool);

    fla上代码

    下面是两个同目录下类:

    package {
        
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Matrix;
        import flash.geom.Point;
        
        import com.senocular.display.TransformTool;
        import com.senocular.display.TransformToolControl;
        import com.senocular.display.TransformToolCursor;
        
        
    public class CustomResetControl extends TransformToolControl {
            
            
    public function CustomResetControl() {
                addEventListener(TransformTool.CONTROL_INIT, init, 
    false0true);
            }
            
            
    private function init(event:Event):void {
                
                
    // add event listeners 
                transformTool.addEventListener(TransformTool.NEW_TARGET, update, 
    false0true);
                transformTool.addEventListener(TransformTool.TRANSFORM_TOOL, update, 
    false0true);
                transformTool.addEventListener(TransformTool.CONTROL_TRANSFORM_TOOL, update, 
    false0true);
                addEventListener(MouseEvent.CLICK, resetClick);
                
                
    // initial positioning
                update();
            }
            
            
    private function update(event:Event = null):void {
                
    if (transformTool.target) {
                    
    // find to bottom right of selection
                    var maxX:Number 
    = Math.max(transformTool.boundsTopLeft.x, transformTool.boundsTopRight.x);
                    maxX 
    = Math.max(maxX, transformTool.boundsBottomRight.x);
                    maxX 
    = Math.max(maxX, transformTool.boundsBottomLeft.x);
                    
                    var maxY:Number 
    = Math.max(transformTool.boundsTopLeft.y, transformTool.boundsTopRight.y);
                    maxY 
    = Math.max(maxY, transformTool.boundsBottomRight.y);
                    maxY 
    = Math.max(maxY, transformTool.boundsBottomLeft.y);
                    
                    
    // set location to found values
                    x 
    = maxX;
                    y 
    = maxY;
                }
            }
            
            
    private function resetClick(event:MouseEvent):void {
                
                
    // reset the matrix but keep the current location by 
                
    // noting the change in the registration point
                var origReg:Point 
    = transformTool.registration;
                
                
    // global matrix as a default matrix (identity)
                transformTool.globalMatrix 
    = new Matrix();
                
                
    // find change in positioning based on registration
                
    // Note: registration location is based within
                
    // the coordinate space of the tool (not global)
                var regDiff 
    = origReg.subtract(transformTool.registration);
                
                
    // update the tool matrix with the change in position
                
    // offsetting movement from the new matrix to have
                
    // the old and new registration points match
                var toolMatrix:Matrix 
    = transformTool.toolMatrix;
                toolMatrix.tx 
    += regDiff.x;
                toolMatrix.ty 
    += regDiff.y;
                transformTool.toolMatrix 
    = toolMatrix;
                
                
    // apply the new matrix to the target
                transformTool.apply();
            }
        }
    }

    package {
        
        import flash.events.Event;
        import flash.geom.Matrix;
        import flash.geom.Point;
        
        import com.senocular.display.TransformTool;
        import com.senocular.display.TransformToolControl;
        import com.senocular.display.TransformToolCursor;
        
        
    public class CustomRotationControl extends TransformToolControl {
            
            
    private var length:Number = 20;
            
    private var circle:ScaleCircle;
            
            
    public function CustomRotationControl() {
                addEventListener(TransformTool.CONTROL_INIT, init, 
    false0true);
                circle 
    = new ScaleCircle();
                addChild(circle);
            }
            
            
    private function init(event:Event):void {
                
                
    // add event listeners 
                transformTool.addEventListener(TransformTool.NEW_TARGET, update, 
    false0true);
                transformTool.addEventListener(TransformTool.TRANSFORM_TOOL, update, 
    false0true);
                transformTool.addEventListener(TransformTool.CONTROL_TRANSFORM_TOOL, update, 
    false0true);
                transformTool.addEventListener(TransformTool.CONTROL_DOWN, controlMouseDown, 
    false0true);
                transformTool.addEventListener(TransformTool.CONTROL_MOVE, controlMove, 
    false0true);
                
                
    // set this as a reference for the rotation cursor
                var cursor:TransformToolCursor 
    = transformTool.rotationCursor;
                cursor.addReference(this);
                
                
    // initial positioning
                update();
            }
            
            
    private function update(event:Event = null):void {
                
    if (transformTool.target) {
                    
                    
    // move circle to point
                    var top:Point 
    = transformTool.boundsTop;
                    var bottom:Point 
    = transformTool.boundsBottom;
                    var diff 
    = top.subtract(bottom);
                    var angle 
    = Math.atan2(diff.y, diff.x);
                    circle.x 
    = top.x + length * Math.cos(angle);
                    circle.y 
    = top.y + length * Math.sin(angle);
                    
                    
    // draw connecting line
                    graphics.clear();
                    graphics.lineStyle(
    0,0);
                    
    // draw from top of top ScaleCircle
                    var offset:Number 
    = circle.height/2;
                    graphics.moveTo(top.x 
    + offset * Math.cos(angle), top.y + offset * Math.sin(angle));
                    graphics.lineTo(circle.x, circle.y);
                }
            }
            
            
    private function controlMouseDown(event:Event):void {
                
    if (transformTool.currentControl == this) {
                    
    // if this tool is being clicked, set
                    
    // the reference point to be the mouse location
                    _referencePoint 
    = transformTool.mouse;
                }
            }
            
            
    private function controlMove(event:Event):void {
                
    if (transformTool.currentControl == this) {
                    
    // use default tool rotation if this tool is being used
                    transformTool.rotationInteraction();
                }
            }
        }
    }

    效果:

    另外有一个test
    fla如下:

    import com.senocular.display.TransformTool;
    var currTool:TransformTool 
    = new TransformTool();
    addChild(currTool);
    currTool.target 
    = a;
    stage.addEventListener(MouseEvent.MOUSE_DOWN, 
    select);
    function select(event) {
        
    if (event.target is Stage) {
            currTool.target 
    = null;
        } 
    else if (event.target is Sprite) {
            currTool.target 
    = event.target as Sprite;
    //        toolInit();
        }
    }

  • 相关阅读:
    FreeMarker的<#if></#if>标签
    ubuntu的dpkg命令安装和卸载软件
    ubuntu建立软链接注意事项
    halo的工作目录,有一个是在代码里配置的,硬编码了
    Springboot的多环境配置
    idea中的springboot+gradle项目报错springboot configuration annotation processor not found in classpath
    maven中的pom.xml中的scope的作用
    设置idea的快捷键组合 设置为默认
    springboot无法查询到后台的数据
    ssh互信条件下的多机拷贝脚本和执行远程命令
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1579933.html
Copyright © 2020-2023  润新知