2009-06-08 7 views
0

Ich möchte durch diesen CodeDegrafa Bezierspline binden Daten an Zeichenfolge

<mx:Canvas 
id="graphCanvas" 
width="100%" 
height="100%" 
preinitialize="preInit()" 
/> 
<BezierSpline id="mySpline" graphicsTarget="{[graphCanvas]}" data="points" 

vertical = „0“ horizontal = „0“ >

Punkte ist eine Zeichenfolge, die eine Bezierspline in meine Leinwand einfügen ich initialisieren im PreInit() -Methode

[Bindable]public var points : String; 
private function preInit() : void { 
     points = "200,100 200,300 100,300 300,500 500,300 400,300 400,100"; 
    } 

Aber wenn ich bauen jetzt das Projekt kein Spline auf meiner Leinwand gezogen wird, während die Daten direkt in den mxml Integration wo rks

<BezierSpline id="mySpline" graphicsTarget="{[graphCanvas]}" data="200,100 200,300 100,300 300,500 500,300 400,300 400,100" 

vertical = "0" horizontal = "0" >

Kann mir jemand helfen? Ich muss die Daten des Splines dynamisch ändern. Auch Antworten, die es programmatisch behandeln, sind willkommen, da ich nicht wirklich weiß, wie ich den Spline auf meiner Zeichenfläche durch Code neu zeichnen kann (weiß nicht, wie man die draw() -Methode des Splines verwendet).

Vielen Dank im Voraus

Sebastian

Antwort

1

Dieser Code funktioniert für mich:

[Bindable] 
private var points:String; 
private function preinit():void 
{ 
    points = "200,100 200,300 100,300 300,500 500,300 400,300 400,100"; 
} 

<degrafa:BezierSpline id="mySpline" graphicsTarget="{[graphCanvas]}" data="{points}"> 
    <degrafa:stroke> 
     <degrafa:SolidStroke weight="2" color="#0000FF"/> 
    </degrafa:stroke> 
</degrafa:BezierSpline> 
+0

hmm ok, aber wie ich das ändern tat, immer noch nichts passiert, wenn ich die Punkte Zeichenfolge in meinem Init-Methode festgelegt Auf meiner Leinwand wird kein Spline gezeichnet. Die Punktvariable ist bindbar, und das Festlegen der Punktvariablen im Vorinitialisierungsprozess hat ebenfalls keine Auswirkungen. Weitere Ideen? Kann ich programmgesteuert ein Repaint des Splines hervorrufen? –

+0

Ich habe das ganze Beispiel in meine Antwort aufgenommen. Es funktioniert OK für mich. Eigentlich bin ich sicher, dass degrafa automatisch neu zeichnen sollte. Sie können versuchen, die Methode 'draw (graphics: graphics, rc: Rectangle)' 'zu verwenden, um programmgesteuert neu zu zeichnen. – Hrundik

+0

ah ok du hast Recht, es funktioniert finde, aber jetzt, wenn ich den Wert der Punkte zu "200.200 100,100 300,300" zum Beispiel Fehler 1009 tritt nicht auf eine Eigenschaft oder eine Methode eines Nullobjekts Referenz bei com.degrafa.geometry zugreifen. splines :: BezierSpline/_assignControlPoints() [C: \ Inetpub \ wwwroot \ Degrafa_Google_Dev \ com \ degrafa \ geometry \ splines \ BezierSpline.as: 586] \t bei com.degrafa.geometry.splines :: BezierSpline/preDraw() [ C: \ Inetpub \ wwwroot \ Degrafa_Google_Dev \ com \ degrafa \ Geometrie \ Splines BezierSpline.as \: 401] \t bei com.degrafa.geometry.splines :: BezierSpline/draw() und so weiter, Sie wissen, was zu hier machen? –