{"id":5737,"date":"2019-09-06T05:10:50","date_gmt":"2019-09-06T05:10:50","guid":{"rendered":"https:\/\/max-drake.cc\/?p=5737"},"modified":"2019-09-07T02:47:35","modified_gmt":"2019-09-07T02:47:35","slug":"javascript-in-3d-pdf-basic","status":"publish","type":"post","link":"https:\/\/max-drake.cc\/?p=5737","title":{"rendered":"JavaScript in 3D PDF- basic"},"content":{"rendered":"\n<p>I have had a few attempts at this before and have given up. I find that the Adobe site is so unhelpful that I never get anywhere. There must be a large resource out there for scripts for using inside 3D PDF&#8217;s but they do not seem to be shared around. The helpers on posts are pretty cryptic, a bit like the OpenMaint crowd. They purport to help, but dont, and mainly hinder. <\/p>\n\n\n\n<p>Anyway, I watched a few videos on using JavaScript in 2D forms, dealing with simple processes. This was about my level for starting off. <\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Acrobat Javascript\" width=\"678\" height=\"381\" data-src=\"https:\/\/www.youtube.com\/embed\/videoseries?list=PLRKQt7mKHLkE8IuKSXlBl7E76eFZfWWO3\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>The videos got my enthusiasm up and I decided to have another crack at making java Scripts work inside of 3D PDFs. <\/p>\n\n\n\n<p>So I went searching on the web for some snippets that would do some basic stuff for me, I did find the link to the <strong><a rel=\"noreferrer noopener\" aria-label=\"JavaScript 3D API reference doc (opens in a new tab)\" href=\"https:\/\/www.adobe.com\/content\/dam\/acom\/en\/devnet\/acrobat\/pdfs\/js_3d_api_reference.pdf\" target=\"_blank\">JavaScript 3D API reference doc<\/a><\/strong> and of course that confused me no end. I just copy\/alter existing code, so the references were not that much help. Anyway, after a lot of buggering about I finally got a bit of code to work. <\/p>\n\n\n\n<p>What was not in the reference doc were examples so you could see the structure that you needed to follow, There was an earlier reference but the one above does have a couple of basic examples that you can use to test out.<\/p>\n\n\n\n<p> The first issue i had was how to select an object inside the 3D PDF using JavaScript? The PDF has a 2D area\/page and a 3D area inside that. So you need to reach into the 3D area to get the objects that you want.  So on Page 9 in the introduction it shows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>The following example illustrates how to access the 3D JavaScript engine. In this example, a button (or link) contains JavaScript code that rotates the U3D object named \"Axes\".\n\n\/\/ Get index of page containing the Annot3D object (count starts at 0).\npageIndex = this.pageNum;\n\n\/\/ Index of the Annot3D (count starts at 0).\nannotIndex = 0;\n\n\/\/ Get a reference to the Annot3D script context.\nc3d = this.getAnnots3D( pageIndex )[ annotIndex ].context3D;\n\n\/\/ Get a reference to the node in the scene named \"Axes\".\naxes = c3d.scene.nodes.getByName( \"Axes\" );\n\n\/\/ Rotate the object about the X-Axis PI\/6 radians (30 degrees).\naxes.transform.rotateAboutXInPlace( Math.PI \/ 6 );<\/code><\/pre>\n\n\n\n<p>So you have to first get the page you want, then the <strong>Annot3D<\/strong> object ( I suppose you could have multiple 3D areas on a page) and the you need the <strong>context3D <\/strong>. So a lot of JavaScript code starts with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>getAnnots3D(0)[0].context3D.xxxxxxx<\/code><\/pre>\n\n\n\n<p>You then choose the next level down, until you get to the specific object that you are looking for. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Process- Turn Objects Off\/On-part 1<\/h3>\n\n\n\n<p>What I wanted was some simple code that would turn an object in the 3D PDF off or on, like, a Roof say. I&#8217;d work in Adobe Acrobat Pro, make a button and attach a bit of JavaScript to that button. <\/p>\n\n\n\n<p>Setting up the button was easy enough, apart from the TEXT DISAPPEARING. Then I realised that I needed to go to the  Options tab and give it a label, then that would appear on the button. Not exactly obvious but once you know its easy enough to do. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"859\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-1024x859.jpg\" alt=\"\" class=\"wp-image-5738 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-1024x859.jpg 1024w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-300x252.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-768x644.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-100x84.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-119x100.jpg 119w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-763x640.jpg 763w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-640x537.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-915x768.jpg 915w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703-1287x1080.jpg 1287w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074703.jpg 1728w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/859;\" \/><figcaption>Using options to add a label to the button. I thought The button name was the label , but its not, you get a blank.<\/figcaption><\/figure>\n\n\n\n<p>You use the Action tab to associate a JavaScript with an action for the button, in this case, on MouseUp it will activate the script. Inside this part, if you press edit it will allow you to write the JS code. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"933\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-1024x933.jpg\" alt=\"\" class=\"wp-image-5739 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-1024x933.jpg 1024w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-300x273.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-768x700.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-100x91.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-110x100.jpg 110w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-703x640.jpg 703w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-640x583.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-843x768.jpg 843w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808-1186x1080.jpg 1186w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074808.jpg 1739w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/933;\" \/><\/figure>\n\n\n\n<p>So after getting the button on the page and associating a JavaScript code to it we need to start debugging (well, that&#8217;s my experience of any code that I write\/borrow or modify).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Debugging<\/h3>\n\n\n\n<p>I did come across this article  <strong><a rel=\"noreferrer noopener\" aria-label=\"The Acrobat JavaScript Console (Your best friend for developing Acrobat JavaScript) (opens in a new tab)\" href=\"https:\/\/acrobatusers.com\/tutorials\/javascript_console\" target=\"_blank\">The Acrobat JavaScript Console (Your best friend for developing Acrobat JavaScript)<\/a><\/strong> that was helpful. <\/p>\n\n\n\n<p>You need to go into your preferences and enable the JS debugger, then it comes up as an option. You can also use Ctrl + J to pop it up as well.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"851\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-1024x851.jpg\" alt=\"\" class=\"wp-image-5740 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-1024x851.jpg 1024w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-300x249.jpg 300w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-768x638.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-100x83.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-120x100.jpg 120w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-770x640.jpg 770w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-640x532.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-924x768.jpg 924w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-1299x1080.jpg 1299w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910-1920x1596.jpg 1920w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/851;\" \/><\/figure>\n\n\n\n<p>After I started doing the basic 3+4 and using Ctrl + Enter to run it on the console, I started to test some of the previous non-working code I had to test it. Things went a lot faster when I was just testing it in the console, and quicker to try several different codes examples until i got what I wanted. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Process- Turn Objects Off\/On-part 2<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"702\" height=\"1024\" data-src=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-702x1024.jpg\" alt=\"\" class=\"wp-image-5741 lazyload\" data-srcset=\"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-702x1024.jpg 702w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-206x300.jpg 206w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-768x1120.jpg 768w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-100x146.jpg 100w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-69x100.jpg 69w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-439x640.jpg 439w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-640x934.jpg 640w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-526x768.jpg 526w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121-740x1080.jpg 740w, https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00075121.jpg 863w\" data-sizes=\"(max-width: 702px) 100vw, 702px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 702px; --smush-placeholder-aspect-ratio: 702\/1024;\" \/><\/figure>\n\n\n\n<p>in the image above is the model tree.  Top level <strong>model<\/strong>, then <strong>Node<\/strong>, then  <strong>doors, Nurse call devices, Plumbing Fixtures, Roofs, Walls <\/strong>all at the same level of hierarchy in the trees, then these can be drilled down further. <\/p>\n\n\n\n<p>So I thought, if I target  Roof&#8217;s and turn that visibility off, then all below that will turn off too. <\/p>\n\n\n\n<p>If you ticked the Roofs checkbox in the 3D PDF that is exactly what happens, but not so in JS<\/p>\n\n\n\n<p>,All that happens is that particular checkbox goes off but the roof is still displayed in the model. So although you have the parent object, you do not have any of its children. <\/p>\n\n\n\n<p>As there are two roofs, I had to go to the bottom of the tree for the roof and turn the 3DGeom~70 &amp; 72 off. This still left the outline of the roofs , which were nodes  3DGeom~71 &amp; 73. I could have added a couple of more lines to the JS to allow for these too, but I didn&#8217;t. So the JS for the button to hide the roof elements is as below, and to turn on, just change <strong>.visible= true<\/strong> for the objects.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>getAnnots3D(0)[0].context3D.scene.nodes.getByName(\"3DGeom~70\").visible=false;\ngetAnnots3D(0)[0].context3D.scene.nodes.getByName(\"3DGeom~72\").visible=false;<\/code><\/pre>\n\n\n\n<p>So, I think you could turn them off at the Roof level, but you&#8217;d then have to loop through all the nodes below that and turn off all the nodes at each level below on the tree.  An exercise for later, its taken me all day to get this far.  The current method above is specific to this model and PDF, and if I was to do it for walls then I&#8217;d have 14 lines with different objects, so its not an efficient method of coding in its present form. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Changing Render Mode<\/h3>\n\n\n\n<p>The other code I found for changing what the model looked like was :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>getAnnots3D(0)[0].context3D.scene.renderMode =\"illustration\";<\/code><\/pre>\n\n\n\n<p>This takes the whole scene object and changes its rendering to <strong>illustration<\/strong>, and then the next button changes it back to <strong>solid<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MetaData<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var data= getAnnots3D(0)[0].context3D.scene.nodes.getByName(\"Basic Roof [1337964]\").metadataString;\ndata;<\/code><\/pre>\n\n\n\n<p>The above code, when run in the JS Debugger console, will show the data associated with the roof object that you see in the PDF.  This is what is exported to CSV for this object. Now how would I make use of that?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">End comment<\/h3>\n\n\n\n<p>The JavaScript in 3D can act on the objects inside the 3D PDF such as the Nodes, but you are also able to use JS at the document level, for things like Print and other aspects of the whole document. I haven&#8217;t played around with those actions yet. <\/p>\n\n\n\n<p>Overall I&#8217;m happy I&#8217;ve been able to get a bit of JS working inside a 3D PDF, but a bit disappointed with the level of actions that I&#8217;m allowed to do. <\/p>\n\n\n\n<p>Now that I&#8217;ve got code running, the debug console operating I can try and get some more useful code that is able to be used over multiple PDF&#8217;s rather than it being so specific to this particular one. <em>One small step for Max&#8230;.. hopefully a giant leap for Max&#8217;s 3D PDF&#8217;s.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>getAnnots3D(0)[0].context3D.scene.nodes.getByName(\"3DGeom~70\").opacity=.2;<\/code><\/pre>\n\n\n\n<p>The opacity is something that will be worth playing around with.<\/p>\n\n\n\n<p>Also colour, this from this article <a rel=\"noreferrer noopener\" aria-label=\"Color Control on 3D object (opens in a new tab)\" href=\"https:\/\/acrobatusers.com\/forum\/3d\/color-control-3d-object\/\" target=\"_blank\">Color Control on 3D object<\/a>,  I tried but it didn&#8217;t work, then used the code on the  2011-03-22 09:27:26     by sandigenco and it worked on the object<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>c3d = this.getAnnots3D(this.pageNum)[0].context3D;\nmatl = c3d.scene.meshes.getByName(\"3DGeom~70\").material;\n\nmatl.diffuseColor.set( 1, 0, 0 );<\/code><\/pre>\n\n\n\n<p>On the next item he shows how to get all the meshes names. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>c3d = this.getAnnots3D(this.pageNum)[0].context3D;\nmsh = c3d.scene.meshes;\nfor (var i = 0; i &lt; msh.count; i++) {console.println(\"Mesh at index \" + i + \" name = \" + msh.getByIndex(i).name);}<\/code><\/pre>\n\n\n\n<p>This prints out all the meshes in the console. TA mesh is  <strong><em>A Node object that contains geometry<\/em><\/strong>. So when I ran the script on the PDF I&#8217;m using above I got:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><\/li><\/ul>\n\n\n\n<p>undefinedMesh at index 0 name = 3DGeom~1<br> Mesh at index 1 name = 3DGeom~2<br> Mesh at index 2 name = 3DGeom~3<br> Mesh at index 3 name = 3DGeom~4<br> Mesh at index 4 name = 3DGeom~1_2<br> Mesh at index 5 name = 3DGeom~2_2<br> Mesh at index 6 name = 3DGeom~1_3<br> Mesh at index 7 name = 3DGeom~2_3<br> Mesh at index 8 name = 3DGeom~5<br> Mesh at index 9 name = 3DGeom~6<br> Mesh at index 10 name = 3DGeom~16<br> Mesh at index 11 name = 3DGeom~17<br> Mesh at index 12 name = 3DGeom~18<br> Mesh at index 13 name = 3DGeom~19<br> Mesh at index 14 name = 3DGeom~20<br> Mesh at index 15 name = 3DGeom~21<br> Mesh at index 16 name = 3DGeom~22<br> Mesh at index 17 name = 3DGeom~23<br> Mesh at index 18 name = 3DGeom~24<br> Mesh at index 19 name = 3DGeom~25<br> Mesh at index 20 name = 3DGeom~10<br> Mesh at index 21 name = 3DGeom~11<br> Mesh at index 22 name = 3DGeom~12<br> Mesh at index 23 name = 3DGeom~10_2<br> Mesh at index 24 name = 3DGeom~11_2<br> Mesh at index 25 name = 3DGeom~12_2<br> Mesh at index 26 name = 3DGeom~10_3<br> Mesh at index 27 name = 3DGeom~11_3<br> Mesh at index 28 name = 3DGeom~12_3<br> Mesh at index 29 name = 3DGeom~13<br> Mesh at index 30 name = 3DGeom~14<br> Mesh at index 31 name = 3DGeom~15<br> Mesh at index 32 name = 3DGeom~13_2<br> Mesh at index 33 name = 3DGeom~14_2<br> Mesh at index 34 name = 3DGeom~15_2<br> Mesh at index 35 name = 3DGeom~7<br> Mesh at index 36 name = 3DGeom~8<br> Mesh at index 37 name = 3DGeom~9<br> Mesh at index 38 name = 3DGeom~7_2<br> Mesh at index 39 name = 3DGeom~8_2<br> Mesh at index 40 name = 3DGeom~9_2<br> Mesh at index 41 name = 3DGeom~7_3<br> Mesh at index 42 name = 3DGeom~8_3<br> Mesh at index 43 name = 3DGeom~9_3<br> <strong>Mesh at index 44 name = 3DGeom~70<br> Mesh at index 45 name = 3DGeom~71<br> Mesh at index 46 name = 3DGeom~72<br> Mesh at index 47 name = 3DGeom~73<br> Mesh at index 48 name = 3DGeom~74<\/strong><br> Mesh at index 49 name = 3DGeom~75<br> Mesh at index 50 name = 3DGeom~76<br>all the way up to <br><br> Mesh at index 87 name = 3DGeom~113<br> Mesh at index 88 name = 3DGeom~114<br> Mesh at index 89 name = 3DGeom~115<\/p>\n\n\n\n<p>All of those from the Balina Bay Male\/Female change rooms. Basically these are all the end points &#8211; So roof has 2 x 2 = 4, Walls have 14 x 3 , so there are variable numbers of geometry depending on the elements. <\/p>\n\n\n\n<p>Also, a Function way to set the rendering is as follows (from code on page 9 on Reference book above<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function setRenderMode( renderModeName ) {for (var i=0; i &lt; getAnnots3D(0)[0].context3D.scene.meshes.count; i++) {getAnnots3D(0)[0].context3D.scene.meshes.getByIndex(i).renderMode = renderModeName;}}\n\nsetRenderMode( \"illustration\" );<\/code><\/pre>\n\n\n\n<p>When set that way, the buttons I created within the PDF don&#8217;t work. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using JavaScript with 3D PDF&#8217;s can make usability of it far easier for people with limited 3D model skills making it far more accessible to many<\/p>\n","protected":false},"author":1,"featured_media":5740,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,35,204,42,12],"tags":[],"class_list":["post-5737","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3d-pdf-data-access","category-api_json","category-automation","category-productivity","category-visualisation"],"featured_image_src":"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910.jpg","featured_image_src_square":"https:\/\/max-drake.cc\/wp-content\/uploads\/2019\/09\/00074910.jpg","author_info":{"display_name":"Max Drake","author_link":"https:\/\/max-drake.cc\/?author=1"},"_links":{"self":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts\/5737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5737"}],"version-history":[{"count":0,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/posts\/5737\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=\/wp\/v2\/media\/5740"}],"wp:attachment":[{"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/max-drake.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}