kicad changes (assembly bom done)

This commit is contained in:
Lucien RENAUD committed 2022-11-03 15:40:27 +01:00
1 parent 536ddb766c
commit f76b21471a
23 files changed
+11297 -109051

No files matched your search

+96 -27
View File
@@ -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>