5
<title>Example: Complex Drawing: Violin</title>
6
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Maven+Pro:400,700">
7
<link rel="stylesheet" href="../../build/cssgrids/grids-min.css">
8
<link rel="stylesheet" href="../assets/css/main.css">
9
<link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
10
<script src="../../build/yui/yui-min.js"></script>
15
<h1>Example: Complex Drawing: Violin</h1>
20
<div class="yui3-u-3-4">
22
<div class="content"><style scoped>
23
#custom-doc { width: 95%; min-width: 950px; }
24
#pagetitle {background-image: url(../../assets/bg_hd.gif);}
26
display: inline-block;
32
display: inline-block;
41
filter:alpha(opacity=20);
46
This example shows how to use the <code>Graphics</code> to draw the head of a violin.
49
The comparable uncompressed .jpg photo image of the violin head was 161KB, .png(24-bit) was 359KB.
50
The Graphics code to render this example is 18KB.
55
<div id="mygraphiccontainer"></div>
58
YUI().use('graphics', function (Y)
60
//create a graphic instance
61
var mygraphic = new Y.Graphic();
62
mygraphic.render("#mygraphiccontainer");
65
var background = mygraphic.addShape({
75
{color: "#001000", opacity: 1, offset: 0},
76
{color: "#000", opacity: 1, offset: 1}
85
//create a path element to use for the strings
86
var strings = mygraphic.addShape({
95
strings.moveTo(614,199);
96
strings.lineTo(536,181);
97
strings.curveTo(532,178,519,181,515,183);
98
strings.lineTo(465,197);
99
strings.lineTo(487,203);
100
strings.lineTo(515,187);
101
strings.curveTo(519,184,529,182,536,184);
102
strings.lineTo(613,202);
105
//create a path element to use for the fingerboard
106
var finger_board = mygraphic.addShape({
117
{color: "#000", opacity: 1, offset: 0},
118
{color: "#000", opacity: 1, offset: 0.2},
119
{color: "#302420", opacity: 1, offset: 0.8}
124
//draw the fingerboard
125
finger_board.moveTo(613,231);
126
finger_board.lineTo(507,204);
127
finger_board.curveTo(506,186,527,183,533,186);
128
finger_board.lineTo(613,205);
131
//Highlight for the fingerboard
132
var fingerboard_high = mygraphic.addShape({
136
color: "#555", //, dashstyle: [3, 4]
141
fingerboard_high.moveTo(512,199);
142
fingerboard_high.curveTo(517,193,527,190,534,191);
143
fingerboard_high.end();
145
//Create a path to use for the headstock
146
var head = mygraphic.addShape({
158
{color: "#9B4D17", opacity: 1, offset: 0},
159
{color: "#3B1E09", opacity: 1, offset: 0.8}
165
head.moveTo(614,278);
166
head.lineTo(553,263);
167
head.curveTo(516,255,503,283,500,300);
168
head.lineTo(496,318);
169
head.curveTo(496,323,488,323,486,318);
170
head.curveTo(405,233,310,332,218,321);
171
head.curveTo(149,320,101,270,99,217);
172
head.curveTo(96,182,120,143,141,132);
173
head.curveTo(162,116,199,116,223,131);
174
head.curveTo(242,140,260,170,253,202);
175
head.curveTo(249,228,230,242,213,246);
176
head.curveTo(214,249,218,257,235,246);
177
head.curveTo(254,233,299,209,324,199);
178
head.curveTo(369,182,428,185,470,195);
179
head.lineTo(505,204);
180
head.lineTo(506,203);
181
head.lineTo(614,231);
184
//Outer portion of the spiral on top of the head
185
var outerTopScroll = mygraphic.addShape({ //outter top scroll
189
color: "#00dd00", // , dashstyle: [3, 4]
196
{color: "#562A0D", opacity: 1, offset: 0},
197
{color: "#68340F", opacity: 1, offset: 1}
201
outerTopScroll.moveTo(106,229);
202
outerTopScroll.curveTo(104,190,116,154,144,137);
203
outerTopScroll.curveTo(169,121,214,121,237,150);
204
outerTopScroll.curveTo(251,173,258,209,229,230);
205
outerTopScroll.lineTo(219,227);
206
outerTopScroll.curveTo(219,212,237,170,210,157);
207
outerTopScroll.curveTo(175,134,132,167,146,216);
208
outerTopScroll.curveTo(147,220,152,232,156,234);
209
outerTopScroll.lineTo(105,229);
210
outerTopScroll.end();
212
//Inner portion of the spiral on top of the head
213
var innerTopScroll = mygraphic.addShape({ // inner top scroll
217
color: "#00dd00", // , dashstyle: [3, 4]
224
{color: "#562A0D", opacity: 1, offset: 0},
225
{color: "#68340F", opacity: 1, offset: 1}
229
innerTopScroll.moveTo(200,200);
230
innerTopScroll.moveTo(160,227);
231
innerTopScroll.curveTo(143,206,142,156,190,156);
232
innerTopScroll.curveTo(236,164,226,215,198,219);
233
innerTopScroll.curveTo(185,220,165,211,178,190);
234
innerTopScroll.curveTo(182,216,210,205,204,188);
236
//Highlight line along the top of the head
237
var base_high = mygraphic.addShape({
242
opacity: 0.1//, dashstyle: [3, 4]
245
base_high.moveTo(503,207);
246
base_high.curveTo(428,188,354,182,292,221);
247
base_high.curveTo(270,233,242,252,217,258);
248
base_high.lineTo(209,254);
251
//Highlight along the spiral and lower edge of the violin head and neck
252
var headLine = mygraphic.addShape({
260
headLine.moveTo(614,278);
261
headLine.lineTo(553,263);
262
headLine.curveTo(516,255,503,283,500,300);
263
headLine.lineTo(496,318);
264
headLine.curveTo(496,323,488,323,486,318);
265
headLine.curveTo(405,233,310,332,218,321);
266
headLine.curveTo(149,320,101,270,99,217);
267
headLine.curveTo(96,182,120,143,141,132);
268
headLine.curveTo(162,116,199,116,223,131);
269
headLine.curveTo(242,140,260,170,253,202);
270
headLine.curveTo(249,228,230,240,213,244);
271
headLine.moveTo(216,244);
272
headLine.curveTo(180,248,154,236,148,204);
273
headLine.curveTo(143,185,153,157,184,154);
274
headLine.curveTo(209,152,227,171,222,197);
275
headLine.curveTo(219,224,180,229,172,205);
276
headLine.curveTo(167,201,174,186,181,187);
279
//create an ellipse for the fiddle head dot
280
var fiddleHeadDot = mygraphic.addShape({
296
//shared properties for the shadows
308
{color: "#000", opacity: 1, offset: 0},
309
{color: "#241105", opacity: 1, offset: 0.8}
314
//Shadow for inner spiral on the top of the head
315
var innerSpiralFiddleHeadShadow = mygraphic.addShape(shadowConfig); // at center of fiddle head
316
innerSpiralFiddleHeadShadow.moveTo(204,188);
317
innerSpiralFiddleHeadShadow.curveTo(207,211,179,206,178,194);
318
innerSpiralFiddleHeadShadow.curveTo(166,215,219,229,204,190);
319
innerSpiralFiddleHeadShadow.end();
321
//Shadow for middle spiral on the top of the head
322
var middleSpiralFiddleHeadShadow = mygraphic.addShape(shadowConfig);
323
middleSpiralFiddleHeadShadow.moveTo(223,172);
324
middleSpiralFiddleHeadShadow.curveTo(239,224,186,233,173,213);
325
middleSpiralFiddleHeadShadow.curveTo(174,266,257,223,222,171);
326
middleSpiralFiddleHeadShadow.end();
328
//Shadow for outer spiral on the top of the head
329
var outerSpiralFiddleHeadShadow = mygraphic.addShape(shadowConfig);
330
outerSpiralFiddleHeadShadow.moveTo(148,214);
331
outerSpiralFiddleHeadShadow.curveTo(158,242,186,250,218,246);
332
outerSpiralFiddleHeadShadow.lineTo(221,253);
333
outerSpiralFiddleHeadShadow.curveTo(178,258,154,241,147,214);
334
outerSpiralFiddleHeadShadow.end();
336
//Shadow beneath the left tuning key
337
var leftTuningKeyShadow = mygraphic.addShape(shadowConfig);
338
leftTuningKeyShadow.moveTo(293,286);
339
leftTuningKeyShadow.lineTo(323,277);
340
leftTuningKeyShadow.lineTo(337,289);
341
leftTuningKeyShadow.lineTo(336,293);
342
leftTuningKeyShadow.lineTo(292,307);
343
leftTuningKeyShadow.lineTo(288,294);
344
leftTuningKeyShadow.lineTo(292,285);
345
leftTuningKeyShadow.end();
347
//Shadow beneath the right tuning key
348
var rightTuningKeyShadow = mygraphic.addShape(shadowConfig);
349
rightTuningKeyShadow.moveTo(441,260);
350
rightTuningKeyShadow.lineTo(440,276);
351
rightTuningKeyShadow.lineTo(436,283);
352
rightTuningKeyShadow.curveTo(453,286,474,299,492,319);
353
rightTuningKeyShadow.curveTo(497,308,497,299,498,297);
354
rightTuningKeyShadow.lineTo(492,278);
355
rightTuningKeyShadow.lineTo(483,267);
356
rightTuningKeyShadow.lineTo(468,254);
357
rightTuningKeyShadow.lineTo(440,260);
358
rightTuningKeyShadow.end();
360
//Shadow beneath the left dowel
361
var leftDowelShadow = mygraphic.addShape(shadowConfig);
362
leftDowelShadow.moveTo(230,284);
363
leftDowelShadow.lineTo(251,280);
364
leftDowelShadow.curveTo(257,308,230,301,229,283);
365
leftDowelShadow.end();
367
//Shadow beneath the right dowel
368
var rightDowelShadow = mygraphic.addShape(shadowConfig);
369
rightDowelShadow.moveTo(377,246);
370
rightDowelShadow.lineTo(399,242);
371
rightDowelShadow.curveTo(402,261,383,263,376,246);
372
rightDowelShadow.end();
374
//Add transparent gradients for the woodgrain if the browser supports gradient transparency
375
var DOCUMENT = Y.config.doc,
376
canvas = DOCUMENT && DOCUMENT.createElement("canvas");
378
if(DOCUMENT && (DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") || (canvas && canvas.getContext && canvas.getContext("2d"))))
380
var headWoodgrain = mygraphic.addShape({
391
{color: "#3B1E09", opacity: 1, offset: 0.03},
392
{color: "#9B4D17", opacity: 1, offset: 0.06},
393
{color: "#3B1E09", opacity: 1, offset: 0.09},
394
{color: "#9B4D17", opacity: 1, offset: 0.12},
395
{color: "#3B1E09", opacity: 1, offset: 0.18},
396
{color: "#9B4D17", opacity: 1, offset: 0.20},
397
{color: "#3B1E09", opacity: 1, offset: 0.23},
398
{color: "#9B4D17", opacity: 1, offset: 0.29},
399
{color: "#3B1E09", opacity: 1, offset: 0.34},
400
{color: "#9B4D17", opacity: 1, offset: 0.36},
401
{color: "#3B1E09", opacity: 1, offset: 0.38},
402
{color: "#9B4D17", opacity: 1, offset: 0.40},
403
{color: "#3B1E09", opacity: 1, offset: 0.45},
404
{color: "#9B4D17", opacity: 1, offset: 0.48},
405
{color: "#3B1E09", opacity: 1, offset: 0.50},
406
{color: "#9B4D17", opacity: 1, offset: 0.52},
407
{color: "#3B1E09", opacity: 1, offset: 0.55},
408
{color: "#9B4D17", opacity: 1, offset: 0.62},
409
{color: "#3B1E09", opacity: 1, offset: 0.68},
410
{color: "#9B4D17", opacity: 1, offset: 0.73},
411
{color: "#3B1E09", opacity: 1, offset: 0.76},
412
{color: "#9B4D17", opacity: 1, offset: 0.78},
413
{color: "#3B1E09", opacity: 1, offset: 0.82},
414
{color: "#9B4D17", opacity: 1, offset: 0.86},
415
{color: "#3B1E09", opacity: 1, offset: 0.90},
416
{color: "#9B4D17", opacity: 1, offset: 0.94},
417
{color: "#3B1E09", opacity: 1, offset: 0.96},
418
{color: "#9B4D17", opacity: 1, offset: 1}
424
headWoodgrain.moveTo(614,278);
425
headWoodgrain.lineTo(553,263);
426
headWoodgrain.curveTo(516,255,503,283,500,300);
427
headWoodgrain.lineTo(496,318);
428
headWoodgrain.curveTo(496,323,488,323,486,318);
429
headWoodgrain.curveTo(405,233,310,332,218,321);
430
headWoodgrain.curveTo(149,320,101,270,99,217);
431
headWoodgrain.curveTo(96,182,120,143,141,132);
432
headWoodgrain.curveTo(162,116,199,116,223,131);
433
headWoodgrain.curveTo(242,140,260,170,253,202);
434
headWoodgrain.curveTo(249,228,230,242,213,246);
435
headWoodgrain.curveTo(214,249,218,257,235,246);
436
headWoodgrain.curveTo(254,233,299,209,324,199);
437
headWoodgrain.curveTo(369,182,428,185,470,195);
438
headWoodgrain.lineTo(505,204);
439
headWoodgrain.lineTo(506,203);
440
headWoodgrain.lineTo(614,231);
443
//handle for adding opacity to the whole object.
444
headWoodgrain.addClass('woodgrain');
447
//The bushing for the left tuning key
448
var nob_bushing_left = mygraphic.addShape({
458
{color: "#000", opacity: 1, offset: 0},
459
{color: "#000", opacity: 1, offset: 0.7},
460
{color: "#282622", opacity: 1, offset: 0.8},
461
{color: "#000", opacity: 1, offset: 0.9}
475
//The bushing for the right tuning key
476
var nob_bushing_right = mygraphic.addShape({
486
{color: "#000", opacity: 1, offset: 0},
487
{color: "#000", opacity: 1, offset: 0.7},
488
{color: "#282622", opacity: 1, offset: 0.8},
489
{color: "#000", opacity: 1, offset: 0.9}
503
var leftTuningKeySides = mygraphic.addShape({
513
{color: "#73371F", opacity: 1, offset: 0},
514
{color: "#35211B", opacity: 1, offset: 1}
518
leftTuningKeySides.moveTo(318,231);
519
leftTuningKeySides.curveTo(333,227,344,237,336,252);
520
leftTuningKeySides.lineTo(335,253);
521
leftTuningKeySides.curveTo(326,267,297,294,286,300);
522
leftTuningKeySides.curveTo(281,305,262,295,266,283);
523
leftTuningKeySides.curveTo(278,266,306,245,313,234);
524
leftTuningKeySides.end();
526
var rightTuningKeySides = mygraphic.addShape({
536
{color: "#73371F", opacity: 1, offset: 0},
537
{color: "#35211B", opacity: 1, offset: 1}
542
rightTuningKeySides.moveTo(476,214);
543
rightTuningKeySides.curveTo(492,206,504,229,494,238);
544
rightTuningKeySides.curveTo(482,247,455,265,432,271);
545
rightTuningKeySides.curveTo(422,275,403,262,420,244);
546
rightTuningKeySides.curveTo(430,235,463,224,476,214);
547
rightTuningKeySides.end();
549
//Shared attributes for tuning key edges
550
var tuningKeyBevelStyle = {
560
{color: "#DB8C64", opacity: 1, offset: 0},
561
{color: "#593123", opacity: 1, offset: 0.5},
562
{color: "#231610", opacity: 1, offset: 1}
572
//bevel for the right side tuning key
573
var leftTuningKeyBevel = mygraphic.addShape(tuningKeyBevelStyle);
574
leftTuningKeyBevel.moveTo(318,236);
575
leftTuningKeyBevel.curveTo(324,219,345,249,336,249);
576
leftTuningKeyBevel.curveTo(316,263,292,286,282,301);
577
leftTuningKeyBevel.curveTo(282,304,264,295,266,285);
578
leftTuningKeyBevel.curveTo(273,279,313,247,317,237);
579
leftTuningKeyBevel.end();
581
//bevel for the right side tuning key
582
var rightTuningKeyBevel = mygraphic.addShape(tuningKeyBevelStyle);
583
rightTuningKeyBevel.moveTo(477,215);
584
rightTuningKeyBevel.curveTo(495,205,506,240,494,238);
585
rightTuningKeyBevel.curveTo(481,246,443,268,428,272);
586
rightTuningKeyBevel.curveTo(421,274,407,256,417,248);
587
rightTuningKeyBevel.curveTo(413,253,466,234,477,215);
588
rightTuningKeyBevel.end();
590
//Add an ellipse for the dowel of the left (opposite side) tuning key
591
var nobdowel_left = mygraphic.addShape({
601
{color: "#8E5B40", opacity: 1, offset: 0},
602
{color: "#593123", opacity: 1, offset: 0.3},
603
{color: "#231610", opacity: 1, offset: 1}
617
//Add an ellipse for the dowel of the right (opposite side) tuning key
618
var nobdowel_right = mygraphic.addShape({
628
{color: "#8E5B40", opacity: 1, offset: 0},
629
{color: "#593123", opacity: 1, offset: 0.3},
630
{color: "#231610", opacity: 1, offset: 1}
644
//Add an ellipse for the black tip of the left tuning key
645
var nob_tip_left = mygraphic.addShape({
655
{color: "#808080", opacity: 1, offset: 0},
656
{color: "#000", opacity: 1, offset: 0.3},
657
{color: "#000", opacity: 1, offset: 1}
671
//Add an ellipse for the black tip of the right tuning key
672
var nob_tip_right = mygraphic.addShape({
682
{color: "#808080", opacity: 1, offset: 0},
683
{color: "#000", opacity: 1, offset: 0.5},
684
{color: "#000", opacity: 1, offset: 1}
702
<h2>Path Drawing Tool</h2>
703
<!-- doesn't contain the header because it may be h3 or h2 -->
705
<div style="float:right; margin: 6px 0 8px 8px;">
706
<a href="graphics-path-tool.html">
707
<img style="border: 1px solid #bfbfbf; height:149px; width:395px;" alt="Screen capture of Graphics path tool" src="../assets/graphics/img/path-tool-capture.png">
711
<a href="graphics-path-tool.html" class="button">Read More</a>
714
Try this simple <a href="graphics-path-tool.html">tool</a> that helps you by generating code while you interactively
718
As you drag the pencil icon, corresponding graphics code is auto-generated.
719
This code can be copied and pasted into a graphics instance to reproduce
720
the paths you created with the pencil.
723
The <a href="graphics-violin.html">violin example</a> was created with this tool.
728
<pre class="code prettyprint"><div id="#outerframe">
729
<div id="mygraphiccontainer"></div>
730
</div></pre>
734
<pre class="code prettyprint">#outerframe {
735
display: inline-block;
740
#mygraphiccontainer {
741
display: inline-block;
750
filter:alpha(opacity=20);
754
<h2>Complete Example Source</h2>
755
<pre class="code prettyprint"><div id="outerframe">
756
<div id="mygraphiccontainer"></div>
759
YUI().use('graphics', function (Y)
761
//create a graphic instance
762
var mygraphic = new Y.Graphic();
763
mygraphic.render("#mygraphiccontainer");
765
//draw a background
766
var background = mygraphic.addShape({
767
type: "rect",
770
color: "#f00",
774
type: "radial",
776
{color: "#001000", opacity: 1, offset: 0},
777
{color: "#000", opacity: 1, offset: 1}
786
//create a path element to use for the strings
787
var strings = mygraphic.addShape({
788
type: "path",
791
color: "#bbb"
795
//draw strings
796
strings.moveTo(614,199);
797
strings.lineTo(536,181);
798
strings.curveTo(532,178,519,181,515,183);
799
strings.lineTo(465,197);
800
strings.lineTo(487,203);
801
strings.lineTo(515,187);
802
strings.curveTo(519,184,529,182,536,184);
803
strings.lineTo(613,202);
806
//create a path element to use for the fingerboard
807
var finger_board = mygraphic.addShape({
808
type: "path",
811
color: "#f00",
815
type: "linear",
818
{color: "#000", opacity: 1, offset: 0},
819
{color: "#000", opacity: 1, offset: 0.2},
820
{color: "#302420", opacity: 1, offset: 0.8}
825
//draw the fingerboard
826
finger_board.moveTo(613,231);
827
finger_board.lineTo(507,204);
828
finger_board.curveTo(506,186,527,183,533,186);
829
finger_board.lineTo(613,205);
832
//Highlight for the fingerboard
833
var fingerboard_high = mygraphic.addShape({
834
type: "path",
837
color: "#555", //, dashstyle: [3, 4]
842
fingerboard_high.moveTo(512,199);
843
fingerboard_high.curveTo(517,193,527,190,534,191);
844
fingerboard_high.end();
846
//Create a path to use for the headstock
847
var head = mygraphic.addShape({
848
type: "path",
851
color: "#f00",
852
opacity: 1 //,
853
//dashstyle: [3, 4]
856
type: "linear",
859
{color: "#9B4D17", opacity: 1, offset: 0},
860
{color: "#3B1E09", opacity: 1, offset: 0.8}
865
//Draw the headstock
866
head.moveTo(614,278);
867
head.lineTo(553,263);
868
head.curveTo(516,255,503,283,500,300);
869
head.lineTo(496,318);
870
head.curveTo(496,323,488,323,486,318);
871
head.curveTo(405,233,310,332,218,321);
872
head.curveTo(149,320,101,270,99,217);
873
head.curveTo(96,182,120,143,141,132);
874
head.curveTo(162,116,199,116,223,131);
875
head.curveTo(242,140,260,170,253,202);
876
head.curveTo(249,228,230,242,213,246);
877
head.curveTo(214,249,218,257,235,246);
878
head.curveTo(254,233,299,209,324,199);
879
head.curveTo(369,182,428,185,470,195);
880
head.lineTo(505,204);
881
head.lineTo(506,203);
882
head.lineTo(614,231);
885
//Outer portion of the spiral on top of the head
886
var outerTopScroll = mygraphic.addShape({ //outter top scroll
887
type: "path",
890
color: "#00dd00", // , dashstyle: [3, 4]
894
type: "linear", //
897
{color: "#562A0D", opacity: 1, offset: 0},
898
{color: "#68340F", opacity: 1, offset: 1}
902
outerTopScroll.moveTo(106,229);
903
outerTopScroll.curveTo(104,190,116,154,144,137);
904
outerTopScroll.curveTo(169,121,214,121,237,150);
905
outerTopScroll.curveTo(251,173,258,209,229,230);
906
outerTopScroll.lineTo(219,227);
907
outerTopScroll.curveTo(219,212,237,170,210,157);
908
outerTopScroll.curveTo(175,134,132,167,146,216);
909
outerTopScroll.curveTo(147,220,152,232,156,234);
910
outerTopScroll.lineTo(105,229);
911
outerTopScroll.end();
913
//Inner portion of the spiral on top of the head
914
var innerTopScroll = mygraphic.addShape({ // inner top scroll
915
type: "path",
918
color: "#00dd00", // , dashstyle: [3, 4]
922
type: "linear", //
925
{color: "#562A0D", opacity: 1, offset: 0},
926
{color: "#68340F", opacity: 1, offset: 1}
930
innerTopScroll.moveTo(200,200);
931
innerTopScroll.moveTo(160,227);
932
innerTopScroll.curveTo(143,206,142,156,190,156);
933
innerTopScroll.curveTo(236,164,226,215,198,219);
934
innerTopScroll.curveTo(185,220,165,211,178,190);
935
innerTopScroll.curveTo(182,216,210,205,204,188);
937
//Highlight line along the top of the head
938
var base_high = mygraphic.addShape({
939
type: "path",
942
color: "#fff",
943
opacity: 0.1//, dashstyle: [3, 4]
946
base_high.moveTo(503,207);
947
base_high.curveTo(428,188,354,182,292,221);
948
base_high.curveTo(270,233,242,252,217,258);
949
base_high.lineTo(209,254);
952
//Highlight along the spiral and lower edge of the violin head and neck
953
var headLine = mygraphic.addShape({
954
type: "path",
957
color: "#fff",
961
headLine.moveTo(614,278);
962
headLine.lineTo(553,263);
963
headLine.curveTo(516,255,503,283,500,300);
964
headLine.lineTo(496,318);
965
headLine.curveTo(496,323,488,323,486,318);
966
headLine.curveTo(405,233,310,332,218,321);
967
headLine.curveTo(149,320,101,270,99,217);
968
headLine.curveTo(96,182,120,143,141,132);
969
headLine.curveTo(162,116,199,116,223,131);
970
headLine.curveTo(242,140,260,170,253,202);
971
headLine.curveTo(249,228,230,240,213,244);
972
headLine.moveTo(216,244);
973
headLine.curveTo(180,248,154,236,148,204);
974
headLine.curveTo(143,185,153,157,184,154);
975
headLine.curveTo(209,152,227,171,222,197);
976
headLine.curveTo(219,224,180,229,172,205);
977
headLine.curveTo(167,201,174,186,181,187);
980
//create an ellipse for the fiddle head dot
981
var fiddleHeadDot = mygraphic.addShape({
982
type: "ellipse",
984
color: "#fff",
989
color: "#000"
997
//shared properties for the shadows
999
type: "path",
1002
color: "#000",
1006
type: "linear",
1009
{color: "#000", opacity: 1, offset: 0},
1010
{color: "#241105", opacity: 1, offset: 0.8}
1015
//Shadow for inner spiral on the top of the head
1016
var innerSpiralFiddleHeadShadow = mygraphic.addShape(shadowConfig); // at center of fiddle head
1017
innerSpiralFiddleHeadShadow.moveTo(204,188);
1018
innerSpiralFiddleHeadShadow.curveTo(207,211,179,206,178,194);
1019
innerSpiralFiddleHeadShadow.curveTo(166,215,219,229,204,190);
1020
innerSpiralFiddleHeadShadow.end();
1022
//Shadow for middle spiral on the top of the head
1023
var middleSpiralFiddleHeadShadow = mygraphic.addShape(shadowConfig);
1024
middleSpiralFiddleHeadShadow.moveTo(223,172);
1025
middleSpiralFiddleHeadShadow.curveTo(239,224,186,233,173,213);
1026
middleSpiralFiddleHeadShadow.curveTo(174,266,257,223,222,171);
1027
middleSpiralFiddleHeadShadow.end();
1029
//Shadow for outer spiral on the top of the head
1030
var outerSpiralFiddleHeadShadow = mygraphic.addShape(shadowConfig);
1031
outerSpiralFiddleHeadShadow.moveTo(148,214);
1032
outerSpiralFiddleHeadShadow.curveTo(158,242,186,250,218,246);
1033
outerSpiralFiddleHeadShadow.lineTo(221,253);
1034
outerSpiralFiddleHeadShadow.curveTo(178,258,154,241,147,214);
1035
outerSpiralFiddleHeadShadow.end();
1037
//Shadow beneath the left tuning key
1038
var leftTuningKeyShadow = mygraphic.addShape(shadowConfig);
1039
leftTuningKeyShadow.moveTo(293,286);
1040
leftTuningKeyShadow.lineTo(323,277);
1041
leftTuningKeyShadow.lineTo(337,289);
1042
leftTuningKeyShadow.lineTo(336,293);
1043
leftTuningKeyShadow.lineTo(292,307);
1044
leftTuningKeyShadow.lineTo(288,294);
1045
leftTuningKeyShadow.lineTo(292,285);
1046
leftTuningKeyShadow.end();
1048
//Shadow beneath the right tuning key
1049
var rightTuningKeyShadow = mygraphic.addShape(shadowConfig);
1050
rightTuningKeyShadow.moveTo(441,260);
1051
rightTuningKeyShadow.lineTo(440,276);
1052
rightTuningKeyShadow.lineTo(436,283);
1053
rightTuningKeyShadow.curveTo(453,286,474,299,492,319);
1054
rightTuningKeyShadow.curveTo(497,308,497,299,498,297);
1055
rightTuningKeyShadow.lineTo(492,278);
1056
rightTuningKeyShadow.lineTo(483,267);
1057
rightTuningKeyShadow.lineTo(468,254);
1058
rightTuningKeyShadow.lineTo(440,260);
1059
rightTuningKeyShadow.end();
1061
//Shadow beneath the left dowel
1062
var leftDowelShadow = mygraphic.addShape(shadowConfig);
1063
leftDowelShadow.moveTo(230,284);
1064
leftDowelShadow.lineTo(251,280);
1065
leftDowelShadow.curveTo(257,308,230,301,229,283);
1066
leftDowelShadow.end();
1068
//Shadow beneath the right dowel
1069
var rightDowelShadow = mygraphic.addShape(shadowConfig);
1070
rightDowelShadow.moveTo(377,246);
1071
rightDowelShadow.lineTo(399,242);
1072
rightDowelShadow.curveTo(402,261,383,263,376,246);
1073
rightDowelShadow.end();
1075
//Add transparent gradients for the woodgrain if the browser supports gradient transparency
1076
var DOCUMENT = Y.config.doc,
1077
canvas = DOCUMENT && DOCUMENT.createElement("canvas");
1079
if(DOCUMENT && (DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") || (canvas && canvas.getContext && canvas.getContext("2d"))))
1081
var headWoodgrain = mygraphic.addShape({
1082
type: "path",
1085
color: "#f00",
1089
type: "linear",
1092
{color: "#3B1E09", opacity: 1, offset: 0.03},
1093
{color: "#9B4D17", opacity: 1, offset: 0.06},
1094
{color: "#3B1E09", opacity: 1, offset: 0.09},
1095
{color: "#9B4D17", opacity: 1, offset: 0.12},
1096
{color: "#3B1E09", opacity: 1, offset: 0.18},
1097
{color: "#9B4D17", opacity: 1, offset: 0.20},
1098
{color: "#3B1E09", opacity: 1, offset: 0.23},
1099
{color: "#9B4D17", opacity: 1, offset: 0.29},
1100
{color: "#3B1E09", opacity: 1, offset: 0.34},
1101
{color: "#9B4D17", opacity: 1, offset: 0.36},
1102
{color: "#3B1E09", opacity: 1, offset: 0.38},
1103
{color: "#9B4D17", opacity: 1, offset: 0.40},
1104
{color: "#3B1E09", opacity: 1, offset: 0.45},
1105
{color: "#9B4D17", opacity: 1, offset: 0.48},
1106
{color: "#3B1E09", opacity: 1, offset: 0.50},
1107
{color: "#9B4D17", opacity: 1, offset: 0.52},
1108
{color: "#3B1E09", opacity: 1, offset: 0.55},
1109
{color: "#9B4D17", opacity: 1, offset: 0.62},
1110
{color: "#3B1E09", opacity: 1, offset: 0.68},
1111
{color: "#9B4D17", opacity: 1, offset: 0.73},
1112
{color: "#3B1E09", opacity: 1, offset: 0.76},
1113
{color: "#9B4D17", opacity: 1, offset: 0.78},
1114
{color: "#3B1E09", opacity: 1, offset: 0.82},
1115
{color: "#9B4D17", opacity: 1, offset: 0.86},
1116
{color: "#3B1E09", opacity: 1, offset: 0.90},
1117
{color: "#9B4D17", opacity: 1, offset: 0.94},
1118
{color: "#3B1E09", opacity: 1, offset: 0.96},
1119
{color: "#9B4D17", opacity: 1, offset: 1}
1124
//Draw the woodgrain
1125
headWoodgrain.moveTo(614,278);
1126
headWoodgrain.lineTo(553,263);
1127
headWoodgrain.curveTo(516,255,503,283,500,300);
1128
headWoodgrain.lineTo(496,318);
1129
headWoodgrain.curveTo(496,323,488,323,486,318);
1130
headWoodgrain.curveTo(405,233,310,332,218,321);
1131
headWoodgrain.curveTo(149,320,101,270,99,217);
1132
headWoodgrain.curveTo(96,182,120,143,141,132);
1133
headWoodgrain.curveTo(162,116,199,116,223,131);
1134
headWoodgrain.curveTo(242,140,260,170,253,202);
1135
headWoodgrain.curveTo(249,228,230,242,213,246);
1136
headWoodgrain.curveTo(214,249,218,257,235,246);
1137
headWoodgrain.curveTo(254,233,299,209,324,199);
1138
headWoodgrain.curveTo(369,182,428,185,470,195);
1139
headWoodgrain.lineTo(505,204);
1140
headWoodgrain.lineTo(506,203);
1141
headWoodgrain.lineTo(614,231);
1142
headWoodgrain.end();
1144
//handle for adding opacity to the whole object.
1145
headWoodgrain.addClass('woodgrain');
1148
//The bushing for the left tuning key
1149
var nob_bushing_left = mygraphic.addShape({
1150
type: "ellipse",
1153
color: "#00dd00",
1157
type: "radial",
1159
{color: "#000", opacity: 1, offset: 0},
1160
{color: "#000", opacity: 1, offset: 0.7},
1161
{color: "#282622", opacity: 1, offset: 0.8},
1162
{color: "#000", opacity: 1, offset: 0.9}
1176
//The bushing for the right tuning key
1177
var nob_bushing_right = mygraphic.addShape({
1178
type: "ellipse",
1181
color: "#00dd00",
1185
type: "radial",
1187
{color: "#000", opacity: 1, offset: 0},
1188
{color: "#000", opacity: 1, offset: 0.7},
1189
{color: "#282622", opacity: 1, offset: 0.8},
1190
{color: "#000", opacity: 1, offset: 0.9}
1204
var leftTuningKeySides = mygraphic.addShape({
1205
type: "path",
1208
color: "#00dd00",
1212
type: "radial",
1214
{color: "#73371F", opacity: 1, offset: 0},
1215
{color: "#35211B", opacity: 1, offset: 1}
1219
leftTuningKeySides.moveTo(318,231);
1220
leftTuningKeySides.curveTo(333,227,344,237,336,252);
1221
leftTuningKeySides.lineTo(335,253);
1222
leftTuningKeySides.curveTo(326,267,297,294,286,300);
1223
leftTuningKeySides.curveTo(281,305,262,295,266,283);
1224
leftTuningKeySides.curveTo(278,266,306,245,313,234);
1225
leftTuningKeySides.end();
1227
var rightTuningKeySides = mygraphic.addShape({
1228
type: "path",
1231
color: "#00dd00",
1235
type: "radial",
1237
{color: "#73371F", opacity: 1, offset: 0},
1238
{color: "#35211B", opacity: 1, offset: 1}
1243
rightTuningKeySides.moveTo(476,214);
1244
rightTuningKeySides.curveTo(492,206,504,229,494,238);
1245
rightTuningKeySides.curveTo(482,247,455,265,432,271);
1246
rightTuningKeySides.curveTo(422,275,403,262,420,244);
1247
rightTuningKeySides.curveTo(430,235,463,224,476,214);
1248
rightTuningKeySides.end();
1250
//Shared attributes for tuning key edges
1251
var tuningKeyBevelStyle = {
1252
type: "path",
1255
color: "#00dd00",
1259
type: "radial",
1261
{color: "#DB8C64", opacity: 1, offset: 0},
1262
{color: "#593123", opacity: 1, offset: 0.5},
1263
{color: "#231610", opacity: 1, offset: 1}
1273
//bevel for the right side tuning key
1274
var leftTuningKeyBevel = mygraphic.addShape(tuningKeyBevelStyle);
1275
leftTuningKeyBevel.moveTo(318,236);
1276
leftTuningKeyBevel.curveTo(324,219,345,249,336,249);
1277
leftTuningKeyBevel.curveTo(316,263,292,286,282,301);
1278
leftTuningKeyBevel.curveTo(282,304,264,295,266,285);
1279
leftTuningKeyBevel.curveTo(273,279,313,247,317,237);
1280
leftTuningKeyBevel.end();
1282
//bevel for the right side tuning key
1283
var rightTuningKeyBevel = mygraphic.addShape(tuningKeyBevelStyle);
1284
rightTuningKeyBevel.moveTo(477,215);
1285
rightTuningKeyBevel.curveTo(495,205,506,240,494,238);
1286
rightTuningKeyBevel.curveTo(481,246,443,268,428,272);
1287
rightTuningKeyBevel.curveTo(421,274,407,256,417,248);
1288
rightTuningKeyBevel.curveTo(413,253,466,234,477,215);
1289
rightTuningKeyBevel.end();
1291
//Add an ellipse for the dowel of the left (opposite side) tuning key
1292
var nobdowel_left = mygraphic.addShape({
1293
type: "ellipse",
1296
color: "#00dd00",
1300
type: "radial",
1302
{color: "#8E5B40", opacity: 1, offset: 0},
1303
{color: "#593123", opacity: 1, offset: 0.3},
1304
{color: "#231610", opacity: 1, offset: 1}
1318
//Add an ellipse for the dowel of the right (opposite side) tuning key
1319
var nobdowel_right = mygraphic.addShape({
1320
type: "ellipse",
1323
color: "#00dd00",
1327
type: "radial",
1329
{color: "#8E5B40", opacity: 1, offset: 0},
1330
{color: "#593123", opacity: 1, offset: 0.3},
1331
{color: "#231610", opacity: 1, offset: 1}
1345
//Add an ellipse for the black tip of the left tuning key
1346
var nob_tip_left = mygraphic.addShape({
1347
type: "ellipse",
1350
color: "#332017",
1354
type: "radial",
1356
{color: "#808080", opacity: 1, offset: 0},
1357
{color: "#000", opacity: 1, offset: 0.3},
1358
{color: "#000", opacity: 1, offset: 1}
1372
//Add an ellipse for the black tip of the right tuning key
1373
var nob_tip_right = mygraphic.addShape({
1374
type: "ellipse",
1377
color: "#332017",
1381
type: "radial",
1383
{color: "#808080", opacity: 1, offset: 0},
1384
{color: "#000", opacity: 1, offset: 0.5},
1385
{color: "#000", opacity: 1, offset: 1}
1399
</script></pre>
1405
<div class="yui3-u-1-4">
1406
<div class="sidebar">
1410
<div class="sidebox">
1412
<h2 class="no-toc">Examples</h2>
1416
<ul class="examples">
1419
<li data-description="Shows how to create a Graphic instance and add shapes.">
1420
<a href="graphics-simple.html">Basic Graphics Implementation</a>
1425
<li data-description="Shows how to draw lines and polygons.">
1426
<a href="graphics-path.html">Basic Path</a>
1431
<li data-description="Shows how to create linear and radial gradient fills.">
1432
<a href="graphics-gradients.html">Create Gradient Fills</a>
1437
<li data-description="Shows how to add drag to a shape.">
1438
<a href="graphics-drag.html">Basic drag with graphic object</a>
1443
<li data-description="Shows how to apply transforms to shape.">
1444
<a href="graphics-transforms.html">Using Transforms</a>
1449
<li data-description="Shows how to use a custom shape with the Graphics module.">
1450
<a href="graphics-customshape.html">Custom Shape</a>
1455
<li data-description="Shows to use the graphics api to draw a realistic glass.">
1456
<a href="graphics-muddyglass.html">Transparent Glass with Shadow</a>
1461
<li data-description="Shows to use the graphics api to draw a violin.">
1462
<a href="graphics-violin.html">Complex Drawing: Violin</a>
1474
<div class="sidebox">
1476
<h2 class="no-toc">Examples That Use This Component</h2>
1480
<ul class="examples">
1499
<li data-description="This example demonstrates animating an element along a curved path using bezier control points.">
1500
<a href="../anim/curve.html">Animating Along a Curved Path</a>
1513
<script src="../assets/vendor/prettify/prettify-min.js"></script>
1514
<script>prettyPrint();</script>