📄 wavplot.cpp
字号:
// Copyright (c) 1999 Stephen T. Welstead. All rights reserved.
// File WAVPLOT.CPP Wavelet Plotting Window
#include <stdio.h>
#include "utm.h"
#include "wavrids.h"
#include "wavplot.h"
twavelet_plot_window_manager *the_wavelet_plot_window_manager;
LRESULT CALLBACK _export WaveletPlotWndProc (HWND hwnd, UINT message,
WPARAM wParam,LPARAM lParam)
{
return
(LRESULT CALLBACK) (the_wavelet_plot_window_manager->
handle_message (hwnd, message, wParam, lParam)) ;
}
twavelet_plot_window_manager::twavelet_plot_window_manager (HINSTANCE hInstance,
tmdi_frame_window *parent,LPCSTR menu_name,LPCSTR class_name):
tmdi_manager (hInstance,parent,(LRESULT CALLBACK)WaveletPlotWndProc,
0,menu_name,"Wavelet Plot Window",class_name,"WAV_ICON"){
the_wavelet_plot_window_manager = this;
}
int twavelet_plot_window_manager::respond_wm_create (HWND hwnd) {
child_window_struct *child;
hwndClient = GetParent (hwindow) ;
hwndFrame = GetParent (hwndClient) ;
child = new child_window_struct;
child->hwnd = hwnd;
child->window = new twavelet_plot_window(hwnd,this,the_title);
add_child_window (hwnd,child);
return 1;
}
twavelet_plot_window::twavelet_plot_window(HWND hwnd,
tmdi_manager *the_manager,LPCSTR title_name)
: tmdi_graph_window(hwnd,the_manager,title_name)
{
Daub4_wavelet = new tDaub4_wavelet();
Daub6_wavelet = new tDaub6_wavelet();
Haar_wavelet = new tHaar_wavelet();
starting_component = 11;
no_of_components = 1024; // Must be a power of 2 !
gr_setup.scale_window_from_data = 1;
gr_setup.x_min = 0.0;
gr_setup.x_max = 1.0;
gr_setup.y_min = -1.0;
gr_setup.y_max = 1.0;
gr_setup.label_axes = FALSE;
gr_setup.label_x_axis = FALSE;
gr_setup.label_y_axis = FALSE;
gr_setup.show_x_tic_marks = FALSE;
gr_setup.show_y_tic_marks = FALSE;
gr_setup.label_x_tic_marks = FALSE;
gr_setup.label_y_tic_marks = FALSE;
gr_setup.back_color = RGB_WHITE;
gr_setup.text_color = RGB_BLACK;
gr_setup.line_color = RGB_BLACK;
}
int twavelet_plot_window::set_starting_component () {
int value = starting_component;
int maxlen = 5,dec_places = 0,max_val = no_of_components,
min_val = 1;
if (numeric_dialog (hwindow,
"Starting Component","Enter new starting component",maxlen,
dec_places,INT_DATA,1,max_val,min_val,&value))
starting_component = value;
return 1;
}
int twavelet_plot_window::plot_wavelet (twavelet *wavelet,
char *wavelet_name) {
float *data;
float view_scale = 0.75;
int i,n = no_of_components;
int gr_x,gr_y,old_gr_x,old_gr_y;
char descr[15];
HCURSOR save_cursor,hour_glass_cursor;
UINT old_text_align;
if (gr.hDC) release_dc (&gr);
if (!graph_setup(&gr)) return 1;
if (!(data = allocate_f_vector (1,n))) return 1;
hour_glass_cursor = LoadCursor(NULL,IDC_WAIT);
save_cursor = SetCursor (hour_glass_cursor);
for (i=0;i<=n;i++)
data[i] = 0.0;
data[starting_component] = 1.0;
wavelet->inverse_transform(data,n);
if (wavelet_name)
sprintf (gr_setup.graph_title,"%s",wavelet_name);
if (gr_setup.scale_window_from_data) {
/* Determine max-min values from data */
gr_setup.x_min = 1;
gr_setup.x_max = n*view_scale;
gr_setup.y_min = data[1];
gr_setup.y_max = data[1];
for (i=1;i<=n;i++) {
if (data[i] < gr_setup.y_min)
gr_setup.y_min = data[i];
if (data[i] > gr_setup.y_max)
gr_setup.y_max = data[i];
} // end i
} // end if
set_graph_max_min_2 (&gr_setup,&gr);
clear_window (&gr);
draw_border(&gr_setup,&gr,1);
draw_border_axes(&gr_setup,&gr);
display_title (&gr_setup,&gr);
graph_x_y_labels (&gr_setup,&gr);
xy_to_window_col_row (&gr,1,data[1],
&gr_x,&gr_y);
draw_color_line (&gr,gr_x,gr_y,gr_x,gr_y,
gr_setup.line_color);
old_gr_x = gr_x;
old_gr_y = gr_y;
for (i=2;i<=n*view_scale;i++) {
xy_to_window_col_row (&gr,i,
data[i],&gr_x,&gr_y);
draw_color_line (&gr,old_gr_x,old_gr_y,gr_x,gr_y,
gr_setup.line_color);
old_gr_x = gr_x;
old_gr_y = gr_y;
} // end i
SetTextColor (gr.hDC,gr_setup.text_color);
old_text_align = GetTextAlign (gr.hDC);
SetTextAlign (gr.hDC,TA_BOTTOM | TA_LEFT);
sprintf (descr,"Comp: %d",starting_component);
TextOut(gr.hDC,gr.iter_col,gr.y_max_row + 2*gr.y_space,
descr,strlen(descr));
SetTextAlign (gr.hDC,old_text_align);
SetCursor (save_cursor);
free_f_vector (data,1);
set_dc_and_mode (&gr);
save_image_to_bitmap();
if (wavelet_name) {
sprintf ((char *)the_title,"%s: (%d)",
wavelet_name,starting_component);
SetWindowText (hwindow,the_title);
}
return 1;
}
int twavelet_plot_window::OnPlotHaarWavelet(void) {
return plot_wavelet (Haar_wavelet,"Haar Wavelet");
}
int twavelet_plot_window::OnPlotDaub4Wavelet(void) {
return plot_wavelet (Daub4_wavelet,"Daub4 Wavelet");
}
int twavelet_plot_window::OnPlotDaub6Wavelet(void) {
return plot_wavelet (Daub6_wavelet,"Daub6 Wavelet");
}
int twavelet_plot_window::respond_wm_command (WPARAM wParam,
LPARAM) {
switch (wParam)
{
case WAV_SET_COMP:
return set_starting_component();
case WAV_PLOT_HAAR:
return OnPlotHaarWavelet();
case WAV_PLOT_DAUB4:
return OnPlotDaub4Wavelet();
case WAV_PLOT_DAUB6:
return OnPlotDaub6Wavelet();
} // end switch
return tmdi_graph_window::respond_wm_command (wParam,0L);
}
int twavelet_plot_window::respond_wm_close () {
// Override query
return 0;
}
int twavelet_plot_window::respond_wm_destroy (HWND hwnd) {
delete Haar_wavelet;
delete Daub4_wavelet;
delete Daub6_wavelet;
return tmdi_graph_window::respond_wm_destroy (hwnd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -