mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 19:36:21 +00:00
now shows ifc file name before table
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user