Syllabus_and_Widgets

Computing for Imaging
Science (SIMG-726)
1
Rolando V. Raqueño
Thursday, April 14, 2016
Gift Quiz - Who is RTM?
• What did his father do?
2
Rolando V. Raqueño
Thursday, April 14, 2016
FINAL PRESENTATIONS
•
•
•
•
•
February 19th (Thursday)
2:00 – 5:30 PM
Room 76-1275
15 minute presentations
Final Project Package Due
– February 24th (Tuesday)
– Documentation, Source, Presentation, etc.
3
Rolando V. Raqueño
Thursday, April 14, 2016
Class Recordings
• Access information
– http://meetingplace.rit.edu
– Class ID : 1051726
– 2003726
4
Rolando V. Raqueño
Thursday, April 14, 2016
How to keep posted on changes
to WIKI?
• http://wiki.cis.rit.edu/bin/view/User/Web
Changes
• Lists the most recent changes made by
registered users
• Bookmark or make your home page
5
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus after Holiday Break
• Class #6 - Today
– Widget Programming Review
– BibTek Lecture
• Assignment #2 (Check Website for details)
– Combine Assignment #1 into Assignment #2
– Create a widget program that will read in a PGM file
that will display the image statistics of a user defined
rectangular region.
– Pay particular attention to non-interactive interface
– Program the one-dimensional and two-dimensional
special functions Rect and Gaus
6
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #7
– Widget Programming
– Event Handlers
7
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #8
– Shell Programming
– UNIX Quotes
– Making UNIX commands of IDL Programs
– Mystery Image Techniques
• QUIZ
– Topics
dd, od, strings, which, wc
8
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #9
– Debugging in IDL
– More Widget Examples
9
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #10
– Special Function Implementation
– Midterm Exam Review
• Quiz
10
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #11
– Midterm Exam (Take home – 1 week to do)
– Image Processing Implementations
11
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #12
– Image Processing Implementations
– AWK, SED, and Makefiles
• Quiz
12
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #13
– Final Project Updates
– IDL Pointers
13
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #14
– Assignment #2 Due
– Modal Widgets
14
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #15
– 3D Graphics Concepts
15
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #16
– More 3D Graphics
16
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #17
– Open Class Time for Project Consulting
17
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #18
– Project Presentation Session #1
18
Rolando V. Raqueño
Thursday, April 14, 2016
Syllabus
• Class #19
– Project Presentation Session #2
– Final Project Submissions Due
19
Rolando V. Raqueño
Thursday, April 14, 2016
Widget Events
20
Rolando V. Raqueño
Thursday, April 14, 2016
Widget Event
• A widget event is basically a reaction to some
form of user input
– Mouse clicks, drags, and movement
– Keyboard input
– Button push
• An widget event generates a structure which
identifies the widget that caused the event
and other relevant information.
21
Rolando V. Raqueño
Thursday, April 14, 2016
IDL Event Structure
• All IDL Events will generate a named structure
that is guaranteed to have the following
– A structure name
– The ID of the widget that generated the event
– The ID of the base to which the above widget
belongs
– The ID of the widget with which an event handler is
associated.
22
Rolando V. Raqueño
Thursday, April 14, 2016
Event Handler
• Special Processing functions (Event
Handlers)
– capture and appropriately interpret those
events.
• single button program
– beep when pressed.
• First, need to create and destroy a
widget by creating a Quit Button
23
Rolando V. Raqueño
Thursday, April 14, 2016
Create the Quit Button Widget
pro quit_button
base=Widget_Base(column=1,title=“Quit Button”)
button = Widget_Button( base, value=“Quit” )
Widget_Control, base, /realize
end
24
Rolando V. Raqueño
Thursday, April 14, 2016
Quit Button Widget Event
Handler
Method #1
pro quit_button_event, event
Widget_Control, event.top, /destroy
end
pro quit_button
base=Widget_Base(column=1,title=“Quit Button”)
button = Widget_Button( base, value=“Quit”)
Widget_Control, base, /realize
Xmanager, ’quit_button', base,
event_handler=’quit_button_event'
end
25
Rolando V. Raqueño
Thursday, April 14, 2016
Quit Button Widget Event
Handler Method #2
pro quitter, event
Widget_Control, event.top, /destroy
end
pro quit_button_event, event
end
pro quit_button
base=Widget_Base(column=1,title=‘Quit Button’)
button=Widget_Button(base, value=‘Quit’,
event_pro=‘quitter’ )
Widget_Control, base, /realize
Xmanager, ’quit_button',
base,event_handler=’quit_button_event'
end
26
Rolando V. Raqueño
Thursday, April 14, 2016
Button Widget Example
• For the sake of presentation space, we
will not be including the quit button in
the following code.
• You should, however, include it so that
you can gracefully get rid of the
widgets.
27
Rolando V. Raqueño
Thursday, April 14, 2016
Create the Button Widget
pro beeper
base=Widget_Base(column=1, title="Beep" )
button=Widget_Button(base,value="Press Here")
Widget_Control, base, /realize
end
28
Rolando V. Raqueño
Thursday, April 14, 2016
Button Widget Event Handler
pro beeper_event, event
print,"Beep",string(7B)
end
pro beeper
base=Widget_Base( column=1, title="Beep" )
button=Widget_Button(base,value="Press Here")
Widget_Control, base, /realize
Xmanager, 'beeper', base,
event_handler='beeper_event'
29
end
Rolando V. Raqueño
Thursday, April 14, 2016
If Your Widget Program
Crashes
• First type
IDL> RETALL
• Followed by
IDL> XMANAGER
• You may then edit and recompile as
necessary
30
Rolando V. Raqueño
Thursday, April 14, 2016
Analyzing the Beep Event
Handler
• You can strategically put help and print
commands in beep_event and beep to
study the values of the variables and
the resulting structures.
• When pressed, the word Beep should
print out in the IDL command window.
31
Rolando V. Raqueño
Thursday, April 14, 2016
Beep Counter
• Let us modify the event handler to count
the number of times we depressed the
button during a session
• An initial solution might be the following
32
Rolando V. Raqueño
Thursday, April 14, 2016
Wrong Beep Counter
pro beeper_event, event
count = count + 1
print,”Beeped “, count, “ Times”
end
pro beeper
base=Widget_Base(column=1, title="Beep")
button=Widget_Button(base,value="Press Here")
Widget_Control, base, /realize
Xmanager, 'beeper', base,
event_handler='beeper_event'
end
33
Rolando V. Raqueño
Thursday, April 14, 2016
It Does Not Work Because...
• The scope of most of the variables (e.g.
count) are local to each of the routines.
• We need a mechanism to maintain,
pass, and keep variables persistent
across events and routines.
• This can be done using the uvalue of a
given widget as in the following.
34
Rolando V. Raqueño
Thursday, April 14, 2016
Working Beep Counter
pro beeper_event, event
Widget_Control,event.id,get_uvalue=count
count = count + 1
print,"Beeped ", count, " Times"
Widget_Control,event.id,set_uvalue=count
end
pro beeper
base = Widget_Base( column=1, title="Beep" )
button = Widget_Button( base, value="Press Here" )
Widget_Control, base, /realize
Widget_Control,button,set_uvalue=0
Xmanager, 'beeper', base, event_handler='beeper_event'
end
35
Rolando V. Raqueño
Thursday, April 14, 2016
An Improved Beep Counter
pro beeper_event, event
Widget_Control, event.id, get_uvalue=count
count = count + 1
Widget_Control, event.id, set_uvalue=count
Widget_Control, event.id,
set_value=string(count)
end
pro beeper
base = Widget_Base( column=1, title="Beep" )
button = Widget_Button( base, value="Press Here" )
Widget_Control, base, /realize
Widget_Control, button, set_uvalue=0
Xmanager, 'beeper', base, event_handler='beeper_event'
end
36
Rolando V. Raqueño
Thursday, April 14, 2016
Beep Counter Controlling a
Text Widget
pro beeper_event,
Widget_Control,
count = count +
Widget_Control,
event
event.id, get_uvalue=count
1
event.id, set_uvalue=count
Widget_Control, event.top, get_uvalue=widget_id
Widget_Control, widget_id,
set_value=string(count)
end
pro beeper
base = Widget_Base( column=1, title="Beep" )
button = Widget_Button( base, value="Press Here" )
text = Widget_Text( base )
Widget_Control, base, /realize
Widget_Control, base, set_uvalue=text
Widget_Control, button, set_uvalue=0
Xmanager, 'beeper', base, event_handler='beeper_event'
end
37
Rolando V. Raqueño
Thursday, April 14, 2016
Beeper Counter using Text
Widget
• In this situation, we use the uvalue of
the base widget as a container to hold
the ID of the text widget.
• We can now access this information
from any widget that is contained in this
base through the event.top field
38
Rolando V. Raqueño
Thursday, April 14, 2016
Slider Multiply Example
• Create two floating sliders and multiply
the values and deposit this in a text
widget.
• Make the floating point widgets editable
39
Rolando V. Raqueño
Thursday, April 14, 2016
Slider Multiply
Widget Definition
pro fslider_multiply
base=Widget_Base(column=1)
fslider1 = CW_Fslider(base,/edit)
fslider2 = CW_Fslider( base,/edit )
text= Widget_Text( base )
Widget_Control, base, /realize
widget_ids = { slider1:fslider1,
slider2:fslider2, text:text }
Widget_Control, base, set_uvalue=widget_ids
end
40
Rolando V. Raqueño
Thursday, April 14, 2016
Slider Multiply
Event Handler Definition
pro fslider_multiply
base=Widget_Base(column=1)
fslider1 = CW_Fslider(base,/edit)
fslider2 = CW_Fslider( base,/edit )
text= Widget_Text( base )
Widget_Control, base, /realize
widget_ids = { slider1:fslider1,
slider2:fslider2, text:text }
Widget_Control, base, set_uvalue=widget_ids
Xmanager, 'fslider_multiply', base,
event_handler='fslider_multiply_event'
41
end
Rolando V. Raqueño
Thursday, April 14, 2016
Slider Multiply
Event Handler Definition
pro fslider_multiply_event, event
Widget_Control, event.top, get_uvalue=widgets
slider1 = widgets.slider1
slider2 = widgets.slider2
text = widgets.text
Widget_Control, slider1,
get_value=slider1_value
Widget_Control, slider2,
get_value=slider2_value
answer= slider1_value * slider2_value
Widget_Control, text, set_value=string(answer)
42
end
Rolando V. Raqueño
Thursday, April 14, 2016
Another Widget Example
43
Rolando V. Raqueño
Thursday, April 14, 2016
Display PGM Widget Program
• Illustrates the use of the pickfile
function
• Shows how to create a draw widget for
image display
• Shows how to access the draw widget
and display the image
44
Rolando V. Raqueño
Thursday, April 14, 2016
Components of
Display PGM Widget
• read_pgm procedure
• pickfile function
• size function
• wset procedure
• tv procedure
• widget_control procedure
• widget_draw function
• xmanager procedure
45
Rolando V. Raqueño
Thursday, April 14, 2016
Display PGM
Widget Definition
pro simple_image_display
base = Widget_Base( column=1 )
button1=Widget_Button(base,value='Display PGM Image')
window1 = Widget_Draw(base, xsize=256, ysize=256 )
Widget_Control, window1, /realize
Widget_Control, window1, get_value=window_id
Widget_Control, base, set_uvalue=window_id
Xmanager, 'simple_image_display', base,
Event_handler='simple_image_display_event'
end
46
Rolando V. Raqueño
Thursday, April 14, 2016
Display PGM Widget
47
Rolando V. Raqueño
Thursday, April 14, 2016
Widget Event Handler
pro simple_image_display_event, event
widget_control, event.id, get_value=widget_value
case widget_value of
'Display PGM Image' : begin
image1_file = pickfile()
read_ppm, image1_file, image1_data
image_size = size( image1_data )
x_size = image_size( 1 ) & y_size=image_size(2)
widget_control, event.top, get_uvalue=window_id
wset, window_id & tv,image1_data
end
ELSE:
endcase
end
48
Rolando V. Raqueño
Thursday, April 14, 2016
Pickfile Dialog Box
49
Rolando V. Raqueño
Thursday, April 14, 2016
Resulting Widget
Image Display
50
Rolando V. Raqueño
Thursday, April 14, 2016
Summary
•
•
•
•
Quit Button
Beep Counter
Slider Multiply
PGM Display
51
Rolando V. Raqueño
Thursday, April 14, 2016