Skip to content

Commit bb1eed0

Browse files
committed
Add line_join parameter
1 parent c469fe3 commit bb1eed0

File tree

2 files changed

+62
-4
lines changed

2 files changed

+62
-4
lines changed

examples/lines.ipynb

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
"metadata": {},
2424
"outputs": [],
2525
"source": [
26-
"size = (200, 140)\n",
26+
"size = (400, 280)\n",
2727
"\n",
2828
"canvas = Canvas(size=size)\n",
29+
"canvas.scale(2)\n",
30+
"\n",
2931
"for i in range(10):\n",
3032
" width = 1 + i\n",
3133
" x = 5 + i * 20\n",
@@ -54,13 +56,15 @@
5456
"metadata": {},
5557
"outputs": [],
5658
"source": [
57-
"size = (160, 180)\n",
59+
"size = (320, 360)\n",
5860
"\n",
5961
"canvas = Canvas(size=size)\n",
6062
"\n",
6163
"# Possible line_cap values\n",
6264
"line_caps = ['butt', 'round', 'square']\n",
6365
"\n",
66+
"canvas.scale(2)\n",
67+
"\n",
6468
"# Draw guides\n",
6569
"canvas.stroke_style = '#09f'\n",
6670
"canvas.begin_path()\n",
@@ -73,6 +77,7 @@
7377
"# Draw lines\n",
7478
"canvas.stroke_style = 'black'\n",
7579
"canvas.font = '15px serif'\n",
80+
"\n",
7681
"for i in range(len(line_caps)):\n",
7782
" line_cap = line_caps[i]\n",
7883
" x = 25 + i * 50\n",
@@ -87,6 +92,54 @@
8792
"\n",
8893
"canvas"
8994
]
95+
},
96+
{
97+
"cell_type": "markdown",
98+
"metadata": {},
99+
"source": [
100+
"# Line join\n",
101+
"### Sets the appearance of the \"corners\" where lines meet."
102+
]
103+
},
104+
{
105+
"cell_type": "code",
106+
"execution_count": null,
107+
"metadata": {},
108+
"outputs": [],
109+
"source": [
110+
"size = (320, 360)\n",
111+
"\n",
112+
"canvas = Canvas(size=size)\n",
113+
"\n",
114+
"# Possible line_join values\n",
115+
"line_joins = ['round', 'bevel', 'miter']\n",
116+
"\n",
117+
"min_y = 40\n",
118+
"max_y = 80\n",
119+
"spacing = 45\n",
120+
"\n",
121+
"canvas.line_width = 10\n",
122+
"canvas.scale(2)\n",
123+
"for i in range(len(line_joins)):\n",
124+
" line_join = line_joins[i]\n",
125+
" \n",
126+
" y1 = min_y + i * spacing\n",
127+
" y2 = max_y + i * spacing\n",
128+
"\n",
129+
" canvas.line_join = line_join\n",
130+
"\n",
131+
" canvas.fill_text(line_join, 60, y1 - 10)\n",
132+
"\n",
133+
" canvas.begin_path()\n",
134+
" canvas.move_to(-5, y1)\n",
135+
" canvas.line_to(35, y2)\n",
136+
" canvas.line_to(75, y1)\n",
137+
" canvas.line_to(115, y2)\n",
138+
" canvas.line_to(155, y1)\n",
139+
" canvas.stroke()\n",
140+
"\n",
141+
"canvas"
142+
]
90143
}
91144
],
92145
"metadata": {

ipycanvas/canvas.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,14 @@ class Canvas(DOMWidget):
7777
#: (float) Sets the width of lines drawn in the future, must be a positive number. Default to ``1.0``.
7878
line_width = Float(1.0)
7979

80-
#: (str) Sets the appearance of the ends of lines.
80+
#: (str) Sets the appearance of the ends of lines, possible values are ``'butt'``, ``'round'`` and ``'square'``.
81+
#: Default to ``'butt'``.
8182
line_cap = Enum(['butt', 'round', 'square'], default_value='butt')
8283

84+
#: (str) Sets the appearance of the "corners" where lines meet, possible values are ``'round'``, ``'bevel'`` and ``'miter'``.
85+
#: Default to ``'miter'``
86+
line_join = Enum(['round', 'bevel', 'miter'], default_value='miter')
87+
8388
def __init__(self, *args, **kwargs):
8489
"""Create a Canvas widget."""
8590
#: Whether commands should be cached or not
@@ -275,7 +280,7 @@ def flush(self):
275280

276281
@observe('fill_style', 'stroke_style', 'global_alpha', 'font', 'text_align',
277282
'text_baseline', 'direction', 'global_composite_operation',
278-
'line_width', 'line_cap')
283+
'line_width', 'line_cap', 'line_join')
279284
def _on_set_attr(self, change):
280285
command = {
281286
'name': 'set',

0 commit comments

Comments
 (0)