]>
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()
63 canvas
= shape
.GetCanvas()
64 dc
= wxClientDC(canvas
)
68 shape
.Select(false
, dc
)
72 shapeList
= canvas
.GetDiagram().GetShapeList()
76 # If we unselect it now then some of the objects in
77 # shapeList will become invalid (the control points are
78 # shapes too!) and bad things will happen...
81 shape
.Select(true
, dc
)
88 self
.UpdateStatusBar(shape
)
91 def OnEndDragLeft(self
, x
, y
, keys
= 0, attachment
= 0):
92 shape
= self
.GetShape()
93 self
.base_OnEndDragLeft(x
, y
, keys
, attachment
)
94 if not shape
.Selected():
95 self
.OnLeftClick(x
, y
, keys
, attachment
)
96 self
.UpdateStatusBar(shape
)
99 def OnSize(self
, x
, y
):
100 self
.base_OnSize(x
, y
)
101 self
.UpdateStatusBar(self
.GetShape())
104 # def OnMovePost(self, dc, x, y, oldX, oldY, display):
105 # self.base_OnMovePost(dc, x, y, oldX, oldY, display)
106 # self.UpdateStatusBar(self.GetShape())
109 def OnRightClick(self
, *dontcare
):
110 self
.log
.WriteText("%s\n" % self
.GetShape())
113 #----------------------------------------------------------------------
115 class TestWindow(wxShapeCanvas
):
116 def __init__(self
, parent
, log
, frame
):
117 wxShapeCanvas
.__init
__(self
, parent
)
121 self
.SetScrollbars(20, 20, maxWidth
/20, maxHeight
/20)
125 self
.SetBackgroundColour(wxWHITE
)
126 self
.diagram
= wxDiagram()
127 self
.SetDiagram(self
.diagram
)
128 self
.diagram
.SetCanvas(self
)
132 rRectBrush
= wxBrush(wxNamedColour("MEDIUM TURQUOISE"), wxSOLID
)
134 self
.MyAddShape(wxCircleShape(80), 100, 100, wxPen(wxBLUE
, 3), wxGREEN_BRUSH
, "Circle")
135 self
.MyAddShape(wxRectangleShape(85, 50), 305, 60, wxBLACK_PEN
, wxLIGHT_GREY_BRUSH
, "Rectangle")
136 self
.MyAddShape(DiamondShape(90, 90), 345, 235, wxPen(wxBLUE
, 3, wxDOT
), wxRED_BRUSH
, "Polygon")
137 self
.MyAddShape(RoundedRectangleShape(95,70), 140, 255, wxPen(wxRED
, 1), rRectBrush
, "Rounded Rect")
139 bmp
= images
.getTest2Bitmap()
140 mask
= wxMaskColour(bmp
, wxBLUE
)
145 self
.MyAddShape(s
, 225, 150, None, None, "Bitmap")
147 dc
= wxClientDC(self
)
149 for x
in range(len(self
.shapes
)):
150 fromShape
= self
.shapes
[x
]
151 if x
+1 == len(self
.shapes
):
152 toShape
= self
.shapes
[0]
154 toShape
= self
.shapes
[x
+1]
157 line
.SetPen(wxBLACK_PEN
)
158 line
.SetBrush(wxBLACK_BRUSH
)
159 line
.AddArrow(ARROW_ARROW
)
160 line
.MakeLineControlPoints(2)
161 fromShape
.AddLine(line
, toShape
)
162 self
.diagram
.AddShape(line
)
165 # for some reason, the shapes have to be moved for the line to show up...
166 fromShape
.Move(dc
, fromShape
.GetX(), fromShape
.GetY())
170 def MyAddShape(self
, shape
, x
, y
, pen
, brush
, text
):
171 shape
.SetDraggable(true
, true
)
172 shape
.SetCanvas(self
)
175 if pen
: shape
.SetPen(pen
)
176 if brush
: shape
.SetBrush(brush
)
177 if text
: shape
.AddText(text
)
178 #shape.SetShadowMode(SHADOW_RIGHT)
179 self
.diagram
.AddShape(shape
)
182 evthandler
= MyEvtHandler(self
.log
, self
.frame
)
183 evthandler
.SetShape(shape
)
184 evthandler
.SetPreviousHandler(shape
.GetEventHandler())
185 shape
.SetEventHandler(evthandler
)
187 self
.shapes
.append(shape
)
192 for shape
in self
.diagram
.GetShapeList():
193 if shape
.GetParent() == None:
194 shape
.SetCanvas(None)
196 self
.diagram
.Destroy()
199 def OnBeginDragLeft(self
, x
, y
, keys
):
200 self
.log
.write("OnBeginDragLeft: %s, %s, %s\n" % (x
, y
, keys
))
202 def OnEndDragLeft(self
, x
, y
, keys
):
203 self
.log
.write("OnEndDragLeft: %s, %s, %s\n" % (x
, y
, keys
))
206 #----------------------------------------------------------------------
208 def runTest(frame
, nb
, log
):
209 win
= TestWindow(nb
, log
, frame
)
212 #----------------------------------------------------------------------
215 cleanup
= wxOGLCleanUp
219 # when this module gets cleaned up then wxOGLCleanUp() will get called
230 The Object Graphics Library is a library supporting the creation and
231 manipulation of simple and complex graphic images on a canvas.