fonttools 4.60.2__cp311-cp311-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. fontTools/__init__.py +8 -0
  2. fontTools/__main__.py +35 -0
  3. fontTools/afmLib.py +439 -0
  4. fontTools/agl.py +5233 -0
  5. fontTools/annotations.py +30 -0
  6. fontTools/cffLib/CFF2ToCFF.py +258 -0
  7. fontTools/cffLib/CFFToCFF2.py +305 -0
  8. fontTools/cffLib/__init__.py +3694 -0
  9. fontTools/cffLib/specializer.py +927 -0
  10. fontTools/cffLib/transforms.py +495 -0
  11. fontTools/cffLib/width.py +210 -0
  12. fontTools/colorLib/__init__.py +0 -0
  13. fontTools/colorLib/builder.py +664 -0
  14. fontTools/colorLib/errors.py +2 -0
  15. fontTools/colorLib/geometry.py +143 -0
  16. fontTools/colorLib/table_builder.py +223 -0
  17. fontTools/colorLib/unbuilder.py +81 -0
  18. fontTools/config/__init__.py +90 -0
  19. fontTools/cu2qu/__init__.py +15 -0
  20. fontTools/cu2qu/__main__.py +6 -0
  21. fontTools/cu2qu/benchmark.py +54 -0
  22. fontTools/cu2qu/cli.py +198 -0
  23. fontTools/cu2qu/cu2qu.c +15817 -0
  24. fontTools/cu2qu/cu2qu.cp311-win32.pyd +0 -0
  25. fontTools/cu2qu/cu2qu.py +563 -0
  26. fontTools/cu2qu/errors.py +77 -0
  27. fontTools/cu2qu/ufo.py +363 -0
  28. fontTools/designspaceLib/__init__.py +3343 -0
  29. fontTools/designspaceLib/__main__.py +6 -0
  30. fontTools/designspaceLib/split.py +475 -0
  31. fontTools/designspaceLib/statNames.py +260 -0
  32. fontTools/designspaceLib/types.py +147 -0
  33. fontTools/encodings/MacRoman.py +258 -0
  34. fontTools/encodings/StandardEncoding.py +258 -0
  35. fontTools/encodings/__init__.py +1 -0
  36. fontTools/encodings/codecs.py +135 -0
  37. fontTools/feaLib/__init__.py +4 -0
  38. fontTools/feaLib/__main__.py +78 -0
  39. fontTools/feaLib/ast.py +2143 -0
  40. fontTools/feaLib/builder.py +1814 -0
  41. fontTools/feaLib/error.py +22 -0
  42. fontTools/feaLib/lexer.c +17029 -0
  43. fontTools/feaLib/lexer.cp311-win32.pyd +0 -0
  44. fontTools/feaLib/lexer.py +287 -0
  45. fontTools/feaLib/location.py +12 -0
  46. fontTools/feaLib/lookupDebugInfo.py +12 -0
  47. fontTools/feaLib/parser.py +2394 -0
  48. fontTools/feaLib/variableScalar.py +118 -0
  49. fontTools/fontBuilder.py +1014 -0
  50. fontTools/help.py +36 -0
  51. fontTools/merge/__init__.py +248 -0
  52. fontTools/merge/__main__.py +6 -0
  53. fontTools/merge/base.py +81 -0
  54. fontTools/merge/cmap.py +173 -0
  55. fontTools/merge/layout.py +526 -0
  56. fontTools/merge/options.py +85 -0
  57. fontTools/merge/tables.py +352 -0
  58. fontTools/merge/unicode.py +78 -0
  59. fontTools/merge/util.py +143 -0
  60. fontTools/misc/__init__.py +1 -0
  61. fontTools/misc/arrayTools.py +424 -0
  62. fontTools/misc/bezierTools.c +39731 -0
  63. fontTools/misc/bezierTools.cp311-win32.pyd +0 -0
  64. fontTools/misc/bezierTools.py +1500 -0
  65. fontTools/misc/classifyTools.py +170 -0
  66. fontTools/misc/cliTools.py +53 -0
  67. fontTools/misc/configTools.py +349 -0
  68. fontTools/misc/cython.py +27 -0
  69. fontTools/misc/dictTools.py +83 -0
  70. fontTools/misc/eexec.py +119 -0
  71. fontTools/misc/encodingTools.py +72 -0
  72. fontTools/misc/enumTools.py +23 -0
  73. fontTools/misc/etree.py +456 -0
  74. fontTools/misc/filenames.py +245 -0
  75. fontTools/misc/filesystem/__init__.py +68 -0
  76. fontTools/misc/filesystem/_base.py +134 -0
  77. fontTools/misc/filesystem/_copy.py +45 -0
  78. fontTools/misc/filesystem/_errors.py +54 -0
  79. fontTools/misc/filesystem/_info.py +75 -0
  80. fontTools/misc/filesystem/_osfs.py +164 -0
  81. fontTools/misc/filesystem/_path.py +67 -0
  82. fontTools/misc/filesystem/_subfs.py +92 -0
  83. fontTools/misc/filesystem/_tempfs.py +34 -0
  84. fontTools/misc/filesystem/_tools.py +34 -0
  85. fontTools/misc/filesystem/_walk.py +55 -0
  86. fontTools/misc/filesystem/_zipfs.py +204 -0
  87. fontTools/misc/fixedTools.py +253 -0
  88. fontTools/misc/intTools.py +25 -0
  89. fontTools/misc/iterTools.py +12 -0
  90. fontTools/misc/lazyTools.py +42 -0
  91. fontTools/misc/loggingTools.py +543 -0
  92. fontTools/misc/macCreatorType.py +56 -0
  93. fontTools/misc/macRes.py +261 -0
  94. fontTools/misc/plistlib/__init__.py +681 -0
  95. fontTools/misc/plistlib/py.typed +0 -0
  96. fontTools/misc/psCharStrings.py +1511 -0
  97. fontTools/misc/psLib.py +398 -0
  98. fontTools/misc/psOperators.py +572 -0
  99. fontTools/misc/py23.py +96 -0
  100. fontTools/misc/roundTools.py +110 -0
  101. fontTools/misc/sstruct.py +227 -0
  102. fontTools/misc/symfont.py +242 -0
  103. fontTools/misc/testTools.py +233 -0
  104. fontTools/misc/textTools.py +156 -0
  105. fontTools/misc/timeTools.py +88 -0
  106. fontTools/misc/transform.py +516 -0
  107. fontTools/misc/treeTools.py +45 -0
  108. fontTools/misc/vector.py +147 -0
  109. fontTools/misc/visitor.py +158 -0
  110. fontTools/misc/xmlReader.py +188 -0
  111. fontTools/misc/xmlWriter.py +231 -0
  112. fontTools/mtiLib/__init__.py +1400 -0
  113. fontTools/mtiLib/__main__.py +5 -0
  114. fontTools/otlLib/__init__.py +1 -0
  115. fontTools/otlLib/builder.py +3465 -0
  116. fontTools/otlLib/error.py +11 -0
  117. fontTools/otlLib/maxContextCalc.py +96 -0
  118. fontTools/otlLib/optimize/__init__.py +53 -0
  119. fontTools/otlLib/optimize/__main__.py +6 -0
  120. fontTools/otlLib/optimize/gpos.py +439 -0
  121. fontTools/pens/__init__.py +1 -0
  122. fontTools/pens/areaPen.py +52 -0
  123. fontTools/pens/basePen.py +475 -0
  124. fontTools/pens/boundsPen.py +98 -0
  125. fontTools/pens/cairoPen.py +26 -0
  126. fontTools/pens/cocoaPen.py +26 -0
  127. fontTools/pens/cu2quPen.py +325 -0
  128. fontTools/pens/explicitClosingLinePen.py +101 -0
  129. fontTools/pens/filterPen.py +433 -0
  130. fontTools/pens/freetypePen.py +462 -0
  131. fontTools/pens/hashPointPen.py +89 -0
  132. fontTools/pens/momentsPen.c +13378 -0
  133. fontTools/pens/momentsPen.cp311-win32.pyd +0 -0
  134. fontTools/pens/momentsPen.py +879 -0
  135. fontTools/pens/perimeterPen.py +69 -0
  136. fontTools/pens/pointInsidePen.py +192 -0
  137. fontTools/pens/pointPen.py +643 -0
  138. fontTools/pens/qtPen.py +29 -0
  139. fontTools/pens/qu2cuPen.py +105 -0
  140. fontTools/pens/quartzPen.py +43 -0
  141. fontTools/pens/recordingPen.py +335 -0
  142. fontTools/pens/reportLabPen.py +79 -0
  143. fontTools/pens/reverseContourPen.py +96 -0
  144. fontTools/pens/roundingPen.py +130 -0
  145. fontTools/pens/statisticsPen.py +312 -0
  146. fontTools/pens/svgPathPen.py +310 -0
  147. fontTools/pens/t2CharStringPen.py +88 -0
  148. fontTools/pens/teePen.py +55 -0
  149. fontTools/pens/transformPen.py +115 -0
  150. fontTools/pens/ttGlyphPen.py +335 -0
  151. fontTools/pens/wxPen.py +29 -0
  152. fontTools/qu2cu/__init__.py +15 -0
  153. fontTools/qu2cu/__main__.py +7 -0
  154. fontTools/qu2cu/benchmark.py +56 -0
  155. fontTools/qu2cu/cli.py +125 -0
  156. fontTools/qu2cu/qu2cu.c +16682 -0
  157. fontTools/qu2cu/qu2cu.cp311-win32.pyd +0 -0
  158. fontTools/qu2cu/qu2cu.py +405 -0
  159. fontTools/subset/__init__.py +4096 -0
  160. fontTools/subset/__main__.py +6 -0
  161. fontTools/subset/cff.py +184 -0
  162. fontTools/subset/svg.py +253 -0
  163. fontTools/subset/util.py +25 -0
  164. fontTools/svgLib/__init__.py +3 -0
  165. fontTools/svgLib/path/__init__.py +65 -0
  166. fontTools/svgLib/path/arc.py +154 -0
  167. fontTools/svgLib/path/parser.py +322 -0
  168. fontTools/svgLib/path/shapes.py +183 -0
  169. fontTools/t1Lib/__init__.py +648 -0
  170. fontTools/tfmLib.py +460 -0
  171. fontTools/ttLib/__init__.py +30 -0
  172. fontTools/ttLib/__main__.py +148 -0
  173. fontTools/ttLib/macUtils.py +54 -0
  174. fontTools/ttLib/removeOverlaps.py +395 -0
  175. fontTools/ttLib/reorderGlyphs.py +285 -0
  176. fontTools/ttLib/scaleUpem.py +436 -0
  177. fontTools/ttLib/sfnt.py +661 -0
  178. fontTools/ttLib/standardGlyphOrder.py +271 -0
  179. fontTools/ttLib/tables/B_A_S_E_.py +14 -0
  180. fontTools/ttLib/tables/BitmapGlyphMetrics.py +64 -0
  181. fontTools/ttLib/tables/C_B_D_T_.py +113 -0
  182. fontTools/ttLib/tables/C_B_L_C_.py +19 -0
  183. fontTools/ttLib/tables/C_F_F_.py +61 -0
  184. fontTools/ttLib/tables/C_F_F__2.py +26 -0
  185. fontTools/ttLib/tables/C_O_L_R_.py +165 -0
  186. fontTools/ttLib/tables/C_P_A_L_.py +305 -0
  187. fontTools/ttLib/tables/D_S_I_G_.py +158 -0
  188. fontTools/ttLib/tables/D__e_b_g.py +35 -0
  189. fontTools/ttLib/tables/DefaultTable.py +49 -0
  190. fontTools/ttLib/tables/E_B_D_T_.py +835 -0
  191. fontTools/ttLib/tables/E_B_L_C_.py +718 -0
  192. fontTools/ttLib/tables/F_F_T_M_.py +52 -0
  193. fontTools/ttLib/tables/F__e_a_t.py +149 -0
  194. fontTools/ttLib/tables/G_D_E_F_.py +13 -0
  195. fontTools/ttLib/tables/G_M_A_P_.py +148 -0
  196. fontTools/ttLib/tables/G_P_K_G_.py +133 -0
  197. fontTools/ttLib/tables/G_P_O_S_.py +14 -0
  198. fontTools/ttLib/tables/G_S_U_B_.py +13 -0
  199. fontTools/ttLib/tables/G_V_A_R_.py +5 -0
  200. fontTools/ttLib/tables/G__l_a_t.py +235 -0
  201. fontTools/ttLib/tables/G__l_o_c.py +85 -0
  202. fontTools/ttLib/tables/H_V_A_R_.py +13 -0
  203. fontTools/ttLib/tables/J_S_T_F_.py +13 -0
  204. fontTools/ttLib/tables/L_T_S_H_.py +58 -0
  205. fontTools/ttLib/tables/M_A_T_H_.py +13 -0
  206. fontTools/ttLib/tables/M_E_T_A_.py +352 -0
  207. fontTools/ttLib/tables/M_V_A_R_.py +13 -0
  208. fontTools/ttLib/tables/O_S_2f_2.py +752 -0
  209. fontTools/ttLib/tables/S_I_N_G_.py +99 -0
  210. fontTools/ttLib/tables/S_T_A_T_.py +15 -0
  211. fontTools/ttLib/tables/S_V_G_.py +223 -0
  212. fontTools/ttLib/tables/S__i_l_f.py +1040 -0
  213. fontTools/ttLib/tables/S__i_l_l.py +92 -0
  214. fontTools/ttLib/tables/T_S_I_B_.py +13 -0
  215. fontTools/ttLib/tables/T_S_I_C_.py +14 -0
  216. fontTools/ttLib/tables/T_S_I_D_.py +13 -0
  217. fontTools/ttLib/tables/T_S_I_J_.py +13 -0
  218. fontTools/ttLib/tables/T_S_I_P_.py +13 -0
  219. fontTools/ttLib/tables/T_S_I_S_.py +13 -0
  220. fontTools/ttLib/tables/T_S_I_V_.py +26 -0
  221. fontTools/ttLib/tables/T_S_I__0.py +70 -0
  222. fontTools/ttLib/tables/T_S_I__1.py +163 -0
  223. fontTools/ttLib/tables/T_S_I__2.py +17 -0
  224. fontTools/ttLib/tables/T_S_I__3.py +22 -0
  225. fontTools/ttLib/tables/T_S_I__5.py +60 -0
  226. fontTools/ttLib/tables/T_T_F_A_.py +14 -0
  227. fontTools/ttLib/tables/TupleVariation.py +884 -0
  228. fontTools/ttLib/tables/V_A_R_C_.py +12 -0
  229. fontTools/ttLib/tables/V_D_M_X_.py +249 -0
  230. fontTools/ttLib/tables/V_O_R_G_.py +165 -0
  231. fontTools/ttLib/tables/V_V_A_R_.py +13 -0
  232. fontTools/ttLib/tables/__init__.py +98 -0
  233. fontTools/ttLib/tables/_a_n_k_r.py +15 -0
  234. fontTools/ttLib/tables/_a_v_a_r.py +193 -0
  235. fontTools/ttLib/tables/_b_s_l_n.py +15 -0
  236. fontTools/ttLib/tables/_c_i_d_g.py +24 -0
  237. fontTools/ttLib/tables/_c_m_a_p.py +1591 -0
  238. fontTools/ttLib/tables/_c_v_a_r.py +94 -0
  239. fontTools/ttLib/tables/_c_v_t.py +56 -0
  240. fontTools/ttLib/tables/_f_e_a_t.py +15 -0
  241. fontTools/ttLib/tables/_f_p_g_m.py +62 -0
  242. fontTools/ttLib/tables/_f_v_a_r.py +261 -0
  243. fontTools/ttLib/tables/_g_a_s_p.py +63 -0
  244. fontTools/ttLib/tables/_g_c_i_d.py +13 -0
  245. fontTools/ttLib/tables/_g_l_y_f.py +2311 -0
  246. fontTools/ttLib/tables/_g_v_a_r.py +340 -0
  247. fontTools/ttLib/tables/_h_d_m_x.py +127 -0
  248. fontTools/ttLib/tables/_h_e_a_d.py +130 -0
  249. fontTools/ttLib/tables/_h_h_e_a.py +147 -0
  250. fontTools/ttLib/tables/_h_m_t_x.py +164 -0
  251. fontTools/ttLib/tables/_k_e_r_n.py +289 -0
  252. fontTools/ttLib/tables/_l_c_a_r.py +13 -0
  253. fontTools/ttLib/tables/_l_o_c_a.py +70 -0
  254. fontTools/ttLib/tables/_l_t_a_g.py +72 -0
  255. fontTools/ttLib/tables/_m_a_x_p.py +147 -0
  256. fontTools/ttLib/tables/_m_e_t_a.py +112 -0
  257. fontTools/ttLib/tables/_m_o_r_t.py +14 -0
  258. fontTools/ttLib/tables/_m_o_r_x.py +15 -0
  259. fontTools/ttLib/tables/_n_a_m_e.py +1242 -0
  260. fontTools/ttLib/tables/_o_p_b_d.py +14 -0
  261. fontTools/ttLib/tables/_p_o_s_t.py +319 -0
  262. fontTools/ttLib/tables/_p_r_e_p.py +16 -0
  263. fontTools/ttLib/tables/_p_r_o_p.py +12 -0
  264. fontTools/ttLib/tables/_s_b_i_x.py +129 -0
  265. fontTools/ttLib/tables/_t_r_a_k.py +332 -0
  266. fontTools/ttLib/tables/_v_h_e_a.py +139 -0
  267. fontTools/ttLib/tables/_v_m_t_x.py +19 -0
  268. fontTools/ttLib/tables/asciiTable.py +20 -0
  269. fontTools/ttLib/tables/grUtils.py +92 -0
  270. fontTools/ttLib/tables/otBase.py +1458 -0
  271. fontTools/ttLib/tables/otConverters.py +2068 -0
  272. fontTools/ttLib/tables/otData.py +6400 -0
  273. fontTools/ttLib/tables/otTables.py +2703 -0
  274. fontTools/ttLib/tables/otTraverse.py +163 -0
  275. fontTools/ttLib/tables/sbixGlyph.py +149 -0
  276. fontTools/ttLib/tables/sbixStrike.py +177 -0
  277. fontTools/ttLib/tables/table_API_readme.txt +91 -0
  278. fontTools/ttLib/tables/ttProgram.py +594 -0
  279. fontTools/ttLib/ttCollection.py +125 -0
  280. fontTools/ttLib/ttFont.py +1148 -0
  281. fontTools/ttLib/ttGlyphSet.py +490 -0
  282. fontTools/ttLib/ttVisitor.py +32 -0
  283. fontTools/ttLib/woff2.py +1680 -0
  284. fontTools/ttx.py +479 -0
  285. fontTools/ufoLib/__init__.py +2575 -0
  286. fontTools/ufoLib/converters.py +407 -0
  287. fontTools/ufoLib/errors.py +30 -0
  288. fontTools/ufoLib/etree.py +6 -0
  289. fontTools/ufoLib/filenames.py +356 -0
  290. fontTools/ufoLib/glifLib.py +2120 -0
  291. fontTools/ufoLib/kerning.py +141 -0
  292. fontTools/ufoLib/plistlib.py +47 -0
  293. fontTools/ufoLib/pointPen.py +6 -0
  294. fontTools/ufoLib/utils.py +107 -0
  295. fontTools/ufoLib/validators.py +1208 -0
  296. fontTools/unicode.py +50 -0
  297. fontTools/unicodedata/Blocks.py +817 -0
  298. fontTools/unicodedata/Mirrored.py +446 -0
  299. fontTools/unicodedata/OTTags.py +50 -0
  300. fontTools/unicodedata/ScriptExtensions.py +832 -0
  301. fontTools/unicodedata/Scripts.py +3639 -0
  302. fontTools/unicodedata/__init__.py +306 -0
  303. fontTools/varLib/__init__.py +1600 -0
  304. fontTools/varLib/__main__.py +6 -0
  305. fontTools/varLib/avar/__init__.py +0 -0
  306. fontTools/varLib/avar/__main__.py +72 -0
  307. fontTools/varLib/avar/build.py +79 -0
  308. fontTools/varLib/avar/map.py +108 -0
  309. fontTools/varLib/avar/plan.py +1004 -0
  310. fontTools/varLib/avar/unbuild.py +271 -0
  311. fontTools/varLib/avarPlanner.py +8 -0
  312. fontTools/varLib/builder.py +215 -0
  313. fontTools/varLib/cff.py +631 -0
  314. fontTools/varLib/errors.py +219 -0
  315. fontTools/varLib/featureVars.py +703 -0
  316. fontTools/varLib/hvar.py +113 -0
  317. fontTools/varLib/instancer/__init__.py +2052 -0
  318. fontTools/varLib/instancer/__main__.py +5 -0
  319. fontTools/varLib/instancer/featureVars.py +190 -0
  320. fontTools/varLib/instancer/names.py +388 -0
  321. fontTools/varLib/instancer/solver.py +309 -0
  322. fontTools/varLib/interpolatable.py +1209 -0
  323. fontTools/varLib/interpolatableHelpers.py +399 -0
  324. fontTools/varLib/interpolatablePlot.py +1269 -0
  325. fontTools/varLib/interpolatableTestContourOrder.py +82 -0
  326. fontTools/varLib/interpolatableTestStartingPoint.py +107 -0
  327. fontTools/varLib/interpolate_layout.py +124 -0
  328. fontTools/varLib/iup.c +19815 -0
  329. fontTools/varLib/iup.cp311-win32.pyd +0 -0
  330. fontTools/varLib/iup.py +490 -0
  331. fontTools/varLib/merger.py +1717 -0
  332. fontTools/varLib/models.py +642 -0
  333. fontTools/varLib/multiVarStore.py +253 -0
  334. fontTools/varLib/mutator.py +529 -0
  335. fontTools/varLib/mvar.py +40 -0
  336. fontTools/varLib/plot.py +238 -0
  337. fontTools/varLib/stat.py +149 -0
  338. fontTools/varLib/varStore.py +739 -0
  339. fontTools/voltLib/__init__.py +5 -0
  340. fontTools/voltLib/__main__.py +206 -0
  341. fontTools/voltLib/ast.py +452 -0
  342. fontTools/voltLib/error.py +12 -0
  343. fontTools/voltLib/lexer.py +99 -0
  344. fontTools/voltLib/parser.py +664 -0
  345. fontTools/voltLib/voltToFea.py +911 -0
  346. fonttools-4.60.2.data/data/share/man/man1/ttx.1 +225 -0
  347. fonttools-4.60.2.dist-info/METADATA +2250 -0
  348. fonttools-4.60.2.dist-info/RECORD +353 -0
  349. fonttools-4.60.2.dist-info/WHEEL +5 -0
  350. fonttools-4.60.2.dist-info/entry_points.txt +5 -0
  351. fonttools-4.60.2.dist-info/licenses/LICENSE +21 -0
  352. fonttools-4.60.2.dist-info/licenses/LICENSE.external +388 -0
  353. fonttools-4.60.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,879 @@
1
+ from fontTools.pens.basePen import BasePen, OpenContourError
2
+
3
+ try:
4
+ import cython
5
+ except (AttributeError, ImportError):
6
+ # if cython not installed, use mock module with no-op decorators and types
7
+ from fontTools.misc import cython
8
+ COMPILED = cython.compiled
9
+
10
+
11
+ __all__ = ["MomentsPen"]
12
+
13
+
14
+ class MomentsPen(BasePen):
15
+
16
+ def __init__(self, glyphset=None):
17
+ BasePen.__init__(self, glyphset)
18
+
19
+ self.area = 0
20
+ self.momentX = 0
21
+ self.momentY = 0
22
+ self.momentXX = 0
23
+ self.momentXY = 0
24
+ self.momentYY = 0
25
+
26
+ def _moveTo(self, p0):
27
+ self._startPoint = p0
28
+
29
+ def _closePath(self):
30
+ p0 = self._getCurrentPoint()
31
+ if p0 != self._startPoint:
32
+ self._lineTo(self._startPoint)
33
+
34
+ def _endPath(self):
35
+ p0 = self._getCurrentPoint()
36
+ if p0 != self._startPoint:
37
+ raise OpenContourError("Glyph statistics is not defined on open contours.")
38
+
39
+ @cython.locals(r0=cython.double)
40
+ @cython.locals(r1=cython.double)
41
+ @cython.locals(r2=cython.double)
42
+ @cython.locals(r3=cython.double)
43
+ @cython.locals(r4=cython.double)
44
+ @cython.locals(r5=cython.double)
45
+ @cython.locals(r6=cython.double)
46
+ @cython.locals(r7=cython.double)
47
+ @cython.locals(r8=cython.double)
48
+ @cython.locals(r9=cython.double)
49
+ @cython.locals(r10=cython.double)
50
+ @cython.locals(r11=cython.double)
51
+ @cython.locals(r12=cython.double)
52
+ @cython.locals(x0=cython.double, y0=cython.double)
53
+ @cython.locals(x1=cython.double, y1=cython.double)
54
+ def _lineTo(self, p1):
55
+ x0, y0 = self._getCurrentPoint()
56
+ x1, y1 = p1
57
+
58
+ r0 = x1 * y0
59
+ r1 = x1 * y1
60
+ r2 = x1**2
61
+ r3 = r2 * y1
62
+ r4 = y0 - y1
63
+ r5 = r4 * x0
64
+ r6 = x0**2
65
+ r7 = 2 * y0
66
+ r8 = y0**2
67
+ r9 = y1**2
68
+ r10 = x1**3
69
+ r11 = y0**3
70
+ r12 = y1**3
71
+
72
+ self.area += -r0 / 2 - r1 / 2 + x0 * (y0 + y1) / 2
73
+ self.momentX += -r2 * y0 / 6 - r3 / 3 - r5 * x1 / 6 + r6 * (r7 + y1) / 6
74
+ self.momentY += (
75
+ -r0 * y1 / 6 - r8 * x1 / 6 - r9 * x1 / 6 + x0 * (r8 + r9 + y0 * y1) / 6
76
+ )
77
+ self.momentXX += (
78
+ -r10 * y0 / 12
79
+ - r10 * y1 / 4
80
+ - r2 * r5 / 12
81
+ - r4 * r6 * x1 / 12
82
+ + x0**3 * (3 * y0 + y1) / 12
83
+ )
84
+ self.momentXY += (
85
+ -r2 * r8 / 24
86
+ - r2 * r9 / 8
87
+ - r3 * r7 / 24
88
+ + r6 * (r7 * y1 + 3 * r8 + r9) / 24
89
+ - x0 * x1 * (r8 - r9) / 12
90
+ )
91
+ self.momentYY += (
92
+ -r0 * r9 / 12
93
+ - r1 * r8 / 12
94
+ - r11 * x1 / 12
95
+ - r12 * x1 / 12
96
+ + x0 * (r11 + r12 + r8 * y1 + r9 * y0) / 12
97
+ )
98
+
99
+ @cython.locals(r0=cython.double)
100
+ @cython.locals(r1=cython.double)
101
+ @cython.locals(r2=cython.double)
102
+ @cython.locals(r3=cython.double)
103
+ @cython.locals(r4=cython.double)
104
+ @cython.locals(r5=cython.double)
105
+ @cython.locals(r6=cython.double)
106
+ @cython.locals(r7=cython.double)
107
+ @cython.locals(r8=cython.double)
108
+ @cython.locals(r9=cython.double)
109
+ @cython.locals(r10=cython.double)
110
+ @cython.locals(r11=cython.double)
111
+ @cython.locals(r12=cython.double)
112
+ @cython.locals(r13=cython.double)
113
+ @cython.locals(r14=cython.double)
114
+ @cython.locals(r15=cython.double)
115
+ @cython.locals(r16=cython.double)
116
+ @cython.locals(r17=cython.double)
117
+ @cython.locals(r18=cython.double)
118
+ @cython.locals(r19=cython.double)
119
+ @cython.locals(r20=cython.double)
120
+ @cython.locals(r21=cython.double)
121
+ @cython.locals(r22=cython.double)
122
+ @cython.locals(r23=cython.double)
123
+ @cython.locals(r24=cython.double)
124
+ @cython.locals(r25=cython.double)
125
+ @cython.locals(r26=cython.double)
126
+ @cython.locals(r27=cython.double)
127
+ @cython.locals(r28=cython.double)
128
+ @cython.locals(r29=cython.double)
129
+ @cython.locals(r30=cython.double)
130
+ @cython.locals(r31=cython.double)
131
+ @cython.locals(r32=cython.double)
132
+ @cython.locals(r33=cython.double)
133
+ @cython.locals(r34=cython.double)
134
+ @cython.locals(r35=cython.double)
135
+ @cython.locals(r36=cython.double)
136
+ @cython.locals(r37=cython.double)
137
+ @cython.locals(r38=cython.double)
138
+ @cython.locals(r39=cython.double)
139
+ @cython.locals(r40=cython.double)
140
+ @cython.locals(r41=cython.double)
141
+ @cython.locals(r42=cython.double)
142
+ @cython.locals(r43=cython.double)
143
+ @cython.locals(r44=cython.double)
144
+ @cython.locals(r45=cython.double)
145
+ @cython.locals(r46=cython.double)
146
+ @cython.locals(r47=cython.double)
147
+ @cython.locals(r48=cython.double)
148
+ @cython.locals(r49=cython.double)
149
+ @cython.locals(r50=cython.double)
150
+ @cython.locals(r51=cython.double)
151
+ @cython.locals(r52=cython.double)
152
+ @cython.locals(r53=cython.double)
153
+ @cython.locals(x0=cython.double, y0=cython.double)
154
+ @cython.locals(x1=cython.double, y1=cython.double)
155
+ @cython.locals(x2=cython.double, y2=cython.double)
156
+ def _qCurveToOne(self, p1, p2):
157
+ x0, y0 = self._getCurrentPoint()
158
+ x1, y1 = p1
159
+ x2, y2 = p2
160
+
161
+ r0 = 2 * y1
162
+ r1 = r0 * x2
163
+ r2 = x2 * y2
164
+ r3 = 3 * r2
165
+ r4 = 2 * x1
166
+ r5 = 3 * y0
167
+ r6 = x1**2
168
+ r7 = x2**2
169
+ r8 = 4 * y1
170
+ r9 = 10 * y2
171
+ r10 = 2 * y2
172
+ r11 = r4 * x2
173
+ r12 = x0**2
174
+ r13 = 10 * y0
175
+ r14 = r4 * y2
176
+ r15 = x2 * y0
177
+ r16 = 4 * x1
178
+ r17 = r0 * x1 + r2
179
+ r18 = r2 * r8
180
+ r19 = y1**2
181
+ r20 = 2 * r19
182
+ r21 = y2**2
183
+ r22 = r21 * x2
184
+ r23 = 5 * r22
185
+ r24 = y0**2
186
+ r25 = y0 * y2
187
+ r26 = 5 * r24
188
+ r27 = x1**3
189
+ r28 = x2**3
190
+ r29 = 30 * y1
191
+ r30 = 6 * y1
192
+ r31 = 10 * r7 * x1
193
+ r32 = 5 * y2
194
+ r33 = 12 * r6
195
+ r34 = 30 * x1
196
+ r35 = x1 * y1
197
+ r36 = r3 + 20 * r35
198
+ r37 = 12 * x1
199
+ r38 = 20 * r6
200
+ r39 = 8 * r6 * y1
201
+ r40 = r32 * r7
202
+ r41 = 60 * y1
203
+ r42 = 20 * r19
204
+ r43 = 4 * r19
205
+ r44 = 15 * r21
206
+ r45 = 12 * x2
207
+ r46 = 12 * y2
208
+ r47 = 6 * x1
209
+ r48 = 8 * r19 * x1 + r23
210
+ r49 = 8 * y1**3
211
+ r50 = y2**3
212
+ r51 = y0**3
213
+ r52 = 10 * y1
214
+ r53 = 12 * y1
215
+
216
+ self.area += (
217
+ -r1 / 6
218
+ - r3 / 6
219
+ + x0 * (r0 + r5 + y2) / 6
220
+ + x1 * y2 / 3
221
+ - y0 * (r4 + x2) / 6
222
+ )
223
+ self.momentX += (
224
+ -r11 * (-r10 + y1) / 30
225
+ + r12 * (r13 + r8 + y2) / 30
226
+ + r6 * y2 / 15
227
+ - r7 * r8 / 30
228
+ - r7 * r9 / 30
229
+ + x0 * (r14 - r15 - r16 * y0 + r17) / 30
230
+ - y0 * (r11 + 2 * r6 + r7) / 30
231
+ )
232
+ self.momentY += (
233
+ -r18 / 30
234
+ - r20 * x2 / 30
235
+ - r23 / 30
236
+ - r24 * (r16 + x2) / 30
237
+ + x0 * (r0 * y2 + r20 + r21 + r25 + r26 + r8 * y0) / 30
238
+ + x1 * y2 * (r10 + y1) / 15
239
+ - y0 * (r1 + r17) / 30
240
+ )
241
+ self.momentXX += (
242
+ r12 * (r1 - 5 * r15 - r34 * y0 + r36 + r9 * x1) / 420
243
+ + 2 * r27 * y2 / 105
244
+ - r28 * r29 / 420
245
+ - r28 * y2 / 4
246
+ - r31 * (r0 - 3 * y2) / 420
247
+ - r6 * x2 * (r0 - r32) / 105
248
+ + x0**3 * (r30 + 21 * y0 + y2) / 84
249
+ - x0
250
+ * (
251
+ r0 * r7
252
+ + r15 * r37
253
+ - r2 * r37
254
+ - r33 * y2
255
+ + r38 * y0
256
+ - r39
257
+ - r40
258
+ + r5 * r7
259
+ )
260
+ / 420
261
+ - y0 * (8 * r27 + 5 * r28 + r31 + r33 * x2) / 420
262
+ )
263
+ self.momentXY += (
264
+ r12 * (r13 * y2 + 3 * r21 + 105 * r24 + r41 * y0 + r42 + r46 * y1) / 840
265
+ - r16 * x2 * (r43 - r44) / 840
266
+ - r21 * r7 / 8
267
+ - r24 * (r38 + r45 * x1 + 3 * r7) / 840
268
+ - r41 * r7 * y2 / 840
269
+ - r42 * r7 / 840
270
+ + r6 * y2 * (r32 + r8) / 210
271
+ + x0
272
+ * (
273
+ -r15 * r8
274
+ + r16 * r25
275
+ + r18
276
+ + r21 * r47
277
+ - r24 * r34
278
+ - r26 * x2
279
+ + r35 * r46
280
+ + r48
281
+ )
282
+ / 420
283
+ - y0 * (r16 * r2 + r30 * r7 + r35 * r45 + r39 + r40) / 420
284
+ )
285
+ self.momentYY += (
286
+ -r2 * r42 / 420
287
+ - r22 * r29 / 420
288
+ - r24 * (r14 + r36 + r52 * x2) / 420
289
+ - r49 * x2 / 420
290
+ - r50 * x2 / 12
291
+ - r51 * (r47 + x2) / 84
292
+ + x0
293
+ * (
294
+ r19 * r46
295
+ + r21 * r5
296
+ + r21 * r52
297
+ + r24 * r29
298
+ + r25 * r53
299
+ + r26 * y2
300
+ + r42 * y0
301
+ + r49
302
+ + 5 * r50
303
+ + 35 * r51
304
+ )
305
+ / 420
306
+ + x1 * y2 * (r43 + r44 + r9 * y1) / 210
307
+ - y0 * (r19 * r45 + r2 * r53 - r21 * r4 + r48) / 420
308
+ )
309
+
310
+ @cython.locals(r0=cython.double)
311
+ @cython.locals(r1=cython.double)
312
+ @cython.locals(r2=cython.double)
313
+ @cython.locals(r3=cython.double)
314
+ @cython.locals(r4=cython.double)
315
+ @cython.locals(r5=cython.double)
316
+ @cython.locals(r6=cython.double)
317
+ @cython.locals(r7=cython.double)
318
+ @cython.locals(r8=cython.double)
319
+ @cython.locals(r9=cython.double)
320
+ @cython.locals(r10=cython.double)
321
+ @cython.locals(r11=cython.double)
322
+ @cython.locals(r12=cython.double)
323
+ @cython.locals(r13=cython.double)
324
+ @cython.locals(r14=cython.double)
325
+ @cython.locals(r15=cython.double)
326
+ @cython.locals(r16=cython.double)
327
+ @cython.locals(r17=cython.double)
328
+ @cython.locals(r18=cython.double)
329
+ @cython.locals(r19=cython.double)
330
+ @cython.locals(r20=cython.double)
331
+ @cython.locals(r21=cython.double)
332
+ @cython.locals(r22=cython.double)
333
+ @cython.locals(r23=cython.double)
334
+ @cython.locals(r24=cython.double)
335
+ @cython.locals(r25=cython.double)
336
+ @cython.locals(r26=cython.double)
337
+ @cython.locals(r27=cython.double)
338
+ @cython.locals(r28=cython.double)
339
+ @cython.locals(r29=cython.double)
340
+ @cython.locals(r30=cython.double)
341
+ @cython.locals(r31=cython.double)
342
+ @cython.locals(r32=cython.double)
343
+ @cython.locals(r33=cython.double)
344
+ @cython.locals(r34=cython.double)
345
+ @cython.locals(r35=cython.double)
346
+ @cython.locals(r36=cython.double)
347
+ @cython.locals(r37=cython.double)
348
+ @cython.locals(r38=cython.double)
349
+ @cython.locals(r39=cython.double)
350
+ @cython.locals(r40=cython.double)
351
+ @cython.locals(r41=cython.double)
352
+ @cython.locals(r42=cython.double)
353
+ @cython.locals(r43=cython.double)
354
+ @cython.locals(r44=cython.double)
355
+ @cython.locals(r45=cython.double)
356
+ @cython.locals(r46=cython.double)
357
+ @cython.locals(r47=cython.double)
358
+ @cython.locals(r48=cython.double)
359
+ @cython.locals(r49=cython.double)
360
+ @cython.locals(r50=cython.double)
361
+ @cython.locals(r51=cython.double)
362
+ @cython.locals(r52=cython.double)
363
+ @cython.locals(r53=cython.double)
364
+ @cython.locals(r54=cython.double)
365
+ @cython.locals(r55=cython.double)
366
+ @cython.locals(r56=cython.double)
367
+ @cython.locals(r57=cython.double)
368
+ @cython.locals(r58=cython.double)
369
+ @cython.locals(r59=cython.double)
370
+ @cython.locals(r60=cython.double)
371
+ @cython.locals(r61=cython.double)
372
+ @cython.locals(r62=cython.double)
373
+ @cython.locals(r63=cython.double)
374
+ @cython.locals(r64=cython.double)
375
+ @cython.locals(r65=cython.double)
376
+ @cython.locals(r66=cython.double)
377
+ @cython.locals(r67=cython.double)
378
+ @cython.locals(r68=cython.double)
379
+ @cython.locals(r69=cython.double)
380
+ @cython.locals(r70=cython.double)
381
+ @cython.locals(r71=cython.double)
382
+ @cython.locals(r72=cython.double)
383
+ @cython.locals(r73=cython.double)
384
+ @cython.locals(r74=cython.double)
385
+ @cython.locals(r75=cython.double)
386
+ @cython.locals(r76=cython.double)
387
+ @cython.locals(r77=cython.double)
388
+ @cython.locals(r78=cython.double)
389
+ @cython.locals(r79=cython.double)
390
+ @cython.locals(r80=cython.double)
391
+ @cython.locals(r81=cython.double)
392
+ @cython.locals(r82=cython.double)
393
+ @cython.locals(r83=cython.double)
394
+ @cython.locals(r84=cython.double)
395
+ @cython.locals(r85=cython.double)
396
+ @cython.locals(r86=cython.double)
397
+ @cython.locals(r87=cython.double)
398
+ @cython.locals(r88=cython.double)
399
+ @cython.locals(r89=cython.double)
400
+ @cython.locals(r90=cython.double)
401
+ @cython.locals(r91=cython.double)
402
+ @cython.locals(r92=cython.double)
403
+ @cython.locals(r93=cython.double)
404
+ @cython.locals(r94=cython.double)
405
+ @cython.locals(r95=cython.double)
406
+ @cython.locals(r96=cython.double)
407
+ @cython.locals(r97=cython.double)
408
+ @cython.locals(r98=cython.double)
409
+ @cython.locals(r99=cython.double)
410
+ @cython.locals(r100=cython.double)
411
+ @cython.locals(r101=cython.double)
412
+ @cython.locals(r102=cython.double)
413
+ @cython.locals(r103=cython.double)
414
+ @cython.locals(r104=cython.double)
415
+ @cython.locals(r105=cython.double)
416
+ @cython.locals(r106=cython.double)
417
+ @cython.locals(r107=cython.double)
418
+ @cython.locals(r108=cython.double)
419
+ @cython.locals(r109=cython.double)
420
+ @cython.locals(r110=cython.double)
421
+ @cython.locals(r111=cython.double)
422
+ @cython.locals(r112=cython.double)
423
+ @cython.locals(r113=cython.double)
424
+ @cython.locals(r114=cython.double)
425
+ @cython.locals(r115=cython.double)
426
+ @cython.locals(r116=cython.double)
427
+ @cython.locals(r117=cython.double)
428
+ @cython.locals(r118=cython.double)
429
+ @cython.locals(r119=cython.double)
430
+ @cython.locals(r120=cython.double)
431
+ @cython.locals(r121=cython.double)
432
+ @cython.locals(r122=cython.double)
433
+ @cython.locals(r123=cython.double)
434
+ @cython.locals(r124=cython.double)
435
+ @cython.locals(r125=cython.double)
436
+ @cython.locals(r126=cython.double)
437
+ @cython.locals(r127=cython.double)
438
+ @cython.locals(r128=cython.double)
439
+ @cython.locals(r129=cython.double)
440
+ @cython.locals(r130=cython.double)
441
+ @cython.locals(r131=cython.double)
442
+ @cython.locals(r132=cython.double)
443
+ @cython.locals(x0=cython.double, y0=cython.double)
444
+ @cython.locals(x1=cython.double, y1=cython.double)
445
+ @cython.locals(x2=cython.double, y2=cython.double)
446
+ @cython.locals(x3=cython.double, y3=cython.double)
447
+ def _curveToOne(self, p1, p2, p3):
448
+ x0, y0 = self._getCurrentPoint()
449
+ x1, y1 = p1
450
+ x2, y2 = p2
451
+ x3, y3 = p3
452
+
453
+ r0 = 6 * y2
454
+ r1 = r0 * x3
455
+ r2 = 10 * y3
456
+ r3 = r2 * x3
457
+ r4 = 3 * y1
458
+ r5 = 6 * x1
459
+ r6 = 3 * x2
460
+ r7 = 6 * y1
461
+ r8 = 3 * y2
462
+ r9 = x2**2
463
+ r10 = 45 * r9
464
+ r11 = r10 * y3
465
+ r12 = x3**2
466
+ r13 = r12 * y2
467
+ r14 = r12 * y3
468
+ r15 = 7 * y3
469
+ r16 = 15 * x3
470
+ r17 = r16 * x2
471
+ r18 = x1**2
472
+ r19 = 9 * r18
473
+ r20 = x0**2
474
+ r21 = 21 * y1
475
+ r22 = 9 * r9
476
+ r23 = r7 * x3
477
+ r24 = 9 * y2
478
+ r25 = r24 * x2 + r3
479
+ r26 = 9 * x2
480
+ r27 = x2 * y3
481
+ r28 = -r26 * y1 + 15 * r27
482
+ r29 = 3 * x1
483
+ r30 = 45 * x1
484
+ r31 = 12 * x3
485
+ r32 = 45 * r18
486
+ r33 = 5 * r12
487
+ r34 = r8 * x3
488
+ r35 = 105 * y0
489
+ r36 = 30 * y0
490
+ r37 = r36 * x2
491
+ r38 = 5 * x3
492
+ r39 = 15 * y3
493
+ r40 = 5 * y3
494
+ r41 = r40 * x3
495
+ r42 = x2 * y2
496
+ r43 = 18 * r42
497
+ r44 = 45 * y1
498
+ r45 = r41 + r43 + r44 * x1
499
+ r46 = y2 * y3
500
+ r47 = r46 * x3
501
+ r48 = y2**2
502
+ r49 = 45 * r48
503
+ r50 = r49 * x3
504
+ r51 = y3**2
505
+ r52 = r51 * x3
506
+ r53 = y1**2
507
+ r54 = 9 * r53
508
+ r55 = y0**2
509
+ r56 = 21 * x1
510
+ r57 = 6 * x2
511
+ r58 = r16 * y2
512
+ r59 = r39 * y2
513
+ r60 = 9 * r48
514
+ r61 = r6 * y3
515
+ r62 = 3 * y3
516
+ r63 = r36 * y2
517
+ r64 = y1 * y3
518
+ r65 = 45 * r53
519
+ r66 = 5 * r51
520
+ r67 = x2**3
521
+ r68 = x3**3
522
+ r69 = 630 * y2
523
+ r70 = 126 * x3
524
+ r71 = x1**3
525
+ r72 = 126 * x2
526
+ r73 = 63 * r9
527
+ r74 = r73 * x3
528
+ r75 = r15 * x3 + 15 * r42
529
+ r76 = 630 * x1
530
+ r77 = 14 * x3
531
+ r78 = 21 * r27
532
+ r79 = 42 * x1
533
+ r80 = 42 * x2
534
+ r81 = x1 * y2
535
+ r82 = 63 * r42
536
+ r83 = x1 * y1
537
+ r84 = r41 + r82 + 378 * r83
538
+ r85 = x2 * x3
539
+ r86 = r85 * y1
540
+ r87 = r27 * x3
541
+ r88 = 27 * r9
542
+ r89 = r88 * y2
543
+ r90 = 42 * r14
544
+ r91 = 90 * x1
545
+ r92 = 189 * r18
546
+ r93 = 378 * r18
547
+ r94 = r12 * y1
548
+ r95 = 252 * x1 * x2
549
+ r96 = r79 * x3
550
+ r97 = 30 * r85
551
+ r98 = r83 * x3
552
+ r99 = 30 * x3
553
+ r100 = 42 * x3
554
+ r101 = r42 * x1
555
+ r102 = r10 * y2 + 14 * r14 + 126 * r18 * y1 + r81 * r99
556
+ r103 = 378 * r48
557
+ r104 = 18 * y1
558
+ r105 = r104 * y2
559
+ r106 = y0 * y1
560
+ r107 = 252 * y2
561
+ r108 = r107 * y0
562
+ r109 = y0 * y3
563
+ r110 = 42 * r64
564
+ r111 = 378 * r53
565
+ r112 = 63 * r48
566
+ r113 = 27 * x2
567
+ r114 = r27 * y2
568
+ r115 = r113 * r48 + 42 * r52
569
+ r116 = x3 * y3
570
+ r117 = 54 * r42
571
+ r118 = r51 * x1
572
+ r119 = r51 * x2
573
+ r120 = r48 * x1
574
+ r121 = 21 * x3
575
+ r122 = r64 * x1
576
+ r123 = r81 * y3
577
+ r124 = 30 * r27 * y1 + r49 * x2 + 14 * r52 + 126 * r53 * x1
578
+ r125 = y2**3
579
+ r126 = y3**3
580
+ r127 = y1**3
581
+ r128 = y0**3
582
+ r129 = r51 * y2
583
+ r130 = r112 * y3 + r21 * r51
584
+ r131 = 189 * r53
585
+ r132 = 90 * y2
586
+
587
+ self.area += (
588
+ -r1 / 20
589
+ - r3 / 20
590
+ - r4 * (x2 + x3) / 20
591
+ + x0 * (r7 + r8 + 10 * y0 + y3) / 20
592
+ + 3 * x1 * (y2 + y3) / 20
593
+ + 3 * x2 * y3 / 10
594
+ - y0 * (r5 + r6 + x3) / 20
595
+ )
596
+ self.momentX += (
597
+ r11 / 840
598
+ - r13 / 8
599
+ - r14 / 3
600
+ - r17 * (-r15 + r8) / 840
601
+ + r19 * (r8 + 2 * y3) / 840
602
+ + r20 * (r0 + r21 + 56 * y0 + y3) / 168
603
+ + r29 * (-r23 + r25 + r28) / 840
604
+ - r4 * (10 * r12 + r17 + r22) / 840
605
+ + x0
606
+ * (
607
+ 12 * r27
608
+ + r30 * y2
609
+ + r34
610
+ - r35 * x1
611
+ - r37
612
+ - r38 * y0
613
+ + r39 * x1
614
+ - r4 * x3
615
+ + r45
616
+ )
617
+ / 840
618
+ - y0 * (r17 + r30 * x2 + r31 * x1 + r32 + r33 + 18 * r9) / 840
619
+ )
620
+ self.momentY += (
621
+ -r4 * (r25 + r58) / 840
622
+ - r47 / 8
623
+ - r50 / 840
624
+ - r52 / 6
625
+ - r54 * (r6 + 2 * x3) / 840
626
+ - r55 * (r56 + r57 + x3) / 168
627
+ + x0
628
+ * (
629
+ r35 * y1
630
+ + r40 * y0
631
+ + r44 * y2
632
+ + 18 * r48
633
+ + 140 * r55
634
+ + r59
635
+ + r63
636
+ + 12 * r64
637
+ + r65
638
+ + r66
639
+ )
640
+ / 840
641
+ + x1 * (r24 * y1 + 10 * r51 + r59 + r60 + r7 * y3) / 280
642
+ + x2 * y3 * (r15 + r8) / 56
643
+ - y0 * (r16 * y1 + r31 * y2 + r44 * x2 + r45 + r61 - r62 * x1) / 840
644
+ )
645
+ self.momentXX += (
646
+ -r12 * r72 * (-r40 + r8) / 9240
647
+ + 3 * r18 * (r28 + r34 - r38 * y1 + r75) / 3080
648
+ + r20
649
+ * (
650
+ r24 * x3
651
+ - r72 * y0
652
+ - r76 * y0
653
+ - r77 * y0
654
+ + r78
655
+ + r79 * y3
656
+ + r80 * y1
657
+ + 210 * r81
658
+ + r84
659
+ )
660
+ / 9240
661
+ - r29
662
+ * (
663
+ r12 * r21
664
+ + 14 * r13
665
+ + r44 * r9
666
+ - r73 * y3
667
+ + 54 * r86
668
+ - 84 * r87
669
+ - r89
670
+ - r90
671
+ )
672
+ / 9240
673
+ - r4 * (70 * r12 * x2 + 27 * r67 + 42 * r68 + r74) / 9240
674
+ + 3 * r67 * y3 / 220
675
+ - r68 * r69 / 9240
676
+ - r68 * y3 / 4
677
+ - r70 * r9 * (-r62 + y2) / 9240
678
+ + 3 * r71 * (r24 + r40) / 3080
679
+ + x0**3 * (r24 + r44 + 165 * y0 + y3) / 660
680
+ + x0
681
+ * (
682
+ r100 * r27
683
+ + 162 * r101
684
+ + r102
685
+ + r11
686
+ + 63 * r18 * y3
687
+ + r27 * r91
688
+ - r33 * y0
689
+ - r37 * x3
690
+ + r43 * x3
691
+ - r73 * y0
692
+ - r88 * y1
693
+ + r92 * y2
694
+ - r93 * y0
695
+ - 9 * r94
696
+ - r95 * y0
697
+ - r96 * y0
698
+ - r97 * y1
699
+ - 18 * r98
700
+ + r99 * x1 * y3
701
+ )
702
+ / 9240
703
+ - y0
704
+ * (
705
+ r12 * r56
706
+ + r12 * r80
707
+ + r32 * x3
708
+ + 45 * r67
709
+ + 14 * r68
710
+ + 126 * r71
711
+ + r74
712
+ + r85 * r91
713
+ + 135 * r9 * x1
714
+ + r92 * x2
715
+ )
716
+ / 9240
717
+ )
718
+ self.momentXY += (
719
+ -r103 * r12 / 18480
720
+ - r12 * r51 / 8
721
+ - 3 * r14 * y2 / 44
722
+ + 3 * r18 * (r105 + r2 * y1 + 18 * r46 + 15 * r48 + 7 * r51) / 6160
723
+ + r20
724
+ * (
725
+ 1260 * r106
726
+ + r107 * y1
727
+ + r108
728
+ + 28 * r109
729
+ + r110
730
+ + r111
731
+ + r112
732
+ + 30 * r46
733
+ + 2310 * r55
734
+ + r66
735
+ )
736
+ / 18480
737
+ - r54 * (7 * r12 + 18 * r85 + 15 * r9) / 18480
738
+ - r55 * (r33 + r73 + r93 + r95 + r96 + r97) / 18480
739
+ - r7 * (42 * r13 + r82 * x3 + 28 * r87 + r89 + r90) / 18480
740
+ - 3 * r85 * (r48 - r66) / 220
741
+ + 3 * r9 * y3 * (r62 + 2 * y2) / 440
742
+ + x0
743
+ * (
744
+ -r1 * y0
745
+ - 84 * r106 * x2
746
+ + r109 * r56
747
+ + 54 * r114
748
+ + r117 * y1
749
+ + 15 * r118
750
+ + 21 * r119
751
+ + 81 * r120
752
+ + r121 * r46
753
+ + 54 * r122
754
+ + 60 * r123
755
+ + r124
756
+ - r21 * x3 * y0
757
+ + r23 * y3
758
+ - r54 * x3
759
+ - r55 * r72
760
+ - r55 * r76
761
+ - r55 * r77
762
+ + r57 * y0 * y3
763
+ + r60 * x3
764
+ + 84 * r81 * y0
765
+ + 189 * r81 * y1
766
+ )
767
+ / 9240
768
+ + x1
769
+ * (
770
+ r104 * r27
771
+ - r105 * x3
772
+ - r113 * r53
773
+ + 63 * r114
774
+ + r115
775
+ - r16 * r53
776
+ + 28 * r47
777
+ + r51 * r80
778
+ )
779
+ / 3080
780
+ - y0
781
+ * (
782
+ 54 * r101
783
+ + r102
784
+ + r116 * r5
785
+ + r117 * x3
786
+ + 21 * r13
787
+ - r19 * y3
788
+ + r22 * y3
789
+ + r78 * x3
790
+ + 189 * r83 * x2
791
+ + 60 * r86
792
+ + 81 * r9 * y1
793
+ + 15 * r94
794
+ + 54 * r98
795
+ )
796
+ / 9240
797
+ )
798
+ self.momentYY += (
799
+ -r103 * r116 / 9240
800
+ - r125 * r70 / 9240
801
+ - r126 * x3 / 12
802
+ - 3 * r127 * (r26 + r38) / 3080
803
+ - r128 * (r26 + r30 + x3) / 660
804
+ - r4 * (r112 * x3 + r115 - 14 * r119 + 84 * r47) / 9240
805
+ - r52 * r69 / 9240
806
+ - r54 * (r58 + r61 + r75) / 9240
807
+ - r55
808
+ * (r100 * y1 + r121 * y2 + r26 * y3 + r79 * y2 + r84 + 210 * x2 * y1)
809
+ / 9240
810
+ + x0
811
+ * (
812
+ r108 * y1
813
+ + r110 * y0
814
+ + r111 * y0
815
+ + r112 * y0
816
+ + 45 * r125
817
+ + 14 * r126
818
+ + 126 * r127
819
+ + 770 * r128
820
+ + 42 * r129
821
+ + r130
822
+ + r131 * y2
823
+ + r132 * r64
824
+ + 135 * r48 * y1
825
+ + 630 * r55 * y1
826
+ + 126 * r55 * y2
827
+ + 14 * r55 * y3
828
+ + r63 * y3
829
+ + r65 * y3
830
+ + r66 * y0
831
+ )
832
+ / 9240
833
+ + x1
834
+ * (
835
+ 27 * r125
836
+ + 42 * r126
837
+ + 70 * r129
838
+ + r130
839
+ + r39 * r53
840
+ + r44 * r48
841
+ + 27 * r53 * y2
842
+ + 54 * r64 * y2
843
+ )
844
+ / 3080
845
+ + 3 * x2 * y3 * (r48 + r66 + r8 * y3) / 220
846
+ - y0
847
+ * (
848
+ r100 * r46
849
+ + 18 * r114
850
+ - 9 * r118
851
+ - 27 * r120
852
+ - 18 * r122
853
+ - 30 * r123
854
+ + r124
855
+ + r131 * x2
856
+ + r132 * x3 * y1
857
+ + 162 * r42 * y1
858
+ + r50
859
+ + 63 * r53 * x3
860
+ + r64 * r99
861
+ )
862
+ / 9240
863
+ )
864
+
865
+
866
+ if __name__ == "__main__":
867
+ from fontTools.misc.symfont import x, y, printGreenPen
868
+
869
+ printGreenPen(
870
+ "MomentsPen",
871
+ [
872
+ ("area", 1),
873
+ ("momentX", x),
874
+ ("momentY", y),
875
+ ("momentXX", x**2),
876
+ ("momentXY", x * y),
877
+ ("momentYY", y**2),
878
+ ],
879
+ )