0x027970bd…2b4asent to0x7c3ea2b7…0b18·#16,264,751·view on Etherscan
const loadScript = (url, callback) =>
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onreadystatechange = callback;
script.onload = callback;
head.appendChild(script);
}
const spongenuityScript = function() {
let svg, path;
let x = 0;
let i = 500;
let pause = false
var prevX;
var prevY;
var embCode = [];
var half_w;
var half_h;
var sel_width;
var sel_height;
var currentX;
var currentY;
var stitch_point = 0;
var color_change = 0;
var DEFAULT_WIDTH = 1122
var DEFAULT_HEIGHT = 1587
var WIDTH = window.innerWidth
var HEIGHT = window.innerHeight
var DIM = Math.min(WIDTH, HEIGHT)
var M = DIM / DEFAULT_WIDTH
var M2 = DIM / DEFAULT_HEIGHT
let tokenId = tokenData.tokenId;
let fullTokenID = parseInt(tokenId);
console.log(fullTokenID)
preload = () => {
svg = loadSVG(`https://pinata.brightmoments.io/ipfs/QmUuKkbMptQBmivcUDbzs7V8v3RqKkHFtJm53RvqtP8aPz/${fullTokenID}.svg`);
}
setup = () => {
createCanvas(WIDTH, HEIGHT, SVG);
imageMode(CORNER);
background(0);
stroke(255);
image(svg,0, 0, WIDTH, HEIGHT);
path = querySVG('path')[0];
var path0 = document.querySelector('path');
var svgRect = path0.getBoundingClientRect();
var svgRectB = path0.getBBox();
var scaling = WIDTH/HEIGHT;
var screenMidPointX = WIDTH/2;
var rectMidPointX = svgRect.width/2;
var centerX = screenMidPointX - rectMidPointX - svgRect.left
var screenMidPointY = HEIGHT/2;
var rectMidPointY = svgRect.height/2;
var centerY = screenMidPointY - rectMidPointY - svgRect.top
console.log('M', M)
console.log('scaling', scaling)
console.log('svgRect.top', svgRect.top)
if(scaling === 1){
console.log('scaling = 1')
path.attribute('transform-origin', `center`);
path.attribute('transform', `translate(${centerX*(M)}, ${centerY*(M)}), scale(${M})`);
}
if(scaling === 0.7){
console.log('scaling = 0.7')
path.attribute('transform-origin', `center`);
path.attribute('transform', `translate(${centerX*(M)}, ${centerY*(M)}), scale(${M})`);
}
else if( scaling > 1){
console.log('scaling > 1')
path.attribute('transform-origin', `center`);
path.attribute('transform', `translate(${centerX*(scaling*M2)}, ${centerY*(scaling*M2)}), scale(${scaling*M2})`);
}
else if(0.5 > scaling < 1) {
console.log('0.5 > scaling < 1')
path.attribute('transform-origin', `center`);
path.attribute('transform', `translate(${centerX*(scaling)}, ${centerY*(scaling)}), scale(${scaling})`);
}
else if(scaling < 0.5) {
console.log('scaling < 1')
path.attribute('transform-origin', `center`);
path.attribute('transform', `translate(${centerX*(M2)- svgRect.left/2}, ${centerY*(M2)- svgRect.left/2}), scale(${scaling})`);
}
}
draw = () => {
noFill();
path = querySVG('path')[0];
var path0 = document.querySelector('path');
var length = path0.getTotalLength();
let size = 0.27;
path.attribute('stroke', 'white');
path.attribute('stroke-width', size);
path.attribute('stroke-dasharray', length);
path.attribute('stroke-dashoffset', length - x);
x = x + i;
if (x >= length && pause == false) {
x = length;
i = 0;
pause = true;
setTimeout(function () { cont(); }, 5000);
}
if (x >= length * 2) {
x = 0;
i = 0;
pause = false;
setTimeout(function () { beginning(); }, 5000);
}
function beginning() {
if (x >= 0 && pause == false) {
i = 500;
}
}
function cont() {
if (x >= length && pause == true) {
i = 500;
}
}
}
keyPressed = function () {
if (keyCode === 49) {
path.attribute('stroke-dashoffset', length);
save(x + "-" + frameCount + ".png");
}
if (keyCode === 50) {
// console.log('key 2 pressed')
path.attribute('stroke-dashoffset', length);
save(x + "-" + frameCount + ".svg");
}
if (keyCode === 51) {
confirmation();
}
}
const confirmDialog = (msg) => {
return new Promise(function (resolve, reject) {
let confirmed = window.confirm(msg);
return confirmed ? resolve(true) : reject(false);
});
}
function delay(milliseconds) {
return new Promise(resolve => {
setTimeout(resolve, milliseconds);
});
}
const confirmation = async () => {
var pathLength = document.querySelector('path').getTotalLength();
try {
await confirmDialog("You have selected to create an embroidery file. This may take a few minutes. Are you sure you want to continue?");
console.time("timer");
console.timeLog("timer");
x = pathLength;
i = 0;
pause = true;
await delay(1000);
const polygonPoints = await createPolyline();
console.log(polygonPoints);
await convertToDST(polygonPoints);
pause = false;
console.timeEnd("timer");
} catch (err) {
console.log('cancelled', err);
}
}
function createPolyline() {
return new Promise((resolve, reject) => {
var fullPath = document.querySelector('path');
var pathLength = fullPath.getTotalLength();
var polygonPoints = [];
var numPoints = Math.floor(pathLength/50);
for (var i = 0; i < numPoints; i++) {
var p = fullPath.getPointAtLength(i * pathLength / numPoints);
polygonPoints.push(p.x,p.y);
}
console.log('polygonPoints', polygonPoints);
console.log('pathLength', pathLength);
resolve(polygonPoints);
});
}
const convertToDST = (array) => {
return new Promise((resolve, reject) => {
try {
embCode = [];
stitch_point = 0;
var target_array;
prevX = prevY = 0;
for (var i = 0; i < array.length; i++) {
target_array = array;
for (var i = 0; i < target_array.length; i += 2) {
currentX = target_array[i];
currentY = target_array[i + 1];
writeBinary(prevX - currentX, -(prevY - currentY));
prevX = currentX;
prevY = currentY;
stitch_point++;
}
}
saveFile();
resolve(embCode);
} catch (error) {
reject(error);
}
});
}
function writeBinary(moveX, moveY) {
var b1 = 0x0;
var b2 = 0x0;
var b3 = 0x0;
var mx = moveX;
var my = moveY;
var over_mx = 0;
var over_my = 0;
if (Math.abs(mx) > 121 || Math.abs(my) > 121) {
over_mx = mx > 121 ? mx - 121 : mx < -121 ? mx + 121 : 0;
over_my = my > 121 ? my - 121 : my < -121 ? my + 121 : 0;
mx = mx > 121 ? 121 : mx < -121 ? -121 : mx;
my = my > 121 ? 121 : my < -121 ? -121 : my;
b3 |= 0x80;
}
if (mx >= 41) { b3 |= 0x8; mx -= 81; }
if (mx <= -41) { b3 |= 0x4; mx += 81; }
if (my >= 41) { b3 |= 0x10; my -= 81; }
if (my <= -41) { b3 |= 0x20; my += 81; }
if (mx >= 14) { b2 |= 0x8; mx -= 27; }
if (mx <= -14) { b2 |= 0x4; mx += 27; }
if (my >= 14) { b2 |= 0x10; my -= 27; }
if (my <= -14) { b2 |= 0x20; my += 27; }
if (mx >= 5) { b1 |= 0x8; mx -= 9; }
if (mx <= -5) { b1 |= 0x4; mx += 9; }
if (my >= 5) { b1 |= 0x10; my -= 9; }
if (my <= -5) { b1 |= 0x20; my += 9; }
if (mx >= 2) { b2 |= 0x2; mx -= 3; }
if (mx <= -2) { b2 |= 0x1; mx += 3; }
if (my >= 2) { b2 |= 0x40; my -= 3; }
if (my <= -2) { b2 |= 0x80; my += 3; }
if (mx >= 1) { b1 |= 0x2; mx -= 1; }
if (mx <= -1) { b1 |= 0x1; mx += 1; }
if (my >= 1) { b1 |= 0x40; my -= 1; }
if (my <= -1) { b1 |= 0x80; my += 1; }
b3 |= 0x3;
embCode.push(b1, b2, b3);
if (over_mx || over_my) {
writeBinary(over_mx, over_my);
}
}
function saveFile() {
const fileName = "embroidery.dst";
loading = false;
sel_width = 1000;
sel_height = 1000;
half_w = Math.round(sel_width / 2);
half_h = Math.round(sel_height / 2);
let str = "";
str += "LA: " + fileName;
str += "\rST: " + stitch_point;
str += "\rCO: " + color_change;
str += "\r+X: " + half_w;
str += "\r-X: " + half_w;
str += "\r+Y: " + half_h;
str += "\r-Y: " + half_h;
str += "\rAX:+ " + 0;
str += "\rAY:+ " + 0;
str += "\rMX:+ " + 0;
str += "\rMY:+ " + 0;
str += "\rPD:" + "******"
str += "\r";
const blank_num = 512 - str.length;
for (let k = 0; k < blank_num; k++) {
str += " ";
}
embCode.unshift(0x00, 0x00, 0x83);
embCode.push(0x00, 0x00, 0xF3);
const u8_embCode = new Uint8Array(embCode);
const blob = new Blob([str, u8_embCode], { type: "application/octet-binary" });
const a = document.createElement('a');
a.download = fileName;
a.target = '_blank';
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, fileName);
} else if (window.URL && window.URL.createObjectURL) {
a.href = window.URL.createObjectURL(blob);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
} else if (window.webkitURL && window.webkitURL.createObject) {
a.href = window.webkitURL.createObjectURL(blob);
a.click();
} else {
window.open('data:' + mimeType + ';base64,' + window.Base64.encode(content), '_blank');
}
}
}
loadScript('https://lavender-advanced-hummingbird-947.mypinata.cloud/ipfs/QmU28NZxGoJ7dTWdJPj2Y52aBVpDcCt12AWiRBZDGkPbem', spongenuityScript);