From 90e8e9d252889a32eaf88d4c2d95a503b0354a01 Mon Sep 17 00:00:00 2001 From: HiepLM Date: Sat, 20 Jun 2026 09:18:19 +0200 Subject: [PATCH] =?UTF-8?q?Xong=20ph=E1=BA=A7n=20map=20viewer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + maps/6f761198ec8414ef/map.png | Bin 48666 -> 0 bytes maps/6f761198ec8414ef/map.yaml | 6 -- maps/75500f988b7f4f23/map.png | Bin 48666 -> 0 bytes maps/75500f988b7f4f23/map.yaml | 6 -- src/app/lidar_manager_app.cpp | 19 ++++ src/storage/database.cpp | 44 ++++++++ src/storage/database.hpp | 1 + www/i18n.js | 4 +- www/index.html | 12 ++- www/map-editor.js | 115 +++++++++++++++++++-- www/map-occupancy-canvas.js | 178 +++++++++++++++++++++++++++++++++ www/style.css | 74 ++++++++++++-- 13 files changed, 431 insertions(+), 32 deletions(-) delete mode 100644 maps/6f761198ec8414ef/map.png delete mode 100644 maps/6f761198ec8414ef/map.yaml delete mode 100644 maps/75500f988b7f4f23/map.png delete mode 100644 maps/75500f988b7f4f23/map.yaml create mode 100644 www/map-occupancy-canvas.js diff --git a/.gitignore b/.gitignore index 442d997..a4ac77e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,10 @@ build/ # Runtime data (SQLite + media) +maps/ +RBS.db +RBS.db-wal +RBS.db-shm data/RBS.db data/RBS.db-wal data/RBS.db-shm diff --git a/maps/6f761198ec8414ef/map.png b/maps/6f761198ec8414ef/map.png deleted file mode 100644 index 2893724a9c5ef3098ddade0df5ada90f9a18618f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48666 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 diff --git a/maps/6f761198ec8414ef/map.yaml b/maps/6f761198ec8414ef/map.yaml deleted file mode 100644 index 7cdd3c3..0000000 --- a/maps/6f761198ec8414ef/map.yaml +++ /dev/null @@ -1,6 +0,0 @@ -image: Denso_1.png -resolution: 0.050000 -origin: [-12.238091, -13.200000, 0.0] -negate: 0 -occupied_thresh: 0.65 -free_thresh: 0.196 diff --git a/maps/75500f988b7f4f23/map.png b/maps/75500f988b7f4f23/map.png deleted file mode 100644 index 2893724a9c5ef3098ddade0df5ada90f9a18618f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48666 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 diff --git a/maps/75500f988b7f4f23/map.yaml b/maps/75500f988b7f4f23/map.yaml deleted file mode 100644 index 7cdd3c3..0000000 --- a/maps/75500f988b7f4f23/map.yaml +++ /dev/null @@ -1,6 +0,0 @@ -image: Denso_1.png -resolution: 0.050000 -origin: [-12.238091, -13.200000, 0.0] -negate: 0 -occupied_thresh: 0.65 -free_thresh: 0.196 diff --git a/src/app/lidar_manager_app.cpp b/src/app/lidar_manager_app.cpp index d1f1e0e..83e7fe2 100644 --- a/src/app/lidar_manager_app.cpp +++ b/src/app/lidar_manager_app.cpp @@ -21,6 +21,24 @@ namespace lm { +namespace { + +bool isProjectRootDataPath(const std::filesystem::path& parent) +{ + return parent.empty() || parent == std::filesystem::path("."); +} + +std::filesystem::path resolveDataPath(std::filesystem::path data_path) +{ + if (!isProjectRootDataPath(data_path.parent_path())) + return data_path; + if (data_path.filename() == "state.json") + return std::filesystem::path("data") / "state.json"; + return std::filesystem::path("data") / "RBS.db"; +} + +} // namespace + LidarManagerApp::LidarManagerApp(int port, std::filesystem::path www_root, std::filesystem::path data_path) @@ -30,6 +48,7 @@ LidarManagerApp::LidarManagerApp(int port, int LidarManagerApp::run() { + data_path_ = resolveDataPath(data_path_); const std::filesystem::path data_dir = data_path_.parent_path(); Database database(data_dir); std::string db_err; diff --git a/src/storage/database.cpp b/src/storage/database.cpp index a7a37c7..3ab66b9 100644 --- a/src/storage/database.cpp +++ b/src/storage/database.cpp @@ -193,6 +193,48 @@ bool Database::ensureDataDirs(std::string& err) return true; } +bool Database::migrateLegacyMapsDir(std::string& err) +{ + if (data_dir_.filename() != "data") + return true; + + const std::filesystem::path legacy = "maps"; + const auto target = mapsDir(); + if (!std::filesystem::is_directory(legacy) || legacy == target) + return true; + + std::error_code ec; + std::filesystem::create_directories(target, ec); + if (ec) + { + err = "failed to create maps directory: " + target.string(); + return false; + } + + for (const auto& entry : std::filesystem::directory_iterator(legacy, ec)) + { + if (ec || !entry.is_directory()) + continue; + const auto dest = target / entry.path().filename(); + if (std::filesystem::exists(dest)) + continue; + std::filesystem::rename(entry.path(), dest, ec); + if (ec) + { + ec.clear(); + std::filesystem::copy(entry.path(), dest, std::filesystem::copy_options::recursive, ec); + if (ec) + { + err = "failed to migrate map directory: " + entry.path().string(); + return false; + } + std::filesystem::remove_all(entry.path(), ec); + ec.clear(); + } + } + return true; +} + bool Database::applySchema(std::string& err) { return execSql(db_, kSchemaSql, err); @@ -494,6 +536,8 @@ bool Database::init(std::string& err) return false; if (!ensureDataDirs(err)) return false; + if (!migrateLegacyMapsDir(err)) + return false; if (!migrateFromJsonIfNeeded(err)) return false; if (!getMeta("schema_version")) diff --git a/src/storage/database.hpp b/src/storage/database.hpp index 075552b..d3219f9 100644 --- a/src/storage/database.hpp +++ b/src/storage/database.hpp @@ -45,6 +45,7 @@ private: bool applySchemaMigrations(std::string& err); bool migrateFromJsonIfNeeded(std::string& err); bool ensureDataDirs(std::string& err); + bool migrateLegacyMapsDir(std::string& err); std::optional getMeta(const std::string& key) const; bool setMeta(const std::string& key, const std::string& value); }; diff --git a/www/i18n.js b/www/i18n.js index b9e073a..0b1883b 100644 --- a/www/i18n.js +++ b/www/i18n.js @@ -389,6 +389,7 @@ "maps.editor.tool.save": "Lưu map", "maps.editor.tool.pan": "Pan — di chuyển vùng nhìn", "maps.editor.tool.crosshair": "Crosshair", + "maps.editor.tool.origin": "Hiển thị gốc tọa độ", "maps.editor.tool.center": "Căn giữa vùng nhìn", "maps.editor.tool.lidar": "Hiển thị LiDAR", "maps.editor.tool.waypoints": "Vị trí / waypoint", @@ -882,7 +883,7 @@ "maps.uploadConfirm.title": "Overwrite floor plan?", "maps.uploadConfirm.text": "The current map image will be replaced. Continue?", "maps.uploadConfirm.yes": "Overwrite", - "maps.uploadMeta.title": "Map metadata (ROS)", + "maps.uploadMeta.title": "Map metadata", "maps.uploadMeta.hint": "Enter origin, resolution, and occupancy thresholds — or import a .yaml file.", "maps.uploadMeta.importYaml": "Import YAML file…", "maps.uploadMeta.negate": "Negate", @@ -908,6 +909,7 @@ "maps.editor.tool.save": "Save map", "maps.editor.tool.pan": "Pan — move view", "maps.editor.tool.crosshair": "Crosshair", + "maps.editor.tool.origin": "Show map origin", "maps.editor.tool.center": "Center view", "maps.editor.tool.lidar": "LiDAR overlay", "maps.editor.tool.waypoints": "Positions", diff --git a/www/index.html b/www/index.html index 18d4c28..fd54c09 100644 --- a/www/index.html +++ b/www/index.html @@ -1016,6 +1016,9 @@ + @@ -1045,12 +1048,14 @@
- + +
@@ -1723,6 +1728,7 @@ GET /api/v2.0.0/status + diff --git a/www/map-editor.js b/www/map-editor.js index b4417e2..2993c03 100644 --- a/www/map-editor.js +++ b/www/map-editor.js @@ -2,6 +2,7 @@ const el = (id) => document.getElementById(id); const t = (key, vars) => window.I18n?.t(key, vars) ?? key; const Geo = () => window.MapGeo; + const Occ = () => window.MapOccupancyCanvas; const state = { mapId: null, @@ -14,6 +15,9 @@ view: Geo()?.createView(1, 0, 0) || { scale: 1, panX: 0, panY: 0 }, panning: null, tipVisible: true, + showOrigin: true, + /** ROS yaml thresholds (occupied_thresh, free_thresh, negate) from map.yaml. */ + yamlMeta: null, /** Pending ROS metadata from upload dialog (set before PNG picker). */ uploadMeta: null, }; @@ -27,7 +31,10 @@ const sheetEl = el("mapEditorSheet"); const gridEl = el("mapEditorSheetGrid"); const imageEl = el("mapEditorImage"); + const occupancyCanvasEl = el("mapEditorOccupancyCanvas"); const originEl = el("mapEditorOrigin"); + const originHitEl = el("mapEditorOriginHit"); + const originLabelEl = el("mapEditorOriginLabel"); const emptyEl = el("mapEditorEmpty"); const tipEl = el("mapEditorCanvasTip"); const statusViewEl = el("mapEditorStatusView"); @@ -94,7 +101,58 @@ } function hasFloorPlan() { - return !!(state.map?.image_file && imageEl && !imageEl.hidden && imageEl.naturalWidth); + return !!( + state.map?.image_file && + imageEl && + !imageEl.hidden && + imageEl.naturalWidth && + occupancyCanvasEl && + !occupancyCanvasEl.hidden && + occupancyCanvasEl.width + ); + } + + /** ROS yaml thresholds for occupancy coloring. */ + function mapRenderMeta() { + const base = mapMetaForOriginDisplay() || state.map || {}; + const yaml = state.yamlMeta || {}; + return { + occupied_thresh: + base.occupied_thresh != null ? base.occupied_thresh : yaml.occupied_thresh, + free_thresh: base.free_thresh != null ? base.free_thresh : yaml.free_thresh, + negate: base.negate != null ? base.negate : yaml.negate, + }; + } + + async function loadYamlMeta() { + state.yamlMeta = await fetchExistingYamlMeta(); + } + + function setOccupancyCanvasVisible(visible) { + if (!occupancyCanvasEl) return; + occupancyCanvasEl.hidden = !visible; + occupancyCanvasEl.setAttribute("aria-hidden", visible ? "false" : "true"); + } + + /** Paint RViz-style occupancy colors from loaded PNG (hidden loader img). */ + function paintOccupancyFromImage() { + const occ = Occ(); + if (!occ || !occupancyCanvasEl || !imageEl?.naturalWidth) return false; + const ok = occ.renderFromImage(occupancyCanvasEl, imageEl, mapRenderMeta()); + setOccupancyCanvasVisible(ok); + return ok; + } + + /** + * Paint live occupancy grid (record/stream — roadmap step 2+). + * @param {{ width: number, height: number, data: number[]|Int8Array|string }} grid + */ + function paintOccupancyGrid(grid) { + const occ = Occ(); + if (!occ || !occupancyCanvasEl || !grid) return false; + const ok = occ.renderGrid(occupancyCanvasEl, grid); + if (ok) setOccupancyCanvasVisible(true); + return ok; } function setDirty(flag) { @@ -204,7 +262,6 @@ gridEl.hidden = true; } - if (originEl) originEl.hidden = !has; updateOriginMarker(); updateStatusBar(); } @@ -224,11 +281,25 @@ return base; } + function setShowOrigin(show) { + state.showOrigin = !!show; + const btn = el("mapEditorOriginBtn"); + btn?.classList.toggle("is-active", state.showOrigin); + btn?.setAttribute("aria-pressed", state.showOrigin ? "true" : "false"); + updateOriginMarker(); + } + + function setOriginLabelVisible(visible) { + if (!originEl) return; + originEl.classList.toggle("mapEditorOrigin--showLabel", !!visible); + if (originLabelEl) originLabelEl.setAttribute("aria-hidden", visible ? "false" : "true"); + } + function updateOriginMarker() { if (!originEl) return; const geo = Geo(); const { width, height } = floorPlanSize(); - if (!geo || !hasFloorPlan() || !width || !height) { + if (!state.showOrigin || !geo || !hasFloorPlan() || !width || !height) { originEl.hidden = true; originEl.setAttribute("aria-hidden", "true"); return; @@ -249,18 +320,23 @@ originEl.style.top = `${pt.y}px`; originEl.style.transform = `rotate(${yawDeg}deg)`; - const labelEl = el("mapEditorOriginLabel"); - if (labelEl) { - labelEl.textContent = t("maps.editor.originLabelShort", { + if (originLabelEl) { + originLabelEl.textContent = t("maps.editor.originLabelShort", { x: ox.toFixed(2), y: oy.toFixed(2), }); + originLabelEl.setAttribute("aria-hidden", "true"); } - originEl.title = t("maps.editor.originTooltip", { + const tooltip = t("maps.editor.originTooltip", { x: ox.toFixed(3), y: oy.toFixed(3), yaw: ((oyaw * 180) / Math.PI).toFixed(1), }); + if (originHitEl) { + originHitEl.title = tooltip; + originHitEl.setAttribute("aria-label", tooltip); + } + setOriginLabelVisible(false); } function updateStatusBar(pointerClient) { @@ -311,11 +387,13 @@ imageEl.src = url; imageEl.hidden = false; if (emptyEl) emptyEl.hidden = true; + setOccupancyCanvasVisible(false); } else { if (imageEl) { imageEl.hidden = true; imageEl.removeAttribute("src"); } + setOccupancyCanvasVisible(false); if (emptyEl) emptyEl.hidden = false; } updateMenuActionsUi(); @@ -323,6 +401,7 @@ imageEl?.addEventListener( "load", () => { + paintOccupancyFromImage(); updateImageLayer(); fitToView(); }, @@ -381,6 +460,7 @@ async function reloadMap() { if (!state.mapId) return; state.map = await api(`/api/maps/${encodeURIComponent(state.mapId)}`); + await loadYamlMeta(); updateHeader(); renderMapImage(); fillSettingsForm(); @@ -392,6 +472,7 @@ state.readOnly = !!callbacks.readOnly || !callbacks.canWrite; state.dirty = false; state.tipVisible = true; + state.showOrigin = true; state.activeTool = "pan"; state.view = Geo()?.createView(1, 0, 0) || { scale: 1, panX: 0, panY: 0 }; if (tipEl) { @@ -399,6 +480,7 @@ tipEl.textContent = t("maps.editor.canvasTip"); } setActiveTool("pan"); + setShowOrigin(true); setDirty(false); applyReadOnlyUi(); reloadMap().catch((e) => alert(e.message)); @@ -409,6 +491,7 @@ state.map = null; state.callbacks = {}; state.uploadMeta = null; + state.yamlMeta = null; menuDialogEl?.close(); settingsDialogEl?.close(); activateDialogEl?.close(); @@ -584,6 +667,7 @@ state.callbacks.onMapUpdated?.(updated); setDirty(false); fillSettingsForm(); + await loadYamlMeta(); renderMapImage(); menuDialogEl?.close(); uploadMetaDialogEl?.close(); @@ -689,6 +773,11 @@ } function bindEvents() { + originHitEl?.addEventListener("mouseenter", () => setOriginLabelVisible(true)); + originHitEl?.addEventListener("mouseleave", () => setOriginLabelVisible(false)); + originHitEl?.addEventListener("focus", () => setOriginLabelVisible(true)); + originHitEl?.addEventListener("blur", () => setOriginLabelVisible(false)); + el("mapEditorBackBtn")?.addEventListener("click", () => { if (state.dirty && !confirm(t("maps.editor.unsavedLeave"))) return; state.callbacks.onClose?.(); @@ -714,6 +803,7 @@ saveMap().catch((e) => alert(e.message)); }); el("mapEditorPanBtn")?.addEventListener("click", () => setActiveTool("pan")); + el("mapEditorOriginBtn")?.addEventListener("click", () => setShowOrigin(!state.showOrigin)); el("mapEditorFitBtn")?.addEventListener("click", fitToView); el("mapEditorCenterBtn")?.addEventListener("click", () => { dismissCanvasTip(); @@ -818,6 +908,9 @@ Object.values(uploadMetaFields).forEach((node) => { node?.addEventListener("input", () => { updateOriginMarker(); + if (uploadMetaDialogEl?.open && imageEl?.naturalWidth) { + paintOccupancyFromImage(); + } if (node === uploadMetaFields.resolution && uploadMetaDialogEl?.open) { updateImageLayer(); } @@ -835,5 +928,11 @@ bindCanvasPanZoom(); bindEvents(); - window.MapEditorApp = { open, close, reloadMap }; + window.MapEditorApp = { + open, + close, + reloadMap, + paintOccupancyGrid, + paintOccupancyFromImage, + }; })(); diff --git a/www/map-occupancy-canvas.js b/www/map-occupancy-canvas.js new file mode 100644 index 0000000..34d730d --- /dev/null +++ b/www/map-occupancy-canvas.js @@ -0,0 +1,178 @@ +(() => { + /** + * RViz-style occupancy grid renderer for map view (Canvas 2D). + * + * ROS map_server / nav_msgs/OccupancyGrid: + * 0 = free + * 100 = occupied + * -1 = unknown + * + * Grid data is row-major with index 0 at the bottom-left cell (world +Y up). + * Canvas pixels use top-left origin — Y is flipped when painting. + */ + + const DEFAULT_PALETTE = { + free: [254, 254, 254, 255], + occupied: [0, 0, 0, 255], + unknown: [180, 180, 180, 255], + }; + + const DEFAULT_THRESHOLDS = { + occupied_thresh: 0.65, + free_thresh: 0.196, + negate: 0, + }; + + function metaThresholds(meta) { + return { + occupied_thresh: Number(meta?.occupied_thresh ?? DEFAULT_THRESHOLDS.occupied_thresh), + free_thresh: Number(meta?.free_thresh ?? DEFAULT_THRESHOLDS.free_thresh), + negate: Number(meta?.negate ?? DEFAULT_THRESHOLDS.negate), + }; + } + + /** Trinary mode (Nav2/map_server): darkness or lightness vs thresholds in [0, 1]. */ + function grayToOccValue(gray, meta) { + const { occupied_thresh, free_thresh, negate } = metaThresholds(meta); + const lightness = gray / 255; + const probability = negate ? lightness : 1 - lightness; + if (probability > occupied_thresh) return 100; + if (probability < free_thresh) return 0; + return -1; + } + + function occToRgba(value, palette) { + if (value < 0) return palette.unknown; + if (value >= 100) return palette.occupied; + if (value === 0) return palette.free; + return value > 50 ? palette.occupied : palette.free; + } + + function paletteFrom(opts) { + const p = opts?.palette || {}; + return { + free: p.free || DEFAULT_PALETTE.free, + occupied: p.occupied || DEFAULT_PALETTE.occupied, + unknown: p.unknown || DEFAULT_PALETTE.unknown, + }; + } + + function ensureCanvasSize(canvas, width, height) { + if (canvas.width !== width || canvas.height !== height) { + canvas.width = width; + canvas.height = height; + } + } + + function decodeGridData(data) { + if (data instanceof Int8Array || data instanceof Uint8Array) return data; + if (Array.isArray(data)) return data; + if (typeof data === "string" && data.length) { + try { + const binary = atob(data); + const out = new Int8Array(binary.length); + for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i); + return out; + } catch { + return []; + } + } + return []; + } + + /** + * Paint ROS occupancy grid onto canvas. + * @param {HTMLCanvasElement} canvas + * @param {{ width: number, height: number, data: number[]|Int8Array|string }} grid + * @param {{ palette?: object }} [opts] + */ + function renderGrid(canvas, grid, opts = {}) { + if (!canvas || !grid) return false; + const width = Number(grid.width) | 0; + const height = Number(grid.height) | 0; + if (!width || !height) return false; + + const data = decodeGridData(grid.data); + if (!data.length) return false; + + ensureCanvasSize(canvas, width, height); + const ctx = canvas.getContext("2d"); + if (!ctx) return false; + + const palette = paletteFrom(opts); + const imageData = ctx.createImageData(width, height); + const px = imageData.data; + + for (let row = 0; row < height; row++) { + const srcRow = height - 1 - row; + for (let col = 0; col < width; col++) { + const idx = srcRow * width + col; + const value = idx < data.length ? data[idx] : -1; + const rgba = occToRgba(value, palette); + const dst = (row * width + col) * 4; + px[dst] = rgba[0]; + px[dst + 1] = rgba[1]; + px[dst + 2] = rgba[2]; + px[dst + 3] = rgba[3]; + } + } + + ctx.putImageData(imageData, 0, 0); + return true; + } + + /** + * Convert map_server grayscale image to RViz-style occupancy colors. + * @param {HTMLCanvasElement} canvas + * @param {CanvasImageSource} source + * @param {object} [meta] — negate, occupied_thresh, free_thresh + * @param {{ palette?: object }} [opts] + */ + function renderFromImage(canvas, source, meta = {}, opts = {}) { + if (!canvas || !source) return false; + const width = source.naturalWidth || source.videoWidth || source.width; + const height = source.naturalHeight || source.videoHeight || source.height; + if (!width || !height) return false; + + ensureCanvasSize(canvas, width, height); + const ctx = canvas.getContext("2d"); + if (!ctx) return false; + + const scratch = document.createElement("canvas"); + scratch.width = width; + scratch.height = height; + const sctx = scratch.getContext("2d"); + if (!sctx) return false; + + sctx.drawImage(source, 0, 0, width, height); + const sampled = sctx.getImageData(0, 0, width, height); + const src = sampled.data; + const palette = paletteFrom(opts); + const imageData = ctx.createImageData(width, height); + const dst = imageData.data; + const thresholds = metaThresholds(meta); + + for (let i = 0, p = 0; p < width * height; p++, i += 4) { + const gray = src[i]; + const occ = grayToOccValue(gray, thresholds); + const rgba = occToRgba(occ, palette); + dst[i] = rgba[0]; + dst[i + 1] = rgba[1]; + dst[i + 2] = rgba[2]; + dst[i + 3] = 255; + } + + ctx.putImageData(imageData, 0, 0); + return true; + } + + window.MapOccupancyCanvas = { + DEFAULT_PALETTE, + DEFAULT_THRESHOLDS, + grayToOccValue, + occToRgba, + decodeGridData, + renderGrid, + renderFromImage, + }; +})(); diff --git a/www/style.css b/www/style.css index f2853fd..fdaab13 100644 --- a/www/style.css +++ b/www/style.css @@ -2227,7 +2227,7 @@ body.dashboard-widget-dragging .dashboardWidgetHeader { height: 100%; overflow: hidden; background: #d8dde4; - border-radius: 2px; + border-radius: 0; } .dashboardWidget--operate.dashboardWidget--map .dashboardWidgetBody, .dashboardWidget--operate.dashboardWidget--map_locked .dashboardWidgetBody { @@ -3863,6 +3863,7 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { background: #b8b8b8; display: flex; flex-direction: column; + border-radius: 0; } .mapEditorCanvasWrap.is-panning { @@ -3898,6 +3899,7 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { flex: 1; min-height: 0; overflow: hidden; + border-radius: 0; } .mapEditorCanvasInner { @@ -3919,9 +3921,9 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { position: relative; min-width: 480px; min-height: 360px; - background: #fff; - box-shadow: 0 2px 16px rgba(0, 0, 0, 0.12); + background: transparent; user-select: none; + border-radius: 0; } .mapEditorSheet--blank { @@ -3929,9 +3931,10 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { } .mapEditorSheet--hasImage { - background: #fff; + background: transparent; min-width: 0; min-height: 0; + box-shadow: none; } .mapEditorSheetGrid { @@ -3967,18 +3970,23 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { left: 0; top: 0; transform-origin: 0 0; + pointer-events: none; } .mapEditorOriginAxis--x { width: 36px; height: 2px; + top: -1px; + left: 0; background: #e74c3c; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6); } -.mapEditorOriginAxis--y { +.mapEditorOriginAxis--z { width: 2px; height: 36px; + left: -1px; + top: -36px; background: #27ae60; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6); } @@ -3993,12 +4001,41 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { background: #e67e22; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25); + pointer-events: none; +} + +.mapEditorOriginHit { + position: absolute; + left: -18px; + top: -18px; + width: 36px; + height: 36px; + padding: 0; + margin: 0; + border: none; + border-radius: 0; + background: transparent; + pointer-events: auto; + cursor: help; + z-index: 5; + appearance: none; + font: inherit; + color: inherit; +} + +.mapEditorOriginHit:focus { + outline: none; +} + +.mapEditorOriginHit:focus-visible { + outline: 2px solid rgba(230, 126, 34, 0.85); + outline-offset: 2px; } .mapEditorOriginLabel { position: absolute; left: 8px; - top: -22px; + top: -48px; padding: 2px 6px; border-radius: 3px; background: rgba(255, 255, 255, 0.92); @@ -4009,6 +4046,17 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { white-space: nowrap; line-height: 1.3; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12); + pointer-events: none; + visibility: hidden; + opacity: 0; + transition: opacity 0.12s ease; +} + +.mapEditorOrigin:has(.mapEditorOriginHit:hover) .mapEditorOriginLabel, +.mapEditorOrigin:has(.mapEditorOriginHit:focus-visible) .mapEditorOriginLabel, +.mapEditorOrigin.mapEditorOrigin--showLabel .mapEditorOriginLabel { + visibility: visible; + opacity: 1; } .mapEditorOrigin--offMap .mapEditorOriginLabel { @@ -4016,17 +4064,27 @@ body.auth-readonly-maps-page .mapsMirMapMenuCancelBtn { border-color: #ccc; } -.mapEditorImage { +.mapEditorImageLoader { + position: absolute; + width: 0; + height: 0; + opacity: 0; + visibility: hidden; + pointer-events: none; +} + +.mapEditorOccupancyCanvas { display: block; position: relative; z-index: 1; width: 100%; height: 100%; max-width: none; + border-radius: 0; + background: transparent; image-rendering: pixelated; image-rendering: crisp-edges; user-select: none; - -webkit-user-drag: none; pointer-events: none; }