3 Commits

Author SHA1 Message Date
AndreaRigoni
bca63a7fc8 docs: add agent skill guides and update CMake build instructions 2026-04-17 09:36:24 +00:00
AndreaRigoni
1288fc3a41 fix container box representation ( fix it ) 2026-04-17 09:36:10 +00:00
AndreaRigoni
197beba19b updated tests 2026-04-17 09:35:43 +00:00
13 changed files with 534 additions and 35 deletions

View File

@@ -1,6 +1,10 @@
# Skill: Build uLib with Micromamba ---
trigger: always_on
---
This skill provides instructions for building the uLib project using the micromamba environment. # Rule: Build uLib with Micromamba
This rule provides instructions for building the uLib project using the micromamba environment.
## Context ## Context
- **Environment**: micromamba `uLib` - **Environment**: micromamba `uLib`
@@ -14,26 +18,27 @@ This skill provides instructions for building the uLib project using the microma
```bash ```bash
export MAMBA_EXE="/home/share/micromamba/bin/micromamba" export MAMBA_EXE="/home/share/micromamba/bin/micromamba"
export MAMBA_ROOT_PREFIX="/home/share/micromamba" export MAMBA_ROOT_PREFIX="/home/share/micromamba"
eval "$(/home/share/micromamba/bin/micromamba shell hook --shell bash)" export PRESET="clang-make"
eval "$(${MAMBA_EXE} shell hook --shell bash)"
micromamba activate uLib micromamba activate uLib
``` ```
2. **Full Rebuild (if needed)**: 2. **Full Rebuild (if needed)**:
If the `build` directory does not exist or a full reconfiguration is required: If the `build` directory does not exist or a full reconfiguration is required:
```bash ```bash
conan profile detect --force conan install . --output-folder=build/${PRESET} --build=missing --profile=fast
conan install . --output-folder=build --build=missing cmake --preset ${PRESET}
cmake --preset conan-release cmake --build build/${PRESET} -j$(nproc)
``` ```
3. **Incremental Build**: 3. **Incremental Build**:
Run the build command from the root directory, pointing to the `build` folder and using all cores. Run the build command from the root directory, pointing to the `build` folder and using all cores.
```bash ```bash
cmake --build build -j$(nproc) cmake --build build/${PRESET} -j$(nproc)
``` ```
4. **Specific Target Build**: 4. **Specific Target Build - gcompose**:
To build a specific target (e.g., gcompose): To build a specific target (e.g., gcompose):
```bash ```bash
cmake --build build --target gcompose -j$(nproc) cmake --build build/${PRESET} --target gcompose -j$(nproc)
``` ```

View File

@@ -0,0 +1,49 @@
# Skill: Core Object & Property System
This skill defines the patterns for implementing and working with the `uLib` core object model.
## Context
- **Base Class**: `uLib::Object`
- **Property System**: `uLib::Property<T>`
- **Registration**: All objects must register their properties for UI visibility and serialization.
## Implementation Patterns
### 1. Defining an Object
Inherit from `uLib::Object` and use the `ULIB_PROPERTY` macro for members.
```cpp
class MyObject : public uLib::Object {
public:
ULIB_PROPERTY(double, Speed, 0.0)
ULIB_PROPERTY(std::string, Description, "None")
MyObject() {
// Required for property visibility in PropertyEditor
ULIB_ACTIVATE_PROPERTIES(*this)
}
};
```
### 2. Property Access
Properties can be treated like their underlying types or accessed via `.Get()`/`.Set()`.
```cpp
obj.Speed = 10.5; // Triggers Updated() signal
double s = obj.Speed; // Implicit conversion
obj.Speed.SetRange(0.0, 100.0); // Setting metadata
```
### 3. Serialization
Implement `serialize` overloads for different archive types. Use `hrp` (Human Readable Property) to name fields.
```cpp
template <class ArchiveT>
void serialize(ArchiveT &ar, const unsigned int version) {
ar & boost::serialization::make_nvp("InstanceName", this->GetInstanceName());
ar & boost::serialization::make_hrp("Speed", Speed, "m/s");
}
```
## Checklist
- [ ] Inherit from `uLib::Object`.
- [ ] Use `ULIB_PROPERTY` for members that should appear in the GUI.
- [ ] Call `ULIB_ACTIVATE_PROPERTIES` in the constructor.
- [ ] Implement `serialize` if persistence is required.

View File

@@ -0,0 +1,39 @@
# Skill: HEP/Geant Simulation Rules
This skill provides instructions for developing the Geant4 simulation components within `uLib`.
## Context
- **Domain Objects**: `Material`, `Solid`, `LogicalVolume`, `PhysicalVolume`.
- **Integration**: `mutomGeant` library wraps Geant4 classes into `uLib::Object`s.
## Patterns
### 1. Adding a New Solid
New solids must implement `GetPolyhedron()` to support VTK visualization.
```cpp
G4Polyhedron* MySolid::GetPolyhedron() const {
// Return the tessellated representation of the Geant4 solid
return m_G4Solid->GetPolyhedron();
}
```
### 2. Physical Volume Hierarchy
Maintain the relationship between `PhysicalVolume` and its parent `LogicalVolume`.
```cpp
auto* world = new LogicalVolume(worldSolid, worldMat);
auto* detector = new PhysicalVolume(detectorLogic, world, "Detector1");
detector->SetPosition({0, 0, 100}); // Relative to parent
```
### 3. Transformation Synchronization
Use the centralized `TRS` object to manage position and rotation. Synchronization with Geant4's internal stores should be reactive.
- Listen to `Object::Updated` on the `Solid` or `PhysicalVolume`.
- Update the underlying `G4VPhysicalVolume` position/rotation.
## Material Management
Use the `Matter` class to manage Geant4 materials. Ensure materials are registered in the `G4NistManager` or custom material store if needed.
## Checklist
- [ ] Does the solid implement `GetPolyhedron()`?
- [ ] Are parents correctly assigned in `PhysicalVolume` constructors?
- [ ] Is the `TRS` object used for all spatial transformations?

View File

@@ -0,0 +1,40 @@
# Skill: Memory Management & Object Lifecycle
This skill provides guidelines for managing memory safely within the `uLib` framework to prevent memory corruption and leaks.
## Context
- **Ownership**: `ObjectsContext` typically owns its children.
- **Shared Access**: Use `SmartPointer<T>` for objects shared across multiple systems (e.g., Geant4 and VTK).
- **Core Principle**: Avoid manual `delete` on objects managed by the framework.
## Patterns
### 1. Context Ownership
When an object is added to an `ObjectsContext`, it is managed by that context.
```cpp
auto* context = new ObjectsContext();
auto* obj = new MyObject();
context->AddObject(obj);
// Do NOT delete obj; it will be deleted when context is destroyed.
```
### 2. Smart Pointers
Use `SmartPointer<T>` for resources like `Material` or `Solid` that are used by both domain logic and external engines (Geant4).
```cpp
uLib::SmartPointer<Material> mat = new Material("Lead");
solid->SetMaterial(mat); // Shared ownership
```
### 3. Geant4 Object Safety
Geant4 often takes ownership of certain objects (like `G4VPhysicalVolume`). When wrapping these:
- Ensure the wrapper doesn't double-free the Geant4-owned pointer.
- Use `recursion_guard` if synchronizing transformations between `uLib::Object` and Geant4 volumes to prevent signal loops.
## Debugging Memory Issues
- **SIGABRT (invalid pointer)**: Usually caused by deleting an object that was already managed (and deleted) by an `ObjectsContext` or `SmartPointer`.
- **Leaks**: Check if objects were created but never added to a context or wrapped in a `SmartPointer`.
## Checklist
- [ ] Are objects added to an `ObjectsContext`?
- [ ] Is `SmartPointer` used for shared resources?
- [ ] Is there a risk of double-freeing Geant4-managed pointers?

View File

@@ -0,0 +1,34 @@
# Skill: Multi-System Signaling (uLib ↔ Qt)
This skill manages the coexistence of `uLib::Object` signals and Qt's `Q_OBJECT` signaling system.
## Context
- **uLib Signals**: Used for domain logic and data changes (`uLib::Object::connect`).
- **Qt Signals**: Used for UI events, widgets, and application-level control flow (`QObject::connect`).
## Patterns
### 1. Bridging Logic
When a domain change needs to trigger a UI update, use a wrapper or a direct connection if the widget has access to the `uLib::Object`.
```cpp
// In a Qt Widget
uLib::Object::connect(domainObj, &Object::Updated, [this]() {
this->update(); // Trigger Qt repaint
});
```
### 2. Selection Flow
Selection usually starts in the VTK Viewport (Qt) and flows to the domain context.
1. `QViewport` emits `prop3dSelected(Prop3D*)` (Qt signal).
2. `MainPanel` catches it and calls `contextPanel->selectObject(p->GetContent())`.
3. `ContextPanel` updates the tree view and property editors.
### 3. Connection Hygiene
- Use `uLib::Object::connect` for everything involving `uLib::Property` changes.
- Use Qt `connect` for button clicks, menu actions, and window events.
- Be careful with lambda captures; ensure the captured object is still alive or use weak pointers if necessary.
## Checklist
- [ ] Is the correct signaling system being used for the task?
- [ ] Are capture groups in lambdas safe?
- [ ] Does selection flow correctly between the 3D view and the tree view?

View File

@@ -0,0 +1,34 @@
# Skill: Standardized Testing & Validation
This skill provides the standard workflow for testing and validating changes in the `uLib` project.
## Context
- **Tooling**: `ctest` and direct execution of test binaries in the `build/` directory.
- **Location**: Test binaries are typically located in `build/src/*/testing/` or `build/Testing/`.
## Workflow
### 1. Running All Tests
From the root directory:
```bash
ctest --test-dir build/clang-make --output-on-failure
```
### 2. Running Component Tests
Run specific categories of tests:
- **Core**: `./build/clang-make/src/Core/testing/CoreTest`
- **Math**: `./build/clang-make/src/Math/testing/MathVectorTest`
- **Geant**: `./build/clang-make/src/HEP/Geant/testing/GeantApp`
- **VTK**: `./build/clang-make/src/Vtk/testing/vtkViewerTest`
### 3. Debugging a Failing Test
Run the binary directly through `gdb` or `valgrind` (if available):
```bash
gdb --args ./build/clang-make/src/Core/testing/ObjectWrapperTest
```
## Validation Checklist for New Features
- [ ] Does `ctest` pass globally?
- [ ] If changing visualization, does `vtkViewerTest` show the correct results?
- [ ] If changing Geant logic, does `GeantApp` run without memory aborts?
- [ ] Are new tests added to the appropriate `CMakeLists.txt`?

View File

@@ -0,0 +1,52 @@
# Skill: VTK Visualization Pipeline
This skill defines how to bridge domain objects with the VTK 3D visualization layer.
## Context
- **Wrapper**: `Prop3D` (wraps a `vtkProp`).
- **Mapping**: `Viewport` maintains `m_ObjectToProp3D` for synchronization.
- **GUI Integration**: `QViewport` handles Qt events and selection signals.
## Implementation Patterns
### 1. Creating a Prop3D
A `Prop3D` should wrap a domain object and update its visual state when the object changes.
```cpp
class MyProp3D : public Prop3D {
public:
MyProp3D(MyObject* obj) : Prop3D(obj) {
// Connect domain updates to visual refreshes
uLib::Object::connect(obj, &Object::Updated, [this]() { this->SyncFromObject(); });
// Expose properties to the VTK side-panel
ULIB_ACTIVATE_DISPLAY_PROPERTIES(*this)
}
void SyncFromObject() {
// Update VTK actors/mappers from MyObject's properties
}
};
```
### 2. Display Properties
Use `serialize_display` to choose which properties of the domain object or the `Prop3D` itself are visible in the sliding "Display Properties" panel in `gcompose`.
```cpp
void serialize_display(Archive::display_properties_archive &ar) {
ar & boost::serialization::make_hrp("Opacity", m_Opacity);
ar & boost::serialization::make_hrp("Wireframe", m_Wireframe);
}
```
### 3. Transformation Sync (TRS)
Always synchronize the object's `trs` (Translate, Rotate, Scale) with the VTK actor's user transform.
```cpp
void UpdateTransform() {
auto matrix = GetContent()->GetTransform().GetMatrix();
m_Actor->SetUserMatrix(uLib::ToVtkMatrix(matrix));
}
```
## Checklist
- [ ] Does the `Prop3D` connect to the object's `Updated()` signal?
- [ ] Are `ULIB_ACTIVATE_DISPLAY_PROPERTIES` and `serialize_display` implemented?
- [ ] Is the transformation (TRS) correctly mapped to the VTK actor?

View File

@@ -2,22 +2,22 @@
"version": 8, "version": 8,
"configurePresets": [ "configurePresets": [
{ {
"name": "andrea", "name": "gcc-make",
"displayName": "Custom configure preset", "displayName": "Custom configure preset",
"description": "Sets Ninja generator, build and install directory", "description": "Sets Makefile generator, build and install directory",
"generator": "Ninja", "generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/out/build/${presetName}", "binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug", "CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}" "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
} }
}, },
{ {
"name": "fast", "name": "clang-ninja",
"displayName": "Fast build: Ninja + clang + ccache", "displayName": "Ninja + clang + ccache",
"description": "Uses Ninja generator, clang/lld compiler, and ccache", "description": "Uses Ninja generator, clang/lld compiler, and ccache",
"generator": "Ninja", "generator": "Ninja",
"binaryDir": "${sourceDir}/build", "binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "Release", "CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "clang", "CMAKE_C_COMPILER": "clang",
@@ -29,10 +29,37 @@
} }
}, },
{ {
"name": "mutom", "name": "clang-make",
"description": "", "displayName": "Makefile + clang + ccache",
"displayName": "", "description": "Uses Makefile generator, clang/lld compiler, and ccache",
"inherits": [] "generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_EXE_LINKER_FLAGS": "-fuse-ld=lld",
"CMAKE_SHARED_LINKER_FLAGS": "-fuse-ld=lld",
"CMAKE_CXX_COMPILER_LAUNCHER": "ccache",
"CMAKE_C_COMPILER_LAUNCHER": "ccache"
}
},
{
"name": "cuda",
"displayName": "Makefile + clang + ccache",
"description": "Uses Makefile generator, clang/lld compiler, and ccache",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_EXE_LINKER_FLAGS": "-fuse-ld=lld",
"CMAKE_SHARED_LINKER_FLAGS": "-fuse-ld=lld",
"CMAKE_CXX_COMPILER_LAUNCHER": "ccache",
"CMAKE_C_COMPILER_LAUNCHER": "ccache",
"USE_CUDA": "ON"
}
} }
] ]
} }

View File

@@ -88,11 +88,9 @@ micromamba install -n uLib -y clang clangxx lld -c conda-forge
Then build using the `fast` profile: Then build using the `fast` profile:
```bash ```bash
conan install . --output-folder=build --build=missing --profile=fast conan install . --output-folder=build/clang-ninja --build=missing --profile=fast
cmake -B build -G Ninja \ cmake --preset clang-ninja
-DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake \ cmake --build build/clang-ninja -j$(nproc)
-DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
``` ```
The `fast` profile is defined at `~/.conan2/profiles/fast` and sets: The `fast` profile is defined at `~/.conan2/profiles/fast` and sets:

217
cmake_output.log Normal file
View File

@@ -0,0 +1,217 @@
-- Using Conan toolchain: /home/rigoni/devel/cmt/uLib/build/clang-make/conan_toolchain.cmake
-- Conan toolchain: Defining architecture flag: -m64
-- Conan toolchain: Defining libcxx as C++ flags: -stdlib=libstdc++
-- Conan toolchain: C++ Standard 17 with extensions ON
-- The C compiler identification is Clang 21.1.0
-- The CXX compiler identification is Clang 21.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/share/micromamba/envs/uLib/bin/clang - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/share/micromamba/envs/uLib/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Project name = uLib
-- Package name = mutom-0.7
-- Package version = 0.7
-- Module path = /home/rigoni/devel/cmt/uLib/CMake;/home/rigoni/devel/cmt/uLib/build/clang-make
-- CMAKE_PREFIX_PATH is /home/rigoni/devel/cmt/uLib/build/clang-make
-- Conan: Component target declared 'hdf5::hdf5'
-- Conan: Component target declared 'hdf5::hdf5_cpp'
-- Conan: Component target declared 'hdf5::hdf5_hl'
-- Conan: Component target declared 'hdf5::hdf5_hl_cpp'
-- Conan: Target declared 'HDF5::HDF5'
-- Conan: Target declared 'ZLIB::ZLIB'
-- Conan: Including build module from '/home/rigoni/.conan2/p/b/hdf509daaae89dd98/p/lib/cmake/conan-official-hdf5-variables.cmake'
-- Conan: Component target declared 'Boost::diagnostic_definitions'
-- Conan: Component target declared 'Boost::disable_autolinking'
-- Conan: Component target declared 'Boost::dynamic_linking'
-- Conan: Component target declared 'Boost::headers'
-- Conan: Component target declared 'Boost::boost'
-- Conan: Component target declared 'boost::_libboost'
-- Conan: Component target declared 'Boost::atomic'
-- Conan: Component target declared 'Boost::charconv'
-- Conan: Component target declared 'Boost::container'
-- Conan: Component target declared 'Boost::context'
-- Conan: Component target declared 'Boost::date_time'
-- Conan: Component target declared 'Boost::exception'
-- Conan: Component target declared 'Boost::math'
-- Conan: Component target declared 'Boost::program_options'
-- Conan: Component target declared 'Boost::regex'
-- Conan: Component target declared 'Boost::serialization'
-- Conan: Component target declared 'Boost::stacktrace'
-- Conan: Component target declared 'Boost::system'
-- Conan: Component target declared 'Boost::timer'
-- Conan: Component target declared 'Boost::chrono'
-- Conan: Component target declared 'Boost::coroutine'
-- Conan: Component target declared 'Boost::filesystem'
-- Conan: Component target declared 'Boost::json'
-- Conan: Component target declared 'Boost::math_c99'
-- Conan: Component target declared 'Boost::math_c99f'
-- Conan: Component target declared 'Boost::math_c99l'
-- Conan: Component target declared 'Boost::math_tr1'
-- Conan: Component target declared 'Boost::math_tr1f'
-- Conan: Component target declared 'Boost::math_tr1l'
-- Conan: Component target declared 'Boost::random'
-- Conan: Component target declared 'Boost::stacktrace_addr2line'
-- Conan: Component target declared 'Boost::stacktrace_backtrace'
-- Conan: Component target declared 'Boost::stacktrace_basic'
-- Conan: Component target declared 'Boost::stacktrace_from_exception'
-- Conan: Component target declared 'Boost::stacktrace_noop'
-- Conan: Component target declared 'Boost::test'
-- Conan: Component target declared 'Boost::url'
-- Conan: Component target declared 'Boost::wserialization'
-- Conan: Component target declared 'Boost::fiber'
-- Conan: Component target declared 'Boost::graph'
-- Conan: Component target declared 'Boost::iostreams'
-- Conan: Component target declared 'Boost::nowide'
-- Conan: Component target declared 'Boost::prg_exec_monitor'
-- Conan: Component target declared 'Boost::process'
-- Conan: Component target declared 'Boost::test_exec_monitor'
-- Conan: Component target declared 'Boost::thread'
-- Conan: Component target declared 'Boost::wave'
-- Conan: Component target declared 'Boost::contract'
-- Conan: Component target declared 'Boost::fiber_numa'
-- Conan: Component target declared 'Boost::locale'
-- Conan: Component target declared 'Boost::log'
-- Conan: Component target declared 'Boost::type_erasure'
-- Conan: Component target declared 'Boost::unit_test_framework'
-- Conan: Component target declared 'Boost::log_setup'
-- Conan: Target declared 'boost::boost'
-- Conan: Target declared 'BZip2::BZip2'
-- Conan: Including build module from '/home/rigoni/.conan2/p/b/bzip2b5764e08a4f7d/p/lib/cmake/conan-official-bzip2-variables.cmake'
-- Conan: Target declared 'libbacktrace::libbacktrace'
-- Found OpenMP_C: -fopenmp=libomp (found version "5.1")
-- Found OpenMP_CXX: -fopenmp=libomp (found version "5.1")
-- Found OpenMP: TRUE (found version "5.1")
-- Found nlohmann_json: /home/share/micromamba/envs/uLib/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake (found suitable version "3.12.0", minimum required is "3.12.0")
-- Found Vdt: /home/share/micromamba/envs/uLib/include (found version "0.4")
-- Warning: Standard CMAKE_CXX_STANDARD value defined in conan_toolchain.cmake to 17 has been modified to 20 by /home/share/micromamba/envs/uLib/cmake/ROOTUseFile.cmake
-- Found Python3: /home/share/micromamba/envs/uLib/bin/python3.12 (found suitable version "3.12.13", minimum required is "3.12") found components: Interpreter Development.Module Development.Embed
-- Found nlohmann_json: /home/share/micromamba/envs/uLib/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake (found version "3.12.0")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Found OpenGL: /home/share/micromamba/envs/uLib/lib/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)
-- Found X11: /home/share/micromamba/envs/uLib/include
-- Looking for XOpenDisplay in /home/share/micromamba/envs/uLib/lib/libX11.so;/home/share/micromamba/envs/uLib/lib/libXext.so
-- Looking for XOpenDisplay in /home/share/micromamba/envs/uLib/lib/libX11.so;/home/share/micromamba/envs/uLib/lib/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Performing Test Iconv_IS_BUILT_IN
-- Performing Test Iconv_IS_BUILT_IN - Failed
-- Found Iconv: /home/share/micromamba/envs/uLib/lib/libiconv.so (found version "1.18")
-- Found ICU: /home/share/micromamba/envs/uLib/include (found version "75.1") found components: data i18n uc
-- Looking for lzma_auto_decoder in /home/share/micromamba/envs/uLib/lib/liblzma.so
-- Looking for lzma_auto_decoder in /home/share/micromamba/envs/uLib/lib/liblzma.so - found
-- Looking for lzma_easy_encoder in /home/share/micromamba/envs/uLib/lib/liblzma.so
-- Looking for lzma_easy_encoder in /home/share/micromamba/envs/uLib/lib/liblzma.so - found
-- Looking for lzma_lzma_preset in /home/share/micromamba/envs/uLib/lib/liblzma.so
-- Looking for lzma_lzma_preset in /home/share/micromamba/envs/uLib/lib/liblzma.so - found
-- Found LibLZMA: /home/share/micromamba/envs/uLib/lib/liblzma.so (found version "5.8.2")
-- Conan: Including build module from '/home/rigoni/.conan2/p/b/hdf509daaae89dd98/p/lib/cmake/conan-official-hdf5-variables.cmake'
-- Found utf8cpp: /home/share/micromamba/envs/uLib/include
-- Found THEORA: /home/share/micromamba/envs/uLib/lib/libtheora.so
-- Found OGG: /home/share/micromamba/envs/uLib/lib/libogg.so
-- Found NetCDF: /home/share/micromamba/envs/uLib/include (found version "4.9.2")
-- Found JsonCpp: /home/share/micromamba/envs/uLib/lib/libjsoncpp.so (found suitable version "1.9.6", minimum required is "0.7.0")
-- Found PNG: /home/share/micromamba/envs/uLib/lib/libpng.so (found version "1.6.56")
-- Found GL2PS: /home/share/micromamba/envs/uLib/lib/libgl2ps.so (found suitable version "1.4.2", minimum required is "1.4.2")
-- Found LibPROJ: /home/share/micromamba/envs/uLib/lib/libproj.so (found version "9.6.2")
-- Found SQLite3: /home/share/micromamba/envs/uLib/lib/libsqlite3.so (found version "3.52.0")
-- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)
-- Found LZ4: /home/share/micromamba/envs/uLib/lib/liblz4.so (found version "1.10.0")
-- Found LZMA: /home/share/micromamba/envs/uLib/lib/liblzma.so (found version "5.8.2")
-- Found JPEG: /home/share/micromamba/envs/uLib/lib/libjpeg.so (found version "80")
-- Found TIFF: /home/share/micromamba/envs/uLib/lib/libtiff.so (found version "4.7.1")
-- Could NOT find freetype (missing: freetype_DIR)
-- Found Freetype: /home/share/micromamba/envs/uLib/lib/libfreetype.so (found version "2.14.3")
-- Performing Test HAS_FLTO_THIN
-- Performing Test HAS_FLTO_THIN - Failed
-- Performing Test HAS_FLTO_AUTO
-- Performing Test HAS_FLTO_AUTO - Failed
-- Performing Test HAS_FLTO
-- Performing Test HAS_FLTO - Failed
-- Found pybind11: /home/share/micromamba/envs/uLib/include (found version "3.0.3")
-- Could NOT find freetype (missing: freetype_DIR)
CMake Deprecation Warning at /home/share/micromamba/envs/uLib/lib/cmake/Geant4/PTL/PTLConfig.cmake:30 (cmake_minimum_required):
Compatibility with CMake < 3.10 will be removed from a future version of
CMake.
Update the VERSION argument <min> value. Or, use the <min>...<max> syntax
to tell CMake that the project requires at least <min> but has been updated
to work with policies introduced by <max> or earlier.
Call Stack (most recent call first):
/home/share/micromamba/envs/uLib/share/cmake-4.2/Modules/CMakeFindDependencyMacro.cmake:93 (find_package)
/home/share/micromamba/envs/uLib/share/cmake-4.2/Modules/CMakeFindDependencyMacro.cmake:125 (__find_dependency_common)
/home/share/micromamba/envs/uLib/lib/cmake/Geant4/Geant4Config.cmake:286 (find_dependency)
CMakeLists.txt:194 (find_package)
-- Found XercesC: /home/share/micromamba/envs/uLib/lib/libxerces-c.so (found suitable version "3.2.5", minimum required is "3.2.5")
-- Found Freetype: /home/share/micromamba/envs/uLib/lib/libfreetype.so (found suitable version "2.14.3", minimum required is "2.12.1")
-- Found Geant4: /home/share/micromamba/envs/uLib/lib/cmake/Geant4/Geant4Config.cmake (found version "11.2.2")
-- Geant4 libs: Geant4::G4Tree;Geant4::G4FR;Geant4::G4GMocren;Geant4::G4visHepRep;Geant4::G4RayTracer;Geant4::G4VRML;Geant4::G4ToolsSG;Geant4::G4vis_management;Geant4::G4modeling;Geant4::G4interfaces;Geant4::G4mctruth;Geant4::G4geomtext;Geant4::G4gdml;Geant4::G4analysis;Geant4::G4error_propagation;Geant4::G4readout;Geant4::G4physicslists;Geant4::G4run;Geant4::G4event;Geant4::G4tracking;Geant4::G4parmodels;Geant4::G4processes;Geant4::G4digits_hits;Geant4::G4track;Geant4::G4particles;Geant4::G4geometry;Geant4::G4materials;Geant4::G4graphics_reps;Geant4::G4intercoms;Geant4::G4global;Geant4::G4tools;Geant4::G4ptl
-- Looking for include file inittypes.h
-- Looking for include file inittypes.h - not found
-- Looking for include file stdbool.h
-- Looking for include file stdbool.h - not found
-- Looking for include file stdint.h
-- Looking for include file stdint.h - not found
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - not found
-- Looking for include file dlfcn.h
-- Looking for include file dlfcn.h - not found
-- Looking for include file malloc.h
-- Looking for include file malloc.h - not found
-- Looking for malloc
-- Looking for malloc - not found
-- Looking for include file memory.h
-- Looking for include file memory.h - not found
-- Looking for include file math.h
-- Looking for include file math.h - not found
-- Looking for fsetround
-- Looking for fsetround - not found
-- Looking for floor
-- Looking for floor - not found
-- Looking for pow
-- Looking for pow - not found
-- Looking for sqrt
-- Looking for sqrt - not found
-- Looking for strdup
-- Looking for strdup - not found
-- Looking for strstr
-- Looking for strstr - not found
-- Looking for include file strings.h
-- Looking for include file strings.h - not found
-- Looking for include file string.h
-- Looking for include file string.h - not found
-- Looking for include file sys/stat.h
-- Looking for include file sys/stat.h - not found
-- Looking for include file sys/types.h
-- Looking for include file sys/types.h - not found
-- Looking for include file unistd.h
-- Looking for include file unistd.h - not found
-- Looking for include file assert.h
-- Looking for include file assert.h - not found
-- Geant4 found: 11.2.2
-- Found Python3: /home/share/micromamba/envs/uLib/bin/python3.12 (found version "3.12.13") found components: Interpreter
-- Configuring done (9.2s)
-- Generating done (1.6s)
-- Build files have been written to: /home/rigoni/devel/cmt/uLib/build/clang-make

View File

@@ -71,10 +71,8 @@ int main(int argc, char** argv) {
vtkTess.SetColor(0.2, 0.8, 0.2); // Greenish tess vtkTess.SetColor(0.2, 0.8, 0.2); // Greenish tess
// Position tessellated solid away from box using the PhysicalVolume // Position tessellated solid away from box using the PhysicalVolume
Matrix4f trans = Matrix4f::Identity(); pvTess->SetPosition(Vector3f(5_m, 0, 0));
trans.block<3,1>(0,3) = Vector3f(5_m, 0, 0); pvTess->Updated();
pvTess->SetMatrix(trans);
vtkTess.Update();
std::cout << "..:: Testing vtkSolidsTest ::.." << std::endl; std::cout << "..:: Testing vtkSolidsTest ::.." << std::endl;
std::cout << "Box and Tessellated solids (placed via PhysicalVolumes) initialized." << std::endl; std::cout << "Box and Tessellated solids (placed via PhysicalVolumes) initialized." << std::endl;

View File

@@ -15,7 +15,7 @@ using namespace uLib;
int main() { int main() {
std::cout << "Creating ContainerBox..." << std::endl; std::cout << "Creating ContainerBox..." << std::endl;
ContainerBox* box = new ContainerBox(Vector3f(1.0, 1.0, 1.0)); // 1x1x1 unit box ContainerBox* box = new ContainerBox(Vector3f(1.0_m , 0.5_m, 1.0_m)); // 1x1x1 unit box
box->SetInstanceName("MyTestBox"); box->SetInstanceName("MyTestBox");
std::cout << "Creating VTK representation..." << std::endl; std::cout << "Creating VTK representation..." << std::endl;

View File

@@ -65,6 +65,7 @@ ContainerBox::ContainerBox(ContainerBox::Content *content)
this->InstallPipe(); this->InstallPipe();
d->m_UpdateSignal = Object::connect( d->m_UpdateSignal = Object::connect(
this->m_model.get(), &uLib::Object::Updated, this, &ContainerBox::Update); this->m_model.get(), &uLib::Object::Updated, this, &ContainerBox::Update);
this->Update();
} }
ContainerBox::~ContainerBox() { delete d; } ContainerBox::~ContainerBox() { delete d; }
@@ -81,13 +82,18 @@ void ContainerBox::Update() {
vtkProp3D *prop = vtkProp3D::SafeDownCast(this->GetProp()); vtkProp3D *prop = vtkProp3D::SafeDownCast(this->GetProp());
if (prop) { if (prop) {
// Apply the full volume matrix (TRS * m_LocalT) // Apply the TRS matrix to the assembly
vtkNew<vtkMatrix4x4> m; vtkNew<vtkMatrix4x4> m;
Matrix4fToVtk(this->m_model->GetMatrix(), m); Matrix4fToVtk(this->m_model->GetMatrix(), m);
prop->SetUserMatrix(m); prop->SetUserMatrix(m);
prop->Modified(); prop->Modified();
} }
// Apply the local shape transformation (Size/Origin) to the cube actor
vtkNew<vtkMatrix4x4> localM;
Matrix4fToVtk(this->m_model->GetLocalMatrix(), localM);
d->m_Cube->SetUserMatrix(localM);
// Delegate rest of update (appearance, render, etc) // Delegate rest of update (appearance, render, etc)
ConnectionBlock blocker(d->m_UpdateSignal); ConnectionBlock blocker(d->m_UpdateSignal);
this->Prop3D::Update(); this->Prop3D::Update();
@@ -121,11 +127,11 @@ void ContainerBox::InstallPipe() {
Content *c = this->m_model; Content *c = this->m_model;
// CUBE // CUBE
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New(); vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New();
vtkSmartPointer<vtkPolyDataMapper> mapper = // cube->SetBounds(-0.5, 0.5, -0.5, 0.5, -0.5, 0.5);
vtkSmartPointer<vtkPolyDataMapper>::New();
cube->SetBounds(0, 1, 0, 1, 0, 1);
mapper->SetInputConnection(cube->GetOutputPort()); mapper->SetInputConnection(cube->GetOutputPort());
mapper->Update(); mapper->Update();
d->m_Cube->SetMapper(mapper); d->m_Cube->SetMapper(mapper);