kicad changes (assembly bom done)
This commit is contained in:
1 parent
536ddb766c
commit
f76b21471a
23 files changed
+11297
-109051
No files matched your search
@@ -801,6 +801,17 @@ a {
|
||||
background-color: #4f99bd;
|
||||
}
|
||||
|
||||
.help-link {
|
||||
border: 1px solid #0278a4;
|
||||
padding-inline: 0.3rem;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.dark .help-link {
|
||||
border: 1px solid #00b9fd;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
<script type="text/javascript" >
|
||||
@@ -875,11 +886,11 @@ var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b)
|
||||
///////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////
|
||||
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": false, "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "fields": ["Value", "MPN", "Description"]}
|
||||
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": false, "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "fields": ["Value", "Footprint", "MPN"]}
|
||||
///////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////
|
||||
var pcbdata = JSON.parse(LZString.decompressFromBase64("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 truncated
|
||||
var pcbdata = JSON.parse(LZString.decompressFromBase64("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 truncated
|
||||
///////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////
|
||||
@@ -951,53 +962,78 @@ function focusInputField(input) {
|
||||
input.select();
|
||||
}
|
||||
|
||||
function copyToClipboard() {
|
||||
function saveBomTable(output) {
|
||||
var text = '';
|
||||
for (var node of bomhead.childNodes[0].childNodes) {
|
||||
if (node.firstChild) {
|
||||
text = text + node.firstChild.nodeValue;
|
||||
text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
|
||||
}
|
||||
if (node != bomhead.childNodes[0].lastChild) {
|
||||
text += '\t';
|
||||
text += (output == 'csv' ? ',' : '\t');
|
||||
}
|
||||
}
|
||||
text += '\n';
|
||||
for (var row of bombody.childNodes) {
|
||||
for (var cell of row.childNodes) {
|
||||
let val = '';
|
||||
for (var node of cell.childNodes) {
|
||||
if (node.nodeName == "INPUT") {
|
||||
if (node.checked) {
|
||||
text = text + '✓';
|
||||
val += '✓';
|
||||
}
|
||||
} else if (node.nodeName == "MARK") {
|
||||
text = text + node.firstChild.nodeValue;
|
||||
val += node.firstChild.nodeValue;
|
||||
} else {
|
||||
text = text + node.nodeValue;
|
||||
val += node.nodeValue;
|
||||
}
|
||||
}
|
||||
if (output == 'csv') {
|
||||
val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
|
||||
if (isNumeric(val)) {
|
||||
val = +val; // use number
|
||||
} else {
|
||||
val = `"${val}"`; // enclosed within double-quote
|
||||
}
|
||||
}
|
||||
text += val;
|
||||
if (cell != row.lastChild) {
|
||||
text += '\t';
|
||||
text += (output == 'csv' ? ',' : '\t');
|
||||
}
|
||||
}
|
||||
text += '\n';
|
||||
}
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.classList.add('clipboard-temp');
|
||||
textArea.value = text;
|
||||
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
if (output != 'clipboard') {
|
||||
// To file: csv or txt
|
||||
var blob = new Blob([text], {
|
||||
type: `text/${output}`
|
||||
});
|
||||
saveFile(`${pcbdata.metadata.title}.${output}`, blob);
|
||||
} else {
|
||||
// To clipboard
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.classList.add('clipboard-temp');
|
||||
textArea.value = text;
|
||||
|
||||
try {
|
||||
if (document.execCommand('copy')) {
|
||||
console.log('Bom copied to clipboard.');
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
|
||||
try {
|
||||
if (document.execCommand('copy')) {
|
||||
console.log('Bom copied to clipboard.');
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('Can not copy to clipboard.');
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('Can not copy to clipboard.');
|
||||
}
|
||||
|
||||
document.body.removeChild(textArea);
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
}
|
||||
|
||||
function isNumeric(str) {
|
||||
/* https://stackoverflow.com/a/175787 */
|
||||
return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
|
||||
}
|
||||
|
||||
function removeGutterNode(node) {
|
||||
@@ -1501,6 +1537,11 @@ function drawText(ctx, text, color) {
|
||||
ctx.restore();
|
||||
return;
|
||||
}
|
||||
if ("polygons" in text) {
|
||||
ctx.fill(getPolygonsPath(text));
|
||||
ctx.restore();
|
||||
return;
|
||||
}
|
||||
ctx.translate(...text.pos);
|
||||
ctx.translate(text.thickness * 0.5, 0);
|
||||
var angle = -text.angle;
|
||||
@@ -1751,7 +1792,7 @@ function getCachedPadPath(pad) {
|
||||
function drawPad(ctx, pad, color, outline) {
|
||||
ctx.save();
|
||||
ctx.translate(...pad.pos);
|
||||
ctx.rotate(deg2rad(pad.angle));
|
||||
ctx.rotate(-deg2rad(pad.angle));
|
||||
if (pad.offset) {
|
||||
ctx.translate(...pad.offset);
|
||||
}
|
||||
@@ -1770,7 +1811,7 @@ function drawPadHole(ctx, pad, padHoleColor) {
|
||||
if (pad.type != "th") return;
|
||||
ctx.save();
|
||||
ctx.translate(...pad.pos);
|
||||
ctx.rotate(deg2rad(pad.angle));
|
||||
ctx.rotate(-deg2rad(pad.angle));
|
||||
ctx.fillStyle = padHoleColor;
|
||||
if (pad.drillshape == "oblong") {
|
||||
ctx.fill(getOblongPath(pad.drillsize));
|
||||
@@ -2017,7 +2058,6 @@ function drawBackground(canvasdict, clear = true) {
|
||||
function prepareCanvas(canvas, flip, transform) {
|
||||
var ctx = canvas.getContext("2d");
|
||||
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||||
var fontsize = 1.55;
|
||||
ctx.scale(transform.zoom, transform.zoom);
|
||||
ctx.translate(transform.panx, transform.pany);
|
||||
if (flip) {
|
||||
@@ -2174,7 +2214,7 @@ function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d)
|
||||
|
||||
function pointWithinPad(x, y, pad) {
|
||||
var v = [x - pad.pos[0], y - pad.pos[1]];
|
||||
v = rotateVector(v, -pad.angle);
|
||||
v = rotateVector(v, pad.angle);
|
||||
if (pad.offset) {
|
||||
v[0] -= pad.offset[0];
|
||||
v[1] -= pad.offset[1];
|
||||
@@ -3979,6 +4019,10 @@ function updateCheckboxStats(checkbox) {
|
||||
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
|
||||
}
|
||||
|
||||
function constrain(number, min, max){
|
||||
return Math.min(Math.max(parseInt(number), min), max);
|
||||
}
|
||||
|
||||
document.onkeydown = function (e) {
|
||||
switch (e.key) {
|
||||
case "n":
|
||||
@@ -3999,6 +4043,23 @@ document.onkeydown = function (e) {
|
||||
highlightNextRow();
|
||||
e.preventDefault();
|
||||
break;
|
||||
case "ArrowLeft":
|
||||
case "ArrowRight":
|
||||
if (document.activeElement.type != "text"){
|
||||
e.preventDefault();
|
||||
let boardRotationElement = document.getElementById("boardRotation")
|
||||
settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
|
||||
if (e.key == "ArrowLeft"){
|
||||
settings.boardRotation += 3; // 15 degrees
|
||||
}
|
||||
else{
|
||||
settings.boardRotation -= 3;
|
||||
}
|
||||
settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
|
||||
boardRotationElement.value = settings.boardRotation
|
||||
setBoardRotation(settings.boardRotation);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -4166,6 +4227,7 @@ window.matchMedia("print").addListener(resizeAll);
|
||||
<span class="shameless-plug">
|
||||
<span>Created using</span>
|
||||
<a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
|
||||
<a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
@@ -4273,6 +4335,13 @@ window.matchMedia("print").addListener(resizeAll);
|
||||
<button class="savebtn" onclick="loadSettings()">Import</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu-label">
|
||||
<span style="margin-left: 5px;">Save bom table as</span>
|
||||
<div class="flexbox">
|
||||
<button class="savebtn" onclick="saveBomTable('csv')">csv</button>
|
||||
<button class="savebtn" onclick="saveBomTable('txt')">txt</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -4308,7 +4377,7 @@ window.matchMedia("print").addListener(resizeAll);
|
||||
oninput="updateFilter(this.value)">
|
||||
<div class="button-container hideonprint" style="float: left; margin: 0;">
|
||||
<button id="copy" title="Copy bom table to clipboard"
|
||||
onclick="copyToClipboard()"></button>
|
||||
onclick="saveBomTable('clipboard')"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="dbg"></div>
|
||||
|
||||
Reference in new issue
Block a user