Compare commits
3 Commits
41503c7e44
...
bca63a7fc8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bca63a7fc8 | ||
|
|
1288fc3a41 | ||
|
|
197beba19b |
@@ -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
|
||||
- **Environment**: micromamba `uLib`
|
||||
@@ -14,26 +18,27 @@ This skill provides instructions for building the uLib project using the microma
|
||||
```bash
|
||||
export MAMBA_EXE="/home/share/micromamba/bin/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
|
||||
```
|
||||
|
||||
2. **Full Rebuild (if needed)**:
|
||||
If the `build` directory does not exist or a full reconfiguration is required:
|
||||
```bash
|
||||
conan profile detect --force
|
||||
conan install . --output-folder=build --build=missing
|
||||
cmake --preset conan-release
|
||||
conan install . --output-folder=build/${PRESET} --build=missing --profile=fast
|
||||
cmake --preset ${PRESET}
|
||||
cmake --build build/${PRESET} -j$(nproc)
|
||||
```
|
||||
|
||||
3. **Incremental Build**:
|
||||
Run the build command from the root directory, pointing to the `build` folder and using all cores.
|
||||
```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):
|
||||
```bash
|
||||
cmake --build build --target gcompose -j$(nproc)
|
||||
```
|
||||
cmake --build build/${PRESET} --target gcompose -j$(nproc)
|
||||
```
|
||||
49
.agents/skills/core_system.md
Normal file
49
.agents/skills/core_system.md
Normal 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.
|
||||
39
.agents/skills/geant_simulation.md
Normal file
39
.agents/skills/geant_simulation.md
Normal 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?
|
||||
40
.agents/skills/memory_management.md
Normal file
40
.agents/skills/memory_management.md
Normal 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?
|
||||
34
.agents/skills/signal_bridge.md
Normal file
34
.agents/skills/signal_bridge.md
Normal 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?
|
||||
34
.agents/skills/testing_guide.md
Normal file
34
.agents/skills/testing_guide.md
Normal 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`?
|
||||
52
.agents/skills/vtk_visualization.md
Normal file
52
.agents/skills/vtk_visualization.md
Normal 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?
|
||||
@@ -2,22 +2,22 @@
|
||||
"version": 8,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "andrea",
|
||||
"name": "gcc-make",
|
||||
"displayName": "Custom configure preset",
|
||||
"description": "Sets Ninja generator, build and install directory",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
||||
"description": "Sets Makefile generator, build and install directory",
|
||||
"generator": "Unix Makefiles",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "fast",
|
||||
"displayName": "Fast build: Ninja + clang + ccache",
|
||||
"name": "clang-ninja",
|
||||
"displayName": "Ninja + clang + ccache",
|
||||
"description": "Uses Ninja generator, clang/lld compiler, and ccache",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release",
|
||||
"CMAKE_C_COMPILER": "clang",
|
||||
@@ -29,10 +29,37 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mutom",
|
||||
"description": "",
|
||||
"displayName": "",
|
||||
"inherits": []
|
||||
"name": "clang-make",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -88,11 +88,9 @@ micromamba install -n uLib -y clang clangxx lld -c conda-forge
|
||||
Then build using the `fast` profile:
|
||||
|
||||
```bash
|
||||
conan install . --output-folder=build --build=missing --profile=fast
|
||||
cmake -B build -G Ninja \
|
||||
-DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build -j$(nproc)
|
||||
conan install . --output-folder=build/clang-ninja --build=missing --profile=fast
|
||||
cmake --preset clang-ninja
|
||||
cmake --build build/clang-ninja -j$(nproc)
|
||||
```
|
||||
|
||||
The `fast` profile is defined at `~/.conan2/profiles/fast` and sets:
|
||||
|
||||
217
cmake_output.log
Normal file
217
cmake_output.log
Normal 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
|
||||
@@ -71,10 +71,8 @@ int main(int argc, char** argv) {
|
||||
vtkTess.SetColor(0.2, 0.8, 0.2); // Greenish tess
|
||||
|
||||
// Position tessellated solid away from box using the PhysicalVolume
|
||||
Matrix4f trans = Matrix4f::Identity();
|
||||
trans.block<3,1>(0,3) = Vector3f(5_m, 0, 0);
|
||||
pvTess->SetMatrix(trans);
|
||||
vtkTess.Update();
|
||||
pvTess->SetPosition(Vector3f(5_m, 0, 0));
|
||||
pvTess->Updated();
|
||||
|
||||
std::cout << "..:: Testing vtkSolidsTest ::.." << std::endl;
|
||||
std::cout << "Box and Tessellated solids (placed via PhysicalVolumes) initialized." << std::endl;
|
||||
|
||||
@@ -15,7 +15,7 @@ using namespace uLib;
|
||||
|
||||
int main() {
|
||||
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");
|
||||
|
||||
std::cout << "Creating VTK representation..." << std::endl;
|
||||
|
||||
@@ -65,6 +65,7 @@ ContainerBox::ContainerBox(ContainerBox::Content *content)
|
||||
this->InstallPipe();
|
||||
d->m_UpdateSignal = Object::connect(
|
||||
this->m_model.get(), &uLib::Object::Updated, this, &ContainerBox::Update);
|
||||
this->Update();
|
||||
}
|
||||
|
||||
ContainerBox::~ContainerBox() { delete d; }
|
||||
@@ -81,13 +82,18 @@ void ContainerBox::Update() {
|
||||
|
||||
vtkProp3D *prop = vtkProp3D::SafeDownCast(this->GetProp());
|
||||
if (prop) {
|
||||
// Apply the full volume matrix (TRS * m_LocalT)
|
||||
// Apply the TRS matrix to the assembly
|
||||
vtkNew<vtkMatrix4x4> m;
|
||||
Matrix4fToVtk(this->m_model->GetMatrix(), m);
|
||||
prop->SetUserMatrix(m);
|
||||
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)
|
||||
ConnectionBlock blocker(d->m_UpdateSignal);
|
||||
this->Prop3D::Update();
|
||||
@@ -121,11 +127,11 @@ void ContainerBox::InstallPipe() {
|
||||
Content *c = this->m_model;
|
||||
|
||||
// CUBE
|
||||
|
||||
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
|
||||
vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New();
|
||||
|
||||
vtkSmartPointer<vtkPolyDataMapper> mapper =
|
||||
vtkSmartPointer<vtkPolyDataMapper>::New();
|
||||
cube->SetBounds(0, 1, 0, 1, 0, 1);
|
||||
// cube->SetBounds(-0.5, 0.5, -0.5, 0.5, -0.5, 0.5);
|
||||
mapper->SetInputConnection(cube->GetOutputPort());
|
||||
mapper->Update();
|
||||
d->m_Cube->SetMapper(mapper);
|
||||
|
||||
Reference in New Issue
Block a user