Return /AP string defining an oval within a 4-polygon provided as points
(p1, p2, p3, p4)
| 25100 | |
| 25101 | @staticmethod |
| 25102 | def _oval_string(p1, p2, p3, p4): |
| 25103 | """Return /AP string defining an oval within a 4-polygon provided as points |
| 25104 | """ |
| 25105 | def bezier(p, q, r): |
| 25106 | return f"{p.x:f} {p.y:f} {q.x:f} {q.y:f} {r.x:f} {r.y:f} c\n" |
| 25107 | |
| 25108 | kappa = 0.55228474983 # magic number |
| 25109 | ml = p1 + (p4 - p1) * 0.5 # middle points ... |
| 25110 | mo = p1 + (p2 - p1) * 0.5 # for each ... |
| 25111 | mr = p2 + (p3 - p2) * 0.5 # polygon ... |
| 25112 | mu = p4 + (p3 - p4) * 0.5 # side |
| 25113 | ol1 = ml + (p1 - ml) * kappa # the 8 bezier |
| 25114 | ol2 = mo + (p1 - mo) * kappa # helper points |
| 25115 | or1 = mo + (p2 - mo) * kappa |
| 25116 | or2 = mr + (p2 - mr) * kappa |
| 25117 | ur1 = mr + (p3 - mr) * kappa |
| 25118 | ur2 = mu + (p3 - mu) * kappa |
| 25119 | ul1 = mu + (p4 - mu) * kappa |
| 25120 | ul2 = ml + (p4 - ml) * kappa |
| 25121 | # now draw, starting from middle point of left side |
| 25122 | ap = f"{ml.x:f} {ml.y:f} m\n" |
| 25123 | ap += bezier(ol1, ol2, mo) |
| 25124 | ap += bezier(or1, or2, mr) |
| 25125 | ap += bezier(ur1, ur2, mu) |
| 25126 | ap += bezier(ul1, ul2, ml) |
| 25127 | return ap |
| 25128 | |
| 25129 | @staticmethod |
| 25130 | def _parse_da(annot): |