3 class insertstyle(graph
.style
.symbol
):
4 """a graph style which calls a translate_pt method of the symbol to insert
5 the result instead of calling the symbol to get a path to be drawn"""
7 def selectstyle(self
, privatedata
, sharedata
, graph
, selectindex
, selecttotal
):
8 privatedata
.symbol
= attr
.selectattr(self
.symbol
, selectindex
, selecttotal
)
9 privatedata
.size_pt
= unit
.topt(attr
.selectattr(self
.size
, selectindex
, selecttotal
))
10 privatedata
.insertcanvas
= canvas
.translateablecanvas()
11 if self
.symbolattrs
is not None:
12 privatedata
.symbolattrs
= attr
.selectattrs(self
.defaultsymbolattrs
+ self
.symbolattrs
, selectindex
, selecttotal
)
14 privatedata
.symbolattrs
= None
15 # stroke symbol on insertcanvas instead of symbolcanvas
16 privatedata
.symbol(privatedata
.insertcanvas
, 0, 0, privatedata
.size_pt
, privatedata
.symbolattrs
)
18 def drawpoint(self
, privatedata
, sharedata
, graph
, point
):
19 if sharedata
.vposvalid
and privatedata
.symbolattrs
is not None:
20 x_pt
, y_pt
= graph
.vpos_pt(*sharedata
.vpos
)
21 # use more efficient version of privatedata.symbolcanvas.insert(privatedata.insertcanvas,[trafo.translate_pt(x_pt, y_pt)])
22 privatedata
.symbolcanvas
.insert(privatedata
.insertcanvas
.translate_pt(x_pt
, y_pt
))
24 # key_pt is inherited from graph.style.symbol because reimplementing would save only one instance
28 g
= graph
.graphxy(width
=8)
29 g
.plot(graph
.data
.function("y(x)=x*x", min=-1, max=1, points
=1000),
30 # [graph.style.symbol(graph.style.symbol.circle, symbolattrs=[deco.filled,color.rgb.blue, deco.stroked.clear])])
31 [insertstyle(graph
.style
.symbol
.circle
, symbolattrs
=[deco
.filled
,color
.rgb
.blue
, deco
.stroked
.clear
])])
32 g
.writeEPSfile("insert")