From 04b3fcb479f5aaae06d18b315a8bdc8c298f4eae Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 5 Aug 2025 11:28:41 +0200 Subject: removed clustering --- include/glamac_view.h | 175 -------------------------------------------------- 1 file changed, 175 deletions(-) delete mode 100644 include/glamac_view.h (limited to 'include/glamac_view.h') diff --git a/include/glamac_view.h b/include/glamac_view.h deleted file mode 100644 index 6ca4b9b..0000000 --- a/include/glamac_view.h +++ /dev/null @@ -1,175 +0,0 @@ -/** - * glamac_view.h - header file from glamac_view.c. - */ -#ifndef GLAMAC_VIEW_H -#define GLAMAC_VIEW_H - -#include -#include "glamacdef.h" - -// Constants for view -#define MIN_PADDING 20 // Minimum padding in pixels -#define MAX_PADDING_PERCENT 0.04f // Maximum padding as percentage of window size -#define PAN_STEP 0.05f // Step size for keyboard panning -#define ZOOM_FACTOR 1.2f // Zoom factor for zoom operations -#define MIN_ZOOM 0.5f // Minimum zoom level -#define MAX_ZOOM 10.0f // Maximum zoom level - -// Glass label positioning constants (adjustable parameters) -#define LABEL_OFFSET_X 12 // Horizontal offset from glass point (pixels) -#define LABEL_OFFSET_Y -8 // Vertical offset from glass point (pixels) -#define LABEL_SIZE_SCALE 1.4f // Scale factor for glass name labels - -// Tight clustering parameters -#define MAX_CLUSTER_SIZE 8 // Maximum glasses per cluster -#define DEFAULT_TIGHT_CLUSTER_ND_THRESHOLD 0.0005f // Default nd difference threshold -#define DEFAULT_TIGHT_CLUSTER_VD_THRESHOLD 0.15f // Default vd difference threshold - -// Loose clustering parameters (zoom-dependent) -#define DEFAULT_LOOSE_CLUSTER_ND_THRESHOLD 0.3f // Default nd base threshold -#define DEFAULT_LOOSE_CLUSTER_VD_THRESHOLD 0.55f // Default vd base threshold -#define DEFAULT_LOOSE_CLUSTER_ND_FRACTION 4.9f // Default nd fraction of visible range -#define DEFAULT_LOOSE_CLUSTER_VD_FRACTION 0.9f // Default vd fraction of visible range - -// Global tight cluster thresholds (adjustable parameters) -extern f32 g_tight_cluster_nd_threshold; -extern f32 g_tight_cluster_vd_threshold; - -// Global loose cluster parameters (adjustable parameters) -extern f32 g_loose_cluster_nd_threshold; // Base threshold -extern f32 g_loose_cluster_vd_threshold; // Base threshold -extern f32 g_loose_cluster_nd_fraction; // Zoom scaling fraction -extern f32 g_loose_cluster_vd_fraction; // Zoom scaling fraction - -// Tight cluster structure -typedef struct { - i32 glassIndices[MAX_CLUSTER_SIZE]; // Indices of glasses in this cluster - i32 count; // Number of glasses in cluster - i32 representativeIndex; // Index of glass with shortest name - f32 avgAbbeNumber; // Average position for reference - f32 avgRefractiveIndex; -} TightCluster; - -// Loose cluster structure (zoom-dependent) -typedef struct { - i32 glassIndices[MAX_CLUSTER_SIZE]; // Indices of glasses in this cluster - i32 count; // Number of glasses in cluster - i32 representativeIndex; // Index of glass with shortest name - f32 avgAbbeNumber; // Average position for reference - f32 avgRefractiveIndex; -} LooseCluster; - - -// State for zooming and panning -typedef struct { - f32 zoomLevel; - f32 offsetX; - f32 offsetY; - i32 windowWidth; - i32 windowHeight; - f32 minAbbe; - f32 maxAbbe; - f32 minRI; - f32 maxRI; - b32 showHelp; // Flag to show/hide help window - b32 gKeyPressed; // Flag to track if 'g' was pressed - u32 gKeyTime; // Time when 'g' was pressed for sequence timing - i32 selectedGlass; // Index of selected glass (-1 if none) - i32 selectedCluster; // Index of selected tight cluster (-1 if none) - - // Tight cluster data (per catalog) - TightCluster* tightClusters; // Array of tight clusters for current catalog - i32 tightClusterCount; // Number of tight clusters - - // Loose cluster data (per catalog, zoom-dependent) - LooseCluster* looseClusters; // Array of loose clusters for current catalog - i32 looseClusterCount; // Number of loose clusters - - // Label recalculation tracking - f32 lastZoomLevel; // Last zoom level for which labels were calculated - i32 lastWindowWidth; // Last window width for labels - i32 lastWindowHeight; // Last window height for labels - f32 lastOffsetX; // Last X offset for labels - f32 lastOffsetY; // Last Y offset for labels -} ViewState; - -// Initialize a view state with default values -void init_view_state(ViewState* view, i32 windowWidth, i32 windowHeight); - -// Refresh view state data range when catalog changes -void refresh_view_data_range(ViewState* view); - -// Helper function to calculate adaptive padding -static inline i32 get_adaptive_padding(const ViewState* view) { - i32 padding = (i32)(view->windowWidth * MAX_PADDING_PERCENT); - return padding > MIN_PADDING ? padding : MIN_PADDING; -} - -// Convert glass data to screen coordinates with zoom and offset -static inline void data_to_screen_coords(f32 abbeNumber, f32 refractiveIndex, - const ViewState* view, i32 *x, i32 *y) { - const i32 padding = get_adaptive_padding(view); - - // Apply zoom and offset transformation - // FLIPPED: Use 1.0f - normalized to flip the Abbe number axis - f32 normalizedX = 1.0f - (abbeNumber - view->minAbbe) / (view->maxAbbe - view->minAbbe); - f32 normalizedY = (refractiveIndex - view->minRI) / (view->maxRI - view->minRI); - - // Transform with zoom and offset - normalizedX = (normalizedX - 0.5f) * view->zoomLevel + 0.5f + view->offsetX; - normalizedY = (normalizedY - 0.5f) * view->zoomLevel + 0.5f + view->offsetY; - - // Convert to screen coordinates - *x = padding + (i32)(normalizedX * (view->windowWidth - 2 * padding)); - *y = view->windowHeight - padding - (i32)(normalizedY * (view->windowHeight - 2 * padding)); -} - -// Convert screen coordinates to data values -static inline void screen_to_data_coords(i32 x, i32 y, const ViewState* view, - f32 *abbeNumber, f32 *refractiveIndex) { - const i32 padding = get_adaptive_padding(view); - - // Convert to normalized coordinates - f32 normalizedX = (f32)(x - padding) / (view->windowWidth - 2 * padding); - f32 normalizedY = (f32)(view->windowHeight - y - padding) / (view->windowHeight - 2 * padding); - - // Reverse transform with zoom and offset - normalizedX = (normalizedX - view->offsetX - 0.5f) / view->zoomLevel + 0.5f; - normalizedY = (normalizedY - view->offsetY - 0.5f) / view->zoomLevel + 0.5f; - - // Convert to data values - FLIPPED axis logic for Abbe - *abbeNumber = view->maxAbbe - normalizedX * (view->maxAbbe - view->minAbbe); - *refractiveIndex = view->minRI + normalizedY * (view->maxRI - view->minRI); -} - -// Find the nearest glass to a given screen position -i32 find_nearest_glass(i32 x, i32 y, const ViewState* view, f32 maxDistance); - -// Calculate visible data range based on current view -void get_visible_data_range(const ViewState* view, f32 *visibleMinAbbe, f32 *visibleMaxAbbe, - f32 *visibleMinRI, f32 *visibleMaxRI); - -// Handle mouse wheel zoom -void handle_mouse_wheel_zoom(i32 wheelY, i32 mouseX, i32 mouseY, ViewState* view); - -// Toggle fullscreen -void toggle_fullscreen(SDL_Window* window); - -// Reset view to default -void reset_view(ViewState* view); - -// Tight clustering functions -void create_tight_clusters(ViewState* view); -void free_tight_clusters(ViewState* view); -i32 find_tight_cluster_for_glass(i32 glassIndex, const ViewState* view); - -// Loose clustering functions (zoom-dependent) -void create_loose_clusters(ViewState* view); -void free_loose_clusters(ViewState* view); -i32 find_loose_cluster_for_glass(i32 glassIndex, const ViewState* view); - -// Combined clustering logic -b32 should_show_glass_label(i32 glassIndex, const ViewState* view); - - -#endif /* GLAMAC_VIEW_H */ -- cgit v1.2.3