index.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <link rel="shortcut icon" href="../assets/images/favicon.png">
  7. <meta name="generator" content="mkdocs-1.1, mkdocs-material-5.4.0">
  8. <title>Learning by Example - Jypyter Sketcher</title>
  9. <link rel="stylesheet" href="../assets/stylesheets/main.fe0cca5b.min.css">
  10. <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
  11. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
  12. <style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
  13. </head>
  14. <body dir="ltr">
  15. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  16. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  17. <label class="md-overlay" for="__drawer"></label>
  18. <div data-md-component="skip">
  19. <a href="#a-language-to-describe-a-sketch" class="md-skip">
  20. Skip to content
  21. </a>
  22. </div>
  23. <div data-md-component="announce">
  24. </div>
  25. <header class="md-header" data-md-component="header">
  26. <nav class="md-header-nav md-grid" aria-label="Header">
  27. <a href=".." title="Jypyter Sketcher" class="md-header-nav__button md-logo" aria-label="Jypyter Sketcher">
  28. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
  29. </a>
  30. <label class="md-header-nav__button md-icon" for="__drawer">
  31. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
  32. </label>
  33. <div class="md-header-nav__title" data-md-component="header-title">
  34. <div class="md-header-nav__ellipsis">
  35. <span class="md-header-nav__topic md-ellipsis">
  36. Jypyter Sketcher
  37. </span>
  38. <span class="md-header-nav__topic md-ellipsis">
  39. Learning by Example
  40. </span>
  41. </div>
  42. </div>
  43. <label class="md-header-nav__button md-icon" for="__search">
  44. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  45. </label>
  46. <div class="md-search" data-md-component="search" role="dialog">
  47. <label class="md-search__overlay" for="__search"></label>
  48. <div class="md-search__inner" role="search">
  49. <form class="md-search__form" name="search">
  50. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active">
  51. <label class="md-search__icon md-icon" for="__search">
  52. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  53. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  54. </label>
  55. <button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
  56. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
  57. </button>
  58. </form>
  59. <div class="md-search__output">
  60. <div class="md-search__scrollwrap" data-md-scrollfix>
  61. <div class="md-search-result" data-md-component="search-result">
  62. <div class="md-search-result__meta">
  63. Initializing search
  64. </div>
  65. <ol class="md-search-result__list"></ol>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. </nav>
  72. </header>
  73. <div class="md-container" data-md-component="container">
  74. <main class="md-main" data-md-component="main">
  75. <div class="md-main__inner md-grid">
  76. <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
  77. <div class="md-sidebar__scrollwrap">
  78. <div class="md-sidebar__inner">
  79. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  80. <label class="md-nav__title" for="__drawer">
  81. <a href=".." title="Jypyter Sketcher" class="md-nav__button md-logo" aria-label="Jypyter Sketcher">
  82. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
  83. </a>
  84. Jypyter Sketcher
  85. </label>
  86. <ul class="md-nav__list" data-md-scrollfix>
  87. <li class="md-nav__item">
  88. <a href=".." title="Home" class="md-nav__link">
  89. Home
  90. </a>
  91. </li>
  92. <li class="md-nav__item">
  93. <a href="../about/" title="About" class="md-nav__link">
  94. About
  95. </a>
  96. </li>
  97. <li class="md-nav__item">
  98. <a href="../presentation/" title="Presentation" class="md-nav__link">
  99. Presentation
  100. </a>
  101. </li>
  102. <li class="md-nav__item md-nav__item--active">
  103. <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
  104. <label class="md-nav__link md-nav__link--active" for="__toc">
  105. Learning by Example
  106. <span class="md-nav__icon md-icon">
  107. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 9h14V7H3v2m0 4h14v-2H3v2m0 4h14v-2H3v2m16 0h2v-2h-2v2m0-10v2h2V7h-2m0 6h2v-2h-2v2z"/></svg>
  108. </span>
  109. </label>
  110. <a href="./" title="Learning by Example" class="md-nav__link md-nav__link--active">
  111. Learning by Example
  112. </a>
  113. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  114. <label class="md-nav__title" for="__toc">
  115. <span class="md-nav__icon md-icon">
  116. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  117. </span>
  118. Table of contents
  119. </label>
  120. <ul class="md-nav__list" data-md-scrollfix>
  121. <li class="md-nav__item">
  122. <a href="#a-language-to-describe-a-sketch" class="md-nav__link">
  123. A language to describe a sketch
  124. </a>
  125. </li>
  126. <li class="md-nav__item">
  127. <a href="#example" class="md-nav__link">
  128. Example
  129. </a>
  130. <nav class="md-nav" aria-label="Example">
  131. <ul class="md-nav__list">
  132. <li class="md-nav__item">
  133. <a href="#the-final-sketch" class="md-nav__link">
  134. The final sketch
  135. </a>
  136. </li>
  137. <li class="md-nav__item">
  138. <a href="#support-files" class="md-nav__link">
  139. Support files
  140. </a>
  141. </li>
  142. <li class="md-nav__item">
  143. <a href="#the-yaml-definition" class="md-nav__link">
  144. The yaml definition
  145. </a>
  146. <nav class="md-nav" aria-label="The yaml definition">
  147. <ul class="md-nav__list">
  148. <li class="md-nav__item">
  149. <a href="#libraries-construction-variables-frame" class="md-nav__link">
  150. Libraries, Construction Variables, Frame
  151. </a>
  152. </li>
  153. <li class="md-nav__item">
  154. <a href="#the-body-object" class="md-nav__link">
  155. The body object
  156. </a>
  157. </li>
  158. <li class="md-nav__item">
  159. <a href="#the-plan-object" class="md-nav__link">
  160. The plan object
  161. </a>
  162. </li>
  163. <li class="md-nav__item">
  164. <a href="#the-friction-sketch" class="md-nav__link">
  165. The friction sketch
  166. </a>
  167. </li>
  168. </ul>
  169. </nav>
  170. </li>
  171. <li class="md-nav__item">
  172. <a href="#using-the-parser" class="md-nav__link">
  173. Using the parser
  174. </a>
  175. </li>
  176. <li class="md-nav__item">
  177. <a href="#friction-sketch-hierarchy" class="md-nav__link">
  178. "friction" sketch hierarchy
  179. </a>
  180. </li>
  181. </ul>
  182. </nav>
  183. </li>
  184. </ul>
  185. </nav>
  186. </li>
  187. <li class="md-nav__item">
  188. <a href="../shapereference/" title="Shapes Reference" class="md-nav__link">
  189. Shapes Reference
  190. </a>
  191. </li>
  192. </ul>
  193. </nav>
  194. </div>
  195. </div>
  196. </div>
  197. <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
  198. <div class="md-sidebar__scrollwrap">
  199. <div class="md-sidebar__inner">
  200. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  201. <label class="md-nav__title" for="__toc">
  202. <span class="md-nav__icon md-icon">
  203. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  204. </span>
  205. Table of contents
  206. </label>
  207. <ul class="md-nav__list" data-md-scrollfix>
  208. <li class="md-nav__item">
  209. <a href="#a-language-to-describe-a-sketch" class="md-nav__link">
  210. A language to describe a sketch
  211. </a>
  212. </li>
  213. <li class="md-nav__item">
  214. <a href="#example" class="md-nav__link">
  215. Example
  216. </a>
  217. <nav class="md-nav" aria-label="Example">
  218. <ul class="md-nav__list">
  219. <li class="md-nav__item">
  220. <a href="#the-final-sketch" class="md-nav__link">
  221. The final sketch
  222. </a>
  223. </li>
  224. <li class="md-nav__item">
  225. <a href="#support-files" class="md-nav__link">
  226. Support files
  227. </a>
  228. </li>
  229. <li class="md-nav__item">
  230. <a href="#the-yaml-definition" class="md-nav__link">
  231. The yaml definition
  232. </a>
  233. <nav class="md-nav" aria-label="The yaml definition">
  234. <ul class="md-nav__list">
  235. <li class="md-nav__item">
  236. <a href="#libraries-construction-variables-frame" class="md-nav__link">
  237. Libraries, Construction Variables, Frame
  238. </a>
  239. </li>
  240. <li class="md-nav__item">
  241. <a href="#the-body-object" class="md-nav__link">
  242. The body object
  243. </a>
  244. </li>
  245. <li class="md-nav__item">
  246. <a href="#the-plan-object" class="md-nav__link">
  247. The plan object
  248. </a>
  249. </li>
  250. <li class="md-nav__item">
  251. <a href="#the-friction-sketch" class="md-nav__link">
  252. The friction sketch
  253. </a>
  254. </li>
  255. </ul>
  256. </nav>
  257. </li>
  258. <li class="md-nav__item">
  259. <a href="#using-the-parser" class="md-nav__link">
  260. Using the parser
  261. </a>
  262. </li>
  263. <li class="md-nav__item">
  264. <a href="#friction-sketch-hierarchy" class="md-nav__link">
  265. "friction" sketch hierarchy
  266. </a>
  267. </li>
  268. </ul>
  269. </nav>
  270. </li>
  271. </ul>
  272. </nav>
  273. </div>
  274. </div>
  275. </div>
  276. <div class="md-content">
  277. <article class="md-content__inner md-typeset">
  278. <h1>Learning by Example</h1>
  279. <h2 id="a-language-to-describe-a-sketch">A language to describe a sketch</h2>
  280. <p>Pysketcher initial version <a href="">HPL Pysketcher</a> enable sketch definition in python. HPL is showing the hierachical nature of sketches. This is implemented via the Composition function. One can further grasp this using the graphviz_dot function applied to discover the composition herarchy implemented as a graphviz image <a href="#friction-sketch-hierarchy">see The hierarchy of the "friction" sketch</a> at the end of this page.</p>
  281. <p>Due to the hierarchical nature of sketches, it is quite straightforward to think about using yaml as the syntax for defining a sketch.</p>
  282. <p>Benefits are the following:</p>
  283. <ul>
  284. <li>Leaner sketch writing as only data relevant to the context needs to be defined</li>
  285. <li>A more straightforward reading for the same reason</li>
  286. <li>A more robust sketch definition <ul>
  287. <li>The same set of rules is applied to generate a sketch</li>
  288. <li>No further python idiom is be intermingled as opposed to the case of python defined sketches</li>
  289. <li>Don't make me wrong! Data defined versus program defined there is no winner, it's just a matter of context</li>
  290. </ul>
  291. </li>
  292. </ul>
  293. <h2 id="example">Example</h2>
  294. <p>This example provides the yaml content to define the Dry Friction case</p>
  295. <h3 id="the-final-sketch">The final sketch</h3>
  296. <p><img alt="dryfriction sketch" src="../images/dryfriction.svg" /></p>
  297. <p>An inclined plan (the A-B edge) supports a blue rectangle which is dragged down by gravity. The plan makes an angle <span><span class="MathJax_Preview">\theta</span><script type="math/tex">\theta</script></span> with the ground level. Sketch implementation notebook includes a controller enabling the <span><span class="MathJax_Preview">\theta</span><script type="math/tex">\theta</script></span> angle to change. The whole plan, including the body, can rotate arround point B.</p>
  298. <h3 id="support-files">Support files</h3>
  299. <p>The example we are developing now is based upon the "Dry Friction mockup" notebook</p>
  300. <ul>
  301. <li>the rendered html version of the notbook can be viewed <a href="../resources/DryFriction.html">here</a></li>
  302. <li>the notebook can be download <a href="../resources/DryFriction.ipynb">here</a></li>
  303. </ul>
  304. <h3 id="the-yaml-definition">The yaml definition</h3>
  305. <p>Sketcher language is defined as a yaml compliant file or string. The yaml file is a dictionnary of "objects". Objects can be regular python objects or sketcher objects.
  306. A skertcher object is composed as follow:</p>
  307. <ul>
  308. <li><strong>a formula</strong>: it's a leaf object, like Rectangle, Circle, Line etc or a composition</li>
  309. <li><strong>a style list</strong>: line or fill colors, line stroke... declared as a yaml hierarchy</li>
  310. <li><strong>a transformation list</strong>: the defined object can be transformed using sketcher transformation: translation, rotation...</li>
  311. </ul>
  312. <p>As a general rule, a new object suppose all parameters to be defined before they are used to construct it.</p>
  313. <p><strong>For example, you can create a circle if the center and the radius have been defined earlier in the file.</strong></p>
  314. <p>The general layout of a sketcher file is as follow:</p>
  315. <ul>
  316. <li><strong>Libraries, Construction Variables, Frame</strong><ul>
  317. <li>declaration of the libraries used by the objects further declared: at least pysketcher is mandatory</li>
  318. <li>various global variable which encompass the "Construction" variables which define the object main physical dimensions, positions...</li>
  319. <li>some "actions" corresponding to executable python sentences<ul>
  320. <li>One mandatory action is the setting of the drawing frame (drawing_tool.set_coordinate_system): it must be declared before any other pysketcher object is used.</li>
  321. <li>Other use case of action is the setting of global parameters like default line color: (drawing_tool.set_linecolor('black')) for example</li>
  322. </ul>
  323. </li>
  324. <li>this is stored in the head string thereafter</li>
  325. </ul>
  326. </li>
  327. <li><strong>Sketcher Objects</strong><ul>
  328. <li>Usually starting with the declaration of Pysketcher leaf objects (Geometry object like Line, Circle, Rectangle...)</li>
  329. <li>May be aggregated using the composition object</li>
  330. <li>Composition can be made of composition object (recursive behaviour)</li>
  331. <li>Grouping leafs and composition will be further used to apply transformation latter on (based on the "physics")</li>
  332. <li>The example presents three group of objects<ul>
  333. <li>The body object</li>
  334. <li>The plan object</li>
  335. <li>The friction main object</li>
  336. </ul>
  337. </li>
  338. <li>The plan includes the body</li>
  339. <li>The friction includes the plan (that will be able to rotate as a group) and the ground (will stay fixed)</li>
  340. </ul>
  341. </li>
  342. </ul>
  343. <h4 id="libraries-construction-variables-frame">Libraries, Construction Variables, Frame</h4>
  344. <pre><code class="python">head = &quot;&quot;&quot;\
  345. libraries: [&quot;from math import tan, radians, sin, cos&quot;,&quot;from pysketcher import *&quot;]
  346. fontsize: 18
  347. g: 9.81 # constant gravity
  348. theta: 30.0 # inclined plane angle
  349. L: 10.0 # sketch sizing parameter
  350. a: 1.0 #
  351. xmin: 0.0 # sketech min Abscissa
  352. ymin: -3.0 # sketech min Ordinate
  353. rl: 2.0 # rectangle width
  354. rL: 1.0 # rectangle length
  355. setframe: # sketch setup
  356. action: &quot;drawing_tool.set_coordinate_system(xmin=xmin-L/5, xmax=xmin+1.5*L,ymin=ymin, ymax=ymin+1.5*L,instruction_file='tmp_mpl_friction.py')&quot;
  357. setblackline: # default frame values and actions
  358. action: &quot;drawing_tool.set_linecolor('black')&quot;
  359. B: point(a+L,0) # wall right end
  360. A: point(a,tan(radians(theta))*L) # wall left end
  361. normal_vec: point(sin(radians(theta)),cos(radians(theta))) # Vector normal to wall
  362. tangent_vec: point(cos(radians(theta)),-sin(radians(theta))) # Vector tangent to wall
  363. help_line: Line(A,B) # wall line
  364. x: a + 3*L/10.
  365. y: help_line(x=x)
  366. contact: point(x, y)
  367. c: contact + rL/2*normal_vec
  368. &quot;&quot;&quot;
  369. </code></pre>
  370. <h4 id="the-body-object">The body object</h4>
  371. <pre><code class="python">body=&quot;&quot;&quot;\
  372. rectangle:
  373. formula: Rectangle(contact, rl, rL)
  374. style:
  375. linecolor: blue
  376. filled_curves: blue
  377. transform: [&quot;rotate(-theta, contact)&quot;,
  378. &quot;translate(-rl/2*tangent_vec)&quot;]
  379. N:
  380. formula: Force(contact - rl*normal_vec, contact, r'$N$', text_pos='start')
  381. style:
  382. linecolor: black
  383. wheel:
  384. formula: &quot;Composition({'outer': rectangle})&quot;
  385. style:
  386. shadow: 1
  387. mc:
  388. formula: Text(r'$c$', c)
  389. body:
  390. formula: &quot;Composition({'wheel': wheel, 'N': N, 'mc': mc})&quot;
  391. style:
  392. linecolor: black
  393. &quot;&quot;&quot;
  394. </code></pre>
  395. <h4 id="the-plan-object">The plan object</h4>
  396. <pre><code class="python">plan=&quot;&quot;&quot;\
  397. mB:
  398. formula: Text(r'$B$',B)
  399. mA:
  400. formula: Text(r'$A$', A)
  401. wall:
  402. formula: Wall(x=[A[0], B[0]], y=[A[1], B[1]], thickness=-0.25,transparent=False)
  403. style:
  404. linecolor: black
  405. x_const:
  406. formula: Line(contact, contact + point(0,4))
  407. style:
  408. linestyle: dotted
  409. transform: rotate(-theta, contact)
  410. x_axis:
  411. formula: &quot;Axis(start=contact+ 2*rl*normal_vec, length=2*rl,label='$x$', rotation_angle=-theta)&quot;
  412. plan:
  413. formula: &quot;Composition({'body': body, 'inclined wall': wall, 'x start': x_const, 'x axis': x_axis, 'mA': mA, 'mB': mB})&quot;
  414. &quot;&quot;&quot;
  415. </code></pre>
  416. <h4 id="the-friction-sketch">The friction sketch</h4>
  417. <pre><code class="python">friction=&quot;&quot;&quot;\
  418. mg:
  419. formula: Gravity(c, rl, text='$Mg$')
  420. style:
  421. linecolor: black
  422. angle:
  423. formula: &quot;Arc_wText(r'$&lt;bslash&gt;theta$', center=B, radius=3, start_angle=180-theta, arc_angle=theta, fontsize=fontsize)&quot;
  424. style:
  425. linecolor: black
  426. linewidth: 1
  427. ground:
  428. formula: Line((B[0]-L/10., 0), (B[0]-L/2.,0))
  429. stlye:
  430. linecolor: black
  431. linestyle: dashed
  432. linewidth: 1
  433. friction:
  434. formula: &quot;Composition({'plan': plan, 'ground': ground, 'mg': mg, 'angle': angle})&quot;
  435. &quot;&quot;&quot;
  436. </code></pre>
  437. <h3 id="using-the-parser">Using the parser</h3>
  438. <p>To parse the above example, the following code do the job.
  439. 1. the head must be used first as all the other bits needs one or more variable it defines.
  440. 2. After, any other string can be parsed, the order just need to respect precedence (if one object uses another one it must be parsed after)
  441. 3. this setting allows naturally a modular definition of sketch objects</p>
  442. <pre><code class="python">myfig = {}
  443. sketchParse(head,myfig)
  444. sketchParse(body,myfig)
  445. sketchParse(plan,myfig)
  446. sketchParse(friction,myfig)
  447. </code></pre>
  448. <h3 id="friction-sketch-hierarchy">"friction" sketch hierarchy</h3>
  449. <p><img alt="" src="../images/dotdryfriction.svg" /></p>
  450. </article>
  451. </div>
  452. </div>
  453. </main>
  454. <footer class="md-footer">
  455. <div class="md-footer-nav">
  456. <nav class="md-footer-nav__inner md-grid" aria-label="Footer">
  457. <a href="../presentation/" title="Presentation" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
  458. <div class="md-footer-nav__button md-icon">
  459. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  460. </div>
  461. <div class="md-footer-nav__title">
  462. <div class="md-ellipsis">
  463. <span class="md-footer-nav__direction">
  464. Previous
  465. </span>
  466. Presentation
  467. </div>
  468. </div>
  469. </a>
  470. <a href="../shapereference/" title="Shapes Reference" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
  471. <div class="md-footer-nav__title">
  472. <div class="md-ellipsis">
  473. <span class="md-footer-nav__direction">
  474. Next
  475. </span>
  476. Shapes Reference
  477. </div>
  478. </div>
  479. <div class="md-footer-nav__button md-icon">
  480. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
  481. </div>
  482. </a>
  483. </nav>
  484. </div>
  485. <div class="md-footer-meta md-typeset">
  486. <div class="md-footer-meta__inner md-grid">
  487. <div class="md-footer-copyright">
  488. Made with
  489. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  490. Material for MkDocs
  491. </a>
  492. </div>
  493. </div>
  494. </div>
  495. </footer>
  496. </div>
  497. <script src="../assets/javascripts/vendor.d710d30a.min.js"></script>
  498. <script src="../assets/javascripts/bundle.b39636ac.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents"}</script>
  499. <script>
  500. app = initialize({
  501. base: "..",
  502. features: [],
  503. search: Object.assign({
  504. worker: "../assets/javascripts/worker/search.a68abb33.min.js"
  505. }, typeof search !== "undefined" && search)
  506. })
  507. </script>
  508. <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>
  509. </body>
  510. </html>