diff --git a/InteractiveHtmlBom/dialog/settings_dialog.py b/InteractiveHtmlBom/dialog/settings_dialog.py index 107af59..6f084d4 100644 --- a/InteractiveHtmlBom/dialog/settings_dialog.py +++ b/InteractiveHtmlBom/dialog/settings_dialog.py @@ -340,7 +340,7 @@ def OnExtraDataFileChanged(self, event): if self.extra_field_data is not None: field_list = list(self.extra_field_data.fields) - self._setFieldsList(["Value", "Footprint"] + field_list) + self._setFieldsList(["Value", "Footprint", "Position X", "Position Y", "Rotation"] + field_list) self.SetCheckedFields() field_list.append(self.NONE_STRING) self.boardVariantFieldBox.SetItems(field_list) diff --git a/InteractiveHtmlBom/web/ibom.js b/InteractiveHtmlBom/web/ibom.js index cc76f0f..ed6acb7 100644 --- a/InteractiveHtmlBom/web/ibom.js +++ b/InteractiveHtmlBom/web/ibom.js @@ -586,6 +586,15 @@ function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => { return a.length - b.length; })); + } else if (column === "Position X") { + tr.appendChild(createColumnHeader( + "Position X", "position_x", "")); + } else if (column === "Position Y") { + tr.appendChild(createColumnHeader( + "Position Y", "position_y", "")); + } else if (column === "Rotation") { + tr.appendChild(createColumnHeader( + "Rotation", "rotation", "")); } else { // Other fields var i = config.fields.indexOf(column); @@ -713,6 +722,24 @@ function populateBomBody(placeholderColumn = null, placeHolderElements = null) { td = document.createElement("TD"); td.textContent = references.length; tr.appendChild(td); + } else if (column === "Position X" && settings.bommode != "grouped") { + td = document.createElement("TD"); + var position_refname = references.map(r => r[0]).join(", "); + var position_value = pcbdata.footprints.find((element) => element.ref == position_refname); + td.textContent = position_value.bbox.pos[0]; + tr.appendChild(td); + } else if (column === "Position Y" && settings.bommode != "grouped") { + td = document.createElement("TD"); + var position_refname = references.map(r => r[0]).join(", "); + var position_value = pcbdata.footprints.find((element) => element.ref == position_refname); + td.textContent = position_value.bbox.pos[1]; + tr.appendChild(td); + } else if (column === "Rotation" && settings.bommode != "grouped") { + td = document.createElement("TD"); + var position_refname = references.map(r => r[0]).join(", "); + var position_value = pcbdata.footprints.find((element) => element.ref == position_refname); + td.textContent = position_value.bbox.angle; + tr.appendChild(td); } else { // All the other fields var field_index = config.fields.indexOf(column)