From 7044be7c3c7bfa214eaee44f090d60c600e3234a Mon Sep 17 00:00:00 2001 From: yuxiao Date: Thu, 29 Jan 2026 16:43:42 +0100 Subject: [PATCH 1/9] added REveCamera class to make list REveCamera implement added REveCamera class implement isEveCameraPerspective set REveCamera free as an independent class implement camera on the client side. Also, the hardcoded test matrix is here hardcoded matrix test change the paths & env variables myslef as the author Remove commented lines with V1, V2 fCamera declaration does not need a comment. Restore align. include the REveCamera.hxx header in REveManager.cxx GetCameraId() replaced with REveCamera* GetCamera() {return fCamera; } SetCamBaseMtx override with string input SetCameraByElementId function implement; Set default camera to kCameraPerspXOZ save camera matrix implemented --- graf3d/eve7/CMakeLists.txt | 2 + graf3d/eve7/inc/LinkDef.h | 4 + graf3d/eve7/inc/ROOT/REveCamera.hxx | 85 +++++++++++++ graf3d/eve7/inc/ROOT/REveManager.hxx | 3 +- graf3d/eve7/inc/ROOT/REveViewer.hxx | 31 ++--- graf3d/eve7/src/REveCamera.cxx | 123 ++++++++++++++++++ graf3d/eve7/src/REveManager.cxx | 54 ++++++++ graf3d/eve7/src/REveViewer.cxx | 80 +++++++----- tutorials/visualisation/eve7/jets.C | 16 ++- ui5/eve7/controller/GL.controller.js | 17 ++- ui5/eve7/controller/Ged.controller.js | 172 +++++++++++++++++++++++++- ui5/eve7/lib/GlViewerRCore.js | 67 +++++++++- ui5/eve7/lib/RenderCore.js | 12 +- 13 files changed, 599 insertions(+), 67 deletions(-) create mode 100644 graf3d/eve7/inc/ROOT/REveCamera.hxx create mode 100644 graf3d/eve7/src/REveCamera.cxx diff --git a/graf3d/eve7/CMakeLists.txt b/graf3d/eve7/CMakeLists.txt index f6152ee616c14..71179175651b7 100644 --- a/graf3d/eve7/CMakeLists.txt +++ b/graf3d/eve7/CMakeLists.txt @@ -63,6 +63,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ROOTEve ROOT/REveUtil.hxx ROOT/REveVector.hxx ROOT/REveViewer.hxx + ROOT/REveCamera.hxx ROOT/REveViewContext.hxx ROOT/REveVSD.hxx ROOT/REveVSDStructs.hxx @@ -126,6 +127,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ROOTEve src/REveUtil.cxx src/REveVector.cxx src/REveViewer.cxx + src/REveCamera.cxx src/REveVSD.cxx src/REveVSDStructs.cxx DEPENDENCIES diff --git a/graf3d/eve7/inc/LinkDef.h b/graf3d/eve7/inc/LinkDef.h index b8e4754f53e5e..d35f4d9c21b2e 100644 --- a/graf3d/eve7/inc/LinkDef.h +++ b/graf3d/eve7/inc/LinkDef.h @@ -250,4 +250,8 @@ // Tables #pragma link C++ class ROOT::Experimental::REveTableViewInfo; +// Camera +#pragma link C++ class ROOT::Experimental::REveCamera+; +#pragma link C++ enum ROOT::Experimental::REveCamera::ECameraType; + #endif diff --git a/graf3d/eve7/inc/ROOT/REveCamera.hxx b/graf3d/eve7/inc/ROOT/REveCamera.hxx new file mode 100644 index 0000000000000..aa499d8ac6aec --- /dev/null +++ b/graf3d/eve7/inc/ROOT/REveCamera.hxx @@ -0,0 +1,85 @@ +// @(#)root/eve7:$Id$ +// Authors: Yuxiao Wang, 2025 + +/************************************************************************* + * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. * + * All rights reserved. * + * * + * For the licensing terms see $ROOTSYS/LICENSE. * + * For the list of contributors see $ROOTSYS/README/CREDITS. * + *************************************************************************/ + +#ifndef ROOT7_REveCamera +#define ROOT7_REveCamera + +#include +#include +#include + +#include + +namespace ROOT { +namespace Experimental { + +class REveCamera : public REveElement +{ +public: + enum ECameraType { + // Perspective + kCameraPerspXOZ, // XOZ floor + kCameraPerspYOZ, // YOZ floor + kCameraPerspXOY, // XOY floor + // Orthographic + kCameraOrthoXOY, // Looking down Z axis, X horz, Y vert + kCameraOrthoXOZ, // Looking along Y axis, X horz, Z vert + kCameraOrthoZOY, // Looking along X axis, Z horz, Y vert + kCameraOrthoZOX, // Looking along Y axis, Z horz, X vert + // Orthographic negative + kCameraOrthoXnOY, // Looking along Z axis, -X horz, Y vert + kCameraOrthoXnOZ, // Looking down Y axis, -X horz, Z vert + kCameraOrthoZnOY, // Looking down X axis, -Z horz, Y vert + kCameraOrthoZnOX // Looking down Y axis, -Z horz, X vert + }; + +private: + ECameraType fType; + std::string fName; + + // Camera transformation matrices + REveTrans fCamBase; // Base camera matrix (main positioning) + REveTrans fCamTrans; + +public: + REveCamera(); + REveCamera(const std::string &name); + virtual ~REveCamera() {} + + void Setup(ECameraType type, const std::string &name, const REveVector &v1, const REveVector &v2); + + ECameraType GetType() const { return fType; } + const std::string &GetCameraName() const { return fName; } + + // Camera matrix accessors + REveTrans &RefCamBase() { return fCamBase; } + const REveTrans &GetCamBase() const { return fCamBase; } + + REveTrans &RefCamTrans() { return fCamTrans; } + const REveTrans &GetCamTrans() const { return fCamTrans; } + + void SetCamBase(const REveTrans &base) { fCamBase = base; StampObjProps(); } + + // receive mtx from client + void SetCamBaseMtx(const std::vector &arr); + void SetCamBaseMtx(const std::string &json_str); + + void BuildRenderData() override{}; + + Int_t WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) override; + + ClassDef(REveCamera, 0); +}; + +} // namespace Experimental +} // namespace ROOT + +#endif \ No newline at end of file diff --git a/graf3d/eve7/inc/ROOT/REveManager.hxx b/graf3d/eve7/inc/ROOT/REveManager.hxx index ca0fa9b8a054a..73d41b35737fc 100644 --- a/graf3d/eve7/inc/ROOT/REveManager.hxx +++ b/graf3d/eve7/inc/ROOT/REveManager.hxx @@ -15,7 +15,6 @@ #include #include #include - #include #include "TSysEvtHandler.h" @@ -127,6 +126,7 @@ protected: REveViewerList *fViewers{nullptr}; REveSceneList *fScenes{nullptr}; + REveElement *fCameras{nullptr}; REveScene *fGlobalScene{nullptr}; REveScene *fEventScene{nullptr}; @@ -182,6 +182,7 @@ public: REveSceneList *GetScenes() const { return fScenes; } REveViewerList *GetViewers() const { return fViewers; } + REveElement *GetCameras() const { return fCameras; } //yuxiao REveScene *GetGlobalScene() const { return fGlobalScene; } REveScene *GetEventScene() const { return fEventScene; } diff --git a/graf3d/eve7/inc/ROOT/REveViewer.hxx b/graf3d/eve7/inc/ROOT/REveViewer.hxx index d26a3836dd359..adbe829d42acb 100644 --- a/graf3d/eve7/inc/ROOT/REveViewer.hxx +++ b/graf3d/eve7/inc/ROOT/REveViewer.hxx @@ -18,6 +18,7 @@ namespace ROOT { namespace Experimental { class REveScene; +class REveCamera; // yuxiao //////////////////////////////////////////////////////////////////////////////// /// REveViewer @@ -51,30 +52,12 @@ public: kAxesEdge }; - // For the moment REveCamera is internal class - class REveCamera - { - ECameraType fType; - std::string fName; - REveVector fV2; - REveVector fV1; - - public: - REveCamera() { Setup(kCameraPerspXOZ, "PerspXOZ", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0));} - ~REveCamera() {} - - void Setup(ECameraType type, const std::string& name, REveVector v1, REveVector v2); - - ECameraType GetType() const { return fType; } - - int WriteCoreJson(nlohmann::json &j, Int_t /*rnr_offset*/); - }; - private: REveViewer(const REveViewer&) = delete; REveViewer& operator=(const REveViewer&) = delete; - REveCamera fCamera; + REveCamera* fCamera{0}; + EAxesType fAxesType{kAxesNone}; bool fBlackBackground{false}; @@ -90,8 +73,12 @@ public: virtual void AddScene(REveScene* scene); // XXX Missing RemoveScene() ???? - void SetCameraType(ECameraType t); - ECameraType GetCameraType() const { return fCamera.GetType(); } + // void SetCameraType(ECameraType t); + // ECameraType GetCameraType() const { return fCamera->GetType(); } + void SetCamera(::ROOT::Experimental::REveCamera *cam); + REveCamera* GetCamera() const { return fCamera;} + + void SetCameraByElementId(ElementId_t cameraId); // set camera via ElementID void SetAxesType(int); void SetBlackBackground(bool); diff --git a/graf3d/eve7/src/REveCamera.cxx b/graf3d/eve7/src/REveCamera.cxx new file mode 100644 index 0000000000000..4a8a902722a42 --- /dev/null +++ b/graf3d/eve7/src/REveCamera.cxx @@ -0,0 +1,123 @@ +// @(#)root/eve7:$Id$ +// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007, 2018 + +/************************************************************************* + * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. * + * All rights reserved. * + * * + * For the licensing terms see $ROOTSYS/LICENSE. * + * For the list of contributors see $ROOTSYS/README/CREDITS. * + *************************************************************************/ + +#include +#include + +#include + +using namespace ROOT::Experimental; + +//////////////////////////////////////////////////////////////////////////////// +/// Default constructor + +REveCamera::REveCamera() : REveElement("REveCamera") +{ + Setup(kCameraPerspXOZ, "PerspXOZ", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)); + fCamBase.UnitTrans(); + fCamTrans.UnitTrans(); +} + +//////////////////////////////////////////////////////////////////////////////// +/// Constructor with name + +REveCamera::REveCamera(const std::string &name) : REveElement(name) +{ + Setup(kCameraPerspXOZ, name, REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)); + fCamBase.UnitTrans(); + fCamTrans.UnitTrans(); +} + +//////////////////////////////////////////////////////////////////////////////// +/// Setup camera with type, name, direction and up vectors + +void REveCamera::Setup(ECameraType type, const std::string &name, const REveVector &v1, const REveVector &v2) +{ + fType = type; + fName = name; + // fV1 = v1; + // fV2 = v2; + + // Set up base camera matrix from direction and up vectors + fCamBase.UnitTrans(); + fCamTrans.UnitTrans(); + + // Create a coordinate system from v1 (direction) and v2 (up) + REveVector dir = v1; + dir.Normalize(); + + REveVector up = v2; + up.Normalize(); + + // Right vector = dir × up + REveVector right; + right.fX = dir.fY * up.fZ - dir.fZ * up.fY; + right.fY = dir.fZ * up.fX - dir.fX * up.fZ; + right.fZ = dir.fX * up.fY - dir.fY * up.fX; + right.Normalize(); + + // Recalculate up = right × dir for orthogonality + REveVector newUp; + newUp.fX = right.fY * dir.fZ - right.fZ * dir.fY; + newUp.fY = right.fZ * dir.fX - right.fX * dir.fZ; + newUp.fZ = right.fX * dir.fY - right.fY * dir.fX; + + // Set rotation part of matrix (as row vectors) + Double_t *M = fCamBase.Array(); + M[0] = right.fX; M[4] = right.fY; M[8] = right.fZ; + M[1] = newUp.fX; M[5] = newUp.fY; M[9] = newUp.fZ; + M[2] = dir.fX; M[6] = dir.fY; M[10] = dir.fZ; + + StampObjProps(); +} + +//////////////////////////////////////////////////////////////////////////////// +/// Set camera base matrix from array (called from client via MIR) + +void REveCamera::SetCamBaseMtx(const std::vector &arr) +{ + if (arr.size() == 16) { + fCamBase.SetFromArray(arr.data()); + StampObjProps(); + } +} + +void REveCamera::SetCamBaseMtx(const std::string &json_str) +{ + auto j = nlohmann::json::parse(json_str); + std::vector arr = j.get>(); + SetCamBaseMtx(arr); +} + +//////////////////////////////////////////////////////////////////////////////// +/// Write core JSON for camera + +Int_t REveCamera::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) +{ + Int_t ret = REveElement::WriteCoreJson(j, rnr_offset); + + j["fType"] = fType; + j["fName"] = fName; + // j["fV1"] = {fV1.fX, fV1.fY, fV1.fZ}; + // j["fV2"] = {fV2.fX, fV2.fY, fV2.fZ}; + + // Stream both matrices + // Client will read these as fMatrix arrays (16 elements each) + const Double_t *camBaseArr = fCamBase.Array(); + j["camBase"] = std::vector(camBaseArr, camBaseArr + 16); + + const Double_t *camTransArr = fCamTrans.Array(); + j["camTrans"] = std::vector(camTransArr, camTransArr + 16); + + return ret; +} + +ClassImp(REveCamera); \ No newline at end of file diff --git a/graf3d/eve7/src/REveManager.cxx b/graf3d/eve7/src/REveManager.cxx index e57faf0904099..57dda5bd87842 100644 --- a/graf3d/eve7/src/REveManager.cxx +++ b/graf3d/eve7/src/REveManager.cxx @@ -11,6 +11,7 @@ #include +#include #include #include #include @@ -142,6 +143,59 @@ REveManager::REveManager() fScenes->IncDenyDestroy(); fWorld->AddElement(fScenes); + // -------------------------------- + // Create camera list + // -------------------------------- + fCameras = new REveElement("Cameras", "Camera list"); + fCameras->IncDenyDestroy(); + fWorld->AddElement(fCameras); + + // Create predefined cameras with their view vectors, yuxiao + struct CameraDef { + REveCamera::ECameraType type; + const char* name; + REveVector v1; + REveVector v2; + }; + + CameraDef predefinedCameras[] = { + // Perspective cameras + {REveCamera::kCameraPerspXOZ, "PerspXOZ", + REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraPerspYOZ, "PerspYOZ", + REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0)}, + {REveCamera::kCameraPerspXOY, "PerspXOY", + REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 0.0, 1.0)}, + + // Orthographic cameras + {REveCamera::kCameraOrthoXOY, "OrthoXOY", + REveVector(0.0, 0.0, 1.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoXOZ, "OrthoXOZ", + REveVector(0.0, -1.0, 0.0), REveVector(0.0, 0.0, 1.0)}, + {REveCamera::kCameraOrthoZOY, "OrthoZOY", + REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoZOX, "OrthoZOX", + REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0)}, + + // Orthographic negative cameras + {REveCamera::kCameraOrthoXnOY, "OrthoXnOY", + REveVector(0.0, 0.0, -1.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoXnOZ, "OrthoXnOZ", + REveVector(0.0, 1.0, 0.0), REveVector(0.0, 0.0, 1.0)}, + {REveCamera::kCameraOrthoZnOY, "OrthoZnOY", + REveVector(1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoZnOX, "OrthoZnOX", + REveVector(0.0, 1.0, 0.0), REveVector(1.0, 0.0, 0.0)} + }; + + // Create and add all predefined cameras + for (const auto &camDef : predefinedCameras) { + auto cam = new REveCamera(camDef.name); + cam->Setup(camDef.type, camDef.name, camDef.v1, camDef.v2); + fCameras->AddElement(cam); + std::cout << "camera ID: " << cam->GetElementId() << std::endl; + } + fGlobalScene = new REveScene("Geometry scene"); fGlobalScene->IncDenyDestroy(); fScenes->AddElement(fGlobalScene); diff --git a/graf3d/eve7/src/REveViewer.cxx b/graf3d/eve7/src/REveViewer.cxx index 334d9806bc046..a24c93c3e82b1 100644 --- a/graf3d/eve7/src/REveViewer.cxx +++ b/graf3d/eve7/src/REveViewer.cxx @@ -10,7 +10,7 @@ *************************************************************************/ #include - +#include #include #include #include @@ -34,9 +34,34 @@ Eve representation of a GL view. In a gist, it's a camera + a list of scenes. /// Constructor. REveViewer::REveViewer(const std::string& n, const std::string& t) : - REveElement(n, t) + REveElement(n, t), + fCamera(nullptr) { - // SetChildClass(TClass::GetClass()); + // Set default camera to kCameraPerspXOZ + if (gEve) + { + auto cameras = gEve->GetCameras(); + if (cameras && cameras->HasChildren()) + { + // Search for kCameraPerspXOZ camera + for (auto child : cameras->RefChildren()) + { + auto cam = dynamic_cast(child); + if (cam && cam->GetType() == REveCamera::kCameraPerspXOZ) + { + fCamera = cam; + break; + } + } + + // Fallback: use first camera if kCameraPerspXOZ not found. + // But usually, kCameraPerspXOZ is always the first camera.. + if (!fCamera) + { + fCamera = dynamic_cast(cameras->FirstChild()); + } + } + } } //////////////////////////////////////////////////////////////////////////////// @@ -129,11 +154,12 @@ void REveViewer::SetBlackBackground(bool x) /// Virtual from REveElement. int REveViewer::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) { - fCamera.WriteCoreJson(j, rnr_offset); + // fCamera.WriteCoreJson(j, rnr_offset); j["Mandatory"] = fMandatory; j["AxesType"] = fAxesType; j["BlackBg"] = fBlackBackground; + j["fCameraId"] = fCamera ? fCamera->GetElementId() : 0; j["UT_PostStream"] = "UT_EveViewerUpdate"; @@ -171,6 +197,7 @@ void REveViewer::SetMandatory(bool x) /// // Set base vectors of camera base matrix // +/* void REveViewer::SetCameraType(ECameraType cameraType) { switch(cameraType) { @@ -212,33 +239,14 @@ void REveViewer::SetCameraType(ECameraType cameraType) return; } } - +*/ //////////////////////////////////////////////////////////////////////////////// -// -// Set camera base matrix -// -void REveViewer::REveCamera::Setup( ECameraType type, const std::string& name, REveVector v1, REveVector v2) -{ - fType = type; - fName = name; - fV1 = v1; - fV2 = v2; -} +/// Set camera reference by ID, yuxiao -//////////////////////////////////////////////////////////////////////////////// -/// -// Stream camera info -// -int REveViewer::REveCamera::WriteCoreJson(nlohmann::json &j, Int_t /*rnr_offset*/) +void REveViewer::SetCamera(::ROOT::Experimental::REveCamera *cam) { - nlohmann::json out; - out["type"] = fName; - out["V1"] = {fV1.fX, fV1.fY, fV1.fZ}; - out["V2"] = {fV2.fX, fV2.fY, fV2.fZ}; - - j["camera"] = out; - - return 0; + fCamera = cam; + StampObjProps(); } //////////////////////////////////////////////////////////////////////////////// @@ -435,3 +443,19 @@ void REveViewerList::SwitchColorSet() // } // EndChanges on EveWorld; } + +//////////////////////////////////////////////////////////////////////////////// +/// Set camera by element ID (called from MIR) + +void REveViewer::SetCameraByElementId(ElementId_t cameraId) +{ + if (gEve) { + auto element = gEve->FindElementById(cameraId); + auto cam = dynamic_cast(element); + + if (cam) { + fCamera = cam; + StampObjProps(); + } + } +} \ No newline at end of file diff --git a/tutorials/visualisation/eve7/jets.C b/tutorials/visualisation/eve7/jets.C index 445acf99eb0e6..357a600d8167a 100644 --- a/tutorials/visualisation/eve7/jets.C +++ b/tutorials/visualisation/eve7/jets.C @@ -10,6 +10,8 @@ #include #include #include +#include +#include namespace REX = ROOT::Experimental; @@ -35,7 +37,19 @@ void makeJets(int N_Jets, REX::REveElement *jetHolder) void jets() { auto eveMng = REX::REveManager::Create(); - + eveMng->AllowMultipleRemoteConnections(false, false); + + auto cam = (REX::REveCamera*)eveMng->FindElementById(8); + // auto camTrans = cam->RefCamTrans(); + REX::REveTrans& camTrans = cam->RefCamTrans(); + + Double_t arr[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1000, -300, 0, 1}; + camTrans.SetFrom(arr); + // auto camTrans1 = cam->RefCamTrans(); + // camTrans1.Print(); + + //eveMng->GetDefaultViewer()->SetCamera(cam); + REX::REveElement *jetHolder = new REX::REveElement("Jets"); eveMng->GetEventScene()->AddElement(jetHolder); makeJets(7, jetHolder); diff --git a/ui5/eve7/controller/GL.controller.js b/ui5/eve7/controller/GL.controller.js index a96086405f497..bca36a3ac05ca 100644 --- a/ui5/eve7/controller/GL.controller.js +++ b/ui5/eve7/controller/GL.controller.js @@ -252,7 +252,22 @@ sap.ui.define([ isEveCameraPerspective: function() { let vo = this.mgr.GetElement(this.eveViewerId); - return vo.camera.type.startsWith("Persp"); + + // try to get camera type from standalone REveCamera element + let camera = this.mgr.GetElement(vo.fCameraId); + if (camera && camera.fType !== undefined) { + // REveCamera::ECameraType: 0-2 are Perspective, 3-8 are Orthographic + return camera.fType < 3; + } + + // Fallback: use nested camera type (backward compatibility) + // return vo.camera.type.startsWith("Persp"); + if (vo.camera && vo.camera.type) { + return vo.camera.type.startsWith("Persp"); + } + + console.warn("GL.controller.isEveCameraPerspective: no camera info found, defaulting to perspective"); + return true; }, switchSingle: function() diff --git a/ui5/eve7/controller/Ged.controller.js b/ui5/eve7/controller/Ged.controller.js index 51071b701468c..57dc40df62a2a 100644 --- a/ui5/eve7/controller/Ged.controller.js +++ b/ui5/eve7/controller/Ged.controller.js @@ -325,6 +325,11 @@ sap.ui.define([ { this.makeBoolSetter(Boolean(el.AxesType), "ShowAxes", "SetAxesType"); this.makeBoolSetter(el.BlackBg, "BlackBackground"); + + // camera type selector + this.makeCameraTypeSelector(el); + // save camera button + this.makeSaveCameraButton(el); }, buildREveDataCollectionSetter : function(el) @@ -748,8 +753,7 @@ sap.ui.define([ let selected = this.secSelectList.getSelectedItems(); for (let s = 0; s < selected.length; s++) this.secSelectList.setSelectedItem(selected[s], false); - - + for (let i =0; i < sec_idcs.length; ++i) { let sid = "item_"+sec_idcs[i]; this.secSelectList.setSelectedItemById(sid, true); @@ -758,9 +762,170 @@ sap.ui.define([ else this.secSelectList.removeSelections(); } - } + }, + + makeCameraTypeSelector: function(viewer) { + let gedFrame = this.getView().byId("GED"); + let gcm = this; + + let cameraTypes = [ + { key: 0, text: "Perspective XOZ" }, + { key: 1, text: "Perspective YOZ" }, + { key: 2, text: "Perspective XOY" }, + { key: 3, text: "Orthographic XOY" }, + { key: 4, text: "Orthographic XOZ" }, + { key: 5, text: "Orthographic ZOY" }, + { key: 6, text: "Orthographic ZOX" }, + { key: 7, text: "Orthographic XnOY" }, + { key: 8, text: "Orthographic XnOZ" }, + { key: 9, text: "Orthographic ZnOY" }, + { key: 10, text: "Orthographic ZnOX" } + ]; + + let currentCamera = null; + let currentType = 0; + + if (viewer.fCameraId) { + currentCamera = this.mgr.GetElement(viewer.fCameraId); + if (currentCamera && currentCamera.fType !== undefined) { + currentType = currentCamera.fType; + } + } + + let cameraModel = new sap.ui.model.json.JSONModel({ + types: cameraTypes + }); + + let comboBox = new sap.m.ComboBox({ + width: "100%", + selectedKey: currentType.toString(), + items: { + path: "/types", + template: new sap.ui.core.ListItem({ + key: "{key}", + text: "{text}" + }) + }, + selectionChange: function(oEvent) { + let selectedItem = oEvent.getParameter("selectedItem"); + if (selectedItem) { + let selectedType = parseInt(selectedItem.getKey()); + gcm.onCameraTypeChange(viewer, selectedType); + } + } + }); + + comboBox.setModel(cameraModel); + + let labelWidget = new mText({ text: "Camera Type" }); + labelWidget.addStyleClass("sapUiTinyMargin"); + + let frame = new HorizontalLayout({ + content: [labelWidget, comboBox] + }); + + gedFrame.addContent(frame); + }, + + onCameraTypeChange: function(viewer, newCameraType) { + let cameras = this.getCameraList(); + + for (let cam of cameras) { + if (cam.fType === newCameraType) { + let mir = "SetCameraByElementId(" + cam.fElementId + ")"; + this.mgr.SendMIR(mir, viewer.fElementId, viewer._typename); + console.log("Camera switched to:", cam.fName, "(Type:", newCameraType, ")"); + break; + } + } + }, + + getCameraList: function() { + let cameras = []; + + if (this.mgr && this.mgr.childs && this.mgr.childs.length > 0) { + let world = this.mgr.childs[0]; + + if (world.childs) { + for (let child of world.childs) { + if (child.fName === "Cameras" && child.childs) { + cameras = child.childs; + break; + } + } + } + } + + return cameras; + }, + + makeSaveCameraButton: function(viewer) { + let gedFrame = this.getView().byId("GED"); + let gcm = this; + + let button = new Button({ + text: "Save Camera Matrix", + width: "50%", + press: function() { + gcm.onSaveCameraMatrix(viewer); + } + }); + + gedFrame.addContent(button); + }, + + onSaveCameraMatrix: function(viewer) { + let view = this.getView(); + + if (!view || !view.oController) { + sap.m.MessageToast.show("Controller not found"); + console.error("view.oController not available"); + return; + } + + let glViewer = view.oController.editorElement.ca.oController.viewer; + + if (!glViewer || !glViewer.controls) { + sap.m.MessageToast.show("Camera controls not found"); + console.error("viewer.controls not available"); + return; + } + + let controls = glViewer.controls; + + if (!controls) { + sap.m.MessageToast.show("Camera matrix not available"); + console.error("camBaseMtx not available"); + return; + } + + let matrixObj = controls.getCamBase(); + + if (!matrixObj) { + sap.m.MessageToast.show("CamBase not available!"); + return; + } + let matrix = Array.from(matrixObj.elements); + + if (matrix.length !== 16) { + sap.m.MessageToast.show("Matrix must have 16 elements!"); + return; + } + + let jsonStr = JSON.stringify(matrix); + let mir = 'SetCamBaseMtx("' + jsonStr + '")'; + + console.log("Sending MIR:", mir); + + this.mgr.SendMIR(mir, viewer.fCameraId, "ROOT::Experimental::REveCamera"); + + sap.m.MessageToast.show("Camera matrix saved!"); + console.log("Saved camera matrix:", matrix); + + } }); + GedController.canEditClass = function(typename) { return true; }; @@ -776,7 +941,6 @@ sap.ui.define([ return "SetRnrSelf"; } - return GedController; }); diff --git a/ui5/eve7/lib/GlViewerRCore.js b/ui5/eve7/lib/GlViewerRCore.js index 7ee09758fd49d..8948fbcb7f41c 100644 --- a/ui5/eve7/lib/GlViewerRCore.js +++ b/ui5/eve7/lib/GlViewerRCore.js @@ -31,7 +31,7 @@ sap.ui.define([ this.top_path = jsrp.substring(0, jsrp.length - 10); this.eve_path = this.top_path + 'rootui5sys/eve7/'; - this._logLevel = 1; // 0 - error, 1 - warning, 2 - info, 3 - debug + this._logLevel = 3; // 0 - error, 1 - warning, 2 - info, 3 - debug if (this._logLevel > 2) { console.log("GlViewerRCore RQ_Mode:", this.RQ_Mode, "RQ_SSAA:", this.RQ_SSAA, @@ -448,9 +448,24 @@ sap.ui.define([ } }); + // implement the camera control to client side (and look into how to locate the camera) this.controls = new RC.REveCameraControls(this.camera, this.canvas.canvasDOM); this.controls.addEventListener('change', this.render.bind(this)); + // send to server when the client finishes camera setting + this.controls.addEventListener('end', () => { + let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); + if (eveView && eveView.fCameraId && this.controls.camBaseMtx) { + let arr = Array.from(this.controls.camBaseMtx.elements); + this.controller.mgr.SendMIR("SetCamBaseMtx", eveView.fCameraId, + "ROOT::Experimental::REveCamera", + JSON.stringify(arr)); + if (this._logLevel >= 2) { + console.log("Camera matrix sent to server, ID:", eveView.fCameraId); + } + } + }); + // camera center marker let col = new RC.Color(0.5, 0, 0); const msize = this.RQ_SSAA * 8; // marker size @@ -490,7 +505,7 @@ sap.ui.define([ let sbbox = this.scene_bbox; let posV = new RC.Vector3; posV.subVectors(sbbox.max, this.rot_center); let negV = new RC.Vector3; negV.subVectors(sbbox.min, this.rot_center); - + let extV = new RC.Vector3; extV = negV; extV.negate(); extV.max(posV); let extR = extV.length(); @@ -498,9 +513,53 @@ sap.ui.define([ console.log("GlViewerRenderCore.resetRenderer", sbbox, posV, negV, extV, extR); let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); - let v1 = eveView.camera.V1; - let v2 = eveView.camera.V2; + // Try to use standalone REveCamera if available + // let cameraId = eveView.fCameraId; + let cameraId = 8; + let camera = null; + let v1, v2; + + if (cameraId) { + camera = this.controller.mgr.GetElement(cameraId); + if (this._logLevel >= 2) { + console.log("GlViewerRCore.resetRenderer: Using standalone camera ID", cameraId); + if (camera) { + console.log(" Camera name:", camera.fName); + // console.log(" Camera fV1:", camera.fV1); + // console.log(" Camera fV2:", camera.fV2); + console.log(" Camera camBase:", camera.camBase); + } + } + } + + // In resetRenderer() + // if (camera && camera.fV1 && camera.fV2) { + // v1 = camera.fV1; + // v2 = camera.fV2; + if (camera && camera.camBase && camera.camBase.length === 16) { + v1 = [camera.camBase[8], camera.camBase[9], camera.camBase[10]]; // forward/direction + v2 = [camera.camBase[4], camera.camBase[5], camera.camBase[6]]; // up + + // Apply camTrans if available + if (camera.camTrans && camera.camTrans.length === 16) { + this.controls.setCamTrans(camera.camTrans); + if (this._logLevel >= 2) { + console.log("GlViewerRCore.resetRenderer: Applied camTrans from REveCamera"); + } + } + + if (this._logLevel >= 2) { + console.log("GlViewerRCore.resetRenderer: Using standalone REveCamera"); + } + } else { + // Fallback to nested camera for backward compatibility + v1 = eveView.camera.V1; + v2 = eveView.camera.V2; + if (this._logLevel >= 1) { + console.log("GlViewerRCore.resetRenderer: Using nested camera (fallback)"); + } + } if (this.camera.isPerspectiveCamera) { diff --git a/ui5/eve7/lib/RenderCore.js b/ui5/eve7/lib/RenderCore.js index 3ddf59241a5ac..36b45492c3b5d 100644 --- a/ui5/eve7/lib/RenderCore.js +++ b/ui5/eve7/lib/RenderCore.js @@ -1,9 +1,9 @@ // Standard import from ROOT build -export * from '../rcore/REveRenderCore-min.mjs'; -export const REveShaderPath = "rcore/shaders/"; -export const REveDevelMode = false; +// export * from '../rcore/REveRenderCore-min.mjs'; +// export const REveShaderPath = "rcore/shaders/"; +// export const REveDevelMode = false; // Development import from a RenderCore checkout in RC directory -// export * from '../RC/src/contrib/REveRenderCore.js'; -// export const REveShaderPath = "RC/src/shaders/"; -// export const REveDevelMode = true; \ No newline at end of file +export * from '../RC/src/contrib/REveRenderCore.js'; +export const REveShaderPath = "RC/src/shaders/"; +export const REveDevelMode = true; From c40453d36ad37ace1036421e8dcbc9ae1539d28f Mon Sep 17 00:00:00 2001 From: yuxiao Date: Wed, 8 Apr 2026 19:18:35 +0200 Subject: [PATCH 2/9] change back to standard mode --- tutorials/visualisation/eve7/jets.C | 16 +--------------- ui5/eve7/lib/RenderCore.js | 12 ++++++------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/tutorials/visualisation/eve7/jets.C b/tutorials/visualisation/eve7/jets.C index 357a600d8167a..445acf99eb0e6 100644 --- a/tutorials/visualisation/eve7/jets.C +++ b/tutorials/visualisation/eve7/jets.C @@ -10,8 +10,6 @@ #include #include #include -#include -#include namespace REX = ROOT::Experimental; @@ -37,19 +35,7 @@ void makeJets(int N_Jets, REX::REveElement *jetHolder) void jets() { auto eveMng = REX::REveManager::Create(); - eveMng->AllowMultipleRemoteConnections(false, false); - - auto cam = (REX::REveCamera*)eveMng->FindElementById(8); - // auto camTrans = cam->RefCamTrans(); - REX::REveTrans& camTrans = cam->RefCamTrans(); - - Double_t arr[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1000, -300, 0, 1}; - camTrans.SetFrom(arr); - // auto camTrans1 = cam->RefCamTrans(); - // camTrans1.Print(); - - //eveMng->GetDefaultViewer()->SetCamera(cam); - + REX::REveElement *jetHolder = new REX::REveElement("Jets"); eveMng->GetEventScene()->AddElement(jetHolder); makeJets(7, jetHolder); diff --git a/ui5/eve7/lib/RenderCore.js b/ui5/eve7/lib/RenderCore.js index 36b45492c3b5d..3ddf59241a5ac 100644 --- a/ui5/eve7/lib/RenderCore.js +++ b/ui5/eve7/lib/RenderCore.js @@ -1,9 +1,9 @@ // Standard import from ROOT build -// export * from '../rcore/REveRenderCore-min.mjs'; -// export const REveShaderPath = "rcore/shaders/"; -// export const REveDevelMode = false; +export * from '../rcore/REveRenderCore-min.mjs'; +export const REveShaderPath = "rcore/shaders/"; +export const REveDevelMode = false; // Development import from a RenderCore checkout in RC directory -export * from '../RC/src/contrib/REveRenderCore.js'; -export const REveShaderPath = "RC/src/shaders/"; -export const REveDevelMode = true; +// export * from '../RC/src/contrib/REveRenderCore.js'; +// export const REveShaderPath = "RC/src/shaders/"; +// export const REveDevelMode = true; \ No newline at end of file From 674086d5b81ff79afbae739f9a775d0116165fd4 Mon Sep 17 00:00:00 2001 From: yuxiao Date: Wed, 8 Apr 2026 19:33:07 +0200 Subject: [PATCH 3/9] SetCamTransMtx implemented on server side --- graf3d/eve7/inc/ROOT/REveCamera.hxx | 3 +++ graf3d/eve7/src/REveCamera.cxx | 15 +++++++++++++++ ui5/eve7/controller/Ged.controller.js | 25 +++++++++---------------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/graf3d/eve7/inc/ROOT/REveCamera.hxx b/graf3d/eve7/inc/ROOT/REveCamera.hxx index aa499d8ac6aec..069d873da1709 100644 --- a/graf3d/eve7/inc/ROOT/REveCamera.hxx +++ b/graf3d/eve7/inc/ROOT/REveCamera.hxx @@ -72,6 +72,9 @@ public: void SetCamBaseMtx(const std::vector &arr); void SetCamBaseMtx(const std::string &json_str); + void SetCamTransMtx(const std::vector &arr); + void SetCamTransMtx(const char* json_str); + void BuildRenderData() override{}; Int_t WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) override; diff --git a/graf3d/eve7/src/REveCamera.cxx b/graf3d/eve7/src/REveCamera.cxx index 4a8a902722a42..6b94f7691f2bd 100644 --- a/graf3d/eve7/src/REveCamera.cxx +++ b/graf3d/eve7/src/REveCamera.cxx @@ -97,6 +97,21 @@ void REveCamera::SetCamBaseMtx(const std::string &json_str) SetCamBaseMtx(arr); } +void REveCamera::SetCamTransMtx(const std::vector &arr) +{ + if (arr.size() == 16) { + fCamTrans.SetFromArray(arr.data()); + StampObjProps(); + } +} + +void REveCamera::SetCamTransMtx(const char* json_str) +{ + auto j = nlohmann::json::parse(json_str); + std::vector arr = j.get>(); + SetCamTransMtx(arr); +} + //////////////////////////////////////////////////////////////////////////////// /// Write core JSON for camera diff --git a/ui5/eve7/controller/Ged.controller.js b/ui5/eve7/controller/Ged.controller.js index 57dc40df62a2a..3056a970d2c66 100644 --- a/ui5/eve7/controller/Ged.controller.js +++ b/ui5/eve7/controller/Ged.controller.js @@ -894,34 +894,27 @@ sap.ui.define([ let controls = glViewer.controls; if (!controls) { - sap.m.MessageToast.show("Camera matrix not available"); - console.error("camBaseMtx not available"); + sap.m.MessageToast.show("Camera control not available"); + console.error("controls not available"); return; } - - let matrixObj = controls.getCamBase(); - - if (!matrixObj) { - sap.m.MessageToast.show("CamBase not available!"); - return; - } - - let matrix = Array.from(matrixObj.elements); - if (matrix.length !== 16) { - sap.m.MessageToast.show("Matrix must have 16 elements!"); + let camTransMtx = controls.getCamTransMtx(); + + if (!camTransMtx || camTransMtx.length !== 16) { + sap.m.MessageToast.show("Camera transform not available!"); return; } - let jsonStr = JSON.stringify(matrix); - let mir = 'SetCamBaseMtx("' + jsonStr + '")'; + let jsonStr = JSON.stringify(camTransMtx); + let mir = 'SetCamTransMtx("' + jsonStr + '")'; console.log("Sending MIR:", mir); this.mgr.SendMIR(mir, viewer.fCameraId, "ROOT::Experimental::REveCamera"); sap.m.MessageToast.show("Camera matrix saved!"); - console.log("Saved camera matrix:", matrix); + console.log("Saved camera matrix:", camTransMtx); } }); From ae4bac9058d0835c3787cc1340ac510a3069e0b9 Mon Sep 17 00:00:00 2001 From: yuxiao Date: Wed, 29 Apr 2026 17:15:32 +0200 Subject: [PATCH 4/9] added fInitialized member alias for backward compatibility Correction to restore perspective camera Save and restore camera on reload Remove obsolete function Move camera ownership to REveViewer Hand over copy of trans matrix from REveCamera to REveCameraControl Add callback from client to set camera type --- graf3d/eve7/inc/ROOT/REveCamera.hxx | 9 +- graf3d/eve7/inc/ROOT/REveViewer.hxx | 46 ++++---- graf3d/eve7/src/REveCamera.cxx | 74 +++++++------ graf3d/eve7/src/REveManager.cxx | 48 +-------- graf3d/eve7/src/REveViewer.cxx | 141 +++++++++++-------------- ui5/eve7/controller/Ged.controller.js | 12 +-- ui5/eve7/lib/GlViewerRCore.js | 144 ++++++++++++++++---------- 7 files changed, 222 insertions(+), 252 deletions(-) diff --git a/graf3d/eve7/inc/ROOT/REveCamera.hxx b/graf3d/eve7/inc/ROOT/REveCamera.hxx index 069d873da1709..69a87ac7e0e7c 100644 --- a/graf3d/eve7/inc/ROOT/REveCamera.hxx +++ b/graf3d/eve7/inc/ROOT/REveCamera.hxx @@ -48,6 +48,8 @@ private: // Camera transformation matrices REveTrans fCamBase; // Base camera matrix (main positioning) REveTrans fCamTrans; + Bool_t fInitialized{kFALSE}; + float fOrthoZoom{1.f}; public: REveCamera(); @@ -73,7 +75,12 @@ public: void SetCamBaseMtx(const std::string &json_str); void SetCamTransMtx(const std::vector &arr); - void SetCamTransMtx(const char* json_str); + void SetCamTransMtxStr(const char* json_str); + + void SetOrthoZoom(float); + + Bool_t IsInitialized() const { return fInitialized; } + void SetInitialized(Bool_t val) { fInitialized = val; } void BuildRenderData() override{}; diff --git a/graf3d/eve7/inc/ROOT/REveViewer.hxx b/graf3d/eve7/inc/ROOT/REveViewer.hxx index adbe829d42acb..2ca9ca3e7faa9 100644 --- a/graf3d/eve7/inc/ROOT/REveViewer.hxx +++ b/graf3d/eve7/inc/ROOT/REveViewer.hxx @@ -13,12 +13,13 @@ #define ROOT7_REveViewer #include +#include namespace ROOT { namespace Experimental { class REveScene; -class REveCamera; // yuxiao +// class REveCamera; // yuxiao //////////////////////////////////////////////////////////////////////////////// /// REveViewer @@ -28,23 +29,21 @@ class REveCamera; // yuxiao class REveViewer : public REveElement { public: - enum ECameraType - { - // Perspective - kCameraPerspXOZ, // XOZ floor - kCameraPerspYOZ, // YOZ floor - kCameraPerspXOY, // XOY floor - // Orthographic - kCameraOrthoXOY, // Looking down Z axis, X horz, Y vert - kCameraOrthoXOZ, // Looking along Y axis, X horz, Z vert - kCameraOrthoZOY, // Looking along X axis, Z horz, Y vert - kCameraOrthoZOX, // Looking along Y axis, Z horz, X vert - // nOrthographic - kCameraOrthoXnOY, // Looking along Z axis, -X horz, Y vert - kCameraOrthoXnOZ, // Looking down Y axis, -X horz, Z vert - kCameraOrthoZnOY, // Looking down X axis, -Z horz, Y vert - kCameraOrthoZnOX // Looking down Y axis, -Z horz, X vert - }; + // set alias instead + using ECameraType = REveCamera::ECameraType; + + // backward compatibility + static constexpr ECameraType kCameraPerspXOZ = REveCamera::kCameraPerspXOZ; + static constexpr ECameraType kCameraPerspYOZ = REveCamera::kCameraPerspYOZ; + static constexpr ECameraType kCameraPerspXOY = REveCamera::kCameraPerspXOY; + static constexpr ECameraType kCameraOrthoXOY = REveCamera::kCameraOrthoXOY; + static constexpr ECameraType kCameraOrthoXOZ = REveCamera::kCameraOrthoXOZ; + static constexpr ECameraType kCameraOrthoZOY = REveCamera::kCameraOrthoZOY; + static constexpr ECameraType kCameraOrthoZOX = REveCamera::kCameraOrthoZOX; + static constexpr ECameraType kCameraOrthoXnOY = REveCamera::kCameraOrthoXnOY; + static constexpr ECameraType kCameraOrthoXnOZ = REveCamera::kCameraOrthoXnOZ; + static constexpr ECameraType kCameraOrthoZnOY = REveCamera::kCameraOrthoZnOY; + static constexpr ECameraType kCameraOrthoZnOX = REveCamera::kCameraOrthoZnOX; enum EAxesType { kAxesNone, @@ -64,6 +63,10 @@ private: bool fMandatory{true}; std::string fPostStreamFlag; + std::vector fCameraList; + + ROOT::Experimental::REveCamera* CreateCamera(ECameraType type); + public: REveViewer(const std::string &n="REveViewer", const std::string &t=""); ~REveViewer() override; @@ -73,12 +76,11 @@ public: virtual void AddScene(REveScene* scene); // XXX Missing RemoveScene() ???? - // void SetCameraType(ECameraType t); - // ECameraType GetCameraType() const { return fCamera->GetType(); } - void SetCamera(::ROOT::Experimental::REveCamera *cam); + // Camera setters + void SetCamera(ROOT::Experimental::REveCamera *cam); REveCamera* GetCamera() const { return fCamera;} - void SetCameraByElementId(ElementId_t cameraId); // set camera via ElementID + void SetCameraType(REveCamera::ECameraType type); void SetAxesType(int); void SetBlackBackground(bool); diff --git a/graf3d/eve7/src/REveCamera.cxx b/graf3d/eve7/src/REveCamera.cxx index 6b94f7691f2bd..3cfc8a933d9b4 100644 --- a/graf3d/eve7/src/REveCamera.cxx +++ b/graf3d/eve7/src/REveCamera.cxx @@ -13,6 +13,7 @@ #include #include +#include using namespace ROOT::Experimental; @@ -39,43 +40,21 @@ REveCamera::REveCamera(const std::string &name) : REveElement(name) //////////////////////////////////////////////////////////////////////////////// /// Setup camera with type, name, direction and up vectors -void REveCamera::Setup(ECameraType type, const std::string &name, const REveVector &v1, const REveVector &v2) +void REveCamera::Setup(ECameraType type, const std::string &name, const REveVector &hAxis, const REveVector &vAxis) { fType = type; fName = name; - // fV1 = v1; - // fV2 = v2; - + // Set up base camera matrix from direction and up vectors fCamBase.UnitTrans(); fCamTrans.UnitTrans(); - - // Create a coordinate system from v1 (direction) and v2 (up) - REveVector dir = v1; - dir.Normalize(); - - REveVector up = v2; - up.Normalize(); - - // Right vector = dir × up - REveVector right; - right.fX = dir.fY * up.fZ - dir.fZ * up.fY; - right.fY = dir.fZ * up.fX - dir.fX * up.fZ; - right.fZ = dir.fX * up.fY - dir.fY * up.fX; - right.Normalize(); - - // Recalculate up = right × dir for orthogonality - REveVector newUp; - newUp.fX = right.fY * dir.fZ - right.fZ * dir.fY; - newUp.fY = right.fZ * dir.fX - right.fX * dir.fZ; - newUp.fZ = right.fX * dir.fY - right.fY * dir.fX; - - // Set rotation part of matrix (as row vectors) - Double_t *M = fCamBase.Array(); - M[0] = right.fX; M[4] = right.fY; M[8] = right.fZ; - M[1] = newUp.fX; M[5] = newUp.fY; M[9] = newUp.fZ; - M[2] = dir.fX; M[6] = dir.fY; M[10] = dir.fZ; - + + fCamBase.SetBaseVec(1, hAxis.fX, hAxis.fY, hAxis.fZ); + fCamBase.SetBaseVec(3, vAxis.fX, vAxis.fY, vAxis.fZ); + + REveVector y = vAxis.Cross(hAxis); + fCamBase.SetBaseVec(2, y.fX, y.fY, y.fZ); + StampObjProps(); } @@ -101,17 +80,36 @@ void REveCamera::SetCamTransMtx(const std::vector &arr) { if (arr.size() == 16) { fCamTrans.SetFromArray(arr.data()); - StampObjProps(); + fInitialized = kTRUE; } } -void REveCamera::SetCamTransMtx(const char* json_str) +void REveCamera::SetCamTransMtxStr(const char *ins) { - auto j = nlohmann::json::parse(json_str); - std::vector arr = j.get>(); + std::stringstream ss(ins); + std::vector arr; + std::string item; + while (std::getline(ss, item, ',')) { + arr.push_back(std::stod(item)); + } + + fOrthoZoom = arr.back(); + arr.pop_back(); + fCamTrans.SetFromArray(arr.data()); + + fInitialized = true; + // fCamTrans.Print(); + + StampObjProps(); SetCamTransMtx(arr); } +void REveCamera::SetOrthoZoom(float zoom) +{ + fOrthoZoom = zoom; + fInitialized = kTRUE; +} + //////////////////////////////////////////////////////////////////////////////// /// Write core JSON for camera @@ -121,9 +119,8 @@ Int_t REveCamera::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) j["fType"] = fType; j["fName"] = fName; - // j["fV1"] = {fV1.fX, fV1.fY, fV1.fZ}; - // j["fV2"] = {fV2.fX, fV2.fY, fV2.fZ}; - + j["fInitialized"] = fInitialized; // Stream to client + // Stream both matrices // Client will read these as fMatrix arrays (16 elements each) const Double_t *camBaseArr = fCamBase.Array(); @@ -131,6 +128,7 @@ Int_t REveCamera::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) const Double_t *camTransArr = fCamTrans.Array(); j["camTrans"] = std::vector(camTransArr, camTransArr + 16); + j["fZoom"] = fOrthoZoom; return ret; } diff --git a/graf3d/eve7/src/REveManager.cxx b/graf3d/eve7/src/REveManager.cxx index 57dda5bd87842..0acfcd217d7d3 100644 --- a/graf3d/eve7/src/REveManager.cxx +++ b/graf3d/eve7/src/REveManager.cxx @@ -150,52 +150,6 @@ REveManager::REveManager() fCameras->IncDenyDestroy(); fWorld->AddElement(fCameras); - // Create predefined cameras with their view vectors, yuxiao - struct CameraDef { - REveCamera::ECameraType type; - const char* name; - REveVector v1; - REveVector v2; - }; - - CameraDef predefinedCameras[] = { - // Perspective cameras - {REveCamera::kCameraPerspXOZ, "PerspXOZ", - REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, - {REveCamera::kCameraPerspYOZ, "PerspYOZ", - REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0)}, - {REveCamera::kCameraPerspXOY, "PerspXOY", - REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 0.0, 1.0)}, - - // Orthographic cameras - {REveCamera::kCameraOrthoXOY, "OrthoXOY", - REveVector(0.0, 0.0, 1.0), REveVector(0.0, 1.0, 0.0)}, - {REveCamera::kCameraOrthoXOZ, "OrthoXOZ", - REveVector(0.0, -1.0, 0.0), REveVector(0.0, 0.0, 1.0)}, - {REveCamera::kCameraOrthoZOY, "OrthoZOY", - REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, - {REveCamera::kCameraOrthoZOX, "OrthoZOX", - REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0)}, - - // Orthographic negative cameras - {REveCamera::kCameraOrthoXnOY, "OrthoXnOY", - REveVector(0.0, 0.0, -1.0), REveVector(0.0, 1.0, 0.0)}, - {REveCamera::kCameraOrthoXnOZ, "OrthoXnOZ", - REveVector(0.0, 1.0, 0.0), REveVector(0.0, 0.0, 1.0)}, - {REveCamera::kCameraOrthoZnOY, "OrthoZnOY", - REveVector(1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, - {REveCamera::kCameraOrthoZnOX, "OrthoZnOX", - REveVector(0.0, 1.0, 0.0), REveVector(1.0, 0.0, 0.0)} - }; - - // Create and add all predefined cameras - for (const auto &camDef : predefinedCameras) { - auto cam = new REveCamera(camDef.name); - cam->Setup(camDef.type, camDef.name, camDef.v1, camDef.v2); - fCameras->AddElement(cam); - std::cout << "camera ID: " << cam->GetElementId() << std::endl; - } - fGlobalScene = new REveScene("Geometry scene"); fGlobalScene->IncDenyDestroy(); fScenes->AddElement(fGlobalScene); @@ -1045,7 +999,7 @@ void REveManager::ExecuteMIR(std::shared_ptr mir) // std::cout << cmd.str() << std::endl; // gROOT->ProcessLine(cmd.str().c_str()); } catch (std::exception &e) { - R__LOG_ERROR(REveLog()) << "caught exception executing " << tag << ": " << e.what(); + std::cout << "caught exception executing " << tag << ": " << e.what(); } catch (...) { R__LOG_ERROR(REveLog()) << "caught unknown execption."; } diff --git a/graf3d/eve7/src/REveViewer.cxx b/graf3d/eve7/src/REveViewer.cxx index a24c93c3e82b1..381b33fd95877 100644 --- a/graf3d/eve7/src/REveViewer.cxx +++ b/graf3d/eve7/src/REveViewer.cxx @@ -37,31 +37,7 @@ REveViewer::REveViewer(const std::string& n, const std::string& t) : REveElement(n, t), fCamera(nullptr) { - // Set default camera to kCameraPerspXOZ - if (gEve) - { - auto cameras = gEve->GetCameras(); - if (cameras && cameras->HasChildren()) - { - // Search for kCameraPerspXOZ camera - for (auto child : cameras->RefChildren()) - { - auto cam = dynamic_cast(child); - if (cam && cam->GetType() == REveCamera::kCameraPerspXOZ) - { - fCamera = cam; - break; - } - } - - // Fallback: use first camera if kCameraPerspXOZ not found. - // But usually, kCameraPerspXOZ is always the first camera.. - if (!fCamera) - { - fCamera = dynamic_cast(cameras->FirstChild()); - } - } - } + SetCameraType(REveCamera::kCameraPerspXOZ); } //////////////////////////////////////////////////////////////////////////////// @@ -193,53 +169,6 @@ void REveViewer::SetMandatory(bool x) } } -//////////////////////////////////////////////////////////////////////////////// -/// -// Set base vectors of camera base matrix -// -/* -void REveViewer::SetCameraType(ECameraType cameraType) -{ - switch(cameraType) { - case kCameraPerspXOZ: - fCamera.Setup(kCameraPerspXOZ, "PerspXOZ", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)); // XOZ floor - break; - case kCameraPerspYOZ: - fCamera.Setup(kCameraPerspYOZ, "PerspYOZ", REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0));// YOZ floor - break; - case kCameraPerspXOY: - fCamera.Setup(kCameraPerspXOY, "PerspXOY", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 0.0, 1.0));// XOY floor - break; - case kCameraOrthoXOY: - fCamera.Setup(kCameraOrthoXOY, "OrthoXOY", REveVector(0.0, 0.0, 1.0), REveVector(0.0, 1.0, 0.0));// Looking down Z axis, X horz, Y vert - break; - case kCameraOrthoXOZ: - fCamera.Setup(kCameraOrthoXOZ, "OrthoXOZ", REveVector(0.0, -1.0, 0.0), REveVector(0.0, 0.0, 1.0));// Looking along Y axis, X horz, Z vert - break; - case kCameraOrthoZOY: - fCamera.Setup(kCameraOrthoZOY, "OrthoZOY", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0));// Looking along X axis, Z horz, Y vert - break; - case kCameraOrthoZOX: - fCamera.Setup(kCameraOrthoZOX, "OrthoZOX", REveVector(0.0,-1.0, 0.0), REveVector(1.0, 0.0, 0.0)); // Looking along Y axis, Z horz, X vert - break; - case kCameraOrthoXnOY: - fCamera.Setup(kCameraOrthoXnOY, "OrthoXnOY", REveVector(0.0, 0.0, -1.0), REveVector(0.0, 1.0, 0.0));// Looking along Z axis, -X horz, Y vert - break; - case kCameraOrthoXnOZ: - fCamera.Setup(kCameraOrthoXnOZ, "OrthoXnOZ", REveVector(0.0, 1.0, 0.0), REveVector(0.0, 0.0, 1.0));// Looking down Y axis, -X horz, Z vert - break; - case kCameraOrthoZnOY: - fCamera.Setup(kCameraOrthoZnOY, "OrthoZnOY", REveVector(1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)); // Looking down X axis, -Z horz, Y vert - break; - case kCameraOrthoZnOX: - fCamera.Setup(kCameraOrthoZnOX, "OrthoZnOX", REveVector(0.0, 1.0, 0.0), REveVector(1.0, 0.0, 0.0)); // Looking down Y axis, -Z horz, X vert - break; - default: - Error("REveViewer::SetCurrentCamera", "invalid camera type"); - return; - } -} -*/ //////////////////////////////////////////////////////////////////////////////// /// Set camera reference by ID, yuxiao @@ -444,18 +373,70 @@ void REveViewerList::SwitchColorSet() // EndChanges on EveWorld; } +void REveViewer::SetCameraByElementId(ElementId_t cameraId) +{ + auto element = gEve->FindElementById(cameraId); + auto cam = dynamic_cast(element); + + if (cam) { + fCamera = cam; + StampObjProps(); + } +} + //////////////////////////////////////////////////////////////////////////////// -/// Set camera by element ID (called from MIR) +/// Set camera by type (backward compatibility with old API) -void REveViewer::SetCameraByElementId(ElementId_t cameraId) +void REveViewer::SetCameraType(REveCamera::ECameraType type) { - if (gEve) { - auto element = gEve->FindElementById(cameraId); - auto cam = dynamic_cast(element); - - if (cam) { + for (auto &cam : fCameraList) { + if (cam->GetType() == type) { fCamera = cam; - StampObjProps(); } } + + fCamera = CreateCamera(type); + fCameraList.push_back(fCamera); + StampObjProps(); +} + +//////////////////////////////////////////////////////////////////////////////// +// Create Camera Based on Type Enum (Lines 161-190) +REveCamera *REveViewer::CreateCamera(ECameraType type) +{ + REveCamera *cam = nullptr; + + struct CameraDef { + REveCamera::ECameraType type; + const char *name; + REveVector v1; + REveVector v2; + }; + + static const CameraDef predefinedCameras[] = { + // Perspective cameras + {REveCamera::kCameraPerspXOZ, "PerspXOZ", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraPerspYOZ, "PerspYOZ", REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0)}, + {REveCamera::kCameraPerspXOY, "PerspXOY", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 0.0, 1.0)}, + // Orthographic cameras + {REveCamera::kCameraOrthoXOY, "OrthoXOY", REveVector(0.0, 0.0, 1.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoXOZ, "OrthoXOZ", REveVector(0.0, -1.0, 0.0), REveVector(0.0, 0.0, 1.0)}, + {REveCamera::kCameraOrthoZOY, "OrthoZOY", REveVector(-1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoZOX, "OrthoZOX", REveVector(0.0, -1.0, 0.0), REveVector(1.0, 0.0, 0.0)}, + // Orthographic negative camera + {REveCamera::kCameraOrthoXnOY, "OrthoXnOY", REveVector(0.0, 0.0, -1.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoXnOZ, "OrthoXnOZ", REveVector(0.0, 1.0, 0.0), REveVector(0.0, 0.0, 1.0)}, + {REveCamera::kCameraOrthoZnOY, "OrthoZnOY", REveVector(1.0, 0.0, 0.0), REveVector(0.0, 1.0, 0.0)}, + {REveCamera::kCameraOrthoZnOX, "OrthoZnOX", REveVector(0.0, 1.0, 0.0), REveVector(1.0, 0.0, 0.0)}}; + + // Create and add all predefined cameras + for (const auto &camDef : predefinedCameras) { + if (type == camDef.type) { + cam = new REveCamera(camDef.name); + gEve->GetCameras()->AddElement(cam); + cam->Setup(camDef.type, camDef.name, camDef.v1, camDef.v2); + } + } + + return cam; } \ No newline at end of file diff --git a/ui5/eve7/controller/Ged.controller.js b/ui5/eve7/controller/Ged.controller.js index 3056a970d2c66..08fec3d401171 100644 --- a/ui5/eve7/controller/Ged.controller.js +++ b/ui5/eve7/controller/Ged.controller.js @@ -828,16 +828,8 @@ sap.ui.define([ }, onCameraTypeChange: function(viewer, newCameraType) { - let cameras = this.getCameraList(); - - for (let cam of cameras) { - if (cam.fType === newCameraType) { - let mir = "SetCameraByElementId(" + cam.fElementId + ")"; - this.mgr.SendMIR(mir, viewer.fElementId, viewer._typename); - console.log("Camera switched to:", cam.fName, "(Type:", newCameraType, ")"); - break; - } - } + let mir = "SetCameraType(" + newCameraType + ")"; + this.mgr.SendMIR(mir, viewer.fElementId, viewer._typename); }, getCameraList: function() { diff --git a/ui5/eve7/lib/GlViewerRCore.js b/ui5/eve7/lib/GlViewerRCore.js index 8948fbcb7f41c..00678d24fe708 100644 --- a/ui5/eve7/lib/GlViewerRCore.js +++ b/ui5/eve7/lib/GlViewerRCore.js @@ -453,18 +453,60 @@ sap.ui.define([ this.controls.addEventListener('change', this.render.bind(this)); // send to server when the client finishes camera setting - this.controls.addEventListener('end', () => { - let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); - if (eveView && eveView.fCameraId && this.controls.camBaseMtx) { - let arr = Array.from(this.controls.camBaseMtx.elements); - this.controller.mgr.SendMIR("SetCamBaseMtx", eveView.fCameraId, - "ROOT::Experimental::REveCamera", - JSON.stringify(arr)); - if (this._logLevel >= 2) { - console.log("Camera matrix sent to server, ID:", eveView.fCameraId); + // use throttle + + // Throttle helper (define once at module level) + function throttle(func, limit) { + let inThrottle; + return function (...args) { + if (!inThrottle) { + func.apply(this, args); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + }; + } + this.controls.addEventListener('end', throttle(() => { + + let equal = true; + let a = glc.controls.getCamTrans().elements; + let eveView = glc.controller.mgr.GetElement(this.controller.eveViewerId); + let eveCamera = glc.controller.mgr.GetElement(eveView.fCameraId); + let b = eveCamera.camTrans; + + // compare trans matrices + for (let i = 0; i < 16; i++) { + if (Math.abs(a[i] - b[i]) > 0.0000005) { + equal = false; } } - }); + + // compare zoom if camera is orthographic + if (glc.camera.isOrthographicCamera) { + if (Math.abs(glc.camera.zoom - eveCamera.fZoom) > 0.0000005) { + eveCamera.fZoom = glc.camera.zoom; + equal = false; + } + } + + if (equal !== true) { + // save trans matrix from orbit control to eve camera object + for (let i = 0; i < 16; i++) { + b[i] = a[i]; + } + + // set trans matrix and zoom as array of 17 floats + if (eveView && eveView.fCameraId) { + let sz = glc.camera.isOrthographicCamera === true ? glc.camera.zoom : 1; + let fcall = "SetCamTransMtxStr(\""; + fcall += b.join(",") + ","+ sz + "\")"; + glc.controller.mgr.SendMIR(fcall, eveView.fCameraId, + "ROOT::Experimental::REveCamera"); + } + } + + }, 200)); + //}); // camera center marker let col = new RC.Color(0.5, 0, 0); @@ -505,7 +547,7 @@ sap.ui.define([ let sbbox = this.scene_bbox; let posV = new RC.Vector3; posV.subVectors(sbbox.max, this.rot_center); let negV = new RC.Vector3; negV.subVectors(sbbox.min, this.rot_center); - + let extV = new RC.Vector3; extV = negV; extV.negate(); extV.max(posV); let extR = extV.length(); @@ -515,52 +557,35 @@ sap.ui.define([ let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); // Try to use standalone REveCamera if available - // let cameraId = eveView.fCameraId; - let cameraId = 8; - let camera = null; - let v1, v2; - - if (cameraId) { - camera = this.controller.mgr.GetElement(cameraId); - if (this._logLevel >= 2) { - console.log("GlViewerRCore.resetRenderer: Using standalone camera ID", cameraId); - if (camera) { - console.log(" Camera name:", camera.fName); - // console.log(" Camera fV1:", camera.fV1); - // console.log(" Camera fV2:", camera.fV2); - console.log(" Camera camBase:", camera.camBase); - } + let cameraId = eveView.fCameraId; + + let camera = this.controller.mgr.GetElement(cameraId); + if (this._logLevel >= 2) { + console.log("GlViewerRCore.resetRenderer: Using standalone camera ID", cameraId); + if (camera) { + console.log(" Camera name:", camera.fName); + // console.log(" Camera fV1:", camera.fV1); + // console.log(" Camera fV2:", camera.fV2); + console.log(" Camera camBase:", camera.camBase); } } - - // In resetRenderer() - // if (camera && camera.fV1 && camera.fV2) { - // v1 = camera.fV1; - // v2 = camera.fV2; - if (camera && camera.camBase && camera.camBase.length === 16) { - v1 = [camera.camBase[8], camera.camBase[9], camera.camBase[10]]; // forward/direction - v2 = [camera.camBase[4], camera.camBase[5], camera.camBase[6]]; // up - - // Apply camTrans if available - if (camera.camTrans && camera.camTrans.length === 16) { - this.controls.setCamTrans(camera.camTrans); - if (this._logLevel >= 2) { - console.log("GlViewerRCore.resetRenderer: Applied camTrans from REveCamera"); - } - } + let v1 = [camera.camBase[0], camera.camBase[1], camera.camBase[2]]; // forward/direction + let v2 = [camera.camBase[8], camera.camBase[9], camera.camBase[10]]; // up + + // Apply camTrans if available + if (camera.camTrans && camera.camTrans.length === 16) { + this.controls.setCamTrans(camera.camTrans.slice()); if (this._logLevel >= 2) { - console.log("GlViewerRCore.resetRenderer: Using standalone REveCamera"); - } - } else { - // Fallback to nested camera for backward compatibility - v1 = eveView.camera.V1; - v2 = eveView.camera.V2; - if (this._logLevel >= 1) { - console.log("GlViewerRCore.resetRenderer: Using nested camera (fallback)"); + console.log("GlViewerRCore.resetRenderer: Applied camTrans from REveCamera"); } } + if (this._logLevel >= 2) { + console.log("GlViewerRCore.resetRenderer: Using standalone REveCamera"); + } + + if (this.camera.isPerspectiveCamera) { this.controls.setCamBaseMtx(new RC.Vector3(v1[0], v1[1], v1[2]), new RC.Vector3(v2[0], v2[1], v2[2])); @@ -595,10 +620,9 @@ sap.ui.define([ let lc = this.lights.children; lc[1].position.set( 0, 0, extR); - // lc[2].position.set( 0, 0, -extR); - - // console.log("resetRenderer 2D scene bbox ex ey", sbbox, ex, ey, ", camera_pos ", posC, ", look_at ", this.rot_center); } + + this.controls.setFromBBox(sbbox); this.centerMarker.visible = false; @@ -734,8 +758,11 @@ sap.ui.define([ render() { +<<<<<<< HEAD // console.log("RENDER", this.scene, this.camera, this.canvas, this.renderer); +======= +>>>>>>> 7075e817ab0 (added fInitialized member) this.render_requested = false; if (this.render_requested_recalc_sbbox) { this.recalcSceneBBox(); @@ -1116,7 +1143,7 @@ sap.ui.define([ menu.add("Set Camera Center", data, this.setCameraCenter.bind(data)); } - menu.add("Reset camera", this.resetRenderer); + menu.add("Reset camera", this.resetCamera); if (RC.REveDevelMode) { menu.add("separator"); @@ -1127,6 +1154,15 @@ sap.ui.define([ menu.show(event); } + // callback from popup "Re" menu + resetCamera() + { + let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); + let eve_camera = this.controller.mgr.GetElement(eveView.fCameraId); + eve_camera.fInitialized = false; + this.resetRenderer(); + } + setCameraCenter(data) { let pthis = data.v; From 130f4c03c55b82cb10ed97bcf89d2bfe85bb6f01 Mon Sep 17 00:00:00 2001 From: alja Date: Mon, 1 Jun 2026 11:31:30 -0700 Subject: [PATCH 5/9] Update camera trans matrix in time. --- ui5/eve7/controller/GL.controller.js | 9 +- ui5/eve7/controller/Ged.controller.js | 5 +- ui5/eve7/controller/Summary.controller.js | 5 + ui5/eve7/lib/GlViewerRCore.js | 169 ++++++++++++---------- 4 files changed, 103 insertions(+), 85 deletions(-) diff --git a/ui5/eve7/controller/GL.controller.js b/ui5/eve7/controller/GL.controller.js index bca36a3ac05ca..767821159c156 100644 --- a/ui5/eve7/controller/GL.controller.js +++ b/ui5/eve7/controller/GL.controller.js @@ -251,21 +251,14 @@ sap.ui.define([ }, isEveCameraPerspective: function() { + // get camera type from standalone REveCamera element let vo = this.mgr.GetElement(this.eveViewerId); - - // try to get camera type from standalone REveCamera element let camera = this.mgr.GetElement(vo.fCameraId); if (camera && camera.fType !== undefined) { // REveCamera::ECameraType: 0-2 are Perspective, 3-8 are Orthographic return camera.fType < 3; } - // Fallback: use nested camera type (backward compatibility) - // return vo.camera.type.startsWith("Persp"); - if (vo.camera && vo.camera.type) { - return vo.camera.type.startsWith("Persp"); - } - console.warn("GL.controller.isEveCameraPerspective: no camera info found, defaulting to perspective"); return true; }, diff --git a/ui5/eve7/controller/Ged.controller.js b/ui5/eve7/controller/Ged.controller.js index 08fec3d401171..c4b482f23d67e 100644 --- a/ui5/eve7/controller/Ged.controller.js +++ b/ui5/eve7/controller/Ged.controller.js @@ -329,7 +329,7 @@ sap.ui.define([ // camera type selector this.makeCameraTypeSelector(el); // save camera button - this.makeSaveCameraButton(el); + // this.makeSaveCameraButton(el); }, buildREveDataCollectionSetter : function(el) @@ -851,6 +851,7 @@ sap.ui.define([ return cameras; }, + /* makeSaveCameraButton: function(viewer) { let gedFrame = this.getView().byId("GED"); let gcm = this; @@ -908,7 +909,7 @@ sap.ui.define([ sap.m.MessageToast.show("Camera matrix saved!"); console.log("Saved camera matrix:", camTransMtx); - } + }*/ }); GedController.canEditClass = function(typename) { diff --git a/ui5/eve7/controller/Summary.controller.js b/ui5/eve7/controller/Summary.controller.js index 033401510fd93..49832fe9e01fb 100644 --- a/ui5/eve7/controller/Summary.controller.js +++ b/ui5/eve7/controller/Summary.controller.js @@ -300,6 +300,11 @@ sap.ui.define([ for (let n=0;n= 2) - console.log("GlViewerRenderCore.resetRenderer", sbbox, posV, negV, extV, extR); + console.log("GlViewerRenderCore.positionCameraAndLights", sbbox, posV, negV, extV, extR); let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); @@ -561,11 +569,9 @@ sap.ui.define([ let camera = this.controller.mgr.GetElement(cameraId); if (this._logLevel >= 2) { - console.log("GlViewerRCore.resetRenderer: Using standalone camera ID", cameraId); + console.log("GlViewerRCore.positionCameraAndLights: Using standalone camera ID", cameraId); if (camera) { console.log(" Camera name:", camera.fName); - // console.log(" Camera fV1:", camera.fV1); - // console.log(" Camera fV2:", camera.fV2); console.log(" Camera camBase:", camera.camBase); } } @@ -573,23 +579,15 @@ sap.ui.define([ let v1 = [camera.camBase[0], camera.camBase[1], camera.camBase[2]]; // forward/direction let v2 = [camera.camBase[8], camera.camBase[9], camera.camBase[10]]; // up - // Apply camTrans if available - if (camera.camTrans && camera.camTrans.length === 16) { - this.controls.setCamTrans(camera.camTrans.slice()); - if (this._logLevel >= 2) { - console.log("GlViewerRCore.resetRenderer: Applied camTrans from REveCamera"); - } - } - if (this._logLevel >= 2) { - console.log("GlViewerRCore.resetRenderer: Using standalone REveCamera"); + console.log("GlViewerRCore.positionCameraAndLights: Using standalone REveCamera"); } - if (this.camera.isPerspectiveCamera) { this.controls.setCamBaseMtx(new RC.Vector3(v1[0], v1[1], v1[2]), new RC.Vector3(v2[0], v2[1], v2[2])); this.controls.screenSpacePanning = true; + this.controls.enableRotate = true; let lc = this.lights.children; // lights are const now -- no need to set decay and distance @@ -598,8 +596,6 @@ sap.ui.define([ lc[3].position.set( extR, extR, extR); lc[4].position.set(-extR, extR, -extR); lc[5].position.set(0, -extR, 0); - - // console.log("resetRenderer 3D scene bbox ", sbbox, ", look_at ", this.rot_center); } else { @@ -621,40 +617,33 @@ sap.ui.define([ let lc = this.lights.children; lc[1].position.set( 0, 0, extR); } - - this.controls.setFromBBox(sbbox); - - this.centerMarker.visible = false; this.controls.setFromBBox(sbbox); - this.controls.update(); - } - - setupCamera() - { - // To be used with JS debugger to edit the values as needed. - - let pos = new RC.Vector3; - let lookat = new RC.Vector3; - let fov = 30; // in degrees + // Apply saved camTrans (if initialized) + if (camera.fInitialized) { + // Apply camTrans after bbox setup + this.controls.setCamTrans(camera.camTrans.slice()); - console.log("A good place to set the breakpoint and edit the values"); + if (this.camera.isOrthographicCamera) { + this.camera.zoom = camera.fZoom; + this.camera.updateProjectionMatrix(); + this.controls.zoomChanged = true; + this.controls.update(); + } + } + this.controls.update(); - // Call the controller stuff, hope it's not all local, otherwise we need to edit it there. - // Sigh, should really have it (and RedeQuTor) in ROOT. + this.centerMarker.visible = false; } - updateViewerAttributes() - { + updateViewerAttributes() { let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); - if (eveView.BlackBg) - { + if (eveView.BlackBg) { this.fgCol = this.creator.ColorWhite; this.bgCol = this.creator.ColorBlack; } - else - { + else { this.bgCol = this.creator.ColorWhite; this.fgCol = this.creator.ColorBlack; } @@ -663,6 +652,39 @@ sap.ui.define([ if (eveView.AxesType > 0) this.makeAxis(); + + // compare cam base matrices + let a = this.controls.getCamBase().elements; + let eveCamera = this.controller.mgr.GetElement(eveView.fCameraId); + + // compare the base matrices + let b = eveCamera.camBase; + let equal = true; + for (let i = 0; i < 16; i++) { + if (Math.abs(a[i] - b[i]) > 0.0000005) { + equal = false; + } + } + + // compare exisiting controller type and viewer's REveCamera type + if (eveCamera.fType < 3) { + if (this.controls?.isOrthographicCamera) { + equal = false; + } + + } + else { + if (this.controls?.isPerspectiveCamera) { + equal = false; + } + } + + if (equal !== true) { + this.lights.clear(); + delete this.camera; + this.createCameraAndLights(); + this.positionCameraAndLights(); + } this.request_render(); } @@ -758,11 +780,8 @@ sap.ui.define([ render() { -<<<<<<< HEAD // console.log("RENDER", this.scene, this.camera, this.canvas, this.renderer); -======= ->>>>>>> 7075e817ab0 (added fInitialized member) this.render_requested = false; if (this.render_requested_recalc_sbbox) { this.recalcSceneBBox(); @@ -1160,7 +1179,7 @@ sap.ui.define([ let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); let eve_camera = this.controller.mgr.GetElement(eveView.fCameraId); eve_camera.fInitialized = false; - this.resetRenderer(); + this.positionCameraAndLights(); } setCameraCenter(data) From aa9fdab204c51934240b153ec455cc04c6d5c15e Mon Sep 17 00:00:00 2001 From: alja Date: Thu, 4 Jun 2026 12:52:34 -0700 Subject: [PATCH 6/9] Update RenderCore to version 2.1: correction in rendering of REveDigitSet and additional signal handling in REveCameraControl --- builtins/rendercore/RenderCore-2.0.tar.gz | Bin 100636 -> 0 bytes builtins/rendercore/RenderCore-2.1.tar.gz | Bin 0 -> 100189 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 builtins/rendercore/RenderCore-2.0.tar.gz create mode 100644 builtins/rendercore/RenderCore-2.1.tar.gz diff --git a/builtins/rendercore/RenderCore-2.0.tar.gz b/builtins/rendercore/RenderCore-2.0.tar.gz deleted file mode 100644 index 784462453568fc406830fedda2e00c5bcb9b91a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100636 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Î}6wF`?|E5z*m7LC$x0=tqov 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�E;rGH+w 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 z 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 Z%s#Wv>@)k!K2QGn{{yi)d#nIR2mt&M?{okF literal 0 HcmV?d00001 From 0812db9075450597405bfd41ac3f37d5a5fd6164 Mon Sep 17 00:00:00 2001 From: alja Date: Mon, 8 Jun 2026 14:56:33 -0700 Subject: [PATCH 7/9] Add option to sync camera settings Sync camera changes every 5 seconds --- graf3d/eve7/inc/ROOT/REveViewer.hxx | 5 ++ graf3d/eve7/src/REveCamera.cxx | 5 +- graf3d/eve7/src/REveViewer.cxx | 1 + ui5/eve7/controller/Ged.controller.js | 63 +------------------ ui5/eve7/lib/GlViewerRCore.js | 90 +++++++++++++-------------- 5 files changed, 52 insertions(+), 112 deletions(-) diff --git a/graf3d/eve7/inc/ROOT/REveViewer.hxx b/graf3d/eve7/inc/ROOT/REveViewer.hxx index 2ca9ca3e7faa9..30b24427e6687 100644 --- a/graf3d/eve7/inc/ROOT/REveViewer.hxx +++ b/graf3d/eve7/inc/ROOT/REveViewer.hxx @@ -67,6 +67,8 @@ private: ROOT::Experimental::REveCamera* CreateCamera(ECameraType type); + bool fSyncCamera{true}; + public: REveViewer(const std::string &n="REveViewer", const std::string &t=""); ~REveViewer() override; @@ -82,6 +84,9 @@ public: void SetCameraByElementId(ElementId_t cameraId); // set camera via ElementID void SetCameraType(REveCamera::ECameraType type); + void SyncCamera(bool s) {fSyncCamera = s;} + bool GetSyncCamera() const {return fSyncCamera;} + void SetAxesType(int); void SetBlackBackground(bool); diff --git a/graf3d/eve7/src/REveCamera.cxx b/graf3d/eve7/src/REveCamera.cxx index 3cfc8a933d9b4..19ed080c2fc78 100644 --- a/graf3d/eve7/src/REveCamera.cxx +++ b/graf3d/eve7/src/REveCamera.cxx @@ -84,6 +84,9 @@ void REveCamera::SetCamTransMtx(const std::vector &arr) } } +// Set translation matrix with an array of 17 floats +// The first 16 floats are 4x4 matrix element +// The 17th value is setting the zoom value in orthographic type void REveCamera::SetCamTransMtxStr(const char *ins) { std::stringstream ss(ins); @@ -98,7 +101,6 @@ void REveCamera::SetCamTransMtxStr(const char *ins) fCamTrans.SetFromArray(arr.data()); fInitialized = true; - // fCamTrans.Print(); StampObjProps(); SetCamTransMtx(arr); @@ -107,7 +109,6 @@ void REveCamera::SetCamTransMtxStr(const char *ins) void REveCamera::SetOrthoZoom(float zoom) { fOrthoZoom = zoom; - fInitialized = kTRUE; } //////////////////////////////////////////////////////////////////////////////// diff --git a/graf3d/eve7/src/REveViewer.cxx b/graf3d/eve7/src/REveViewer.cxx index 381b33fd95877..ea55c16ee9bd2 100644 --- a/graf3d/eve7/src/REveViewer.cxx +++ b/graf3d/eve7/src/REveViewer.cxx @@ -136,6 +136,7 @@ int REveViewer::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) j["AxesType"] = fAxesType; j["BlackBg"] = fBlackBackground; j["fCameraId"] = fCamera ? fCamera->GetElementId() : 0; + j["fSyncCam"] = fSyncCamera; j["UT_PostStream"] = "UT_EveViewerUpdate"; diff --git a/ui5/eve7/controller/Ged.controller.js b/ui5/eve7/controller/Ged.controller.js index c4b482f23d67e..f07693a603d93 100644 --- a/ui5/eve7/controller/Ged.controller.js +++ b/ui5/eve7/controller/Ged.controller.js @@ -328,8 +328,6 @@ sap.ui.define([ // camera type selector this.makeCameraTypeSelector(el); - // save camera button - // this.makeSaveCameraButton(el); }, buildREveDataCollectionSetter : function(el) @@ -849,67 +847,8 @@ sap.ui.define([ } return cameras; - }, - - /* - makeSaveCameraButton: function(viewer) { - let gedFrame = this.getView().byId("GED"); - let gcm = this; - - let button = new Button({ - text: "Save Camera Matrix", - width: "50%", - press: function() { - gcm.onSaveCameraMatrix(viewer); - } - }); - - gedFrame.addContent(button); - }, + } - onSaveCameraMatrix: function(viewer) { - let view = this.getView(); - - if (!view || !view.oController) { - sap.m.MessageToast.show("Controller not found"); - console.error("view.oController not available"); - return; - } - - let glViewer = view.oController.editorElement.ca.oController.viewer; - - if (!glViewer || !glViewer.controls) { - sap.m.MessageToast.show("Camera controls not found"); - console.error("viewer.controls not available"); - return; - } - - let controls = glViewer.controls; - - if (!controls) { - sap.m.MessageToast.show("Camera control not available"); - console.error("controls not available"); - return; - } - - let camTransMtx = controls.getCamTransMtx(); - - if (!camTransMtx || camTransMtx.length !== 16) { - sap.m.MessageToast.show("Camera transform not available!"); - return; - } - - let jsonStr = JSON.stringify(camTransMtx); - let mir = 'SetCamTransMtx("' + jsonStr + '")'; - - console.log("Sending MIR:", mir); - - this.mgr.SendMIR(mir, viewer.fCameraId, "ROOT::Experimental::REveCamera"); - - sap.m.MessageToast.show("Camera matrix saved!"); - console.log("Saved camera matrix:", camTransMtx); - - }*/ }); GedController.canEditClass = function(typename) { diff --git a/ui5/eve7/lib/GlViewerRCore.js b/ui5/eve7/lib/GlViewerRCore.js index a473b80d9e7ed..840a3c46e8212 100644 --- a/ui5/eve7/lib/GlViewerRCore.js +++ b/ui5/eve7/lib/GlViewerRCore.js @@ -119,6 +119,10 @@ sap.ui.define([ this.updateViewerAttributes(); this.controller.glViewerInitDone(); + + let eveView = this.controller.mgr.GetElement(this.controller.eveViewerId); + if (eveView.fSyncCam) + this.syncCamTransTimer(); } cleanup() { @@ -460,22 +464,34 @@ sap.ui.define([ this.controls = new RC.REveCameraControls(this.camera, this.canvas.canvasDOM); this.controls.addEventListener('change', this.render.bind(this)); - // send to server when the client finishes camera setting - // use throttle - - // Throttle helper (define once at module level) - function throttle(func, limit) { - let inThrottle; - return function (...args) { - if (!inThrottle) { - func.apply(this, args); - inThrottle = true; - setTimeout(() => inThrottle = false, limit); - } - }; + // sync camera trans to server after camera change have ended + this.controls.addEventListener('end', function() { + glc.controlsChanged = true; + }); + + // camera center marker + let col = new RC.Color(0.5, 0, 0); + const msize = this.RQ_SSAA * 8; // marker size + let sm = new RC.ZSpriteBasicMaterial({ + SpriteMode: RC.SPRITE_SPACE_SCREEN, SpriteSize: [msize, msize], + color: this.ColorBlack, + emissive: col, + diffuse: col.clone().multiplyScalar(0.5) } - this.controls.addEventListener('end', throttle(() => { + ); + let s = new RC.ZSprite(null, sm); + s.instanced = false; + s.visible = false; + this.scene.add(s); + this.centerMarker = s; + + // This will also call render(). + this.positionCameraAndLights(); + } + syncCamTransTimer() { + let glc = this; + if (glc?.controlsChanged === true) { let equal = true; let a = glc.controls.getCamTrans().elements; let eveView = glc.controller.mgr.GetElement(this.controller.eveViewerId); @@ -504,36 +520,14 @@ sap.ui.define([ } // set trans matrix and zoom as array of 17 floats - if (eveView && eveView.fCameraId) { - let sz = glc.camera.isOrthographicCamera === true ? glc.camera.zoom : 1; - let fcall = "SetCamTransMtxStr(\""; - fcall += b.join(",") + ","+ sz + "\")"; - glc.controller.mgr.SendMIR(fcall, eveView.fCameraId, - "ROOT::Experimental::REveCamera"); - } + let sz = glc.camera.isOrthographicCamera === true ? glc.camera.zoom : 1; + let fcall = "SetCamTransMtxStr(\""; + fcall += b.join(",") + "," + sz + "\")"; + glc.controller.mgr.SendMIR(fcall, eveView.fCameraId,"ROOT::Experimental::REveCamera"); + glc.controlsChanged = false; } - - }, 200)); - //}); - - // camera center marker - let col = new RC.Color(0.5, 0, 0); - const msize = this.RQ_SSAA * 8; // marker size - let sm = new RC.ZSpriteBasicMaterial({ - SpriteMode: RC.SPRITE_SPACE_SCREEN, SpriteSize: [msize, msize], - color: this.ColorBlack, - emissive: col, - diffuse: col.clone().multiplyScalar(0.5) } - ); - let s = new RC.ZSprite(null, sm); - s.instanced = false; - s.visible = false; - this.scene.add(s); - this.centerMarker = s; - - // This will also call render(). - this.positionCameraAndLights(); + setTimeout(this.syncCamTransTimer.bind(this), 5000); } recalcSceneBBox() @@ -624,14 +618,14 @@ sap.ui.define([ if (camera.fInitialized) { // Apply camTrans after bbox setup this.controls.setCamTrans(camera.camTrans.slice()); + } - if (this.camera.isOrthographicCamera) { - this.camera.zoom = camera.fZoom; - this.camera.updateProjectionMatrix(); - this.controls.zoomChanged = true; - this.controls.update(); - } + if (this.camera.isOrthographicCamera && camera.fZoom !== 1) { + this.camera.zoom = camera.fZoom; + this.controls.zoomChanged = true; + this.camera.updateProjectionMatrix(); } + this.controls.update(); this.centerMarker.visible = false; From 1372397bf1619f9c47577d3bb71a2fec72e0049f Mon Sep 17 00:00:00 2001 From: alja Date: Wed, 10 Jun 2026 11:02:47 -0700 Subject: [PATCH 8/9] Update file name and hash value of the RenderCore tar file. --- builtins/rendercore/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtins/rendercore/CMakeLists.txt b/builtins/rendercore/CMakeLists.txt index 30efcd02e24ae..c4f6e49585924 100644 --- a/builtins/rendercore/CMakeLists.txt +++ b/builtins/rendercore/CMakeLists.txt @@ -1,7 +1,7 @@ ExternalProject_Add( RENDERCORE - URL ${CMAKE_SOURCE_DIR}/builtins/rendercore/RenderCore-2.0.tar.gz - URL_HASH SHA256=6bdcf70fbdec1f950057ab1df722775c468ad6894f8a364f15f589d58c326667 + URL ${CMAKE_SOURCE_DIR}/builtins/rendercore/RenderCore-2.1.tar.gz + URL_HASH SHA256=fee8250baf8e5e1946170dd91e312d2f4a86f8dedd7f8c4e744c6671587114ab CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" From 2cba116d954100f7efa5ad907293b6cd33731bea Mon Sep 17 00:00:00 2001 From: alja Date: Wed, 10 Jun 2026 13:02:27 -0700 Subject: [PATCH 9/9] Correct comments and prints. --- graf3d/eve7/inc/ROOT/REveCamera.hxx | 2 +- graf3d/eve7/inc/ROOT/REveManager.hxx | 2 +- graf3d/eve7/inc/ROOT/REveViewer.hxx | 1 - graf3d/eve7/src/REveCamera.cxx | 2 -- graf3d/eve7/src/REveManager.cxx | 2 +- graf3d/eve7/src/REveViewer.cxx | 4 ++-- 6 files changed, 5 insertions(+), 8 deletions(-) diff --git a/graf3d/eve7/inc/ROOT/REveCamera.hxx b/graf3d/eve7/inc/ROOT/REveCamera.hxx index 69a87ac7e0e7c..c21174f8523e5 100644 --- a/graf3d/eve7/inc/ROOT/REveCamera.hxx +++ b/graf3d/eve7/inc/ROOT/REveCamera.hxx @@ -92,4 +92,4 @@ public: } // namespace Experimental } // namespace ROOT -#endif \ No newline at end of file +#endif diff --git a/graf3d/eve7/inc/ROOT/REveManager.hxx b/graf3d/eve7/inc/ROOT/REveManager.hxx index 73d41b35737fc..591198c55ecb6 100644 --- a/graf3d/eve7/inc/ROOT/REveManager.hxx +++ b/graf3d/eve7/inc/ROOT/REveManager.hxx @@ -182,7 +182,7 @@ public: REveSceneList *GetScenes() const { return fScenes; } REveViewerList *GetViewers() const { return fViewers; } - REveElement *GetCameras() const { return fCameras; } //yuxiao + REveElement *GetCameras() const { return fCameras; } REveScene *GetGlobalScene() const { return fGlobalScene; } REveScene *GetEventScene() const { return fEventScene; } diff --git a/graf3d/eve7/inc/ROOT/REveViewer.hxx b/graf3d/eve7/inc/ROOT/REveViewer.hxx index 30b24427e6687..58af4d8048548 100644 --- a/graf3d/eve7/inc/ROOT/REveViewer.hxx +++ b/graf3d/eve7/inc/ROOT/REveViewer.hxx @@ -19,7 +19,6 @@ namespace ROOT { namespace Experimental { class REveScene; -// class REveCamera; // yuxiao //////////////////////////////////////////////////////////////////////////////// /// REveViewer diff --git a/graf3d/eve7/src/REveCamera.cxx b/graf3d/eve7/src/REveCamera.cxx index 19ed080c2fc78..7aea0cfcd15fb 100644 --- a/graf3d/eve7/src/REveCamera.cxx +++ b/graf3d/eve7/src/REveCamera.cxx @@ -133,5 +133,3 @@ Int_t REveCamera::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) return ret; } - -ClassImp(REveCamera); \ No newline at end of file diff --git a/graf3d/eve7/src/REveManager.cxx b/graf3d/eve7/src/REveManager.cxx index 0acfcd217d7d3..d48302b51c1a0 100644 --- a/graf3d/eve7/src/REveManager.cxx +++ b/graf3d/eve7/src/REveManager.cxx @@ -999,7 +999,7 @@ void REveManager::ExecuteMIR(std::shared_ptr mir) // std::cout << cmd.str() << std::endl; // gROOT->ProcessLine(cmd.str().c_str()); } catch (std::exception &e) { - std::cout << "caught exception executing " << tag << ": " << e.what(); + R__LOG_ERROR(REveLog()) << "caught exception executing " << tag << ": " << e.what(); } catch (...) { R__LOG_ERROR(REveLog()) << "caught unknown execption."; } diff --git a/graf3d/eve7/src/REveViewer.cxx b/graf3d/eve7/src/REveViewer.cxx index ea55c16ee9bd2..e6f49c00272a0 100644 --- a/graf3d/eve7/src/REveViewer.cxx +++ b/graf3d/eve7/src/REveViewer.cxx @@ -171,7 +171,7 @@ void REveViewer::SetMandatory(bool x) } //////////////////////////////////////////////////////////////////////////////// -/// Set camera reference by ID, yuxiao +/// Set camera reference void REveViewer::SetCamera(::ROOT::Experimental::REveCamera *cam) { @@ -440,4 +440,4 @@ REveCamera *REveViewer::CreateCamera(ECameraType type) } return cam; -} \ No newline at end of file +}