Syllabus_and_Widgets

Syllabus_and_Widgets
Computing for Imaging
Science (SIMG-726)
1
Rolando V. Raqueño
Wednesday, April 27, 2016
Gift Quiz - Who is RTM?
• What did his father do?
2
Rolando V. Raqueño
Wednesday, April 27, 2016
Assignment #1
• Due next Tuesday (January 11, 2005)
• Report must be generated using LaTeX
– Use report document class
• Post LaTex source and pdf file to wiki
– Topic name should be
WikiNameAssignment1
– JohnSmithAssignment1
3
Rolando V. Raqueño
Wednesday, April 27, 2016
Assignment #1 (Continued)
• Change protection of Wiki topic page for
– Viewing and Modification only by
• You and
• RolandoRaqueno
• Lastly,
– Submit a hardcopy output of your report
4
Rolando V. Raqueño
Wednesday, April 27, 2016
FINAL PRESENTATIONS
•
•
•
•
•
February 22, 2005 (Tuesday)
12:00 – 4:00 PM
Room 76-1275
15-20 minutes (TBD) presentations
Final Project Package Due
– February 24, 2005 (Thursday)
– Documentation, Source, Presentation, etc.
5
Rolando V. Raqueño
Wednesday, April 27, 2016
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 twodimensional special functions Rect and Gaus
6
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus after Holiday Break
• Class #6 - Today
– Widget Programming
– 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
7
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #7
– Widget Programming
– Event Handlers
8
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #8
–
–
–
–
–
Shell Programming
UNIX Quotes
Making UNIX commands of IDL Programs
Mystery Image Techniques
SSH Lecture
• QUIZ
– Topics
dd, od, strings, which, wc
9
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #9
– Debugging in IDL
– More Widget Examples
– Security Guest Lecture
10
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #10
– Special Function Implementation
– Midterm Exam Review
– LaTeX Guest Lecture
• Quiz
11
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #11
– Midterm Exam (Take home – 1 week to do)
– Image Processing Implementations
12
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #12
– Image Processing Implementations
– AWK, SED, and Makefiles
• Quiz
13
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #13
– Final Project Updates
– IDL Pointers
14
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #14
– Assignment #2 Due
– Modal Widgets
15
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #15
– HDF Guest Lecture
16
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #16
– More 3D Graphics
17
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #17
– 3D Graphics Concepts
18
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #18
– Open Class Time for Project Consulting
19
Rolando V. Raqueño
Wednesday, April 27, 2016
Syllabus
• Class #19
– Open Class Time for Project Consulting
20
Rolando V. Raqueño
Wednesday, April 27, 2016
Widget Events
21
Rolando V. Raqueño
Wednesday, April 27, 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.
22
Rolando V. Raqueño
Wednesday, April 27, 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.
23
Rolando V. Raqueño
Wednesday, April 27, 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
24
Rolando V. Raqueño
Wednesday, April 27, 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
25
Rolando V. Raqueño
Wednesday, April 27, 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
26
Rolando V. Raqueño
Wednesday, April 27, 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
27
Rolando V. Raqueño
Wednesday, April 27, 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.
28
Rolando V. Raqueño
Wednesday, April 27, 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
29
Rolando V. Raqueño
Wednesday, April 27, 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'
30
end
Rolando V. Raqueño
Wednesday, April 27, 2016
If Your Widget Program
Crashes
• First type
IDL> RETALL
• Followed by
IDL> XMANAGER
• You may then edit and recompile as
necessary
31
Rolando V. Raqueño
Wednesday, April 27, 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.
32
Rolando V. Raqueño
Wednesday, April 27, 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
33
Rolando V. Raqueño
Wednesday, April 27, 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
34
Rolando V. Raqueño
Wednesday, April 27, 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.
35
Rolando V. Raqueño
Wednesday, April 27, 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
36
Rolando V. Raqueño
Wednesday, April 27, 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
37
Rolando V. Raqueño
Wednesday, April 27, 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
38
Rolando V. Raqueño
Wednesday, April 27, 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
39
Rolando V. Raqueño
Wednesday, April 27, 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
40
Rolando V. Raqueño
Wednesday, April 27, 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
41
Rolando V. Raqueño
Wednesday, April 27, 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'
42
end
Rolando V. Raqueño
Wednesday, April 27, 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)
43
end
Rolando V. Raqueño
Wednesday, April 27, 2016
Another Widget Example
44
Rolando V. Raqueño
Wednesday, April 27, 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
45
Rolando V. Raqueño
Wednesday, April 27, 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
46
Rolando V. Raqueño
Wednesday, April 27, 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
47
Rolando V. Raqueño
Wednesday, April 27, 2016
Display PGM Widget
48
Rolando V. Raqueño
Wednesday, April 27, 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
49
Rolando V. Raqueño
Wednesday, April 27, 2016
Pickfile Dialog Box
50
Rolando V. Raqueño
Wednesday, April 27, 2016
Resulting Widget
Image Display
51
Rolando V. Raqueño
Wednesday, April 27, 2016
Summary
•
•
•
•
Quit Button
Beep Counter
Slider Multiply
PGM Display
52
Rolando V. Raqueño
Wednesday, April 27, 2016
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement