Drawing complex rectangles in Flex using the GraphicsUtil class

by Peter deHaan on September 16, 2007

in GraphicsUtil

The following example shows how you can draw complex rectangles using the drawRoundRectComplex() method in the mx.utils.GraphicsUtil class.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/09/16/drawing-complex-rectangles-in-flex-using-the-graphicsutil-class/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white"
        creationComplete="init()">

    <mx:Script>
        <![CDATA[
            import mx.styles.StyleManager;
            import mx.utils.GraphicsUtil;

            private var fillColor:uint;

            private function init():void {
                fillColor = StyleManager.getColorName("haloOrange");

                box.graphics.clear();
                box.graphics.beginFill(fillColor);
                GraphicsUtil.drawRoundRectComplex(box.graphics,
                                                    0,
                                                    0,
                                                    box.width,
                                                    box.height,
                                                    topLeft.value,
                                                    topRight.value,
                                                    bottomLeft.value,
                                                    bottomRight.value);
            }
        ]]>
    </mx:Script>

    <mx:ApplicationControlBar dock="true">
        <mx:Form>
            <mx:FormItem label="topLeft:">
                <mx:HSlider id="topLeft"
                        minimum="0"
                        maximum="{box.height / 2}"
                        snapInterval="1"
                        tickInterval="10"
                        liveDragging="true"
                        change="init();" />
            </mx:FormItem>
            <mx:FormItem label="topRight:">
                <mx:HSlider id="topRight"
                        minimum="0"
                        maximum="{box.height / 2}"
                        snapInterval="1"
                        tickInterval="10"
                        liveDragging="true"
                        change="init();" />
            </mx:FormItem>
            <mx:FormItem label="bottomLeft:">
                <mx:HSlider id="bottomLeft"
                        minimum="0"
                        maximum="{box.height / 2}"
                        snapInterval="1"
                        tickInterval="10"
                        liveDragging="true"
                        change="init();" />
            </mx:FormItem>
            <mx:FormItem label="bottomRight:">
                <mx:HSlider id="bottomRight"
                        minimum="0"
                        maximum="{box.height / 2}"
                        snapInterval="1"
                        tickInterval="10"
                        liveDragging="true"
                        change="init();" />
            </mx:FormItem>
        </mx:Form>
    </mx:ApplicationControlBar>

    <mx:Box id="box" width="240" height="160" />

</mx:Application>

View source is enabled in the following example.

{ 6 comments… read them below or add one }

1 rconceiver March 20, 2008 at 5:01 am

hi peter,

I could not find any example of drawing API for creating basic shapes(e.g. Rectangle) with mouse!

Or at least can you suggest any site/blog where I can learn about it or see some example.

Thanks in advance :)

rconceiver

Reply

2 peterd March 20, 2008 at 8:40 am

rconceiver,

It has a few [major] bugs, but this may get you started:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">

    <mx:Script>
        <![CDATA[
            import mx.containers.Canvas;

            private var x1:uint;
            private var y1:uint;
            private var x2:uint;
            private var y2:uint;

            private var isDrawing:Boolean = false;

            private function canvas_mouseDown(evt:MouseEvent):void {
                isDrawing = true;
                x1 = evt.localX;
                y1 = evt.localY;
            }

            private function canvas_mouseUp(evt:MouseEvent):void {
                isDrawing = false;
                x2 = evt.localX;
                y2 = evt.localY;

                var w:uint = x2 - x1;
                var h:uint = y2 - y1;

                var can:Box = evt.currentTarget as Box;
                can.graphics.beginFill(0xFF0000, 0.4);
                can.graphics.drawRect(x1, y1, w, h);
                can.graphics.endFill();

                trace(x1, y1, x2, y2);
            }
        ]]>
    </mx:Script>

    <mx:Canvas id="canvas"
            backgroundColor="white"
            width="100%"
            height="100%">
        <mx:Box id="box"
                width="100%"
                height="100%"
                mouseDown="canvas_mouseDown(event);"
                mouseUp="canvas_mouseUp(event);" />
    </mx:Canvas>

</mx:Application>

Peter

Reply

3 rconceiver March 22, 2008 at 12:53 am

Thanks Peter,

At least it has given me a start…

Thanks once again…:)

Reply

4 Priyanka Rane March 30, 2008 at 11:57 pm

Hey Peter,

Thanks for giving this example of drawing rectangle using mouse….it helped me in learning drawing in my assignment….Thanks once again Peter for your great help….

Reply

5 Reny Mohan November 19, 2009 at 9:53 pm

thanx alot!!!! i implimented this feature in my project..

Reply

6 someone November 23, 2009 at 2:28 pm

if you draw backwards (start right, drag to the left),
it creates something worse ;)

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: