Displaying Graphics problem and buttons question
Djebulon
I'm a newbie here :)
I just changed my version of Igor from the 5.05A to the 6.34A and without changing it, I tryed to execute a graphical macro (listed under this message).
When this part of my program was executed by the version 5.05A, everything was displayed fast. But with the version 6.34A, it takes 4 times longer to display.
Do I have to add some flags or other commands to the code in order to adapt it to this new version ?
Or is my computer (Win7, Intel i3-3220, RAM:8Go, 64bits) not powerfull enough ?
Moreover, I want to include "buttons" in the last panel. But I didn't find how to make them work. When I clic on one button on the panel an error message appears (While starting up macro "macro": expected right parenthesis)
Do I need an additional function to link the button to the macro (or function) that I want to execute while pressing the button ?
Thank you very much :)
Macro GraphicsInit()
Variable/G Isup, Iinf, Nsup, Ninf, Bsup, Binf // Low and High limits
Variable/G Iavg, Imed, Navg, Nmed, Bavg, Bmed // Average and Median values
Silent 1
DoWindow/K Prog_Window
Display/W=(2,2,1145,595)/N=Prog_Window/K=1 // Creates main window
// -------------------------------------------------------------------------
// Displays the 3 maps:
Display/HOST=Prog_Window/W=(2,22,200,200)/N=Map1; AppendImage Intensity
ModifyImage Intensity ctab={*,*,SpectrumBlack,0}
Label left "y position"
Label bottom "x position"
DrawText/W=Prog_Window 0.1,0.04,"Intensity"
Display/HOST=Prog_Window/W=(202,22,400,200)/N=Map2; AppendImage Number
ModifyImage Number ctab={*,*,Spectrum,0}
Label left "y position"
Label bottom "x position"
DrawText/W=Prog_Window 0.31,0.04,"Number"
Display/HOST=Prog_Window/W=(402,22,600,200)/N=Map3; AppendImage Brightness
ModifyImage Brightness ctab={*,*,Spectrum,0}
Label left "y position"
Label bottom "x position"
DrawText/W=Prog_Window 0.51,0.04,"Brightness"
// -------------------------------------------------------------------------
// Displays the 3 Versus graphics:
Display/HOST=Prog_Window/W=(630,15,805,190)/N=BvsN VBright vs VNum
ModifyGraph mode=3,marker=19,rgb=(0,0,65280),msize=0.2
Label left "Brightness"
Label bottom "Number"
Display/HOST=Prog_Window/W=(630,210,805,385)/N=BvsI VBright vs VInt
ModifyGraph mode=3,marker=19,rgb=(0,0,65280),msize=0.2
Label left "Brightness"
Label bottom "Intensity"
Display/HOST=Prog_Window/W=(630,405,805,580)/N=NvsI VNum vs VInt
ModifyGraph mode=3,marker=19,rgb=(0,0,65280),msize=0.2
Label left "Number"
Label bottom "Intensity"
// -------------------------------------------------------------------------
// Displays the 3 histograms :
Display/HOST=Prog_Window/W=(25,225,175,375) /N=Histogram1 IntensityHisto
ModifyGraph mode=5,hbFill=2,toMode=1,rgb=(17408,17408,17408), log(left)=1;DelayUpdate
Label left "Nb of Occurences"
Label bottom "Intensity"
Display/HOST=Prog_Window/W=(225,225,375,375) /N=Histogram2 NumberHisto
ModifyGraph mode=5,hbFill=2,toMode=1,rgb=(17408,17408,17408), log(left)=1;DelayUpdate
Label left "Nb of Occurences"
Label bottom "Number"
Display/HOST=Prog_Window/W=(425,225,575,375) /N=Histogram3 BrightnessHisto
ModifyGraph mode=5,hbFill=2,toMode=1,rgb=(17408,17408,17408), log(left)=1;DelayUpdate
Label left "Nb of Occurences"
Label bottom "Brightness"
// -------------------------------------------------------------------------
// Creates an input panel:
NewPanel /K=1/W=(30,400,425,560)/HOST=Prog_Window
ShowTools
SetDrawLayer UserBack
SetDrawEnv linebgc= (0,15872,65280),fillfgc= (0,15872,65280);DelayUpdate
DrawRect 526,5,6,209
SetDrawEnv fillfgc= (65535,65535,65535), textrgb= (26112,0,0);DelayUpdate
DrawRect 26,45,83,70
DrawText 31,65,"Intensity"
SetDrawEnv fillfgc= (65535,65535,65535), textrgb= (26112,0,0);DelayUpdate
DrawRect 26,95,83,120
DrawText 31,115,"Number"
SetDrawEnv fillfgc= (65535,65535,65535), textrgb= (26112,0,0);DelayUpdate
DrawRect 18,156,90,181
DrawText 23,176,"Brightness"
SetDrawEnv textrgb= (65535,65535,65535);DelayUpdate
DrawText 299,36,"Avg."
SetDrawEnv textrgb= (65535,65535,65535);DelayUpdate
DrawText 386,36,"Med."
ValDisplay AvgI pos={285,46}, frame=2, labelBack=(65535,65535,65535), value=Iavg
ValDisplay MedI pos={372,46}, frame=2, labelBack=(65535,65535,65535), value=Imed
ValDisplay AvgN pos={285,104}, frame=2, labelBack=(65535,65535,65535), value=Navg
ValDisplay MedN pos={372,104}, frame=2, labelBack=(65535,65535,65535), value=Nmed
ValDisplay AvgB pos={285,158}, frame=2, labelBack=(65535,65535,65535), value=Bavg
ValDisplay MedB pos={372,158}, frame=2, labelBack=(65535,65535,65535), value=Bmed
SetVariable setvar0,pos={98,39},size={123,16},title="Inf. Lim." // Input of the values for the
SetVariable setvar0,limits={-5,200,0.01},value= Iinf // Intensity, the Number and
SetVariable setvar1,pos={142,58},size={123,16},title="Sup. Lim." // The Brightness
SetVariable setvar1,limits={-5,200,0.01},value= Isup
SetVariable setvar2,pos={98,92},size={123,16},title="Inf. Lim."
SetVariable setvar2,limits={-5,200,0.01},value= Ninf
SetVariable setvar3,pos={142,113},size={123,16},title="Sup. Lim."
SetVariable setvar3,limits={-5,200,0.01},value= Nsup
SetVariable setvar4,pos={98,149},size={123,16},title="Inf. Lim."
SetVariable setvar4,limits={-5,200,0.01},value= Binf
SetVariable setvar5,pos={142,172},size={123,16},title="Sup. Lim."
SetVariable setvar5,limits={-5,200,0.01},value= Bsup
Button LimIntensity proc=IntensityModif, pos={446,46}, title="ChangeInt"
Button LimNumber proc=NumberModif, pos={446,113}, title="ChangeNum"
Button LimBrightness proc=BrightnessModif, pos={444,158}, title="ChangeBright"
DoAlert 0, "Graphics are now initialized"
endmacro
Variable/G Isup, Iinf, Nsup, Ninf, Bsup, Binf // Low and High limits
Variable/G Iavg, Imed, Navg, Nmed, Bavg, Bmed // Average and Median values
Silent 1
DoWindow/K Prog_Window
Display/W=(2,2,1145,595)/N=Prog_Window/K=1 // Creates main window
// -------------------------------------------------------------------------
// Displays the 3 maps:
Display/HOST=Prog_Window/W=(2,22,200,200)/N=Map1; AppendImage Intensity
ModifyImage Intensity ctab={*,*,SpectrumBlack,0}
Label left "y position"
Label bottom "x position"
DrawText/W=Prog_Window 0.1,0.04,"Intensity"
Display/HOST=Prog_Window/W=(202,22,400,200)/N=Map2; AppendImage Number
ModifyImage Number ctab={*,*,Spectrum,0}
Label left "y position"
Label bottom "x position"
DrawText/W=Prog_Window 0.31,0.04,"Number"
Display/HOST=Prog_Window/W=(402,22,600,200)/N=Map3; AppendImage Brightness
ModifyImage Brightness ctab={*,*,Spectrum,0}
Label left "y position"
Label bottom "x position"
DrawText/W=Prog_Window 0.51,0.04,"Brightness"
// -------------------------------------------------------------------------
// Displays the 3 Versus graphics:
Display/HOST=Prog_Window/W=(630,15,805,190)/N=BvsN VBright vs VNum
ModifyGraph mode=3,marker=19,rgb=(0,0,65280),msize=0.2
Label left "Brightness"
Label bottom "Number"
Display/HOST=Prog_Window/W=(630,210,805,385)/N=BvsI VBright vs VInt
ModifyGraph mode=3,marker=19,rgb=(0,0,65280),msize=0.2
Label left "Brightness"
Label bottom "Intensity"
Display/HOST=Prog_Window/W=(630,405,805,580)/N=NvsI VNum vs VInt
ModifyGraph mode=3,marker=19,rgb=(0,0,65280),msize=0.2
Label left "Number"
Label bottom "Intensity"
// -------------------------------------------------------------------------
// Displays the 3 histograms :
Display/HOST=Prog_Window/W=(25,225,175,375) /N=Histogram1 IntensityHisto
ModifyGraph mode=5,hbFill=2,toMode=1,rgb=(17408,17408,17408), log(left)=1;DelayUpdate
Label left "Nb of Occurences"
Label bottom "Intensity"
Display/HOST=Prog_Window/W=(225,225,375,375) /N=Histogram2 NumberHisto
ModifyGraph mode=5,hbFill=2,toMode=1,rgb=(17408,17408,17408), log(left)=1;DelayUpdate
Label left "Nb of Occurences"
Label bottom "Number"
Display/HOST=Prog_Window/W=(425,225,575,375) /N=Histogram3 BrightnessHisto
ModifyGraph mode=5,hbFill=2,toMode=1,rgb=(17408,17408,17408), log(left)=1;DelayUpdate
Label left "Nb of Occurences"
Label bottom "Brightness"
// -------------------------------------------------------------------------
// Creates an input panel:
NewPanel /K=1/W=(30,400,425,560)/HOST=Prog_Window
ShowTools
SetDrawLayer UserBack
SetDrawEnv linebgc= (0,15872,65280),fillfgc= (0,15872,65280);DelayUpdate
DrawRect 526,5,6,209
SetDrawEnv fillfgc= (65535,65535,65535), textrgb= (26112,0,0);DelayUpdate
DrawRect 26,45,83,70
DrawText 31,65,"Intensity"
SetDrawEnv fillfgc= (65535,65535,65535), textrgb= (26112,0,0);DelayUpdate
DrawRect 26,95,83,120
DrawText 31,115,"Number"
SetDrawEnv fillfgc= (65535,65535,65535), textrgb= (26112,0,0);DelayUpdate
DrawRect 18,156,90,181
DrawText 23,176,"Brightness"
SetDrawEnv textrgb= (65535,65535,65535);DelayUpdate
DrawText 299,36,"Avg."
SetDrawEnv textrgb= (65535,65535,65535);DelayUpdate
DrawText 386,36,"Med."
ValDisplay AvgI pos={285,46}, frame=2, labelBack=(65535,65535,65535), value=Iavg
ValDisplay MedI pos={372,46}, frame=2, labelBack=(65535,65535,65535), value=Imed
ValDisplay AvgN pos={285,104}, frame=2, labelBack=(65535,65535,65535), value=Navg
ValDisplay MedN pos={372,104}, frame=2, labelBack=(65535,65535,65535), value=Nmed
ValDisplay AvgB pos={285,158}, frame=2, labelBack=(65535,65535,65535), value=Bavg
ValDisplay MedB pos={372,158}, frame=2, labelBack=(65535,65535,65535), value=Bmed
SetVariable setvar0,pos={98,39},size={123,16},title="Inf. Lim." // Input of the values for the
SetVariable setvar0,limits={-5,200,0.01},value= Iinf // Intensity, the Number and
SetVariable setvar1,pos={142,58},size={123,16},title="Sup. Lim." // The Brightness
SetVariable setvar1,limits={-5,200,0.01},value= Isup
SetVariable setvar2,pos={98,92},size={123,16},title="Inf. Lim."
SetVariable setvar2,limits={-5,200,0.01},value= Ninf
SetVariable setvar3,pos={142,113},size={123,16},title="Sup. Lim."
SetVariable setvar3,limits={-5,200,0.01},value= Nsup
SetVariable setvar4,pos={98,149},size={123,16},title="Inf. Lim."
SetVariable setvar4,limits={-5,200,0.01},value= Binf
SetVariable setvar5,pos={142,172},size={123,16},title="Sup. Lim."
SetVariable setvar5,limits={-5,200,0.01},value= Bsup
Button LimIntensity proc=IntensityModif, pos={446,46}, title="ChangeInt"
Button LimNumber proc=NumberModif, pos={446,113}, title="ChangeNum"
Button LimBrightness proc=BrightnessModif, pos={444,158}, title="ChangeBright"
DoAlert 0, "Graphics are now initialized"
endmacro
Bienvenue!
When adding Igor code to a post on the forum, put the code between <igor> and </igor> tags to identify it as Igor code. This is explained here:
http://www.igorexchange.com/node/3221
I can't run your code because it references waves that I don't have. Create an experiment, simplified if possible, and post the experiment file as an attachement to a post in this thread.
You have commands like this:
but your posted code does not include the IntensityModif function.
To see how to create a button with an action, in a new experiment create a new panel, add a button, kill the panel and look at the recreation macro. This is equivalent to the following commands:
ShowTools/A arrow
Button button0 title="Test",proc=ButtonProc
HideTools
DoWindow/K/R Panel0
See the reference documentation for Button. In the Details section, it explains the format and operation of the button action procedure.
January 25, 2014 at 12:29 pm - Permalink
Okay,
I tryed to simplify my code (please see experiment file attached).
In order to check my problem for displaying graphics in the main window, please execute in the "Programme" menu the macro: "GraphicsInit".
This problem is mainly a time of display problem.
Then inside the code, I put back the macro GraphicsInit() where there is the "button" I want to use.
This "button" is linked to the proc "ValuesModif()".
Before asking for help in the IgorExchange forum, I read the help files, the .pdf tutorials for Igor control panels [http://www.wavemetrics.net/doc/igorman/III-14%20Control%20Panels.pdf] but I didn't find or didn't understand the answer for my problem.
It's probably nothing (just a missing flag or something very easy to fix) but since it's the first time I'm using this kind of control, I don't know how to build a working "button"
January 28, 2014 at 02:56 am - Permalink
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
January 28, 2014 at 09:24 am - Permalink
I added the text file in my experiment with the "adopt" option.
Thank you again
January 29, 2014 at 05:39 am - Permalink
I found, that, when changing the order of display :
Before = 3 Images, 3 Versus graphics, 3 histograms, 1 panel
After = 3 images, 3 histograms, 1 panel, 3 Versus graphics
the time to display the window is very fast untill the Versus Graphics are displayed.
I tried to display everything without the line :
[just adding // in front of the line],
and everything was displayed very fast.
The problem seems to be inside the "ModifyGraph" function.
When I write the instruction like this :
without the marker=xx instruction, the displaying time is acceptable (display just slows down a little bit).
But when I add this instruction (even if I replace another one with this one), everything is lagging.
January 29, 2014 at 09:52 am - Permalink
As for Proc ValuesModif()...
1) Button action procedures are required to follow a very specific format. If you use the Control Properties dialog (the dialog you get if you double-click the button while in draw mode) you will find to the right of the menu where you choose an action procedure a button "New...". That will put up another dialog that gives a starter code for the action procedure. That is the easiest way to find the right format.
2) I do not recommend using Proc. It is better to use Functions, they are faster and new programming features are put into functions, and usually not into Procs. Functions, because they are compiled, must analyze the syntax and therefore can give you more complete error messages sooner. With a Proc you get an error message only for lines that actually execute, and only at run time when it is more difficult to deal with.
3) I recommend using the newer format for action procedures that use a structure, although for buttons the action is so simple it doesn't really make a lot of difference.
I started fixing ValuesModif():
String ctrlName
Limitates()
Make/N=100/D/O IntensityHisto;DelayUpdate // Creates a vector to receive the Histogram
Histogram/B=1 VInt,IntensityHisto // Builds the histogram with auto-settings
Make/N=100/D/O NumberHisto;DelayUpdate // Creates a vector to receive the Histogram
Histogram/B=1 VNum,NumberHisto // Builds the histogram with auto-settings
Make/N=100/D/O BrightnessHisto;DelayUpdate // Creates a vector to receive the Histogram
Histogram/B=1 VBright,BrightnessHisto // Builds the histogram with auto-settings
Wavestats/Q VInt
NVAR Iavg
Iavg=V_avg
NVAR Imed
Imed=Median(VInt)
Wavestats/Q VNum
NVAR Navg
Navg=V_avg
NVAR Nmed
Nmed=Median(VNum)
Wavestats/Q VBright
NVAR Bavg
Bavg=V_avg
NVAR Bmed
Bmed=Median(VBright)
DoUpdate // update windows
End
I don't know if I got it completely right because the function Median doesn't exist in the experiment. But the format is now correct for a button action procedure and the global references are declared.
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
January 29, 2014 at 10:04 am - Permalink
The dots with size of 2 in the graphics is perfect.
For the button function I didn't know I had to put a "ctrl" in input of the function even if I don't need one.
String ctrlName
The median function just calculates the median value of my vectors but this part was working well.
Thank you again for your help !
January 30, 2014 at 01:34 am - Permalink