diff --git a/src/blenderbim/blenderbim/bim/data/webui/sioserver.py b/src/blenderbim/blenderbim/bim/data/webui/sioserver.py index b441272e0d..7b57057caf 100644 --- a/src/blenderbim/blenderbim/bim/data/webui/sioserver.py +++ b/src/blenderbim/blenderbim/bim/data/webui/sioserver.py @@ -49,19 +49,12 @@ class WebNamespace(socketio.AsyncNamespace): async def on_disconnect(self, sid): print(f"Web client disconnected: {sid}") - async def on_join_room(self, sid, data): - room = data["room"] - await sio.enter_room(sid, room=room) - - if room == "drawings": - await sio.emit("get_drawings_data", namespace="/blender") - async def on_web_operator(self, sid, data): await sio.emit( "web_operator", data, namespace="/blender", - room=data["blenderId"], + room=data.get("blenderId", None), ) async def send_cached_messages(self, sid): @@ -109,6 +102,7 @@ class BlenderNamespace(socketio.AsyncNamespace): async def on_drawings_data(self, sid, data): print(f"Drawings directory from Blender client {sid}") + print(data) blender_messages[sid]["drwings_data"] = data await sio.emit("drawings_data", {"blenderId": sid, "data": data}, namespace="/web") diff --git a/src/blenderbim/blenderbim/bim/data/webui/static/js/drawings.js b/src/blenderbim/blenderbim/bim/data/webui/static/js/drawings.js index 71a335e973..39c5f30b49 100644 --- a/src/blenderbim/blenderbim/bim/data/webui/static/js/drawings.js +++ b/src/blenderbim/blenderbim/bim/data/webui/static/js/drawings.js @@ -28,9 +28,15 @@ function connectSocket() { // socket.on("default_data", handleDefaultData); } -// function used to join drawings room +// function used to get drawings data from blenderbim function handleWebConnect() { - socket.emit("join_room", { room: "drawings" }); + const msg = { + sourcePage: "drawings", + operator: { + type: "getDrawings", + }, + }; + socket.emit("web_operator", msg); } // Function to handle 'blender_connect' event @@ -57,7 +63,7 @@ function handleBlenderDisconnect(blenderId) { }); } -function handleDrawingsData(blenderId) { +function handleDrawingsData(data) { const blenderId = data["blenderId"]; console.log(data); diff --git a/src/blenderbim/blenderbim/bim/data/webui/templates/drawings.html b/src/blenderbim/blenderbim/bim/data/webui/templates/drawings.html index 3ca89f6744..ff190fbaaa 100644 --- a/src/blenderbim/blenderbim/bim/data/webui/templates/drawings.html +++ b/src/blenderbim/blenderbim/bim/data/webui/templates/drawings.html @@ -56,11 +56,9 @@ diff --git a/src/blenderbim/blenderbim/tool/web.py b/src/blenderbim/blenderbim/tool/web.py index 1ce1b92b77..ddcd8d1ff5 100644 --- a/src/blenderbim/blenderbim/tool/web.py +++ b/src/blenderbim/blenderbim/tool/web.py @@ -280,6 +280,8 @@ class Web(blenderbim.core.tool.Web): cls.handle_csv_operator(operator["operator"]) elif operator["sourcePage"] == "gantt": cls.handle_gantt_operator(operator["operator"]) + elif operator["sourcePage"] == "drawings": + cls.handle_drawings_operator(operator["operator"]) return 1.0 @classmethod @@ -324,6 +326,29 @@ class Web(blenderbim.core.tool.Web): gantt_data = {"tasks": task_json, "work_schedule": work_schedule.get_info(recursive=True)} cls.send_webui_data(data=gantt_data, data_key="gantt_data", event="gantt_data") + @classmethod + def handle_drawings_operator(cls, operator_data: dict) -> None: + if operator_data["type"] == "getDrawings": + drawings_data = [] + sheets_data = [] + ifc_file_dir = os.path.dirname(bpy.context.scene.BIMProperties.ifc_file) + + sheets = [d for d in tool.Ifc.get().by_type("IfcDocumentInformation") if d.Scope == "SHEET"] + for sheet in sorted(sheets, key=lambda s: getattr(s, "Identification", getattr(s, "DocumentId", None))): + for reference in tool.Drawing.get_document_references(sheet): + reference_description = tool.Drawing.get_reference_description(reference) + reference_location = tool.Drawing.get_reference_location(reference) + reference_name = os.path.basename(reference_location) + reference_path = os.path.join(ifc_file_dir, reference_location) + if reference_description == "SHEET": + sheets_data.append({"name": reference_name, "path": reference_path}) + if reference_description == "DRAWING": + drawings_data.append({"name": reference_name, "path": reference_path}) + + cls.send_webui_data( + data={"drawings": drawings_data, "sheets": sheets_data}, data_key="drawings_data", event="drawings_data" + ) + @classmethod def open_web_browser(cls, port: int) -> None: webbrowser.open(f"http://127.0.0.1:{port}/")