From: Brian G. <bri...@me...> - 2012-12-09 20:22:29
|
There are couple important points raised by TIP 415: * Arc and oval types are not easy to use because they define an object using no points at all that reside within the object itself. * The difference between an oval item specification and an arc item specification are trivial. When defining any other shape, part of the specification is always a point somewhere within the shape. This is key to the easy of use issue. The way an arc or oval item is specified now is like asking the user to, metaphorically, project a light in order for the canvas to generate a shadow that is the shape they want. Mathematically what is done is all very sound, just not terribly intuitive. One of Tcl's strength is that it is easy to use, making it possible to accomplish great things. Tk has this property as well. Instead of the proposed modification to the existing arc type, I was thinking of broader, more flexible approach, possibly applicable to all shapes. When defining an arc there are a number of different properties that can be used to describe it. Any sufficiently complete subset of these can be used to draw the arc. I was thinking of a general create method that took a dictionary of properties that define the shape to be drawn. Here are the properties for an arc: center {x y} foci {x1 y1 x2 y2} radius r start {x y} end {x y} angle deg azimuthstart deg azimuthend deg arcmeasure deg arclength l rect {x1 y1 x2 y2} height h width w Given exactly a sufficient number of these values, an arc can be drawn. $c create shape {10 10} -define { center {10 10} radius 5 arclength 5} -anchor center -style pieslice $c create shape {10 10} -define { rect {10 10 20 36} azimuthstart 25 arcmeasure 5} -anchor nw ;# traditional arc $c create shape {20 10} -define { start {20 10} end {30 10} height 5} -anchor sw ;# Simon's style (a la TIP 415) $c create shape {10 10} -define { rect {10 10 20 36} azimuthstart 0 arcmeasure 360} -anchor nw ;# oval I haven't flushed out all the details, but you get the idea. -Brian |