{"id":32420,"date":"2017-08-28T03:01:34","date_gmt":"2017-08-27T17:01:34","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=32420"},"modified":"2017-08-28T18:06:37","modified_gmt":"2017-08-28T08:06:37","slug":"phpjavascript-svg-geometry-tracing-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/phpjavascript-svg-geometry-tracing-tutorial\/","title":{"rendered":"PHP\/Javascript SVG Geometry Tracing Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/\"><img decoding=\"async\" style=\"border: 15px solid pink;\" alt=\"PHP\/Javascript SVG Geometry Tracing Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/dataurisvg.gif\" title=\"PHP\/Javascript SVG Geometry Tracing Tutorial\"  style=\"float:left;\" \/><\/a><p class=\"wp-caption-text\">PHP\/Javascript SVG Geometry Tracing Tutorial<\/p><\/div>\n<p>The tutorial today is about software (web application) integration that is value adding but in an optional way.  The software integration is between &#8230;<\/p>\n<ul>\n<li>the supervising <a title='PHP\/Javascript SVG Colour Picker Tutorial' href='#php\/jsvgcpt'>PHP\/Javascript SVG Colour Picker Tutorial<\/a>&#8216;s PHP and Javascript <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/\" title='Click picture'>web application<\/a>&#8216;s <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php---GETME' title='SVG_Primer.php'>SVG_Primer.php<\/a> changed in <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php---GETME' title='SVG_Primer.php'>this way<\/a>, today &#8230; supervising &#8230;<\/li>\n<li>the supervised <a title='HTML\/Javascript Canvas Geometry Tracing Game Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/htmljavascript-canvas-geometry-tracing-game-tutorial\/'>HTML\/Javascript Canvas Geometry Tracing Game Tutorial<\/a>&#8216;s HTML and Javascript <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/geometry_tracing.html-GETME' title='geometry_tracing.html'>geometry_tracing.html<\/a> changed in <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/geometry_tracing.html-GETME' title='geometry_tracing.html'>this way<\/a> to interface (and integrate) with the supervisor above, via an HTML iframe element arrangement, and the HTML(5) <a target=_blank title='HTML Canvas element information from w3schools' href='http:\/\/www.w3schools.com\/tags\/ref_canvas.asp'>canvas<\/a> element&#8217;s <a target=_blank title='HTML5 canvas drawImage() method information from w3schools' href='http:\/\/www.w3schools.com\/tags\/canvas_drawimage.asp'>drawImage()<\/a> method<\/li>\n<\/ul>\n<p>We integrate these two in quite a neat way, allowing for the extension of the supervised&#8217;s <b>static arrays<\/b> which go &#8230;<\/p>\n<p><code><br \/>\nvar imageo=[];<br \/>\n<b>var ourareawas=[36213.0, 25382.0, 19608.0, 39366.5, 24471.5, 43679.5, 37633.5, 45130.5, 40987.5, 51842.5];<br \/>\nvar image_array=[\"one_sided.jpg\", \"two_sided.jpg\", \"three_sided.jpg\", \"four_sided.jpg\", \"five_sided.jpg\", \"six_sided.jpg\", \"seven_sided.jpg\", \"eight_sided.jpg\", \"nine_sided.jpg\", \"ten_sided.jpg\"];<\/b><br \/>\n<\/code><\/p>\n<p> &#8230; extended by Javascript&#8217;s [array].<a target=_blank title='Javascript push method information from w3schools' href='http:\/\/www.w3schools.com\/jsref\/jsref_push.asp'>push<\/a> method (often good for those dynamic Javascript DOM driven extensions of functionality) &#8230; to establish the (communication protocol) ideas for the &#8220;Geometry&#8221; the user can be &#8220;Tracing&#8221; around, by allowing new GET parameters &#8230;<\/p>\n<ul>\n<li>?<b>area<\/b>=[parent determined area of SVG element]<\/li>\n<li>&#038;<b>svg<\/b>=[data URI of SVG xml]<\/li>\n<\/ul>\n<p> &#8230; the latter of which we&#8217;re using for the first time in this project, and want to thank the <a target=_blank title='Data URIs for SVG help, thanks' href='https:\/\/css-tricks.com\/using-svg\/'>Data URI&#8217;s for SVG<\/a> paragraph for great ideas here.  As you do software integration, sometimes you think of it as a slog, and yes, it usually is a bit of a slog.  When the slog is more a neat data efficient form of integration, that <a target=_blank title='Data URI information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Data_URI_scheme'>Data URI<\/a>s for <a target=_blank href='https:\/\/www.w3schools.com\/graphics\/svg_intro.asp' title='SVG information from w3schools'>SVG<\/a> seems to us to be, then it all seems worthwhile.<\/p>\n<p>However, in this early days integration, we still have to iron out some cross-browser issue aspects that don&#8217;t work in Firefox, for us not working with &#8220;data:image\/svg+xml;base64,&#8221; nor &#8220;data:image\/svg+xml;utf8,&#8221; prefixed Data URI for SVG forms.  Possibly it&#8217;s to do with using it via GET arguments.  Time will tell, we hope.<\/p>\n<p>And so <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/dataurisvg.gif\">you can see us<\/a> integrating the display of an SVG piece of geometry to offering the user the (optional) chance to play a game seeing how accurately they can trace around that shape and match the supervisor calculated mathematics (<a target=_blank title='Useful area of a polygon algorithm discussed, thanks' href='http:\/\/www.mathopenref.com\/coordpolygonarea.html'>Area of a Polygon<\/a>) algorithm (we use a lot in various web applications) generated area value.  Value adding, and entertainment adding, we think &#8230; we hope.<\/p>\n<hr>\n<p id='php\/jsvgcpt'>Previous relevant <a target=_blank title='PHP\/Javascript SVG Colour Picker Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/php\/javascript-svg-colour-picker-tutorial\/'>PHP\/Javascript SVG Colour Picker Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/\"><img decoding=\"async\" id=\"hjspt\" style=\"float:left;border: 15px solid pink;\" alt=\"PHP\/Javascript SVG Colour Picker Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/colour_picker_input.jpg\" title=\"PHP\/Javascript SVG Colour Picker Tutorial\"  onmouseover=\" document.getElementById('hjspt').src = document.getElementById('hjspt').src.replace('png','PNG').replace('jpg','png').replace('PNG','jpg');     \" \/><\/a><p class=\"wp-caption-text\">PHP\/Javascript SVG Colour Picker Tutorial<\/p><\/div>\n<p>Today&#8217;s posting hooks up two <a target=_blank title='HTML5 information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/HTML5'>HTML5<\/a> concepts, as described below &#8230;<\/p>\n<ul>\n<li>The HTML5 specification allows for the display of 2D-graphics via <a target=_blank href='http:\/\/www.tutorialspoint.com\/html5\/html5_svg.htm' title='SVG information'>SVG HTML tags<\/a> which use graphical applications in XML and the XML is then rendered by a SVG viewer.  SVG stands for Scalable Vector Graphics.<\/li>\n<li>The HTML5 specification added <a target=_blank title='HTML input information from w3schools' href='http:\/\/www.w3schools.com\/html\/html_form_input_types.asp'>some new very useful<\/a> HTML input element types, and today, we&#8217;re talking about the <a target=_blank title='HTML5 input type=color information from w3schools' href='http:\/\/www.w3schools.com\/html\/tryit.asp?filename=tryhtml_input_color'><i>type=color<\/i><\/a> element type that brings up a pretty suave colour picker helper, in some browsers<\/li>\n<\/ul>\n<p>There are alternative colour pickers out there, in addition to what HTML5 has given us, and you may want to read <a target=_blank title='YUI UI Colour Picker Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/yui-ui-colour-picker-primer-tutorial\/'>YUI UI Colour Picker Primer Tutorial<\/a> about that.<\/p>\n<p>Today, we&#8217;ll leave you with <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php--GETME'>SVG_Primer.php<\/a> changed from <a target=_blank title='PHP GD and Image Functions Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/php-gd-and-image-functions-primer-tutorial\/'>PHP GD and Image Functions Primer Tutorial<\/a>&#8216;s version in <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php--GETME'>this way<\/a>.  And before you leave, you could create your own SVG elements via this <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php'>live run<\/a> link.<\/p>\n<hr>\n<p id='pjspt'>Previous relevant <a target=_blank title='PHP\/Javascript SVG Primer Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/phpjavascript-svg-primer-tutorial\/'>PHP\/Javascript SVG Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/\"><img decoding=\"async\" id=\"hjspt\" style=\"float:left;border: 15px solid pink;\" alt=\"PHP\/Javascript SVG Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.png\" title=\"PHP\/Javascript SVG Primer Tutorial\"  onmouseover=\" document.getElementById('hjspt').src = document.getElementById('hjspt').src.replace('png','PNG').replace('jpg','png').replace('PNG','jpg');     \" \/><\/a><p class=\"wp-caption-text\">PHP\/Javascript SVG Primer Tutorial<\/p><\/div>\n<p>The HTML5 specification allows for the display of 2D-graphics via <a target=_blank href='http:\/\/www.tutorialspoint.com\/html5\/html5_svg.htm' title='SVG information'>SVG HTML tags<\/a> which use graphical applications in XML and the XML is then rendered by an SVG viewer.   SVG stands for Scalable Vector Graphics.<\/p>\n<p>We&#8217;ve talked about the HTML canvas element as another means to come to this end, but the SVG methods are more straightforward in their creation.<\/p>\n<p>For today&#8217;s tutorial we follow the advice at this wonderful <a target=_blank href='http:\/\/www.tutorialspoint.com\/html5\/html5_svg.htm' title='SVG information'>tutorial<\/a> and wrap it in PHP, so that you can specify your own parameters.   Hope you find it very useful, and easy.<\/p>\n<p>This demonstrates to you that if you have some great static HTML you can keep that great static content and present a dynamic version the user can play around with, and learn from, by adding that PHP server-side content.   For today&#8217;s PHP interface we got the HTML to use an HTML form of the relevant shape&#8217;s characteristics and <i>post<\/i> this data back to the same PHP webpage, analyzing the $_POST[] data to fill in the static HTML parameter values with user-defined parameter alternatives.<\/p>\n<p>Today we have PHP and Javascript programmable source code you could call <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php_GETME'>SVG_Primer.php<\/a> and here is its <a target=_blank title='SVG_Primer.php' href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/SVG\/SVG_Primer.php'>live run<\/a>.<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#8614' onclick='var dv=document.getElementById(\"d8614\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?tag=HTML5\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d8614' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#26698' onclick='var dv=document.getElementById(\"d26698\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?tag=svg\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d26698' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d32420' onclick='var dv=document.getElementById(\"d32420\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/software-integration\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d32420' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>The tutorial today is about software (web application) integration that is value adding but in an optional way. The software integration is between &#8230; the supervising PHP\/Javascript SVG Colour Picker Tutorial&#8216;s PHP and Javascript web application&#8216;s SVG_Primer.php changed in this &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/phpjavascript-svg-geometry-tracing-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14,15,37],"tags":[1788,99,103,184,275,276,281,1654,354,439,476,477,484,576,578,587,614,652,752,932,2135,1168,1226,2320,1480],"class_list":["post-32420","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-games","category-tutorials","tag-algorithm","tag-area","tag-array","tag-canvas","tag-cross-browser","tag-cross-browser-issues","tag-css","tag-data-uri","tag-dom","tag-firefox","tag-game","tag-games-2","tag-geometry","tag-html","tag-html5","tag-iframe","tag-integration","tag-javascript","tag-mathematics","tag-php","tag-push","tag-software-integration","tag-svg","tag-tracing","tag-xml"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/32420"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=32420"}],"version-history":[{"count":11,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/32420\/revisions"}],"predecessor-version":[{"id":32439,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/32420\/revisions\/32439"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=32420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=32420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=32420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}