function doBigWhiteTriangle(id){ const svg = document.getElementById(id); // Triangle settings const sideLength = 740; const centerX = 435; const centerY = 493; const angleOffset = -90 * (Math.PI / 180); // Start at top // Generate 3 equilateral triangle points const points = []; for (let i = 0; i < 3; i++) { const angle = angleOffset + i * (2 * Math.PI / 3); // 120° steps const x = centerX + (sideLength / Math.sqrt(3)) * Math.cos(angle); const y = centerY + (sideLength / Math.sqrt(3)) * Math.sin(angle); points.push(`${x},${y}`); } // Create the triangle const triangle = document.createElementNS("http://www.w3.org/2000/svg", "polygon"); triangle.setAttribute("points", points.join(" ")); triangle.setAttribute("fill", "white"); //triangle.setAttribute("stroke", "black"); // Optional //triangle.setAttribute("stroke-width", "2"); // Optional svg.appendChild(triangle); } function doLittleWhiteTriangle(id){ const svg = document.getElementById(id); // Triangle settings const sideLength = 369; const centerX = 250; const centerY = 350; const angleOffset = -90 * (Math.PI / 180); // Start at top // Generate 3 equilateral triangle points const points = []; for (let i = 0; i < 3; i++) { const angle = angleOffset + i * (2 * Math.PI / 3); // 120° steps const x = centerX + (sideLength / Math.sqrt(3)) * Math.cos(angle); const y = centerY + (sideLength / Math.sqrt(3)) * Math.sin(angle); points.push(`${x},${y}`); } // Create the triangle const triangle = document.createElementNS("http://www.w3.org/2000/svg", "polygon"); triangle.setAttribute("points", points.join(" ")); triangle.setAttribute("fill", "white"); //triangle.setAttribute("stroke", "black"); // Optional //triangle.setAttribute("stroke-width", "2"); // Optional svg.appendChild(triangle); } function inlineStyles(svgElement) { const allElements = svgElement.querySelectorAll('*'); const computedStyles = window.getComputedStyle(svgElement); // Apply style to root SVG element svgElement.setAttribute("style", computedStyles.cssText || ""); // Recursively apply computed styles to each element allElements.forEach(el => { const computed = window.getComputedStyle(el); let inline = ''; for (let i = 0; i < computed.length; i++) { const key = computed[i]; const value = computed.getPropertyValue(key); inline += `${key}:${value};`; } el.setAttribute('style', inline); }); } function makeSvgRightClickable(id) { const svg = document.getElementById(id); inlineStyles(svg); // Ensure SVG has proper namespace svg.setAttribute("xmlns", "http://www.w3.org/2000/svg"); // Serialize SVG const svgData = new XMLSerializer().serializeToString(svg); const svgBlob = new Blob([svgData], { type: "image/svg+xml;charset=utf-8" }); const url = URL.createObjectURL(svgBlob); // Create image element const img = document.createElement("img"); img.src = url; img.width = svg.width.baseVal.value; img.height = svg.height.baseVal.value; img.alt = "Right-click to save SVG image"; // Replace or insert after SVG svg.style.display = "none"; // hide original svg.parentNode.insertBefore(img, svg.nextSibling); } // Call the function after D3 has drawn the SVG //makeSvgRightClickable("id");