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)