]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/wxOGL.py
2 from wxPython
.wx
import *
3 from wxPython
.ogl
import *
7 #----------------------------------------------------------------------
8 # This creates some pens and brushes that the OGL library uses.
12 #----------------------------------------------------------------------
14 class DiamondShape(wxPolygonShape
):
15 def __init__(self
, w
=0.0, h
=0.0):
16 wxPolygonShape
.__init
__(self
)
22 ## Either wxRealPoints or 2-tuples of floats works.
24 #points = [ wxRealPoint(0.0, -h/2.0),
25 # wxRealPoint(w/2.0, 0.0),
26 # wxRealPoint(0.0, h/2.0),
27 # wxRealPoint(-w/2.0, 0.0),
29 points
= [ (0.0, -h
/2.0),
38 #----------------------------------------------------------------------
40 class RoundedRectangleShape(wxRectangleShape
):
41 def __init__(self
, w
=0.0, h
=0.0):
42 wxRectangleShape
.__init
__(self
, w
, h
)
43 self
.SetCornerRadius(-0.3)
46 #----------------------------------------------------------------------
48 class MyEvtHandler(wxShapeEvtHandler
):
49 def __init__(self
, log
, frame
):
50 wxShapeEvtHandler
.__init
__(self
)
52 self
.statbarFrame
= frame
54 def UpdateStatusBar(self
, shape
):
55 x
,y
= shape
.GetX(), shape
.GetY()
56 width
, height
= shape
.GetBoundingBoxMax()
57 self
.statbarFrame
.SetStatusText("Pos: (%d,%d) Size: (%d, %d)" %
58 (x
, y
, width
, height
))
61 def OnLeftClick(self
, x
, y
, keys
= 0, attachment
= 0):
62 shape
= self
.GetShape()
64 canvas
= shape
.GetCanvas()
65 dc
= wxClientDC(canvas
)
69 shape
.Select(false
, dc
)
73 shapeList
= canvas
.GetDiagram().GetShapeList()
77 # If we unselect it now then some of the objects in
78 # shapeList will become invalid (the control points are
79 # shapes too!) and bad things will happen...
82 shape
.Select(true
, dc
)
89 self
.UpdateStatusBar(shape
)
92 def OnEndDragLeft(self
, x
, y
, keys
= 0, attachment
= 0):
93 shape
= self
.GetShape()
94 self
.base_OnEndDragLeft(x
, y
, keys
, attachment
)
95 if not shape
.Selected():
96 self
.OnLeftClick(x
, y
, keys
, attachment
)
97 self
.UpdateStatusBar(shape
)
100 def OnSize(self
, x
, y
):
101 self
.base_OnSize(x
, y
)
102 self
.UpdateStatusBar(self
.GetShape())
105 # def OnMovePost(self, dc, x, y, oldX, oldY, display):
106 # self.base_OnMovePost(dc, x, y, oldX, oldY, display)
107 # self.UpdateStatusBar(self.GetShape())
110 def OnRightClick(self
, *dontcare
):
111 self
.log
.WriteText("%s\n" % self
.GetShape())
114 #----------------------------------------------------------------------
116 class TestWindow(wxShapeCanvas
):
117 def __init__(self
, parent
, log
, frame
):
118 wxShapeCanvas
.__init
__(self
, parent
)
122 self
.SetScrollbars(20, 20, maxWidth
/20, maxHeight
/20)
126 self
.SetBackgroundColour("LIGHT BLUE") #wxWHITE)
127 self
.diagram
= wxDiagram()
128 self
.SetDiagram(self
.diagram
)
129 self
.diagram
.SetCanvas(self
)
133 rRectBrush
= wxBrush(wxNamedColour("MEDIUM TURQUOISE"), wxSOLID
)
135 self
.MyAddShape(wxCircleShape(80), 100, 100, wxPen(wxBLUE
, 3), wxGREEN_BRUSH
, "Circle")
136 self
.MyAddShape(wxRectangleShape(85, 50), 305, 60, wxBLACK_PEN
, wxLIGHT_GREY_BRUSH
, "Rectangle")
137 self
.MyAddShape(DiamondShape(90, 90), 345, 235, wxPen(wxBLUE
, 3, wxDOT
), wxRED_BRUSH
, "Polygon")
138 self
.MyAddShape(RoundedRectangleShape(95,70), 140, 255, wxPen(wxRED
, 1), rRectBrush
, "Rounded Rect")
140 bmp
= images
.getTest2Bitmap()
141 mask
= wxMaskColour(bmp
, wxBLUE
)
146 self
.MyAddShape(s
, 225, 150, None, None, "Bitmap")
148 dc
= wxClientDC(self
)
150 for x
in range(len(self
.shapes
)):
151 fromShape
= self
.shapes
[x
]
152 if x
+1 == len(self
.shapes
):
153 toShape
= self
.shapes
[0]
155 toShape
= self
.shapes
[x
+1]
158 line
.SetPen(wxBLACK_PEN
)
159 line
.SetBrush(wxBLACK_BRUSH
)
160 line
.AddArrow(ARROW_ARROW
)
161 line
.MakeLineControlPoints(2)
162 fromShape
.AddLine(line
, toShape
)
163 self
.diagram
.AddShape(line
)
166 # for some reason, the shapes have to be moved for the line to show up...
167 fromShape
.Move(dc
, fromShape
.GetX(), fromShape
.GetY())
169 ## EVT_PAINT(self, self.OnPaint)
171 ## def OnPaint(self, evt):
173 ## print "TheLists:", wxThePenList.GetCount(), wxTheBrushList.GetCount(), wxTheFontList.GetCount()
176 def MyAddShape(self
, shape
, x
, y
, pen
, brush
, text
):
177 shape
.SetDraggable(true
, true
)
178 shape
.SetCanvas(self
)
181 if pen
: shape
.SetPen(pen
)
182 if brush
: shape
.SetBrush(brush
)
183 if text
: shape
.AddText(text
)
184 #shape.SetShadowMode(SHADOW_RIGHT)
185 self
.diagram
.AddShape(shape
)
188 evthandler
= MyEvtHandler(self
.log
, self
.frame
)
189 evthandler
.SetShape(shape
)
190 evthandler
.SetPreviousHandler(shape
.GetEventHandler())
191 shape
.SetEventHandler(evthandler
)
193 self
.shapes
.append(shape
)
198 for shape
in self
.diagram
.GetShapeList():
199 if shape
.GetParent() == None:
200 shape
.SetCanvas(None)
202 self
.diagram
.Destroy()
205 def OnBeginDragLeft(self
, x
, y
, keys
):
206 self
.log
.write("OnBeginDragLeft: %s, %s, %s\n" % (x
, y
, keys
))
208 def OnEndDragLeft(self
, x
, y
, keys
):
209 self
.log
.write("OnEndDragLeft: %s, %s, %s\n" % (x
, y
, keys
))
212 #----------------------------------------------------------------------
214 def runTest(frame
, nb
, log
):
215 win
= TestWindow(nb
, log
, frame
)
218 #----------------------------------------------------------------------
221 cleanup
= wxOGLCleanUp
225 # when this module gets cleaned up then wxOGLCleanUp() will get called
236 The Object Graphics Library is a library supporting the creation and
237 manipulation of simple and complex graphic images on a canvas.