<div dir="ltr"><div dir="ltr"><div>Below is the <font face="monospace">AbstractVectorCanvas</font> method I mentioned in the meetup today for drawing an oval. Here is an example of using it from a <font face="monospace">drawOn:</font> method of a morph. See the TODO comment below related to getting the stroke width. I'm open to suggestions for improving this.</div><div><br></div><div><font face="monospace">aCanvas strokeWidth: 5 color: Color red fillColor: Color yellow do: [<br>Â Â aCanvas drawOval: rect strokeWidth: 5.<br> ].</font><br></div><div><br></div><div>---</div><div><br></div><div><font face="monospace">drawOval: aRect strokeWidth: aStrokeWidth<br>Â Â | diameter halfStrokeWidth height p1 p2 p3 p4<br>Â Â Â radius strokeWidth width x1 x2 y1 y2 |<br> <br>Â Â width := aRect width.<br>Â Â height := aRect height.<br> <br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">"TODO: Why does this give the wrong value?"<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">"strokeWidth := engine strokeWidth."<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">strokeWidth := aStrokeWidth.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">halfStrokeWidth := strokeWidth / 2.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">diameter := (height min: width) - strokeWidth.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">radius := diameter / 2.<br> <br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">height < width<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">ifTrue: [<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><span style="font-family:monospace">x1 := halfStrokeWidth + radius.</span></div><div><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">x2 := width - x1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">y1 := halfStrokeWidth.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">y2 := height - y1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p1 := x1 @ y1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p2 := x2 @ y1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p3 := x2 @ y2.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><span style="font-family:monospace">p4 := x1 @ y2.</span></div><div><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">]<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">ifFalse: [<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">x1 := halfStrokeWidth.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">y1 := halfStrokeWidth + radius.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">x2 := width - x1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">y2 := height - y1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p1 := x1 @ y2.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p2 := x1 @ y1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p3 := x2 @ y1.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">p4 := x2 @ y2.<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">].<br> <br></font><span style="font-family:monospace">Â Â <span>Â </span></span><font face="monospace">self<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">moveTo: p1;<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">lineTo: p2;<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">arcTo: p3 radius: radius angleOfXAxis: 0 largeFlag: false sweepFlag: true;<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">lineTo: p4;<br></font><span style="font-family:monospace">Â Â <span>Â </span></span><span style="font-family:monospace">Â Â </span><span style="font-family:monospace">Â </span><font face="monospace">arcTo: p1 radius: radius angleOfXAxis: 0 largeFlag: false sweepFlag: true.</font><br></div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div><font face="arial, helvetica, sans-serif">R. Mark Volkmann</font></div><div><span style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Object Computing, Inc.</font></span></div></div></div></div></div></div></div></div></div>
</div>