绘制宝马的标志

绘制宝马的标志的关键函数:

//drawSector
  public static function  drawSector(graphics:Graphics, x:Number, y:Number, r:Number, R:Number, angle:Number, startA:Number,color:uint=0x000000,alpha:Number=1):void
  {

   graphics.clear();

   graphics.lineStyle(1, color, alpha, true);

   graphics.beginFill(color, alpha);

   if (Math.abs(angle) > 360)

   {

    angle=360;

   }

   var n:Number=Math.ceil(Math.abs(angle) / 45);

   var angleA:Number=angle / n;

   angleA=angleA * Math.PI / 180;

   startA=startA * Math.PI / 180;

   var startB:Number=startA;

   //起始边

   graphics.moveTo(x + r * Math.cos(startA), y + r * Math.sin(startA));

   graphics.lineTo(x + R * Math.cos(startA), y + R * Math.sin(startA));

   //外圆弧
   for (var i:int=1; i <= n; i++)
   {

    startA+=angleA;

    var angleMid1:Number=startA - angleA / 2;

    var bx:Number=x + R / Math.cos(angleA / 2) * Math.cos(angleMid1);

    var by:Number=y + R / Math.cos(angleA / 2) * Math.sin(angleMid1);

    var cx:Number=x + R * Math.cos(startA);

    var cy:Number=y + R * Math.sin(startA);

    graphics.curveTo(bx, by, cx, cy);

   }

   //内圆起点

   graphics.lineTo(x + r * Math.cos(startA), y + r * Math.sin(startA));

   //内圆弧

   for (var j:int=n; j >= 1; j--)

   {

    startA-=angleA;

    var angleMid2:Number=startA + angleA / 2;

    var bx2:Number=x + r / Math.cos(angleA / 2) * Math.cos(angleMid2);

    var by2:Number=y + r / Math.cos(angleA / 2) * Math.sin(angleMid2);

    var cx2:Number=x + r * Math.cos(startA);

    var cy2:Number=y + r * Math.sin(startA);

    graphics.curveTo(bx2, by2, cx2, cy2);

   }

   //内圆终点

   graphics.lineTo(x + r * Math.cos(startB), y + r * Math.sin(startB));

   //完成

   graphics.endFill();


  }

 

package utils
{
 import flash.display.Graphics;
 
 import spark.components.Label;
 import spark.primitives.supportClasses.FilledElement;

 public class Sector extends FilledElement
 {
  private var graphics:Graphics;

  [Bindable]
  private var _r:Number;
  protected var rChanged:Boolean;

  [Bindable]
  private var _R:Number;
  protected var RChanged:Boolean;

  [Bindable]
  private var _angle:Number;
  [Bindable]
  private var _startA:Number;
  [Bindable]
  private var _color:uint;
  [Bindable]
  private var _alpha:Number;

  [Bindable]
  private var _label:String="";
  protected var labelChanged:Boolean;
  
  public function Sector()
  {
   //TODO: implement function
   super();
  }

  public function get label():String
  {
   return _label;
  }

  public function set label(value:String):void
  {
   _label = value;
  }

  public function get color():uint
  {
   return _color;
  }

  public function set color(value:uint):void
  {
   _color=value;
  }

  public function get startA():Number
  {
   return _startA;
  }

  public function set startA(value:Number):void
  {
   _startA=value;
  }

  public function get angle():Number
  {
   return _angle;
  }

  public function set angle(value:Number):void
  {
   _angle=value;
  }

  public function get R():Number
  {
   return _R;
  }

  public function set R(value:Number):void
  {
   if (value == _r)
   {
    return;
   }
   _R=value;
   rChanged=true;
   this.invalidateProperties();
  }

  public function get r():Number
  {
   return _r;
  }

  public function set r(value:Number):void
  {
   if (value == _r)
   {
    return;
   }
   _r=value;
   rChanged=true;
   this.invalidateProperties();
  }

  override protected function draw(g:Graphics):void
  {
   this.graphics=g;
   GraphicsUtil.drawSector(g, drawX + width / 2, drawY + height / 2, r, R, angle, startA, color, alpha);
  }

  override protected function commitProperties():void
  {
   super.commitProperties();

   /*if (rChanged && this.graphics)
   {
    rChanged=false;
    this.draw(this.graphics);
   }*/
   if (RChanged && this.graphics)
   {
    RChanged=false;
    this.draw(this.graphics);
   }
   /*if (labelChanged)
   {
    labelChanged=false;
    var label:Label=new Label();
    label.text=this.label;
   }*/
  }

 }
}

 
主应用程序:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx"
      minWidth="955"
      minHeight="600"
      xmlns:utils="utils.*">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>

 <fx:Script>
  <![CDATA[
   protected function RHSlider_changeHandler(event:Event):void
   {
    sector.R=HSlider1.value;
   }

   protected function HSlider2_changeHandler(event:Event):void
   {
    sector.R=HSlider2.value;
   }
  ]]>
 </fx:Script>

 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>

 <!--<utils:Sector id="sector1"
   horizontalCenter="0"
   verticalCenter="0"
   height="60"
   width="60"
   R="60"
   r="58"
   angle="360"
   startA="0"
   color="0x675f5a"
   alpha="1"/>-->
 <s:HSlider id="HSlider1"
      value="80"
      minimum="50"
      maximum="100"
      change="RHSlider_changeHandler(event)"
      stepSize="1"
      x="284"
      y="25"/>
 <s:HSlider id="HSlider2"
      value="60"
      minimum="40"
      maximum="80"
      stepSize="1"
      x="284"
      y="44"
      change="HSlider2_changeHandler(event)"/>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector"
       height="200"
       width="200"
       R="80"
       r="60"
       angle="360"
       startA="0"
       color="0x464646"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector1"
       height="200"
       width="200"
       R="60"
       r="58"
       angle="360"
       startA="0"
       color="0x616161"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector2"
       height="200"
       width="200"
       R="82"
       r="80"
       angle="360"
       startA="0"
       color="0x616161"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector3"
       height="200"
       width="200"
       R="58"
       r="0"
       angle="90"
       startA="0"
       color="0xffffff"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector4"
       height="200"
       width="200"
       R="58"
       r="0"
       angle="90"
       startA="90"
       color="0x097abb"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector5"
       height="200"
       width="200"
       R="58"
       r="0"
       angle="90"
       startA="180"
       color="0xffffff"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="301"
     y="357"
     width="200"
     height="200">
  <utils:Sector id="sector6"
       height="200"
       width="200"
       R="58"
       r="0"
       angle="90"
       startA="270"
       color="0x097abb"
       alpha="1"/>
 </s:HGroup>
 <s:Label x="351"
    y="397"
    text="B"
    fontSize="24"
    color="0xffffff"
    fontWeight="bold"
    rotation="-40"/>
 <s:Label x="391"
    y="377"
    text="M"
    fontSize="24"
    color="0xffffff"
    fontWeight="bold"/>
 <s:Label x="441"
    y="387"
    text="W"
    fontSize="24"
    color="0xffffff"
    fontWeight="bold"
    rotation="40"/>

<s:HGroup x="466"
     y="66"
     width="150"
     height="150">
  <s:Rect width="100%" height="100%"
    radiusX="8"
    radiusY="8">
   <s:fill>
    <s:SolidColor color="0xf67600"/>
   </s:fill>
  </s:Rect>
 </s:HGroup>
 <s:HGroup x="391"
     y="91"
     width="200"
     height="200">

  <utils:Sector id="sector7"
       height="200"
       width="200"
       R="100"
       r="80"
       angle="90"
       startA="270"
       color="0xffffff"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="391"
     y="91"
     width="200"
     height="100">
  <utils:Sector id="sector8"
       height="200"
       width="200"
       R="60"
       r="40"
       angle="90"
       startA="270"
       color="0xffffff"
       alpha="1"/>
 </s:HGroup>
 <s:HGroup x="401"
     y="81"
     width="200"
     height="100">
  <utils:Sector id="sector9"
       height="200"
       width="200"
       R="10"
       r="0"
       angle="360"
       startA="0"
       color="0xffffff"
       alpha="1"/>
 </s:HGroup>


</s:Application>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值