now shows ifc file name before table

This commit is contained in:
Ziad-I
2024-06-19 19:57:31 +03:00
committed by Dion Moult
parent c8946a19f2
commit 2738b280a1
4 changed files with 48 additions and 27 deletions
@@ -38,7 +38,7 @@ class WebNamespace(socketio.AsyncNamespace):
async def on_operator(self, sid, data): async def on_operator(self, sid, data):
print(f"Web client {sid} operator: {data}") print(f"Web client {sid} operator: {data}")
json_data = json.loads(data) json_data = json.loads(data)
# need to add event listeners in blenderbim side for event web_operator # TODO: need to add event listeners in blenderbim side for event web_operator
# await sio.emit("web_operator", json_data, namespace="/blender", room=json_data["blenderId"]) # await sio.emit("web_operator", json_data, namespace="/blender", room=json_data["blenderId"])
@@ -68,10 +68,10 @@ class BlenderNamespace(socketio.AsyncNamespace):
async def on_default_data(self, sid, data): async def on_default_data(self, sid, data):
print(f"Default data from Blender client {sid}: {data}") print(f"Default data from Blender client {sid}: {data}")
# blender_messages[sid] = data # blender_messages[sid] = data
await sio.emit("default_data", {"blenderId": sid, "data": data}, namespace="/web") # await sio.emit("default_data", {"blenderId": sid, "data": data}, namespace="/web")
async def on_csv_data(self, sid, data): async def on_csv_data(self, sid, data):
print(f"CSV data from Blender client {sid}: {data}") print(f"CSV data from Blender client {sid}:")
# Store the message and forward it to the web client # Store the message and forward it to the web client
blender_messages[sid] = data blender_messages[sid] = data
await sio.emit("csv_data", {"blenderId": sid, "data": data}, namespace="/web") await sio.emit("csv_data", {"blenderId": sid, "data": data}, namespace="/web")
@@ -6,18 +6,20 @@ body {
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
} }
#messages { #container {
margin: 20px; margin-top: 20px;
margin-bottom: 20px
} }
.message { .table-container {
background-color: #3c3c3c; margin-bottom: 40px;
padding: 10px; /* Space between tables */
margin-bottom: 10px;
border-radius: 5px;
color: #ffffff;
} }
.csv-table { .csv-table {
margin-top: 20px; margin-top: 10px;
}
h3 {
margin-top: 0;
} }
@@ -4,29 +4,41 @@ $(document).ready(function () {
const socket = io(url); const socket = io(url);
console.log("socket: ", socket); console.log("socket: ", socket);
connectedClients = []; const connectedClients = {};
function addTableElement(blenderId, csvData, filename) {
const tableContainer = $("<div></div>")
.addClass("table-container")
.attr("id", "container-" + blenderId);
const tableTitle = $("<h3></h3>")
.attr("id", "title-" + blenderId)
.text(filename)
.css("margin-bottom", "10px");
function addTableElement(blenderId, csvData) {
const tableDiv = $("<div></div>") const tableDiv = $("<div></div>")
.addClass("csv-table") .addClass("csv-table")
.attr("id", "table-" + blenderId); .attr("id", "table-" + blenderId);
$("#container").append(tableDiv);
tableContainer.append(tableTitle);
tableContainer.append(tableDiv);
$("#container").append(tableContainer);
var table = new Tabulator("#table-" + blenderId, { var table = new Tabulator("#table-" + blenderId, {
height: "400px",
index: "GlobalId", index: "GlobalId",
data: csvData, data: csvData,
importFormat: "csv", importFormat: "csv",
autoColumns: true, autoColumns: true,
selectableRows: 1, selectableRows: 1,
layout: "fitColumns", layout: "fitColumns",
// selectableRowsRangeMode: "click",
}); });
table.on("rowSelected", function (row) { table.on("rowSelected", function (row) {
var index = row.getIndex(); // the guid of the object var index = row.getIndex(); // the guid of the object
var tableId = row.getTable().element.id.substr(6); var tableId = row.getTable().element.id.substr(6);
msg = JSON.stringify({ const msg = JSON.stringify({
operator_type: "selection", operator_type: "selection",
blenderId: tableId, blenderId: tableId,
guid: index, guid: index,
@@ -35,21 +47,22 @@ $(document).ready(function () {
}); });
} }
function updateTableElement(blenderId, csvData) { function updateTableElement(blenderId, csvData, filename) {
const table = Tabulator.findTable("#table-" + blenderId)[0]; const table = Tabulator.findTable("#table-" + blenderId)[0];
if (table) { if (table) {
table.replaceData(csvData, { importFormat: "csv" }); table.replaceData(csvData, { importFormat: "csv" });
$("#title-" + blenderId).text(filename); // Update the title
} }
} }
function removeTableElement(blenderId) { function removeTableElement(blenderId) {
$("#table-" + blenderId).remove(); $("#container-" + blenderId).remove();
} }
socket.on("blender_connect", (blenderId) => { socket.on("blender_connect", (blenderId) => {
console.log("blender_connect: ", blenderId); console.log("blender_connect: ", blenderId);
if (!connectedClients.hasOwnProperty(blenderId)) { if (!connectedClients.hasOwnProperty(blenderId)) {
connectedClients[blenderId] = false; // No data shown yet connectedClients[blenderId] = { shown: false, ifc_file: "" };
} }
}); });
@@ -63,19 +76,20 @@ $(document).ready(function () {
socket.on("csv_data", (data) => { socket.on("csv_data", (data) => {
const blenderId = data["blenderId"]; const blenderId = data["blenderId"];
const csvData = data["data"]; const csvData = data["data"]["data"];
const filename = data["data"]["IFC_File"];
console.log(data); console.log(data);
if (connectedClients.hasOwnProperty(blenderId)) { if (connectedClients.hasOwnProperty(blenderId)) {
if (!connectedClients[blenderId]) { if (!connectedClients[blenderId].shown) {
addTableElement(blenderId, csvData); addTableElement(blenderId, csvData, filename);
connectedClients[blenderId] = true; // Data has been shown connectedClients[blenderId] = { shown: true, ifc_file: filename };
} else { } else {
updateTableElement(blenderId, csvData); updateTableElement(blenderId, csvData, filename);
} }
} else { } else {
connectedClients[blenderId] = true; connectedClients[blenderId] = { shown: true, ifc_file: filename };
addTableElement(blenderId, csvData); addTableElement(blenderId, csvData, filename);
} }
}); });
}); });
+5
View File
@@ -122,6 +122,11 @@ class Web(blenderbim.core.tool.Web):
@classmethod @classmethod
def send_webui_data(cls, data, event="data", namespace="/blender"): def send_webui_data(cls, data, event="data", namespace="/blender"):
global ws_thread global ws_thread
# TODO: find a better way to include ifc_filename with the csv data
data = {
"IFC_File": bpy.context.scene.BIMProperties.ifc_file,
"data": data,
}
if ws_thread is not None and bpy.context.scene.WebProperties.is_connected: if ws_thread is not None and bpy.context.scene.WebProperties.is_connected:
ws_thread.run_coro(cls.sio_send(data, event, namespace)) ws_thread.run_coro(cls.sio_send(data, event, namespace))