Re: Is there any way to draw a line with arrow in wx?
Edward Sitarski <[email protected]> Sat, 11 Sep 2021 09:00:09 -0700 (PDT)
| Newsgroups | gmane.comp.python.wxpython |
|---|---|
| Message-ID | <[email protected]> |
Deepest appologies. The above code has a bug. Please use the following:
from math import atan2, sin, cos, pi
def DrawArrowLine( dc, x0, y0, x1, y1, arrowFrom=True, arrowTo=True,
arrowLength=16, arrowWidth=8 ):
'''
Draws a line with arrows in a regular wxPython DC.
The line is drawn with the dc's wx.Pen. The arrows are filled with
the current Pen's colour.
Edward Sitarski 2021.
'''
dc.DrawLine( x0, y0, x1, y1 )
if x0 == x1 and y0 == y1:
return
# Set up the dc for drawing the arrows.
penSave, brushSave = dc.GetPen(), dc.GetBrush()
dc.SetPen( wx.TRANSPARENT_PEN )
dc.SetBrush( wx.Brush(penSave.GetColour()) )
# Compute the "to" arrow polygon.
angle = atan2( y1 - y0, x1 - x0 )
toCosAngle, toSinAngle = -cos(angle), -sin(angle)
toArrowPoly = [
(int(xp*toCosAngle - yp*toSinAngle), int(yp*toCosAngle +
xp*toSinAngle)) for xp, yp in (
(0,0),
(arrowLength, arrowWidth/2),
(arrowLength, -arrowWidth/2),
)
]
# Draw the arrows.
if arrowTo:
dc.DrawPolygon( toArrowPoly, x1, y1 )
if arrowFrom:
dc.DrawPolygon( [(-x,-y) for x,y in toArrowPoly], x0, y0 )
# Restore the dc.
dc.SetPen( penSave )
dc.SetBrush( brushSave )
On Saturday, September 11, 2021 at 11:55:12 AM UTC-4 Edward Sitarski wrote:
> I realize this question was asked a long time ago.
> Sometimes you simply want to draw an arrow in a dc.
> I recently ran into this problem. See below:
>
> from math import atan2, sin, cos, pi
> def DrawArrowLine( dc, x0, y0, x1, y1, arrowFrom=True, arrowTo=True,
> arrowLength=16, arrowWidth=8 ):
> '''
> Draws a line with arrows in a regular wxPython DC.
> The line is drawn with the dc's wx.Pen. The arrows are filled
> with the current Pen's colour.
> Edward Sitarski 2021.
> '''
> dc.DrawLine( x0, y0, x1, y1 )
> if x0 == x1 and y0 == y1:
> return
>
> # Set up the dc for drawing the arrows.
> penSave, brushSave = dc.GetPen(), dc.GetBrush()
> dc.SetPen( wx.TRANSPARENT_PEN )
> dc.SetBrush( wx.Brush(dc.GetPen().GetColour()) )
>
> # Compute the "to" arrow polygon.
> angle = atan2( y1 - y0, x1 - x0 )
> toCosAngle, toSinAngle = -cos(angle), -sin(angle)
> toArrowPoly = [
> (int(xp*toCosAngle - yp*toSinAngle), int(yp*toCosAngle +
> xp*toSinAngle)) for xp, yp in (
> (0,0),
> (arrowLength, arrowWidth/2),
> (arrowLength, -arrowWidth/2),
> )
> ]
>
> # Draw the arrows.
> if arrowTo:
> dc.DrawPolygon( toArrowPoly, x1, y1 )
> if arrowFrom:
> dc.DrawPolygon( [(-x,-y) for x,y in toArrowPoly], x0, y0 )
>
> # Restore the dc.
> dc.SetPen( penSave )
> dc.SetBrush( brushSave )
> On Friday, February 22, 2013 at 12:06:08 PM UTC-5 [email protected]
> wrote:
>
>> On Thu, Feb 21, 2013 at 1:21 PM, Vlastimil Brom
>> <[email protected]> wrote:
>> > 2013/2/21 Shannon <[email protected]>:
>> >> I was wondering is there any way to draw a line with an arrow, which
>> can
>> >> indicate the from 'point 1' point to 'point 2'.
>>
>> > I haven't used any of these myself, but OGL and FloatCanvas come to
>> > mind in this context; see the wxpython demo:
>> > More windows/controls: FloatCanvas
>>
>> Indeed -- for FloatCanvas, look at the main Demo, look at the "Arrows"
>> demo under the "Tests" Menu - the arrows are not particularly pretty,
>> but you could make your own DrawObject with prettier ones if you want.
>>
>> There are also bunch more little FloatCanvas demos in SVN also:
>>
>> http://svn.wxwidgets.org/svn/wx/wxPython/3rdParty/FloatCanvas/Demos/
>>
>> The VectPlot.py demo uses arrows.
>>
>> -Chris
>>
>>
>> --
>>
>> Christopher Barker, Ph.D.
>> Oceanographer
>>
>> Emergency Response Division
>> NOAA/NOS/OR&R (206) 526-6959 voice
>> 7600 Sand Point Way NE (206) 526-6329 fax
>> Seattle, WA 98115 (206) 526-6317 main reception
>>
>> [email protected]
>>
>
--
You received this message because you are subscribed to the Google Groups "wxPython-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/wxpython-users/1e0b53db-1a56-4838-8570-3f1dfc8f9221n%40googlegroups.com.