<div dir="ltr"><div dir="ltr"><div>// Working prototype code to find texCoordIndex values > length of TextureCoordinate.point.</div><div><br></div><div>// You'll want to translate into your own language/encoding. Only works for IFS right now</div><div><br></div><div>let fs = require("fs");</div><div>let file = "JinLOA4Canonical.json";</div><div>let data = fs.readFileSync(file).toString();</div><div>let json = JSON.parse(data);</div><div>/*console.log(json.X3D);</div><div>console.log(json.X3D.Scene);</div><div>console.log(json.X3D.Scene["-children"]);</div><div>console.log(json.X3D.Scene["-children"][3]["HAnimHumanoid"]);</div><div>console.log(json.X3D.Scene["-children"][3]["HAnimHumanoid"]["@scale"]);</div><div>*/</div><div>/*</div><div>let divisor = [];</div><div>divisor[0] = scale[0];</div><div>divisor[1] = scale[1];</div><div>divisor[2] = scale[2];</div><div>*/</div><div>let HUMANCHILD = 3;</div><div><br></div><div>//json.X3D.Scene["-children"][HUMANCHILD] = json.X3D.Scene["-children"][HUMANCHILD+1];</div><div><br></div><div>let scale = json.X3D.Scene["-children"][HUMANCHILD]["HAnimHumanoid"]["@scale"];</div><div>let center = json.X3D.Scene["-children"][HUMANCHILD]["HAnimHumanoid"]["-skeleton"][0]["HAnimJoint"]["@center"];</div><div><br></div><div>//delete json.X3D.Scene["-children"][HUMANCHILD+1];</div><div><br></div><div>let x = center[0];</div><div>let y = center[1];</div><div>let z = center[2];</div><div><br></div><div><br></div><div>function centering(json) {</div><div><span style="white-space:normal"><span style="white-space:pre"> </span>for (let j in json) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (j === "@center") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (json["@name"] === "l_talocrural") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>l_x = json["@center"][0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>l_z = json["@center"][2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>y = json["@center"][1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (json["@name"] === "r_talocrural") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>r_x = json["@center"][0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>y = json["@center"][1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>r_z = json["@center"][2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (typeof json[j] === 'object') {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>centering(json[j]);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div>}</div><div><br></div><div>function transform(json, indent, parent, max, parentTranslation) {</div><div><span style="white-space:normal"><span style="white-space:pre"> </span>let translation = [0,0,0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>for (let j in json) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (j === "@translation") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] - x;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] - y;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] - z;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] / scale[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] / scale[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] / scale[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>translation[0] = json[j][0] + parentTranslation[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>translation[1] = json[j][1] + parentTranslation[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>translation[2] = json[j][2] + parentTranslation[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = parseFloat(json[j][0].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = parseFloat(json[j][1].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = parseFloat(json[j][2].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>// delete json[j];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (j === "@center") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] - x;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] - y;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] - z;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] / scale[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] / scale[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] / scale[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] + parentTranslation[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] + parentTranslation[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] + parentTranslation[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = parseFloat(json[j][0].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = parseFloat(json[j][1].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = parseFloat(json[j][2].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>// console.log(json["@name"]);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>// console.log(json["@center"][0].toFixed(4), json["@center"][1].toFixed(4), json["@center"][2].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (j === "@centerOfRotation") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] - x;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] - y;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] - z;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] / scale[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] / scale[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] / scale[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] + parentTranslation[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] + parentTranslation[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] + parentTranslation[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = parseFloat(json[j][0].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = parseFloat(json[j][1].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = parseFloat(json[j][2].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (j === "@position") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] - x;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] - y;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] - z;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] / scale[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] / scale[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] / scale[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = json[j][0] + parentTranslation[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = json[j][1] + parentTranslation[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = json[j][2] + parentTranslation[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][0] = parseFloat(json[j][0].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][1] = parseFloat(json[j][1].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][2] = parseFloat(json[j][2].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (j === "IndexedFaceSet") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>// console.log(json[j]);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (json[j]["@texCoordIndex"]) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>var tci = json[j]["@texCoordIndex"];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>// console.log(tci);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>max = Math.max(...tci);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>// console.log(max);</span></div><div><br></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>transform(json[j], indent+1, json, max, translation);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (j === "@point") {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>let i = 0;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>for (i = 0; i < json[j].length; i+=3) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (!parent["TextureCoordinate"]) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+0] = json[j][i+0] - x;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+1] = json[j][i+1] - y;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+2] = json[j][i+2] - z;</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+0] = json[j][i+0] / scale[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+1] = json[j][i+1] / scale[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+2] = json[j][i+2] / scale[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+0] = json[j][i+0] + parentTranslation[0];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+1] = json[j][i+1] + parentTranslation[1];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+2] = json[j][i+2] + parentTranslation[2];</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+0] = parseFloat(json[j][i+0].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+1] = parseFloat(json[j][i+1].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>json[j][i+2] = parseFloat(json[j][i+2].toFixed(4));</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (parent["TextureCoordinate"]) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>if (json[j].length/2 > 0 && json[j].length/2 <= max) {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>console.log("point length", json[j].length, ", point length/2", json[j].length/2, ", Max index", max);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>console.log(parent);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>} else if (typeof json[j] === 'object') {</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>transform(json[j], indent+1, json, max, translation);</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div><span style="white-space:normal"><span style="white-space:pre"> </span>}</span></div><div>}</div><div><br></div><div>centering(json);</div><div><br></div><div>x = (l_x + r_x) / 2;</div><div>z = (l_z + r_z) / 2;</div><div><br></div><div>console.log(x, y, z);</div><div><br></div><div>transform(json, 0, null, Math.INFINITY, [0,0,0]);</div><div><br></div><div>console.log(scale);</div><div>scale[0] = scale[0] / scale [0];</div><div>scale[1] = scale[1] / scale [1];</div><div>scale[2] = scale[2] / scale [2];</div><div>console.log(scale);</div><div><br></div><div>let out = JSON.stringify(json, null, 2);</div><div>let outfile = "JinLOA4Canonical101.json";</div><div>fs.writeFile(outfile, out, function(err) {</div><div>if(err) {</div><div><span style="white-space:normal"><span style="white-space:pre"> </span>return console.error(err);</span></div><div>}</div><div>});</div><div><br></div><div>json = JSON.parse(data);</div><div>out = JSON.stringify(json, null, 2);</div><div>outfile = "JinLOA4Canonical100.json";</div><div>fs.writeFile(outfile, out, function(err) {</div><div>if(err) {</div><div><span style="white-space:normal"><span style="white-space:pre"> </span>return console.error(err);</span></div><div>}</div><div>});</div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 21, 2023 at 9:10 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Here's the current JinLOA4Canonical101.x3d attached. Michalis, you will find a metadata problem if you launch it. I was able to view in freewrl 4 and 5. The viewpoint isn't right, suggestions welcome. Joe, I haven't been able to delete the translations without major problems, I will call you tomorrow.<div><br></div><div>Files are here for now:</div><div><br></div><div><a href="https://coderextreme.net/jin.zip" target="_blank">https://coderextreme.net/jin.zip</a><br></div></div></div>
</blockquote></div>