mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-29 19:51:00 +00:00
8ab5c31e75
The GL backend is gone (task #53). The wgpu/non-wgpu folder split and the Wgpu* class prefix were both disambiguation artefacts from the overlap period — now pure dead weight. ## Folder + library merge * `src/ifcviewer-wgpu/` → folded into `src/ifcviewer/` (git mv tracks every file as a rename so blame/log history survives). * `src/ifcviewer-wgpu-minimal/` → `src/ifcviewer-minimal/` (the exe was already named `IfcViewerMinimal`; this just brings the folder + CMake target name into line). * `src/ifcviewer-wgpu/tests/test_wgpu_{selection,visibility}.cpp` → `src/ifcviewer/tests/test_{selection,visibility}.cpp`, folded into the existing `add_ifcviewer_unit_test(...)` helper. * The `IfcViewerWgpu` static library is dissolved — its sources become part of the unified `IfcViewer` static library, which now bundles scene/loader + renderer in one target. The pre-merge circular dependency (IfcViewer linking IfcViewerWgpu just to get the ViewportWindow.h include path that SceneLoader.h needs) goes away. * The wgpu-native FetchContent block, the Cocoa/QuartzCore link on Apple, the OBJCXX-enabled `.mm` source, and the wgpu-native runtime install all move into `src/ifcviewer/CMakeLists.txt` unchanged. ## Type renames (Wgpu prefix dropped from every Wgpu* identifier) WgpuAreaMeasurement → AreaMeasurement WgpuBufferPool → BufferPool WgpuLengthMeasurement → LengthMeasurement WgpuMetalSurface → MetalSurface WgpuModelGpuData → ModelGpuData WgpuOverlayFrame → OverlayFrame WgpuOverlayRenderer → OverlayRenderer WgpuSectionPlane → SectionPlane WgpuSelectionState → SelectionState WgpuStreamingLoader → StreamingLoader WgpuStreamingThread → StreamingThread WgpuViewportWindow → ViewportWindow WgpuVisibilityState → VisibilityState CMake target IfcViewerWgpuMinimal → IfcViewerMinimal (exe name was already this since wgpu shipped as default). Deliberately kept: `onWgpuLog` (wgpu-native log callback — names a binding to an external API, not one of *our* types), and the WGPU* enum/struct prefixes from wgpu-native's own headers. `WgpuMemProbe` lives in the separate `src/wgpu-mem-probe/` standalone diagnostic project and isn't touched. ## Include-path updates Every `#include "../ifcviewer-wgpu/Wgpu<X>.h"` → `"../ifcviewer/<X>.h"`, every in-directory `#include "Wgpu<X>.h"` → `"<X>.h"`. Includes from sibling subdirectories (modules/, etc.) are updated to point at `../../../ifcviewer/` instead of `../../../ifcviewer-wgpu/`. ## cmake/CMakeLists.txt simplification The redundant `add_subdirectory(ifcviewer-wgpu)` blocks (one inside the BUILD_BONSAIVIEWER fan-in, one in the BONSAIVIEWER-less standalone block) collapse into a single unconditional `add_subdirectory(../src/ifcviewer ifcviewer)`. The standalone block keeps only `wgpu-mem-probe` (the diagnostic tool, unrelated to the viewer lib). ## Verification * Full build green: `IfcViewer` static lib, `IfcViewerMinimal` exe, `BonsaiViewer` exe, all four pre-existing ifcviewer unit tests, and the two new-location tests (`test_selection`, `test_visibility`). * No stray `Wgpu<X>` identifier remains across `src/ifcviewer/`, `src/bonsaiviewer/`, `src/ifcviewer-minimal/` (verified by grep). * Renames tracked by git as `R` entries — `git log --follow` on ViewportWindow.cpp etc. continues to show history through the move. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
90 lines
4.4 KiB
CMake
90 lines
4.4 KiB
CMake
################################################################################
|
|
# #
|
|
# This file is part of IfcOpenShell. #
|
|
# #
|
|
# IfcOpenShell is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the Lesser GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3.0 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# IfcOpenShell is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# Lesser GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the Lesser GNU General Public License #
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
|
|
# #
|
|
################################################################################
|
|
|
|
# Tier-1 unit tests: pure-logic modules that need neither Qt nor an OpenGL
|
|
# context. Each test binary compiles the production source(s) under test
|
|
# directly (rather than linking the IfcViewer library) so the binaries stay
|
|
# small and don't pull Qt6, OpenCASCADE, IfcGeom, etc. into the test build.
|
|
|
|
set(IFCVIEWER_SRC ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
|
|
|
function(add_ifcviewer_unit_test name)
|
|
cmake_parse_arguments(T "" "" "SOURCES;LIBS" ${ARGN})
|
|
add_executable(${name} ${name}.cpp ${T_SOURCES})
|
|
target_include_directories(${name} PRIVATE ${IFCVIEWER_SRC})
|
|
target_link_libraries(${name} PRIVATE Catch2::Catch2WithMain ${T_LIBS})
|
|
catch_discover_tests(${name})
|
|
endfunction()
|
|
|
|
if(WITH_MESH_OPTIMIZER)
|
|
add_ifcviewer_unit_test(test_lod_builder
|
|
SOURCES
|
|
${IFCVIEWER_SRC}/LodBuilder.cpp
|
|
LIBS meshoptimizer::meshoptimizer
|
|
)
|
|
# LodBuilder.cpp's body is guarded behind WITH_MESH_OPTIMIZER; without
|
|
# the define the test compiles the no-op stub and the buildLods
|
|
# assertions fail. The IfcViewer library propagates this define via
|
|
# target_compile_definitions but the test compiles LodBuilder.cpp
|
|
# standalone, so the test target has to set it explicitly.
|
|
target_compile_definitions(test_lod_builder PRIVATE -DWITH_MESH_OPTIMIZER)
|
|
endif()
|
|
|
|
add_ifcviewer_unit_test(test_sidecar_cache
|
|
SOURCES ${IFCVIEWER_SRC}/SidecarCache.cpp
|
|
)
|
|
|
|
add_ifcviewer_unit_test(test_instanced_geometry)
|
|
|
|
# Header-only state-machine tests for the renderer subsystems (selection,
|
|
# visibility). Subjects are inline in their .h files, so no SOURCES needed.
|
|
add_ifcviewer_unit_test(test_selection)
|
|
add_ifcviewer_unit_test(test_visibility)
|
|
|
|
# Federation is Qt-derived (QObject + signals). It has to pull Qt6 in
|
|
# directly and enable AUTOMOC for the Q_OBJECT moc-generation.
|
|
find_package(Qt${QT_VERSION} COMPONENTS Core Gui Test REQUIRED PATHS ${QT_DIR})
|
|
|
|
find_package(Eigen3 REQUIRED)
|
|
|
|
add_executable(test_federation
|
|
test_federation.cpp
|
|
${IFCVIEWER_SRC}/Federation.cpp
|
|
# Federation pulls in Unit::convert for federationUnitToMeters and
|
|
# Geolocation helpers (helmertMetersFromParameters, getWcs, getMapUnit)
|
|
# for computeModelGeoref; compile both directly so the test doesn't
|
|
# have to link the whole IfcViewer library (which would drag in
|
|
# Qt6::OpenGL, OpenCASCADE, etc.). Placement.cpp provides
|
|
# getAxis2Placement, called from Geolocation::getWcs.
|
|
${IFCVIEWER_SRC}/Unit.cpp
|
|
${IFCVIEWER_SRC}/Geolocation.cpp
|
|
${IFCVIEWER_SRC}/Placement.cpp
|
|
)
|
|
set_target_properties(test_federation PROPERTIES AUTOMOC ON)
|
|
target_include_directories(test_federation PRIVATE ${IFCVIEWER_SRC})
|
|
target_link_libraries(test_federation PRIVATE
|
|
Catch2::Catch2WithMain
|
|
Qt${QT_VERSION}::Core
|
|
Qt${QT_VERSION}::Gui # Federation::HomeView uses QVector3D from QtGui
|
|
Qt${QT_VERSION}::Test # QSignalSpy
|
|
Eigen3::Eigen # Federation.h: composed matrices use Eigen
|
|
IfcParse # Unit.cpp uses express::Base / file APIs
|
|
)
|
|
catch_discover_tests(test_federation)
|