Live end-to-end verification against EG-BIM Modeler succeeded on the
second attempt:
/health -> {"status":"ok","port":38080}
/scene -> {"object_count":4,"document_path":"NewSpace0"}
/camera -> {"eye":[192.97,-328.52,170.72],
"target":[33.03,-72.61,10.78],
"up":[0,0,1],"fov":45}
/selection -> {"selected_ids":["ac0380a2-...","d9a287ee-..."]}
1st attempt returned default-zero camera. Root cause: the viewport lambda
used EditorPlugin.View, which is only populated when the plugin is
actually Run() by a user trigger; our bridge plugin just boots an HTTP
server from its constructor and never runs a command, so View stayed
null. Space access worked because RootSpace goes through AppManager,
which is populated for the whole app.
Fix (HmEgBridgePlugin.BuildProvider):
Before: viewportProvider = () => View;
After: viewportProvider = () => {
var vm = AppManager?.ViewportManager;
if (vm is null) return null;
return vm.FocusedViewport ?? vm.Viewports.FirstOrDefault();
};
Confirmed against read-only view of
HmEGApplicationManagementLibrary/SubManager/ViewportManager.cs
which exposes FocusedViewport and Viewports. EGViewport : HmEGViewport
so the lambda matches the Func<HmEGViewport?> contract directly.
Plus: scripts/deploy-egbim-plugin.bat for one-click deploy. Checks for
a running SUT, builds Debug, purges the legacy Recordingtest.EgPlugin
folder, cleans the destination, copies 3 DLLs (+ PDBs) into
EG-BIM Modeler/Plugins/Recordingtest.Sut.EgBim.PluginHost/
and prints the curl commands for verification. HmEG.dll and the
Editor*.dll assemblies are deliberately NOT copied — the SUT already
supplies them.
PROGRESS.md: engine-bridge v3 row finalized; the long-running "라이브
검증 대기" item is done. PLAN.md P1 advances to the Runner <-> sidecar
integration (snapshot /scene /camera /selection at scenario end and
include in the golden baseline).
Follow-up (noted in history): document_path returned "NewSpace0" for
an unsaved scratch document — need to retest with a saved .hmeg file
to confirm the real FileManager.CurrentFile round-trip.
Ref: #10 follow-up, engine-bridge-v3 contract DoD D7 satisfied.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
86 lines
3.2 KiB
Batchfile
86 lines
3.2 KiB
Batchfile
@echo off
|
|
REM Deploy Recordingtest.Sut.EgBim.PluginHost into the local EG-BIM Modeler
|
|
REM Plugins folder. Build first, then copy the plugin + HmEG-aware + generic
|
|
REM bridge DLLs side-by-side so MEF discovery picks them up as one plugin.
|
|
REM
|
|
REM Usage: double-click, or: scripts\deploy-egbim-plugin.bat
|
|
|
|
setlocal enableextensions
|
|
cd /d "%~dp0.."
|
|
|
|
set "CSPROJ=src\Sut\EgBim\Recordingtest.Sut.EgBim.PluginHost\Recordingtest.Sut.EgBim.PluginHost.csproj"
|
|
set "OUTDIR=src\Sut\EgBim\Recordingtest.Sut.EgBim.PluginHost\bin\Debug\net8.0-windows"
|
|
set "DEST=EG-BIM Modeler\Plugins\Recordingtest.Sut.EgBim.PluginHost"
|
|
|
|
echo ============================================================
|
|
echo [1/4] Safety check — is EG-BIM Modeler running?
|
|
echo ============================================================
|
|
tasklist /FI "IMAGENAME eq EG-BIM Modeler.exe" 2>nul | find /I "EG-BIM Modeler.exe" >nul
|
|
if not errorlevel 1 (
|
|
echo.
|
|
echo [WARN] EG-BIM Modeler is running. Close it before deploying
|
|
echo to avoid locked plugin DLLs.
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo ============================================================
|
|
echo [2/4] Build Recordingtest.Sut.EgBim.PluginHost (Debug)
|
|
echo ============================================================
|
|
dotnet build "%CSPROJ%" -c Debug -nologo -v q
|
|
if errorlevel 1 (
|
|
echo.
|
|
echo [ERROR] Build failed. Aborting deploy.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo ============================================================
|
|
echo [3/4] Purge legacy and fresh-copy plugin folder
|
|
echo ============================================================
|
|
if exist "EG-BIM Modeler\Plugins\Recordingtest.EgPlugin" (
|
|
echo Removing legacy Recordingtest.EgPlugin folder...
|
|
rmdir /s /q "EG-BIM Modeler\Plugins\Recordingtest.EgPlugin"
|
|
)
|
|
if exist "%DEST%" (
|
|
echo Cleaning existing %DEST%...
|
|
rmdir /s /q "%DEST%"
|
|
)
|
|
mkdir "%DEST%"
|
|
|
|
REM Copy plugin entry + HmEG-aware provider + generic contract.
|
|
REM Intentionally *not* copying HmEG.dll / Editor*.dll — those are already
|
|
REM provided by the SUT at runtime.
|
|
copy /y "%OUTDIR%\Recordingtest.Sut.EgBim.PluginHost.dll" "%DEST%\" >nul || goto :copy_fail
|
|
copy /y "%OUTDIR%\Recordingtest.Hmeg.Bridge.dll" "%DEST%\" >nul || goto :copy_fail
|
|
copy /y "%OUTDIR%\Recordingtest.Bridge.Abstractions.dll" "%DEST%\" >nul || goto :copy_fail
|
|
|
|
REM Optional PDBs for in-SUT debugging (ignore if missing)
|
|
copy /y "%OUTDIR%\Recordingtest.Sut.EgBim.PluginHost.pdb" "%DEST%\" >nul 2>&1
|
|
copy /y "%OUTDIR%\Recordingtest.Hmeg.Bridge.pdb" "%DEST%\" >nul 2>&1
|
|
copy /y "%OUTDIR%\Recordingtest.Bridge.Abstractions.pdb" "%DEST%\" >nul 2>&1
|
|
|
|
echo ============================================================
|
|
echo [4/4] Deployed files:
|
|
echo ============================================================
|
|
dir /b "%DEST%"
|
|
|
|
echo.
|
|
echo OK — Recordingtest.Sut.EgBim.PluginHost deployed.
|
|
echo Next: launch EG-BIM Modeler, then in a shell:
|
|
echo curl http://localhost:38080/health
|
|
echo curl http://localhost:38080/scene
|
|
echo curl http://localhost:38080/camera
|
|
echo curl http://localhost:38080/selection
|
|
echo.
|
|
pause
|
|
exit /b 0
|
|
|
|
:copy_fail
|
|
echo.
|
|
echo [ERROR] Copy failed. Check that the build output exists:
|
|
echo %OUTDIR%
|
|
pause
|
|
exit /b 1
|