[{"data":1,"prerenderedAt":2959},["ShallowReactive",2],{"docs:\u002Freference\u002Fpaths":3},{"id":4,"title":5,"body":6,"description":2950,"extension":2951,"meta":2952,"navigation":2954,"path":2955,"seo":2956,"stem":2957,"__hash__":2958},"docs\u002Freference\u002Fpaths.md","Paths",{"type":7,"value":8,"toc":2923},"minimark",[9,13,25,38,43,70,74,118,121,183,191,283,289,315,320,361,364,388,397,458,471,514,517,602,608,612,634,668,729,735,739,805,818,913,930,1007,1010,1013,1028,1041,1171,1212,1216,1362,1366,1496,1604,1608,1701,1725,1812,1816,1867,1870,1938,2035,2039,2081,2084,2130,2138,2142,2147,2187,2193,2257,2260,2317,2322,2359,2372,2434,2439,2466,2469,2501,2505,2629,2642,2749,2753,2765,2772,2777,2827,2840,2919],[10,11,5],"h1",{"id":12},"paths",[14,15,16,20,21,24],"p",{},[17,18,19],"code",{},"Path"," wraps the SVG ",[17,22,23],{},"\u003Cpath>"," element. Use it for custom contours, data-driven\ngeometry, generated symbols, routes, curves, and any shape that is easier to\ndescribe with SVG path commands than with a predefined element.",[14,26,27,29,30,37],{},[17,28,19],{}," inherits ",[31,32,34],"a",{"href":33},"\u002Freference\u002Fsvg-element",[17,35,36],{},"SvgElement",", so it supports dynamic\nattributes, style helpers, child operations, search, copying, and serialization.",[39,40,42],"h2",{"id":41},"import","Import",[44,45,50],"pre",{"className":46,"code":47,"language":48,"meta":49,"style":49},"language-python shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark","import pydreamplet as dp\n","python","",[17,51,52],{"__ignoreMap":49},[53,54,57,60,64,67],"span",{"class":55,"line":56},"line",1,[53,58,41],{"class":59},"sED7I",[53,61,63],{"class":62},"soTeR"," pydreamplet ",[53,65,66],{"class":59},"as",[53,68,69],{"class":62}," dp\n",[39,71,73],{"id":72},"type-names","Type Names",[75,76,77,90],"table",{},[78,79,80],"thead",{},[81,82,83,87],"tr",{},[84,85,86],"th",{},"Type",[84,88,89],{},"Meaning",[91,92,93,106],"tbody",{},[81,94,95,101],{},[96,97,98],"td",{},[17,99,100],{},"Real",[96,102,103],{},[17,104,105],{},"int | float",[81,107,108,113],{},[96,109,110],{},[17,111,112],{},"Vector",[96,114,115],{},[17,116,117],{},"pydreamplet.math.Vector",[39,119,19],{"id":120},"path",[44,122,124],{"className":46,"code":123,"language":48,"meta":49,"style":49},"dp.Path(d: str | dp.PathBuilder = \"\", **kwargs)\n",[17,125,126],{"__ignoreMap":49},[53,127,128,131,135,138,141,144,147,151,155,158,160,164,167,171,174,177,180],{"class":55,"line":56},[53,129,130],{"class":62},"dp",[53,132,134],{"class":133},"sVsmf",".",[53,136,19],{"class":137},"sAK04",[53,139,140],{"class":133},"(",[53,142,143],{"class":137},"d",[53,145,146],{"class":133},":",[53,148,150],{"class":149},"s-tzF"," str",[53,152,154],{"class":153},"sWKEy"," |",[53,156,157],{"class":137}," dp",[53,159,134],{"class":133},[53,161,163],{"class":162},"sm80-","PathBuilder",[53,165,166],{"class":153}," =",[53,168,170],{"class":169},"sqo_7"," \"\"",[53,172,173],{"class":133},",",[53,175,176],{"class":153}," **",[53,178,179],{"class":137},"kwargs",[53,181,182],{"class":133},")\n",[14,184,185,187,188,190],{},[17,186,143],{}," can be an SVG path data string or a ",[17,189,163],{},". Extra keyword arguments\nbecome SVG attributes.",[44,192,194],{"className":46,"code":193,"language":48,"meta":49,"style":49},"path = dp.Path(\n    \"M40 120 L120 40 L200 120 Z\",\n    fill=\"#14b8a6\",\n    stroke=\"currentColor\",\n    stroke_width=5,\n)\n",[17,195,196,213,229,247,264,278],{"__ignoreMap":49},[53,197,198,201,204,206,208,210],{"class":55,"line":56},[53,199,200],{"class":62},"path ",[53,202,203],{"class":153},"=",[53,205,157],{"class":62},[53,207,134],{"class":133},[53,209,19],{"class":137},[53,211,212],{"class":133},"(\n",[53,214,216,219,223,226],{"class":55,"line":215},2,[53,217,218],{"class":169},"    \"",[53,220,222],{"class":221},"s_jvP","M40 120 L120 40 L200 120 Z",[53,224,225],{"class":169},"\"",[53,227,228],{"class":133},",\n",[53,230,232,236,238,240,243,245],{"class":55,"line":231},3,[53,233,235],{"class":234},"sYEV4","    fill",[53,237,203],{"class":153},[53,239,225],{"class":169},[53,241,242],{"class":221},"#14b8a6",[53,244,225],{"class":169},[53,246,228],{"class":133},[53,248,250,253,255,257,260,262],{"class":55,"line":249},4,[53,251,252],{"class":234},"    stroke",[53,254,203],{"class":153},[53,256,225],{"class":169},[53,258,259],{"class":221},"currentColor",[53,261,225],{"class":169},[53,263,228],{"class":133},[53,265,267,270,272,276],{"class":55,"line":266},5,[53,268,269],{"class":234},"    stroke_width",[53,271,203],{"class":153},[53,273,275],{"class":274},"sNpir","5",[53,277,228],{"class":133},[53,279,281],{"class":55,"line":280},6,[53,282,182],{"class":133},[14,284,285,286,288],{},"The first positional argument sets the SVG ",[17,287,143],{}," attribute.",[44,290,292],{"className":46,"code":291,"language":48,"meta":49,"style":49},"print(path.d)  # M40 120 L120 40 L200 120 Z\n",[17,293,294],{"__ignoreMap":49},[53,295,296,300,302,304,306,308,311],{"class":55,"line":56},[53,297,299],{"class":298},"sBTIf","print",[53,301,140],{"class":133},[53,303,120],{"class":137},[53,305,134],{"class":133},[53,307,143],{"class":162},[53,309,310],{"class":133},")",[53,312,314],{"class":313},"sxl37","  # M40 120 L120 40 L200 120 Z\n",[316,317,318],"h3",{"id":143},[17,319,143],{},[44,321,323],{"className":46,"code":322,"language":48,"meta":49,"style":49},"path.d -> str\npath.d = str | dp.PathBuilder\n",[17,324,325,340],{"__ignoreMap":49},[53,326,327,329,331,333,337],{"class":55,"line":56},[53,328,120],{"class":62},[53,330,134],{"class":133},[53,332,143],{"class":162},[53,334,336],{"class":335},"str-j"," ->",[53,338,339],{"class":149}," str\n",[53,341,342,344,346,348,350,352,354,356,358],{"class":55,"line":215},[53,343,120],{"class":62},[53,345,134],{"class":133},[53,347,143],{"class":162},[53,349,166],{"class":153},[53,351,150],{"class":149},[53,353,154],{"class":153},[53,355,157],{"class":62},[53,357,134],{"class":133},[53,359,360],{"class":162},"PathBuilder\n",[14,362,363],{},"Gets or sets path data.",[44,365,367],{"className":46,"code":366,"language":48,"meta":49,"style":49},"path.d = \"M20 20 H120 V80 H20 Z\"\n",[17,368,369],{"__ignoreMap":49},[53,370,371,373,375,377,379,382,385],{"class":55,"line":56},[53,372,120],{"class":62},[53,374,134],{"class":133},[53,376,143],{"class":162},[53,378,166],{"class":153},[53,380,381],{"class":169}," \"",[53,383,384],{"class":221},"M20 20 H120 V80 H20 Z",[53,386,387],{"class":169},"\"\n",[14,389,390,391,393,394,396],{},"When assigned a ",[17,392,163],{},", ",[17,395,19],{}," stores the builder output string.",[44,398,400],{"className":46,"code":399,"language":48,"meta":49,"style":49},"path.d = dp.PathBuilder().move_to(20, 20).line_to(120, 80).close()\n",[17,401,402],{"__ignoreMap":49},[53,403,404,406,408,410,412,414,416,418,421,424,426,429,431,434,437,440,442,445,447,450,452,455],{"class":55,"line":56},[53,405,120],{"class":62},[53,407,134],{"class":133},[53,409,143],{"class":162},[53,411,166],{"class":153},[53,413,157],{"class":62},[53,415,134],{"class":133},[53,417,163],{"class":137},[53,419,420],{"class":133},"().",[53,422,423],{"class":137},"move_to",[53,425,140],{"class":133},[53,427,428],{"class":274},"20",[53,430,173],{"class":133},[53,432,433],{"class":274}," 20",[53,435,436],{"class":133},").",[53,438,439],{"class":137},"line_to",[53,441,140],{"class":133},[53,443,444],{"class":274},"120",[53,446,173],{"class":133},[53,448,449],{"class":274}," 80",[53,451,436],{"class":133},[53,453,454],{"class":137},"close",[53,456,457],{"class":133},"()\n",[316,459,461,393,464,467,468],{"id":460},"w-h-and-center",[17,462,463],{},"w",[17,465,466],{},"h",", and ",[17,469,470],{},"center",[44,472,474],{"className":46,"code":473,"language":48,"meta":49,"style":49},"path.w -> float\npath.h -> float\npath.center -> Vector\n",[17,475,476,489,501],{"__ignoreMap":49},[53,477,478,480,482,484,486],{"class":55,"line":56},[53,479,120],{"class":62},[53,481,134],{"class":133},[53,483,463],{"class":162},[53,485,336],{"class":335},[53,487,488],{"class":149}," float\n",[53,490,491,493,495,497,499],{"class":55,"line":215},[53,492,120],{"class":62},[53,494,134],{"class":133},[53,496,466],{"class":162},[53,498,336],{"class":335},[53,500,488],{"class":149},[53,502,503,505,507,509,511],{"class":55,"line":231},[53,504,120],{"class":62},[53,506,134],{"class":133},[53,508,470],{"class":162},[53,510,336],{"class":335},[53,512,513],{"class":62}," Vector\n",[14,515,516],{},"These properties are based on explicit coordinates extracted from normalized\npath data. They are useful for rough placement and simple generated paths.",[44,518,520],{"className":46,"code":519,"language":48,"meta":49,"style":49},"path = dp.Path(\"M10 20 L110 20 L110 70 Z\")\n\nprint(path.w)       # 100.0\nprint(path.h)       # 50.0\nprint(path.center)  # Vector(x=60.0, y=45.0)\n",[17,521,522,545,551,568,585],{"__ignoreMap":49},[53,523,524,526,528,530,532,534,536,538,541,543],{"class":55,"line":56},[53,525,200],{"class":62},[53,527,203],{"class":153},[53,529,157],{"class":62},[53,531,134],{"class":133},[53,533,19],{"class":137},[53,535,140],{"class":133},[53,537,225],{"class":169},[53,539,540],{"class":221},"M10 20 L110 20 L110 70 Z",[53,542,225],{"class":169},[53,544,182],{"class":133},[53,546,547],{"class":55,"line":215},[53,548,550],{"emptyLinePlaceholder":549},true,"\n",[53,552,553,555,557,559,561,563,565],{"class":55,"line":231},[53,554,299],{"class":298},[53,556,140],{"class":133},[53,558,120],{"class":137},[53,560,134],{"class":133},[53,562,463],{"class":162},[53,564,310],{"class":133},[53,566,567],{"class":313},"       # 100.0\n",[53,569,570,572,574,576,578,580,582],{"class":55,"line":249},[53,571,299],{"class":298},[53,573,140],{"class":133},[53,575,120],{"class":137},[53,577,134],{"class":133},[53,579,466],{"class":162},[53,581,310],{"class":133},[53,583,584],{"class":313},"       # 50.0\n",[53,586,587,589,591,593,595,597,599],{"class":55,"line":266},[53,588,299],{"class":298},[53,590,140],{"class":133},[53,592,120],{"class":137},[53,594,134],{"class":133},[53,596,470],{"class":162},[53,598,310],{"class":133},[53,600,601],{"class":313},"  # Vector(x=60.0, y=45.0)\n",[14,603,604,605,134],{},"For precise geometry, prefer ",[17,606,607],{},"bbox",[316,609,610],{"id":607},[17,611,607],{},[44,613,615],{"className":46,"code":614,"language":48,"meta":49,"style":49},"path.bbox -> dp.BoundingBox\n",[17,616,617],{"__ignoreMap":49},[53,618,619,621,623,625,627,629,631],{"class":55,"line":56},[53,620,120],{"class":62},[53,622,134],{"class":133},[53,624,607],{"class":162},[53,626,336],{"class":335},[53,628,157],{"class":62},[53,630,134],{"class":133},[53,632,633],{"class":162},"BoundingBox\n",[14,635,636,637,393,640,393,643,393,646,393,649,393,652,393,655,228,658,393,661,467,664,667],{},"Returns a bounding box for paths made from ",[17,638,639],{},"M",[17,641,642],{},"L",[17,644,645],{},"H",[17,647,648],{},"V",[17,650,651],{},"C",[17,653,654],{},"S",[17,656,657],{},"Q",[17,659,660],{},"T",[17,662,663],{},"A",[17,665,666],{},"Z"," commands. Curve and arc bounds are computed from geometric\nextrema, not only from endpoints.",[44,669,671],{"className":46,"code":670,"language":48,"meta":49,"style":49},"path = dp.Path(\"M10 20 h100 v50 h-100 z\")\nbox = path.bbox\n\nprint(box)  # BoundingBox(x=10.0, y=20.0, width=100.0, height=50.0)\n",[17,672,673,696,711,715],{"__ignoreMap":49},[53,674,675,677,679,681,683,685,687,689,692,694],{"class":55,"line":56},[53,676,200],{"class":62},[53,678,203],{"class":153},[53,680,157],{"class":62},[53,682,134],{"class":133},[53,684,19],{"class":137},[53,686,140],{"class":133},[53,688,225],{"class":169},[53,690,691],{"class":221},"M10 20 h100 v50 h-100 z",[53,693,225],{"class":169},[53,695,182],{"class":133},[53,697,698,701,703,706,708],{"class":55,"line":215},[53,699,700],{"class":62},"box ",[53,702,203],{"class":153},[53,704,705],{"class":62}," path",[53,707,134],{"class":133},[53,709,710],{"class":162},"bbox\n",[53,712,713],{"class":55,"line":231},[53,714,550],{"emptyLinePlaceholder":549},[53,716,717,719,721,724,726],{"class":55,"line":249},[53,718,299],{"class":298},[53,720,140],{"class":133},[53,722,723],{"class":137},"box",[53,725,310],{"class":133},[53,727,728],{"class":313},"  # BoundingBox(x=10.0, y=20.0, width=100.0, height=50.0)\n",[14,730,731,732,134],{},"Malformed path data raises ",[17,733,734],{},"ValueError",[316,736,738],{"id":737},"linear-measurement","Linear Measurement",[44,740,742],{"className":46,"code":741,"language":48,"meta":49,"style":49},"path.length -> float\npath.point_at(distance: Real) -> Vector\npath.tangent_at(distance: Real) -> Vector\n",[17,743,744,757,782],{"__ignoreMap":49},[53,745,746,748,750,753,755],{"class":55,"line":56},[53,747,120],{"class":62},[53,749,134],{"class":133},[53,751,752],{"class":162},"length",[53,754,336],{"class":335},[53,756,488],{"class":149},[53,758,759,761,763,766,768,771,773,776,778,780],{"class":55,"line":215},[53,760,120],{"class":62},[53,762,134],{"class":133},[53,764,765],{"class":137},"point_at",[53,767,140],{"class":133},[53,769,770],{"class":137},"distance",[53,772,146],{"class":133},[53,774,775],{"class":137}," Real",[53,777,310],{"class":133},[53,779,336],{"class":335},[53,781,513],{"class":62},[53,783,784,786,788,791,793,795,797,799,801,803],{"class":55,"line":231},[53,785,120],{"class":62},[53,787,134],{"class":133},[53,789,790],{"class":137},"tangent_at",[53,792,140],{"class":133},[53,794,770],{"class":137},[53,796,146],{"class":133},[53,798,775],{"class":137},[53,800,310],{"class":133},[53,802,336],{"class":335},[53,804,513],{"class":62},[14,806,807,808,393,811,814,815,134],{},"These helpers are backed by ",[17,809,810],{},"path_length()",[17,812,813],{},"point_at_length()",", and\n",[17,816,817],{},"tangent_at_length()",[44,819,821],{"className":46,"code":820,"language":48,"meta":49,"style":49},"route = dp.Path(\"M0 0 L10 0 L10 10\")\n\nprint(route.length)         # 20.0\nprint(route.point_at(15))   # Vector(x=10.0, y=5.0)\nprint(route.tangent_at(15)) # Vector(x=0.0, y=1.0)\n",[17,822,823,847,851,869,892],{"__ignoreMap":49},[53,824,825,828,830,832,834,836,838,840,843,845],{"class":55,"line":56},[53,826,827],{"class":62},"route ",[53,829,203],{"class":153},[53,831,157],{"class":62},[53,833,134],{"class":133},[53,835,19],{"class":137},[53,837,140],{"class":133},[53,839,225],{"class":169},[53,841,842],{"class":221},"M0 0 L10 0 L10 10",[53,844,225],{"class":169},[53,846,182],{"class":133},[53,848,849],{"class":55,"line":215},[53,850,550],{"emptyLinePlaceholder":549},[53,852,853,855,857,860,862,864,866],{"class":55,"line":231},[53,854,299],{"class":298},[53,856,140],{"class":133},[53,858,859],{"class":137},"route",[53,861,134],{"class":133},[53,863,752],{"class":162},[53,865,310],{"class":133},[53,867,868],{"class":313},"         # 20.0\n",[53,870,871,873,875,877,879,881,883,886,889],{"class":55,"line":249},[53,872,299],{"class":298},[53,874,140],{"class":133},[53,876,859],{"class":137},[53,878,134],{"class":133},[53,880,765],{"class":137},[53,882,140],{"class":133},[53,884,885],{"class":274},"15",[53,887,888],{"class":133},"))",[53,890,891],{"class":313},"   # Vector(x=10.0, y=5.0)\n",[53,893,894,896,898,900,902,904,906,908,910],{"class":55,"line":266},[53,895,299],{"class":298},[53,897,140],{"class":133},[53,899,859],{"class":137},[53,901,134],{"class":133},[53,903,790],{"class":137},[53,905,140],{"class":133},[53,907,885],{"class":274},[53,909,888],{"class":133},[53,911,912],{"class":313}," # Vector(x=0.0, y=1.0)\n",[14,914,915,916,393,918,393,920,393,922,814,924,926,927,929],{},"Measurement currently supports linear commands only: ",[17,917,639],{},[17,919,642],{},[17,921,645],{},[17,923,648],{},[17,925,666],{},". Curves and arcs raise ",[17,928,734],{}," in measurement functions.",[44,931,933],{"className":46,"code":932,"language":48,"meta":49,"style":49},"curve = dp.Path(\"M0 0 C10 0 20 10 30 10\")\n\ntry:\n    curve.length\nexcept ValueError:\n    print(\"curves are not supported by linear measurement\")\n",[17,934,935,959,963,971,981,991],{"__ignoreMap":49},[53,936,937,940,942,944,946,948,950,952,955,957],{"class":55,"line":56},[53,938,939],{"class":62},"curve ",[53,941,203],{"class":153},[53,943,157],{"class":62},[53,945,134],{"class":133},[53,947,19],{"class":137},[53,949,140],{"class":133},[53,951,225],{"class":169},[53,953,954],{"class":221},"M0 0 C10 0 20 10 30 10",[53,956,225],{"class":169},[53,958,182],{"class":133},[53,960,961],{"class":55,"line":215},[53,962,550],{"emptyLinePlaceholder":549},[53,964,965,968],{"class":55,"line":231},[53,966,967],{"class":59},"try",[53,969,970],{"class":133},":\n",[53,972,973,976,978],{"class":55,"line":249},[53,974,975],{"class":62},"    curve",[53,977,134],{"class":133},[53,979,980],{"class":162},"length\n",[53,982,983,986,989],{"class":55,"line":266},[53,984,985],{"class":59},"except",[53,987,988],{"class":149}," ValueError",[53,990,970],{"class":133},[53,992,993,996,998,1000,1003,1005],{"class":55,"line":280},[53,994,995],{"class":298},"    print",[53,997,140],{"class":133},[53,999,225],{"class":169},[53,1001,1002],{"class":221},"curves are not supported by linear measurement",[53,1004,225],{"class":169},[53,1006,182],{"class":133},[14,1008,1009],{},"Distances below zero clamp to the start of the path. Distances past the total\nlength return the final point or last nonzero tangent.",[39,1011,163],{"id":1012},"pathbuilder",[44,1014,1016],{"className":46,"code":1015,"language":48,"meta":49,"style":49},"dp.PathBuilder()\n",[17,1017,1018],{"__ignoreMap":49},[53,1019,1020,1022,1024,1026],{"class":55,"line":56},[53,1021,130],{"class":62},[53,1023,134],{"class":133},[53,1025,163],{"class":137},[53,1027,457],{"class":133},[14,1029,1030,1032,1033,1036,1037,1040],{},[17,1031,163],{}," builds SVG path data with chainable methods. Methods ending in\n",[17,1034,1035],{},"_to"," create absolute commands; methods ending in ",[17,1038,1039],{},"_by"," create relative\ncommands.",[44,1042,1044],{"className":46,"code":1043,"language":48,"meta":49,"style":49},"data = (\n    dp.PathBuilder()\n    .move_to(40, 120)\n    .line_to(120, 40)\n    .line_to(200, 120)\n    .close()\n)\n\npath = dp.Path(data, fill=\"#14b8a6\")\n",[17,1045,1046,1056,1067,1086,1103,1120,1128,1133,1138],{"__ignoreMap":49},[53,1047,1048,1051,1053],{"class":55,"line":56},[53,1049,1050],{"class":62},"data ",[53,1052,203],{"class":153},[53,1054,1055],{"class":133}," (\n",[53,1057,1058,1061,1063,1065],{"class":55,"line":215},[53,1059,1060],{"class":62},"    dp",[53,1062,134],{"class":133},[53,1064,163],{"class":137},[53,1066,457],{"class":133},[53,1068,1069,1072,1074,1076,1079,1081,1084],{"class":55,"line":231},[53,1070,1071],{"class":133},"    .",[53,1073,423],{"class":137},[53,1075,140],{"class":133},[53,1077,1078],{"class":274},"40",[53,1080,173],{"class":133},[53,1082,1083],{"class":274}," 120",[53,1085,182],{"class":133},[53,1087,1088,1090,1092,1094,1096,1098,1101],{"class":55,"line":249},[53,1089,1071],{"class":133},[53,1091,439],{"class":137},[53,1093,140],{"class":133},[53,1095,444],{"class":274},[53,1097,173],{"class":133},[53,1099,1100],{"class":274}," 40",[53,1102,182],{"class":133},[53,1104,1105,1107,1109,1111,1114,1116,1118],{"class":55,"line":266},[53,1106,1071],{"class":133},[53,1108,439],{"class":137},[53,1110,140],{"class":133},[53,1112,1113],{"class":274},"200",[53,1115,173],{"class":133},[53,1117,1083],{"class":274},[53,1119,182],{"class":133},[53,1121,1122,1124,1126],{"class":55,"line":280},[53,1123,1071],{"class":133},[53,1125,454],{"class":137},[53,1127,457],{"class":133},[53,1129,1131],{"class":55,"line":1130},7,[53,1132,182],{"class":133},[53,1134,1136],{"class":55,"line":1135},8,[53,1137,550],{"emptyLinePlaceholder":549},[53,1139,1141,1143,1145,1147,1149,1151,1153,1156,1158,1161,1163,1165,1167,1169],{"class":55,"line":1140},9,[53,1142,200],{"class":62},[53,1144,203],{"class":153},[53,1146,157],{"class":62},[53,1148,134],{"class":133},[53,1150,19],{"class":137},[53,1152,140],{"class":133},[53,1154,1155],{"class":137},"data",[53,1157,173],{"class":133},[53,1159,1160],{"class":234}," fill",[53,1162,203],{"class":153},[53,1164,225],{"class":169},[53,1166,242],{"class":221},[53,1168,225],{"class":169},[53,1170,182],{"class":133},[44,1172,1174],{"className":46,"code":1173,"language":48,"meta":49,"style":49},"print(data.to_string())  # M40 120 L120 40 L200 120 Z\nprint(str(data))         # M40 120 L120 40 L200 120 Z\n",[17,1175,1176,1194],{"__ignoreMap":49},[53,1177,1178,1180,1182,1184,1186,1189,1192],{"class":55,"line":56},[53,1179,299],{"class":298},[53,1181,140],{"class":133},[53,1183,1155],{"class":137},[53,1185,134],{"class":133},[53,1187,1188],{"class":137},"to_string",[53,1190,1191],{"class":133},"())",[53,1193,314],{"class":313},[53,1195,1196,1198,1200,1203,1205,1207,1209],{"class":55,"line":215},[53,1197,299],{"class":298},[53,1199,140],{"class":133},[53,1201,1202],{"class":149},"str",[53,1204,140],{"class":133},[53,1206,1155],{"class":137},[53,1208,888],{"class":133},[53,1210,1211],{"class":313},"         # M40 120 L120 40 L200 120 Z\n",[316,1213,1215],{"id":1214},"move-and-line-commands","Move And Line Commands",[75,1217,1218,1231],{},[78,1219,1220],{},[81,1221,1222,1225,1228],{},[84,1223,1224],{},"Method",[84,1226,1227],{},"SVG command",[84,1229,1230],{},"Description",[91,1232,1233,1247,1262,1276,1291,1305,1319,1333,1348],{},[81,1234,1235,1240,1244],{},[96,1236,1237],{},[17,1238,1239],{},"move_to(x, y)",[96,1241,1242],{},[17,1243,639],{},[96,1245,1246],{},"Move to an absolute point.",[81,1248,1249,1254,1259],{},[96,1250,1251],{},[17,1252,1253],{},"move_by(dx, dy)",[96,1255,1256],{},[17,1257,1258],{},"m",[96,1260,1261],{},"Move relative to the current point.",[81,1263,1264,1269,1273],{},[96,1265,1266],{},[17,1267,1268],{},"line_to(x, y)",[96,1270,1271],{},[17,1272,642],{},[96,1274,1275],{},"Draw a line to an absolute point.",[81,1277,1278,1283,1288],{},[96,1279,1280],{},[17,1281,1282],{},"line_by(dx, dy)",[96,1284,1285],{},[17,1286,1287],{},"l",[96,1289,1290],{},"Draw a relative line.",[81,1292,1293,1298,1302],{},[96,1294,1295],{},[17,1296,1297],{},"horizontal_to(x)",[96,1299,1300],{},[17,1301,645],{},[96,1303,1304],{},"Draw a horizontal line to absolute x.",[81,1306,1307,1312,1316],{},[96,1308,1309],{},[17,1310,1311],{},"horizontal_by(dx)",[96,1313,1314],{},[17,1315,466],{},[96,1317,1318],{},"Draw a relative horizontal line.",[81,1320,1321,1326,1330],{},[96,1322,1323],{},[17,1324,1325],{},"vertical_to(y)",[96,1327,1328],{},[17,1329,648],{},[96,1331,1332],{},"Draw a vertical line to absolute y.",[81,1334,1335,1340,1345],{},[96,1336,1337],{},[17,1338,1339],{},"vertical_by(dy)",[96,1341,1342],{},[17,1343,1344],{},"v",[96,1346,1347],{},"Draw a relative vertical line.",[81,1349,1350,1355,1359],{},[96,1351,1352],{},[17,1353,1354],{},"close()",[96,1356,1357],{},[17,1358,666],{},[96,1360,1361],{},"Close the current subpath.",[316,1363,1365],{"id":1364},"curve-commands","Curve Commands",[75,1367,1368,1378],{},[78,1369,1370],{},[81,1371,1372,1374,1376],{},[84,1373,1224],{},[84,1375,1227],{},[84,1377,1230],{},[91,1379,1380,1394,1409,1423,1438,1452,1467,1481],{},[81,1381,1382,1387,1391],{},[96,1383,1384],{},[17,1385,1386],{},"curve_to(x1, y1, x2, y2, x, y)",[96,1388,1389],{},[17,1390,651],{},[96,1392,1393],{},"Cubic Bezier curve.",[81,1395,1396,1401,1406],{},[96,1397,1398],{},[17,1399,1400],{},"curve_by(dx1, dy1, dx2, dy2, dx, dy)",[96,1402,1403],{},[17,1404,1405],{},"c",[96,1407,1408],{},"Relative cubic Bezier curve.",[81,1410,1411,1416,1420],{},[96,1412,1413],{},[17,1414,1415],{},"smooth_curve_to(x2, y2, x, y)",[96,1417,1418],{},[17,1419,654],{},[96,1421,1422],{},"Smooth cubic Bezier curve.",[81,1424,1425,1430,1435],{},[96,1426,1427],{},[17,1428,1429],{},"smooth_curve_by(dx2, dy2, dx, dy)",[96,1431,1432],{},[17,1433,1434],{},"s",[96,1436,1437],{},"Relative smooth cubic Bezier curve.",[81,1439,1440,1445,1449],{},[96,1441,1442],{},[17,1443,1444],{},"quadratic_to(x1, y1, x, y)",[96,1446,1447],{},[17,1448,657],{},[96,1450,1451],{},"Quadratic Bezier curve.",[81,1453,1454,1459,1464],{},[96,1455,1456],{},[17,1457,1458],{},"quadratic_by(dx1, dy1, dx, dy)",[96,1460,1461],{},[17,1462,1463],{},"q",[96,1465,1466],{},"Relative quadratic Bezier curve.",[81,1468,1469,1474,1478],{},[96,1470,1471],{},[17,1472,1473],{},"smooth_quadratic_to(x, y)",[96,1475,1476],{},[17,1477,660],{},[96,1479,1480],{},"Smooth quadratic Bezier curve.",[81,1482,1483,1488,1493],{},[96,1484,1485],{},[17,1486,1487],{},"smooth_quadratic_by(dx, dy)",[96,1489,1490],{},[17,1491,1492],{},"t",[96,1494,1495],{},"Relative smooth quadratic Bezier curve.",[44,1497,1499],{"className":46,"code":1498,"language":48,"meta":49,"style":49},"wave = (\n    dp.PathBuilder()\n    .move_to(40, 100)\n    .curve_to(80, 20, 140, 20, 180, 100)\n    .smooth_curve_to(260, 180, 300, 100)\n)\n",[17,1500,1501,1510,1520,1537,1573,1600],{"__ignoreMap":49},[53,1502,1503,1506,1508],{"class":55,"line":56},[53,1504,1505],{"class":62},"wave ",[53,1507,203],{"class":153},[53,1509,1055],{"class":133},[53,1511,1512,1514,1516,1518],{"class":55,"line":215},[53,1513,1060],{"class":62},[53,1515,134],{"class":133},[53,1517,163],{"class":137},[53,1519,457],{"class":133},[53,1521,1522,1524,1526,1528,1530,1532,1535],{"class":55,"line":231},[53,1523,1071],{"class":133},[53,1525,423],{"class":137},[53,1527,140],{"class":133},[53,1529,1078],{"class":274},[53,1531,173],{"class":133},[53,1533,1534],{"class":274}," 100",[53,1536,182],{"class":133},[53,1538,1539,1541,1544,1546,1549,1551,1553,1555,1558,1560,1562,1564,1567,1569,1571],{"class":55,"line":249},[53,1540,1071],{"class":133},[53,1542,1543],{"class":137},"curve_to",[53,1545,140],{"class":133},[53,1547,1548],{"class":274},"80",[53,1550,173],{"class":133},[53,1552,433],{"class":274},[53,1554,173],{"class":133},[53,1556,1557],{"class":274}," 140",[53,1559,173],{"class":133},[53,1561,433],{"class":274},[53,1563,173],{"class":133},[53,1565,1566],{"class":274}," 180",[53,1568,173],{"class":133},[53,1570,1534],{"class":274},[53,1572,182],{"class":133},[53,1574,1575,1577,1580,1582,1585,1587,1589,1591,1594,1596,1598],{"class":55,"line":266},[53,1576,1071],{"class":133},[53,1578,1579],{"class":137},"smooth_curve_to",[53,1581,140],{"class":133},[53,1583,1584],{"class":274},"260",[53,1586,173],{"class":133},[53,1588,1566],{"class":274},[53,1590,173],{"class":133},[53,1592,1593],{"class":274}," 300",[53,1595,173],{"class":133},[53,1597,1534],{"class":274},[53,1599,182],{"class":133},[53,1601,1602],{"class":55,"line":280},[53,1603,182],{"class":133},[316,1605,1607],{"id":1606},"arc-commands","Arc Commands",[44,1609,1611],{"className":46,"code":1610,"language":48,"meta":49,"style":49},"builder.arc_to(rx, ry, x_axis_rotation, large_arc, sweep, x, y)\nbuilder.arc_by(rx, ry, x_axis_rotation, large_arc, sweep, dx, dy)\n",[17,1612,1613,1660],{"__ignoreMap":49},[53,1614,1615,1618,1620,1623,1625,1628,1630,1633,1635,1638,1640,1643,1645,1648,1650,1653,1655,1658],{"class":55,"line":56},[53,1616,1617],{"class":62},"builder",[53,1619,134],{"class":133},[53,1621,1622],{"class":137},"arc_to",[53,1624,140],{"class":133},[53,1626,1627],{"class":137},"rx",[53,1629,173],{"class":133},[53,1631,1632],{"class":137}," ry",[53,1634,173],{"class":133},[53,1636,1637],{"class":137}," x_axis_rotation",[53,1639,173],{"class":133},[53,1641,1642],{"class":137}," large_arc",[53,1644,173],{"class":133},[53,1646,1647],{"class":137}," sweep",[53,1649,173],{"class":133},[53,1651,1652],{"class":137}," x",[53,1654,173],{"class":133},[53,1656,1657],{"class":137}," y",[53,1659,182],{"class":133},[53,1661,1662,1664,1666,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1694,1696,1699],{"class":55,"line":215},[53,1663,1617],{"class":62},[53,1665,134],{"class":133},[53,1667,1668],{"class":137},"arc_by",[53,1670,140],{"class":133},[53,1672,1627],{"class":137},[53,1674,173],{"class":133},[53,1676,1632],{"class":137},[53,1678,173],{"class":133},[53,1680,1637],{"class":137},[53,1682,173],{"class":133},[53,1684,1642],{"class":137},[53,1686,173],{"class":133},[53,1688,1647],{"class":137},[53,1690,173],{"class":133},[53,1692,1693],{"class":137}," dx",[53,1695,173],{"class":133},[53,1697,1698],{"class":137}," dy",[53,1700,182],{"class":133},[14,1702,1703,1706,1707,1710,1711,1714,1715,1718,1719,1714,1722,134],{},[17,1704,1705],{},"large_arc"," and ",[17,1708,1709],{},"sweep"," accept ",[17,1712,1713],{},"bool"," or ",[17,1716,1717],{},"int","; the builder serializes them as\n",[17,1720,1721],{},"0",[17,1723,1724],{},"1",[44,1726,1728],{"className":46,"code":1727,"language":48,"meta":49,"style":49},"arc = (\n    dp.PathBuilder()\n    .move_to(40, 100)\n    .arc_to(60, 60, 0, False, True, 160, 100)\n)\n",[17,1729,1730,1739,1749,1765,1808],{"__ignoreMap":49},[53,1731,1732,1735,1737],{"class":55,"line":56},[53,1733,1734],{"class":62},"arc ",[53,1736,203],{"class":153},[53,1738,1055],{"class":133},[53,1740,1741,1743,1745,1747],{"class":55,"line":215},[53,1742,1060],{"class":62},[53,1744,134],{"class":133},[53,1746,163],{"class":137},[53,1748,457],{"class":133},[53,1750,1751,1753,1755,1757,1759,1761,1763],{"class":55,"line":231},[53,1752,1071],{"class":133},[53,1754,423],{"class":137},[53,1756,140],{"class":133},[53,1758,1078],{"class":274},[53,1760,173],{"class":133},[53,1762,1534],{"class":274},[53,1764,182],{"class":133},[53,1766,1767,1769,1771,1773,1776,1778,1781,1783,1786,1788,1792,1794,1797,1799,1802,1804,1806],{"class":55,"line":249},[53,1768,1071],{"class":133},[53,1770,1622],{"class":137},[53,1772,140],{"class":133},[53,1774,1775],{"class":274},"60",[53,1777,173],{"class":133},[53,1779,1780],{"class":274}," 60",[53,1782,173],{"class":133},[53,1784,1785],{"class":274}," 0",[53,1787,173],{"class":133},[53,1789,1791],{"class":1790},"sTy78"," False",[53,1793,173],{"class":133},[53,1795,1796],{"class":1790}," True",[53,1798,173],{"class":133},[53,1800,1801],{"class":274}," 160",[53,1803,173],{"class":133},[53,1805,1534],{"class":274},[53,1807,182],{"class":133},[53,1809,1810],{"class":55,"line":266},[53,1811,182],{"class":133},[39,1813,1815],{"id":1814},"pathcommand","PathCommand",[44,1817,1819],{"className":46,"code":1818,"language":48,"meta":49,"style":49},"dp.PathCommand(command: str, values: tuple[float, ...] = ())\n",[17,1820,1821],{"__ignoreMap":49},[53,1822,1823,1825,1827,1829,1831,1834,1836,1838,1840,1843,1845,1848,1851,1854,1856,1859,1862,1864],{"class":55,"line":56},[53,1824,130],{"class":62},[53,1826,134],{"class":133},[53,1828,1815],{"class":137},[53,1830,140],{"class":133},[53,1832,1833],{"class":137},"command",[53,1835,146],{"class":133},[53,1837,150],{"class":149},[53,1839,173],{"class":133},[53,1841,1842],{"class":137}," values",[53,1844,146],{"class":133},[53,1846,1847],{"class":137}," tuple",[53,1849,1850],{"class":133},"[",[53,1852,1853],{"class":149},"float",[53,1855,173],{"class":133},[53,1857,1858],{"class":298}," ...",[53,1860,1861],{"class":133},"]",[53,1863,166],{"class":153},[53,1865,1866],{"class":133}," ())\n",[14,1868,1869],{},"Represents a parsed path command.",[75,1871,1872,1881],{},[78,1873,1874],{},[81,1875,1876,1879],{},[84,1877,1878],{},"Property",[84,1880,1230],{},[91,1882,1883,1892,1902,1918,1928],{},[81,1884,1885,1889],{},[96,1886,1887],{},[17,1888,1833],{},[96,1890,1891],{},"SVG command letter.",[81,1893,1894,1899],{},[96,1895,1896],{},[17,1897,1898],{},"values",[96,1900,1901],{},"Numeric command values.",[81,1903,1904,1909],{},[96,1905,1906],{},[17,1907,1908],{},"is_relative",[96,1910,1911,1914,1915,1917],{},[17,1912,1913],{},"True"," when ",[17,1916,1833],{}," is lowercase.",[81,1919,1920,1925],{},[96,1921,1922],{},[17,1923,1924],{},"absolute_command",[96,1926,1927],{},"Uppercase command letter.",[81,1929,1930,1935],{},[96,1931,1932],{},[17,1933,1934],{},"to_string()",[96,1936,1937],{},"Serializes the command.",[44,1939,1941],{"className":46,"code":1940,"language":48,"meta":49,"style":49},"command = dp.PathCommand(\"l\", (10.0, 20.0))\n\nprint(command.is_relative)     # True\nprint(command.absolute_command) # L\nprint(command.to_string())      # l10 20\n",[17,1942,1943,1980,1984,2001,2018],{"__ignoreMap":49},[53,1944,1945,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1969,1972,1974,1977],{"class":55,"line":56},[53,1946,1947],{"class":62},"command ",[53,1949,203],{"class":153},[53,1951,157],{"class":62},[53,1953,134],{"class":133},[53,1955,1815],{"class":137},[53,1957,140],{"class":133},[53,1959,225],{"class":169},[53,1961,1287],{"class":221},[53,1963,225],{"class":169},[53,1965,173],{"class":133},[53,1967,1968],{"class":133}," (",[53,1970,1971],{"class":274},"10.0",[53,1973,173],{"class":133},[53,1975,1976],{"class":274}," 20.0",[53,1978,1979],{"class":133},"))\n",[53,1981,1982],{"class":55,"line":215},[53,1983,550],{"emptyLinePlaceholder":549},[53,1985,1986,1988,1990,1992,1994,1996,1998],{"class":55,"line":231},[53,1987,299],{"class":298},[53,1989,140],{"class":133},[53,1991,1833],{"class":137},[53,1993,134],{"class":133},[53,1995,1908],{"class":162},[53,1997,310],{"class":133},[53,1999,2000],{"class":313},"     # True\n",[53,2002,2003,2005,2007,2009,2011,2013,2015],{"class":55,"line":249},[53,2004,299],{"class":298},[53,2006,140],{"class":133},[53,2008,1833],{"class":137},[53,2010,134],{"class":133},[53,2012,1924],{"class":162},[53,2014,310],{"class":133},[53,2016,2017],{"class":313}," # L\n",[53,2019,2020,2022,2024,2026,2028,2030,2032],{"class":55,"line":266},[53,2021,299],{"class":298},[53,2023,140],{"class":133},[53,2025,1833],{"class":137},[53,2027,134],{"class":133},[53,2029,1188],{"class":137},[53,2031,1191],{"class":133},[53,2033,2034],{"class":313},"      # l10 20\n",[39,2036,2038],{"id":2037},"pathsegment","PathSegment",[44,2040,2042],{"className":46,"code":2041,"language":48,"meta":49,"style":49},"dp.PathSegment(command: str, start: Vector, end: Vector)\n",[17,2043,2044],{"__ignoreMap":49},[53,2045,2046,2048,2050,2052,2054,2056,2058,2060,2062,2065,2067,2070,2072,2075,2077,2079],{"class":55,"line":56},[53,2047,130],{"class":62},[53,2049,134],{"class":133},[53,2051,2038],{"class":137},[53,2053,140],{"class":133},[53,2055,1833],{"class":137},[53,2057,146],{"class":133},[53,2059,150],{"class":149},[53,2061,173],{"class":133},[53,2063,2064],{"class":137}," start",[53,2066,146],{"class":133},[53,2068,2069],{"class":137}," Vector",[53,2071,173],{"class":133},[53,2073,2074],{"class":137}," end",[53,2076,146],{"class":133},[53,2078,2069],{"class":137},[53,2080,182],{"class":133},[14,2082,2083],{},"Represents a measured linear path segment.",[75,2085,2086,2095],{},[78,2087,2088],{},[81,2089,2090,2093],{},[84,2091,2092],{},"Property or method",[84,2094,1230],{},[91,2096,2097,2106,2116],{},[81,2098,2099,2103],{},[96,2100,2101],{},[17,2102,752],{},[96,2104,2105],{},"Euclidean segment length.",[81,2107,2108,2113],{},[96,2109,2110],{},[17,2111,2112],{},"point_at(distance)",[96,2114,2115],{},"Point at a distance along the segment, clamped to the segment.",[81,2117,2118,2123],{},[96,2119,2120],{},[17,2121,2122],{},"tangent",[96,2124,2125,2126,2129],{},"Unit direction vector, or ",[17,2127,2128],{},"Vector(0, 0)"," for zero-length segments.",[14,2131,2132,2134,2135,134],{},[17,2133,2038],{}," is produced by ",[17,2136,2137],{},"iter_path_segments()",[39,2139,2141],{"id":2140},"parsing-and-normalization","Parsing And Normalization",[316,2143,2145],{"id":2144},"parse_path_data",[17,2146,2144],{},[44,2148,2150],{"className":46,"code":2149,"language":48,"meta":49,"style":49},"dp.parse_path_data(path_data: str) -> list[dp.PathCommand]\n",[17,2151,2152],{"__ignoreMap":49},[53,2153,2154,2156,2158,2160,2162,2165,2167,2169,2171,2173,2176,2178,2180,2182,2184],{"class":55,"line":56},[53,2155,130],{"class":62},[53,2157,134],{"class":133},[53,2159,2144],{"class":137},[53,2161,140],{"class":133},[53,2163,2164],{"class":137},"path_data",[53,2166,146],{"class":133},[53,2168,150],{"class":149},[53,2170,310],{"class":133},[53,2172,336],{"class":335},[53,2174,2175],{"class":62}," list",[53,2177,1850],{"class":133},[53,2179,130],{"class":62},[53,2181,134],{"class":133},[53,2183,1815],{"class":162},[53,2185,2186],{"class":133},"]\n",[14,2188,2189,2190,2192],{},"Parses SVG path data into ",[17,2191,1815],{}," objects. Relative commands are\npreserved.",[44,2194,2196],{"className":46,"code":2195,"language":48,"meta":49,"style":49},"commands = dp.parse_path_data(\"M10 20 l100 0 v50 z\")\n\nprint([command.command for command in commands])  # ['M', 'l', 'v', 'z']\n",[17,2197,2198,2222,2226],{"__ignoreMap":49},[53,2199,2200,2203,2205,2207,2209,2211,2213,2215,2218,2220],{"class":55,"line":56},[53,2201,2202],{"class":62},"commands ",[53,2204,203],{"class":153},[53,2206,157],{"class":62},[53,2208,134],{"class":133},[53,2210,2144],{"class":137},[53,2212,140],{"class":133},[53,2214,225],{"class":169},[53,2216,2217],{"class":221},"M10 20 l100 0 v50 z",[53,2219,225],{"class":169},[53,2221,182],{"class":133},[53,2223,2224],{"class":55,"line":215},[53,2225,550],{"emptyLinePlaceholder":549},[53,2227,2228,2230,2233,2235,2237,2239,2242,2245,2248,2251,2254],{"class":55,"line":231},[53,2229,299],{"class":298},[53,2231,2232],{"class":133},"([",[53,2234,1833],{"class":137},[53,2236,134],{"class":133},[53,2238,1833],{"class":162},[53,2240,2241],{"class":59}," for",[53,2243,2244],{"class":137}," command ",[53,2246,2247],{"class":59},"in",[53,2249,2250],{"class":137}," commands",[53,2252,2253],{"class":133},"])",[53,2255,2256],{"class":313},"  # ['M', 'l', 'v', 'z']\n",[14,2258,2259],{},"The parser expands repeated coordinate groups into explicit commands according\nto SVG path rules.",[44,2261,2263],{"className":46,"code":2262,"language":48,"meta":49,"style":49},"commands = dp.parse_path_data(\"M0 0 10 10 20 0\")\n\nprint([command.command for command in commands])  # ['M', 'L', 'L']\n",[17,2264,2265,2288,2292],{"__ignoreMap":49},[53,2266,2267,2269,2271,2273,2275,2277,2279,2281,2284,2286],{"class":55,"line":56},[53,2268,2202],{"class":62},[53,2270,203],{"class":153},[53,2272,157],{"class":62},[53,2274,134],{"class":133},[53,2276,2144],{"class":137},[53,2278,140],{"class":133},[53,2280,225],{"class":169},[53,2282,2283],{"class":221},"M0 0 10 10 20 0",[53,2285,225],{"class":169},[53,2287,182],{"class":133},[53,2289,2290],{"class":55,"line":215},[53,2291,550],{"emptyLinePlaceholder":549},[53,2293,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314],{"class":55,"line":231},[53,2295,299],{"class":298},[53,2297,2232],{"class":133},[53,2299,1833],{"class":137},[53,2301,134],{"class":133},[53,2303,1833],{"class":162},[53,2305,2241],{"class":59},[53,2307,2244],{"class":137},[53,2309,2247],{"class":59},[53,2311,2250],{"class":137},[53,2313,2253],{"class":133},[53,2315,2316],{"class":313},"  # ['M', 'L', 'L']\n",[316,2318,2320],{"id":2319},"normalize_path_commands",[17,2321,2319],{},[44,2323,2325],{"className":46,"code":2324,"language":48,"meta":49,"style":49},"dp.normalize_path_commands(path_data: str) -> list[dp.PathCommand]\n",[17,2326,2327],{"__ignoreMap":49},[53,2328,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357],{"class":55,"line":56},[53,2330,130],{"class":62},[53,2332,134],{"class":133},[53,2334,2319],{"class":137},[53,2336,140],{"class":133},[53,2338,2164],{"class":137},[53,2340,146],{"class":133},[53,2342,150],{"class":149},[53,2344,310],{"class":133},[53,2346,336],{"class":335},[53,2348,2175],{"class":62},[53,2350,1850],{"class":133},[53,2352,130],{"class":62},[53,2354,134],{"class":133},[53,2356,1815],{"class":162},[53,2358,2186],{"class":133},[14,2360,2361,2362,393,2364,393,2366,393,2368,467,2370,134],{},"Converts relative commands to absolute commands while preserving command types\nsuch as ",[17,2363,645],{},[17,2365,648],{},[17,2367,651],{},[17,2369,657],{},[17,2371,663],{},[44,2373,2375],{"className":46,"code":2374,"language":48,"meta":49,"style":49},"commands = dp.normalize_path_commands(\"M10 20 l100 0 v50 h-100 Z\")\n\nprint([str(command) for command in commands])\n# ['M10 20', 'L110 20', 'V70', 'H10', 'Z']\n",[17,2376,2377,2400,2404,2429],{"__ignoreMap":49},[53,2378,2379,2381,2383,2385,2387,2389,2391,2393,2396,2398],{"class":55,"line":56},[53,2380,2202],{"class":62},[53,2382,203],{"class":153},[53,2384,157],{"class":62},[53,2386,134],{"class":133},[53,2388,2319],{"class":137},[53,2390,140],{"class":133},[53,2392,225],{"class":169},[53,2394,2395],{"class":221},"M10 20 l100 0 v50 h-100 Z",[53,2397,225],{"class":169},[53,2399,182],{"class":133},[53,2401,2402],{"class":55,"line":215},[53,2403,550],{"emptyLinePlaceholder":549},[53,2405,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426],{"class":55,"line":231},[53,2407,299],{"class":298},[53,2409,2232],{"class":133},[53,2411,1202],{"class":149},[53,2413,140],{"class":133},[53,2415,1833],{"class":137},[53,2417,310],{"class":133},[53,2419,2241],{"class":59},[53,2421,2244],{"class":137},[53,2423,2247],{"class":59},[53,2425,2250],{"class":137},[53,2427,2428],{"class":133},"])\n",[53,2430,2431],{"class":55,"line":249},[53,2432,2433],{"class":313},"# ['M10 20', 'L110 20', 'V70', 'H10', 'Z']\n",[316,2435,2437],{"id":2436},"normalize_path_data",[17,2438,2436],{},[44,2440,2442],{"className":46,"code":2441,"language":48,"meta":49,"style":49},"dp.normalize_path_data(path_data: str) -> str\n",[17,2443,2444],{"__ignoreMap":49},[53,2445,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464],{"class":55,"line":56},[53,2447,130],{"class":62},[53,2449,134],{"class":133},[53,2451,2436],{"class":137},[53,2453,140],{"class":133},[53,2455,2164],{"class":137},[53,2457,146],{"class":133},[53,2459,150],{"class":149},[53,2461,310],{"class":133},[53,2463,336],{"class":335},[53,2465,339],{"class":149},[14,2467,2468],{},"Returns normalized path commands as an SVG path data string.",[44,2470,2472],{"className":46,"code":2471,"language":48,"meta":49,"style":49},"print(dp.normalize_path_data(\"M10 20 l100 0 v50 h-100 Z\"))\n# M10 20 L110 20 V70 H10 Z\n",[17,2473,2474,2496],{"__ignoreMap":49},[53,2475,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494],{"class":55,"line":56},[53,2477,299],{"class":298},[53,2479,140],{"class":133},[53,2481,130],{"class":137},[53,2483,134],{"class":133},[53,2485,2436],{"class":137},[53,2487,140],{"class":133},[53,2489,225],{"class":169},[53,2491,2395],{"class":221},[53,2493,225],{"class":169},[53,2495,1979],{"class":133},[53,2497,2498],{"class":55,"line":215},[53,2499,2500],{"class":313},"# M10 20 L110 20 V70 H10 Z\n",[39,2502,2504],{"id":2503},"linear-path-functions","Linear Path Functions",[44,2506,2508],{"className":46,"code":2507,"language":48,"meta":49,"style":49},"dp.iter_path_segments(path_data: str) -> list[dp.PathSegment]\ndp.path_length(path_data: str) -> float\ndp.point_at_length(path_data: str, distance: Real) -> Vector\ndp.tangent_at_length(path_data: str, distance: Real) -> Vector\n",[17,2509,2510,2543,2566,2598],{"__ignoreMap":49},[53,2511,2512,2514,2516,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541],{"class":55,"line":56},[53,2513,130],{"class":62},[53,2515,134],{"class":133},[53,2517,2518],{"class":137},"iter_path_segments",[53,2520,140],{"class":133},[53,2522,2164],{"class":137},[53,2524,146],{"class":133},[53,2526,150],{"class":149},[53,2528,310],{"class":133},[53,2530,336],{"class":335},[53,2532,2175],{"class":62},[53,2534,1850],{"class":133},[53,2536,130],{"class":62},[53,2538,134],{"class":133},[53,2540,2038],{"class":162},[53,2542,2186],{"class":133},[53,2544,2545,2547,2549,2552,2554,2556,2558,2560,2562,2564],{"class":55,"line":215},[53,2546,130],{"class":62},[53,2548,134],{"class":133},[53,2550,2551],{"class":137},"path_length",[53,2553,140],{"class":133},[53,2555,2164],{"class":137},[53,2557,146],{"class":133},[53,2559,150],{"class":149},[53,2561,310],{"class":133},[53,2563,336],{"class":335},[53,2565,488],{"class":149},[53,2567,2568,2570,2572,2575,2577,2579,2581,2583,2585,2588,2590,2592,2594,2596],{"class":55,"line":231},[53,2569,130],{"class":62},[53,2571,134],{"class":133},[53,2573,2574],{"class":137},"point_at_length",[53,2576,140],{"class":133},[53,2578,2164],{"class":137},[53,2580,146],{"class":133},[53,2582,150],{"class":149},[53,2584,173],{"class":133},[53,2586,2587],{"class":137}," distance",[53,2589,146],{"class":133},[53,2591,775],{"class":137},[53,2593,310],{"class":133},[53,2595,336],{"class":335},[53,2597,513],{"class":62},[53,2599,2600,2602,2604,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627],{"class":55,"line":249},[53,2601,130],{"class":62},[53,2603,134],{"class":133},[53,2605,2606],{"class":137},"tangent_at_length",[53,2608,140],{"class":133},[53,2610,2164],{"class":137},[53,2612,146],{"class":133},[53,2614,150],{"class":149},[53,2616,173],{"class":133},[53,2618,2587],{"class":137},[53,2620,146],{"class":133},[53,2622,775],{"class":137},[53,2624,310],{"class":133},[53,2626,336],{"class":335},[53,2628,513],{"class":62},[14,2630,2631,2632,393,2634,393,2636,393,2638,467,2640,134],{},"These functions support linear commands only: ",[17,2633,639],{},[17,2635,642],{},[17,2637,645],{},[17,2639,648],{},[17,2641,666],{},[44,2643,2645],{"className":46,"code":2644,"language":48,"meta":49,"style":49},"path_data = \"M0 0 H10 V10\"\n\nsegments = dp.iter_path_segments(path_data)\nprint(len(segments))                    # 2\nprint(dp.path_length(path_data))         # 20.0\nprint(dp.point_at_length(path_data, 12)) # Vector(x=10.0, y=2.0)\n",[17,2646,2647,2661,2665,2684,2703,2723],{"__ignoreMap":49},[53,2648,2649,2652,2654,2656,2659],{"class":55,"line":56},[53,2650,2651],{"class":62},"path_data ",[53,2653,203],{"class":153},[53,2655,381],{"class":169},[53,2657,2658],{"class":221},"M0 0 H10 V10",[53,2660,387],{"class":169},[53,2662,2663],{"class":55,"line":215},[53,2664,550],{"emptyLinePlaceholder":549},[53,2666,2667,2670,2672,2674,2676,2678,2680,2682],{"class":55,"line":231},[53,2668,2669],{"class":62},"segments ",[53,2671,203],{"class":153},[53,2673,157],{"class":62},[53,2675,134],{"class":133},[53,2677,2518],{"class":137},[53,2679,140],{"class":133},[53,2681,2164],{"class":137},[53,2683,182],{"class":133},[53,2685,2686,2688,2690,2693,2695,2698,2700],{"class":55,"line":249},[53,2687,299],{"class":298},[53,2689,140],{"class":133},[53,2691,2692],{"class":298},"len",[53,2694,140],{"class":133},[53,2696,2697],{"class":137},"segments",[53,2699,888],{"class":133},[53,2701,2702],{"class":313},"                    # 2\n",[53,2704,2705,2707,2709,2711,2713,2715,2717,2719,2721],{"class":55,"line":266},[53,2706,299],{"class":298},[53,2708,140],{"class":133},[53,2710,130],{"class":137},[53,2712,134],{"class":133},[53,2714,2551],{"class":137},[53,2716,140],{"class":133},[53,2718,2164],{"class":137},[53,2720,888],{"class":133},[53,2722,868],{"class":313},[53,2724,2725,2727,2729,2731,2733,2735,2737,2739,2741,2744,2746],{"class":55,"line":280},[53,2726,299],{"class":298},[53,2728,140],{"class":133},[53,2730,130],{"class":137},[53,2732,134],{"class":133},[53,2734,2574],{"class":137},[53,2736,140],{"class":133},[53,2738,2164],{"class":137},[53,2740,173],{"class":133},[53,2742,2743],{"class":274}," 12",[53,2745,888],{"class":133},[53,2747,2748],{"class":313}," # Vector(x=10.0, y=2.0)\n",[39,2750,2752],{"id":2751},"coordinate-based-properties","Coordinate-Based Properties",[14,2754,2755,393,2758,467,2761,2764],{},[17,2756,2757],{},"Path.w",[17,2759,2760],{},"Path.h",[17,2762,2763],{},"Path.center"," are based on explicit coordinates from\nnormalized path data: move and line endpoints, curve control and end points,\nhorizontal and vertical endpoints, and arc endpoints. Arc radii and flags are\nnot treated as points.",[14,2766,2767,2768,2771],{},"This is a convenience model for placement. Use ",[17,2769,2770],{},"Path.bbox"," when you need a\ngeometric bounding box.",[316,2773,2775],{"id":2774},"extract_path_points",[17,2776,2774],{},[44,2778,2780],{"className":46,"code":2779,"language":48,"meta":49,"style":49},"from pydreamplet.path_data import extract_path_points\n\nextract_path_points(path_data: str) -> list[Vector]\n",[17,2781,2782,2799,2803],{"__ignoreMap":49},[53,2783,2784,2787,2790,2792,2794,2796],{"class":55,"line":56},[53,2785,2786],{"class":59},"from",[53,2788,2789],{"class":62}," pydreamplet",[53,2791,134],{"class":133},[53,2793,2651],{"class":62},[53,2795,41],{"class":59},[53,2797,2798],{"class":62}," extract_path_points\n",[53,2800,2801],{"class":55,"line":215},[53,2802,550],{"emptyLinePlaceholder":549},[53,2804,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825],{"class":55,"line":231},[53,2806,2774],{"class":137},[53,2808,140],{"class":133},[53,2810,2164],{"class":137},[53,2812,146],{"class":133},[53,2814,150],{"class":149},[53,2816,310],{"class":133},[53,2818,336],{"class":335},[53,2820,2175],{"class":62},[53,2822,1850],{"class":133},[53,2824,112],{"class":62},[53,2826,2186],{"class":133},[14,2828,2829,2830,393,2832,814,2834,2836,2837,134],{},"Returns the explicit coordinate points used by ",[17,2831,2757],{},[17,2833,2760],{},[17,2835,2763],{},". It is not exported from top-level ",[17,2838,2839],{},"pydreamplet",[44,2841,2843],{"className":46,"code":2842,"language":48,"meta":49,"style":49},"from pydreamplet.path_data import extract_path_points\n\npoints = extract_path_points(\"M10 20 H30 V40\")\n\nprint([point.xy for point in points])\n# [(10.0, 20.0), (30.0, 20.0), (30.0, 40.0)]\n",[17,2844,2845,2859,2863,2884,2888,2914],{"__ignoreMap":49},[53,2846,2847,2849,2851,2853,2855,2857],{"class":55,"line":56},[53,2848,2786],{"class":59},[53,2850,2789],{"class":62},[53,2852,134],{"class":133},[53,2854,2651],{"class":62},[53,2856,41],{"class":59},[53,2858,2798],{"class":62},[53,2860,2861],{"class":55,"line":215},[53,2862,550],{"emptyLinePlaceholder":549},[53,2864,2865,2868,2870,2873,2875,2877,2880,2882],{"class":55,"line":231},[53,2866,2867],{"class":62},"points ",[53,2869,203],{"class":153},[53,2871,2872],{"class":137}," extract_path_points",[53,2874,140],{"class":133},[53,2876,225],{"class":169},[53,2878,2879],{"class":221},"M10 20 H30 V40",[53,2881,225],{"class":169},[53,2883,182],{"class":133},[53,2885,2886],{"class":55,"line":249},[53,2887,550],{"emptyLinePlaceholder":549},[53,2889,2890,2892,2894,2897,2899,2902,2904,2907,2909,2912],{"class":55,"line":266},[53,2891,299],{"class":298},[53,2893,2232],{"class":133},[53,2895,2896],{"class":137},"point",[53,2898,134],{"class":133},[53,2900,2901],{"class":162},"xy",[53,2903,2241],{"class":59},[53,2905,2906],{"class":137}," point ",[53,2908,2247],{"class":59},[53,2910,2911],{"class":137}," points",[53,2913,2428],{"class":133},[53,2915,2916],{"class":55,"line":280},[53,2917,2918],{"class":313},"# [(10.0, 20.0), (30.0, 20.0), (30.0, 40.0)]\n",[2920,2921,2922],"style",{},"html pre.shiki code .sED7I, html code.shiki .sED7I{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#A0111F;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .soTeR, html code.shiki .soTeR{--shiki-light:#90A4AE;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVsmf, html code.shiki .sVsmf{--shiki-light:#39ADB5;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sAK04, html code.shiki .sAK04{--shiki-light:#6182B8;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .s-tzF, html code.shiki .s-tzF{--shiki-light:#E2931D;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sWKEy, html code.shiki .sWKEy{--shiki-light:#39ADB5;--shiki-default:#A0111F;--shiki-dark:#F97583}html pre.shiki code .sm80-, html code.shiki .sm80-{--shiki-light:#E53935;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sqo_7, html code.shiki .sqo_7{--shiki-light:#39ADB5;--shiki-default:#032563;--shiki-dark:#9ECBFF}html pre.shiki code .s_jvP, html code.shiki .s_jvP{--shiki-light:#91B859;--shiki-default:#032563;--shiki-dark:#9ECBFF}html pre.shiki code .sYEV4, html code.shiki .sYEV4{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#702C00;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sNpir, html code.shiki .sNpir{--shiki-light:#F76D47;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sBTIf, html code.shiki .sBTIf{--shiki-light:#6182B8;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sxl37, html code.shiki .sxl37{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#66707B;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .str-j, html code.shiki .str-j{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#6E011A;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sTy78, html code.shiki .sTy78{--shiki-light:#39ADB5;--shiki-default:#023B95;--shiki-dark:#79B8FF}",{"title":49,"searchDepth":231,"depth":231,"links":2924},[2925,2926,2927,2934,2939,2940,2941,2946,2947],{"id":41,"depth":215,"text":42},{"id":72,"depth":215,"text":73},{"id":120,"depth":215,"text":19,"children":2928},[2929,2930,2932,2933],{"id":143,"depth":231,"text":143},{"id":460,"depth":231,"text":2931},"w, h, and center",{"id":607,"depth":231,"text":607},{"id":737,"depth":231,"text":738},{"id":1012,"depth":215,"text":163,"children":2935},[2936,2937,2938],{"id":1214,"depth":231,"text":1215},{"id":1364,"depth":231,"text":1365},{"id":1606,"depth":231,"text":1607},{"id":1814,"depth":215,"text":1815},{"id":2037,"depth":215,"text":2038},{"id":2140,"depth":215,"text":2141,"children":2942},[2943,2944,2945],{"id":2144,"depth":231,"text":2144},{"id":2319,"depth":231,"text":2319},{"id":2436,"depth":231,"text":2436},{"id":2503,"depth":215,"text":2504},{"id":2751,"depth":215,"text":2752,"children":2948},[2949],{"id":2774,"depth":231,"text":2774},"Reference for Path, PathBuilder, path parsing, normalization, linear measurement, and bounding boxes.","md",{"category":2953},"reference",{"title":5},"\u002Freference\u002Fpaths",{"title":5,"description":2950},"reference\u002Fpaths","Rb6--MgDHxkA0T3opp64Hkm26IXrLPklfK9Sgele3T8",1780692544478]