ファイル名:StraitLine.m
function [OUTOBJ] = straitline(OBJ);
% Figure上に直線を引くプログラム。
% 引数は、何も無しか、既に作った直線のオブジェクトハンドル値を入力する。引数が無い時はマウスポインターにより、オブジェ
% クトを選択する事になる。Axes軸範囲内を指定すれば基本的には新しい直線が出来るが、既に作った直線上をクリックするとその
% 直線を選択して移動させたりする事ができる。
% Zoomボタンは、直線の向いている方向(実際には[DIRECTION]ポップアップメニューを参照します)に垂直な方向を拡大するだけで
% ある。つまりY軸方向に直線が走っていたら、X軸が拡大される(2Dを基準に考えています)。
% ----------------------------------------------------------------------------------------------
% 個人的メモ:
% hold on[=set(gca,'NextPlot','add')と同じ]をしてlineオブジェクトをもう一つ増やす方法と、axes軸をもう一つ作って最初から
% あるaxes軸に貼り付ける方法と、line関数を使って'Parent'を指定して直接くっつける方法がある。
% axes軸の方法はkasanegaki2,3,4などで使っていてhold onもありきたりなのでここではline関数を使う。
% ダイアログボックスのプロパティ値は基本的に[dialog.m]を参考にした。
% figure('BackingStore','off','ButtondownFcn','if isempty(allchild(gcbf)), close(gcbf), end','Color',get(0,'DefaultUicontrolBackgroundColor'),'Colormap',[],'IntegerHandle','off','InvertHardcopy','off','HandleVisibility','callback','Menubar','none','NumberTitle','off','PaperPositionMode','auto','Resize','off','Visible','on','WindowStyle','modal')
% このプロパティ値を更に[inputdlg.m]を参考にして若干変更した。
% 基本的流れを、uiwaitを実行してキー入力を制限して、ボタンが押されたらuiresumeを実行して終了する様にしようとしたが、
% やめた。関数ファイルだとファイルの最後まで行ってしまうと、関数内部で使われていた変数がクリアされてしまう。それは
% [uiwait]を使っても同じだった。よってボタンなどの[CallBack]には既に作っていたオブジェクト値などの変数は全て使えない。
% よって、[UIConotrol]の[Figure]-[UserData]にそれらオブジェクト値等の情報を全て入れておく事により、ボタンで呼び出され
% た時も、[UIControl]の[Figure]オブジェクトを見つければ、他の様々なオブジェクト値も参照できる。しかしこれを全部
% [UIControl]-[CallBack]用の文字列に書き込むのは面倒なので、関数の中からもう一度関数[straitline.m]を呼び出して
% [CallBack]用の所を実行するように変えた
% ----------------------------------------------------------------------------------------------
if nargin~=1 | ~isstr(OBJ) % 最初に起動した時(文字でない時)
LINEPROP{1,1} = [0 0 1]; % 直線の初期値(新しく作る時)。線の色
LINEPROP{1,2} = 0.5; % 線の太さ
LINEPROP{1,3} = 1; % 線の種類
LINEDIR = 2; % クリック時に引く直線の方向の初期値
BTNTXTFONT = 'Terminal'; % uicontrolの初期設定。文字のフォント
TXTFONTSIZE0 = 9; % エディット部の文字の大きさ
BTNFONTSIZE0 = 9; % ボタン部の文字の大きさ
TXTFONTSIZE1 = TXTFONTSIZE0*1.5; % 実際に用意するスペース
EDITWIDTH0 = TXTFONTSIZE1*5; % エディット部分の幅(10文字分)
BTNFONTSIZE1 = BTNFONTSIZE0*1.2; % 実際に用意するスペース
BTNSIZE0 = BTNFONTSIZE1*7; % ボタン部の横の大きさ
BTNSIZE1 = BTNFONTSIZE1*2; % ボタン部の縦の大きさ
SPACER0 = TXTFONTSIZE0*0.5; % 各ボタン等の間隔
UIFIGCOLOR = get(0,'DefaultUicontrolBackgroundColor'); % 背景色
DIRECTION = {'X','Y','Z'}; % 線を引く方向
LINESTYLE = {'-','--',':','-.'}; % 線種
% ----------------------------------------------------------------------------------------------
if nargin == 1 % 既に関数の引数で指定されている時
if ~strcmp(get(OBJ,'Tag'),'STRAITLINE')
error('引数のオブジェクトの指定が違います。');
end
fprintf('既に作った直線を引数で選択しました。\n');
FIG = get(get(OBJ,'Parent'),'Parent');
AXS = get(OBJ,'Parent');
[LINEPROP,LINEDATA] = GETLINEINFO(OBJ,LINESTYLE);
LIM = get(AXS,{'XLim','YLim','ZLim'}); % [Figure]の軸の範囲を求める
else
FIG = gcf;
fprintf('現在アクティブなFigureの中に直線を引くプログラム。\n');
fprintf('直線を引くグラフ内か、既に作った直線上をクリックして下さい。\n');
end % あらゆる[ButtonDownFcn]の無効化
INITWINBTNFCN=get(FIG,{'WindowButtonDownFcn','WindowButtonMotionFcn','WindowButtonUpFcn'});
set(FIG,{'WindowButtonDownFcn','WindowButtonMotionFcn','WindowButtonUpFcn'},{'','',''});
ALLCHILD = findall(FIG);
INITBTNDWNFCN = get(ALLCHILD,'ButtonDownFcn');
set(ALLCHILD,'ButtonDownFcn','');
INITPOINTER = get(FIG,'Pointer');
set(FIG,'Pointer','fullcrosshair'); % [Pointer]の変更
FIGUNIT = get(FIG,'Units');
set(FIG,'Units','points');
POS = get(FIG,'Position');
set(FIG,'Units',FIGUNIT); % [points]単位でFigureの位置を求める
if nargin ~= 1 % 引数が無い時
waitforbuttonpress; % Figure,Axes情報の取得
OBJ = get(gcf,'CurrentObject');
AXS = get(gcf,'CurrentAxes');
if isempty(AXS)
error('Axes軸が有りません。グラフを作ってからやり直して下さい。');
end
LIM = get(AXS,{'XLim','YLim','ZLim'}); % [Figure]の軸の範囲を求める
if strcmp(get(OBJ,'Tag'),'STRAITLINE') % 新規直線の作成
fprintf('既に作った直線を選択しました。\n');
[LINEPROP,LINEDATA] = GETLINEINFO(OBJ,LINESTYLE);
else
fprintf('グラフに新しい直線を作ります。\n');
LINEDATA = CALCLINE(AXS,LIM,LINEDIR); % 初期に引く線の座標を求める
OBJ = line('Parent',AXS,{'XData','YData','ZData'},LINEDATA,'Tag','STRAITLINE','Color',LINEPROP{1,1},'LineWidth',LINEPROP{1,2},'LineStyle',LINESTYLE{1,LINEPROP{1,3}});
end
end
% ----------------------------------------------------------------------------------------------
BTNPOS1 = [0*BTNSIZE0 1*SPACER0, SPACER0, BTNSIZE0, BTNSIZE1]; % ボタン1の位置
BTNPOS2 = BTNPOS1; BTNPOS2(1,1) = BTNPOS1(1,1) BTNSIZE0 SPACER0; % ボタン2の位置
BTNPOS3 = BTNPOS1; BTNPOS3(1,1) = BTNPOS2(1,1) BTNSIZE0 SPACER0; % ボタン3の位置
BTNPOS4 = BTNPOS1; BTNPOS4(1,1) = BTNPOS3(1,1) BTNSIZE0 SPACER0; % ボタン4の位置
ZUITXTPOS = [SPACER0, 2*SPACER0 BTNSIZE1, TXTFONTSIZE1, TXTFONTSIZE1]; % Z軸文字
YUITXTPOS = ZUITXTPOS; YUITXTPOS(1,2) = ZUITXTPOS(1,2) TXTFONTSIZE1 SPACER0; % Y軸文字
XUITXTPOS = YUITXTPOS; XUITXTPOS(1,2) = YUITXTPOS(1,2) TXTFONTSIZE1 SPACER0; % X軸文字
ZUIMINPOS = ZUITXTPOS; ZUIMINPOS(1,1) = ZUITXTPOS(1,1) TXTFONTSIZE1 SPACER0; % Z軸最小
ZUIMINPOS(1,3) = EDITWIDTH0;
YUIMINPOS = ZUIMINPOS; YUIMINPOS(1,2) = ZUIMINPOS(1,2) TXTFONTSIZE1 SPACER0; % Y軸最小
XUIMINPOS = YUIMINPOS; XUIMINPOS(1,2) = YUIMINPOS(1,2) TXTFONTSIZE1 SPACER0; % X軸最小
TITMINPOS = XUIMINPOS; TITMINPOS(1,2) = XUIMINPOS(1,2) TXTFONTSIZE1 SPACER0/4; % 最小軸タイトル
ZUIMAXPOS = ZUIMINPOS; ZUIMAXPOS(1,1) = ZUIMINPOS(1,1) EDITWIDTH0 SPACER0; % Z軸最大
YUIMAXPOS = ZUIMAXPOS; YUIMAXPOS(1,2) = ZUIMAXPOS(1,2) TXTFONTSIZE1 SPACER0; % Y軸最大
XUIMAXPOS = YUIMAXPOS; XUIMAXPOS(1,2) = YUIMAXPOS(1,2) TXTFONTSIZE1 SPACER0; % X軸最大
TITMAXPOS = XUIMAXPOS; TITMAXPOS(1,2) = XUIMAXPOS(1,2) TXTFONTSIZE1 SPACER0/4; % 最大軸タイトル
COLORTXTPOS = [BTNPOS3(1,1), ZUITXTPOS(1,2), EDITWIDTH0, TXTFONTSIZE1]; % 色種タイトル
WIDTHTXTPOS = COLORTXTPOS; WIDTHTXTPOS(1,2) = COLORTXTPOS(1,2) TXTFONTSIZE1 SPACER0; % 線太
STYLETXTPOS = WIDTHTXTPOS; STYLETXTPOS(1,2) = WIDTHTXTPOS(1,2) TXTFONTSIZE1 SPACER0; % 線種
DIRTXTPOS = STYLETXTPOS; DIRTXTPOS(1,2) = STYLETXTPOS(1,2) TXTFONTSIZE1 SPACER0; % 方向
COLOREDITPOS = COLORTXTPOS; COLOREDITPOS(1,1) = COLORTXTPOS(1,1) EDITWIDTH0 SPACER0; % 色種
WIDTHEDITPOS = WIDTHTXTPOS; WIDTHEDITPOS(1,1) = WIDTHTXTPOS(1,1) EDITWIDTH0 SPACER0; % 線太
STYLEEDITPOS = STYLETXTPOS; STYLEEDITPOS(1,1) = STYLETXTPOS(1,1) EDITWIDTH0 SPACER0; % 線種
DIREDITPOS = DIRTXTPOS; DIREDITPOS(1,1) = DIRTXTPOS(1,1) EDITWIDTH0 SPACER0; % 方向
UIFIGWIDTH = BTNPOS4(1,1) BTNSIZE0 SPACER0; % [points]単位
UIFIGHEIGHT = DIREDITPOS(1,2) TXTFONTSIZE1 SPACER0; % [points]単位
UIFIGPOS = [POS(1,1:2) UIFIGWIDTH UIFIGHEIGHT]; % Figureの位置と大きさ
BTNCLBK1 = 'straitline(''ZOOM IN'');';
BTNCLBK2 = 'straitline(''ZOOM OUT'');'; % CallBack
BTNCLBK3 = 'straitline(''QUIT'')';
BTNCLBK4 = 'straitline(''REMOVE'');';
EDITCLBK = 'straitline(''EDIT'');';
WINBTNDWNFCN = 'straitline(''WINBTNDWNFCN'');';
UIFIG = figure('BackingStore','off','Color',UIFIGCOLOR,'Colormap',[],'IntegerHandle','off','InvertHardcopy','off',...
'HandleVisibility','callback','Menubar','none','NumberTitle','off','Resize','off','Visible','off','WindowStyle',...
'normal','Name','STRAITLINE.M','Pointer','arrow','Units','points','Tag','STRAITLINE','Position',UIFIGPOS,'CloseRequestFcn',BTNCLBK3);
BTNPROP.Style = 'PushButton';
BTNPROP.Parent = UIFIG;
BTNPROP.FontName = BTNTXTFONT;
BTNPROP.Units ='points';
BTNPROP.FontSize = BTNFONTSIZE0;
BTNPROP.FontWeight ='bold';
BTN1 = uicontrol(BTNPROP,'String','ZOOM IN','Position',BTNPOS1,'CallBack',BTNCLBK1);
BTN2 = uicontrol(BTNPROP,'String','ZOOM OUT','Position',BTNPOS2,'CallBack',BTNCLBK2);
BTN3 = uicontrol(BTNPROP,'String',' QUIT ','Position',BTNPOS3,'CallBack',BTNCLBK3);
BTN4 = uicontrol(BTNPROP,'String','REMOVE','Position',BTNPOS4,'CallBack',BTNCLBK4);
TXTPROP.Parent = UIFIG;
TXTPROP.FontName = BTNTXTFONT;
TXTPROP.Units = 'points';
TXTPROP.FontSize = TXTFONTSIZE0;
TXTPROP.FontWeight = 'bold';
ZUITXT = uicontrol(TXTPROP,'Style','Text','Position',ZUITXTPOS,'String','Z');
YUITXT = uicontrol(TXTPROP,'Style','Text','Position',YUITXTPOS,'String','Y');
XUITXT = uicontrol(TXTPROP,'Style','Text','Position',XUITXTPOS,'String','X');
TITMIN = uicontrol(TXTPROP,'Style','Text','Position',TITMINPOS,'String','MIN');
TITMAX = uicontrol(TXTPROP,'Style','Text','Position',TITMAXPOS,'String','MAX');
COLORTXT = uicontrol(TXTPROP,'Style','Text','Position',COLORTXTPOS,'String','LineColor');
WIDTHTXT = uicontrol(TXTPROP,'Style','Text','Position',WIDTHTXTPOS,'String','LineWidth');
STYLETXT = uicontrol(TXTPROP,'Style','Text','Position',STYLETXTPOS,'String','LineStyle');
DIRTXT = uicontrol(TXTPROP,'Style','Text','Position',DIRTXTPOS ,'String','Direction');
EDITPROP.Parent = UIFIG;
EDITPROP.FontName = BTNTXTFONT;
EDITPROP.Units = 'points';
EDITPROP.FontSize = TXTFONTSIZE0;
EDITPROP.BackGroundColor = [1 1 1];
EDITPROP.Callback = EDITCLBK;
ZUIMIN = uicontrol(EDITPROP,'Style','Edit','Position',ZUIMINPOS,'String',LINEDATA{1,3}(1,1));
YUIMIN = uicontrol(EDITPROP,'Style','Edit','Position',YUIMINPOS,'String',LINEDATA{1,2}(1,1));
XUIMIN = uicontrol(EDITPROP,'Style','Edit','Position',XUIMINPOS,'String',LINEDATA{1,1}(1,1));
ZUIMAX = uicontrol(EDITPROP,'Style','Edit','Position',ZUIMAXPOS,'String',LINEDATA{1,3}(1,2));
YUIMAX = uicontrol(EDITPROP,'Style','Edit','Position',YUIMAXPOS,'String',LINEDATA{1,2}(1,2));
XUIMAX = uicontrol(EDITPROP,'Style','Edit','Position',XUIMAXPOS,'String',LINEDATA{1,1}(1,2));
COLOREDIT = uicontrol(EDITPROP,'Style','Edit','Position',COLOREDITPOS,'String',num2str(LINEPROP{1,1}));
WIDTHEDIT = uicontrol(EDITPROP,'Style','Edit','Position',WIDTHEDITPOS,'String',LINEPROP{1,2});
STYLEEDIT = uicontrol(EDITPROP,'Style','Popupmenu','Position',STYLEEDITPOS,'String',LINESTYLE,'Value',LINEPROP{1,3});
DIREDIT = uicontrol(EDITPROP,'Style','Popupmenu','Position',DIREDITPOS,'String',DIRECTION,'Value',LINEDIR);
USERDATA={FIG,AXS,OBJ,LINESTYLE,XUIMIN,XUIMAX,YUIMIN,YUIMAX,ZUIMIN,ZUIMAX,COLOREDIT,WIDTHEDIT,STYLEEDIT,DIREDIT,INITWINBTNFCN,ALLCHILD,INITPOINTER,INITBTNDWNFCN};
set(UIFIG,'Tag','CURRENTUICONTROL'); % 他の物と区別する為にTagを作る
set(UIFIG,'UserData',USERDATA);
set(FIG,'WindowButtonDownFcn',WINBTNDWNFCN);
set(UIFIG,'Visible','on');
else % UICONTROLの中から呼び出した時
MODE = OBJ; % 入力引数をMODEに納める
UIFIG = findall(0,'Tag','CURRENTUICONTROL'); % まず[直線オブジェクト]を探す
USERDATA = get(UIFIG,'UserData'); % 保存しておいたパラメータを取り出す
FIG = USERDATA{1, 1};
AXS = USERDATA{1, 2};
OBJ = USERDATA{1, 3};
LINESTYLE = USERDATA{1, 4};
XUIMIN = USERDATA{1, 5};
XUIMAX = USERDATA{1, 6};
YUIMIN = USERDATA{1, 7};
YUIMAX = USERDATA{1, 8};
ZUIMIN = USERDATA{1, 9};
ZUIMAX = USERDATA{1,10};
COLOREDIT = USERDATA{1,11};
WIDTHEDIT = USERDATA{1,12};
STYLEEDIT = USERDATA{1,13};
DIREDIT = USERDATA{1,14};
INITWINBTNFCN = USERDATA{1,15};
ALLCHILD = USERDATA{1,16};
INITPOINTER = USERDATA{1,17};
INITBTNDWNFCN = USERDATA{1,18};
LIM = get(AXS,{'XLim','YLim','ZLim'}); % [Figure]の軸の範囲を求める
if strcmp(MODE,'ZOOM IN')
LINEDIR = get(DIREDIT,'Value');
switch LINEDIR
case 1
CENTER = (str2num(get(YUIMIN,'String')) str2num(get(YUIMAX,'String')))/2;
LIMSPACE = (LIM{1,2}(1,2)-LIM{1,2}(1,1))/4;
if LIMSPACE <= 1/1000
set(AXS,'YLimMode','auto');
else
XLIM = [CENTER-LIMSPACE CENTER LIMSPACE];
set(AXS,'YLim',XLIM);
end
case 2
CENTER = (str2num(get(XUIMIN,'String')) str2num(get(XUIMAX,'String')))/2;
LIMSPACE = (LIM{1,1}(1,2)-LIM{1,1}(1,1))/4;
if LIMSPACE <= 1/1000
set(AXS,'XLimMode','auto');
else
XLIM = [CENTER-LIMSPACE CENTER LIMSPACE];
set(AXS,'XLim',XLIM);
end
case 3
CENTER = (str2num(get(XUIMIN,'String')) str2num(get(XUIMAX,'String')))/2;
LIMSPACE = (LIM{1,1}(1,2)-LIM{1,1}(1,1))/4; % Zに平行な時はX軸を変更する
if LIMSPACE <= 1/1000
set(AXS,'XLimMode','auto');
else
XLIM = [CENTER-LIMSPACE CENTER LIMSPACE];
set(AXS,'XLim',XLIM);
end
end
elseif strcmp(MODE,'ZOOM OUT')
LINEDIR = get(DIREDIT,'Value');
switch LINEDIR
case 1
CENTER = (str2num(get(YUIMIN,'String')) str2num(get(YUIMAX,'String')))/2;
LIMSPACE = (LIM{1,2}(1,2)-LIM{1,2}(1,1));
if LIMSPACE >= 100000
set(AXS,'YLimMode','auto');
else
YLIM = [CENTER-LIMSPACE CENTER LIMSPACE];
set(AXS,'YLim',YLIM);
end
case 2
CENTER = (str2num(get(XUIMIN,'String')) str2num(get(XUIMAX,'String')))/2;
LIMSPACE = (LIM{1,1}(1,2)-LIM{1,1}(1,1));
if LIMSPACE >= 100000
set(AXS,'XLimMode','auto');
else
XLIM = [CENTER-LIMSPACE CENTER LIMSPACE];
set(AXS,'XLim',XLIM);
end
case 3
CENTER = (str2num(get(XUIMIN,'String')) str2num(get(XUIMAX,'String')))/2;
LIMSPACE = (LIM{1,1}(1,2)-LIM{1,1}(1,1)); % Zに平行な時はX軸を変更する
if LIMSPACE >= 100000
set(AXS,'XLimMode','auto');
else
XLIM = [CENTER-LIMSPACE CENTER LIMSPACE];
set(AXS,'XLim',XLIM);
end
end
elseif strcmp(MODE,'QUIT')
CLOSEREQFCN(FIG,UIFIG,INITWINBTNFCN,ALLCHILD,INITPOINTER,INITBTNDWNFCN);
elseif strcmp(MODE,'REMOVE')
CLOSEREQFCN(FIG,UIFIG,INITWINBTNFCN,ALLCHILD,INITPOINTER,INITBTNDWNFCN);
delete(OBJ);
elseif strcmp(MODE,'EDIT') % [EDIT]ボタン
APPLY(OBJ,LINESTYLE,XUIMIN,XUIMAX,YUIMIN,YUIMAX,ZUIMIN,ZUIMAX,COLOREDIT,WIDTHEDIT,STYLEEDIT);
elseif strcmp(MODE,'WINBTNDWNFCN')
LINEDIR = get(DIREDIT,'Value');
LINEDATA = CALCLINE(AXS,LIM,LINEDIR); % クリックした所に作る線の座標を求める
set(OBJ,{'XData','YData','ZData'},LINEDATA,'Color',str2num(get(COLOREDIT,'String')),'LineWidth',str2num(get(WIDTHEDIT,'String')),'LineStyle',LINESTYLE{1,get(STYLEEDIT,'Value')});
set(XUIMIN,'String',LINEDATA{1,1}(1,1));
set(XUIMAX,'String',LINEDATA{1,1}(1,2));
set(YUIMIN,'String',LINEDATA{1,2}(1,1));
set(YUIMAX,'String',LINEDATA{1,2}(1,2));
set(ZUIMIN,'String',LINEDATA{1,3}(1,1));
set(ZUIMAX,'String',LINEDATA{1,3}(1,2));
else
error('入力引数が不正です');
end
end % 新規か更なる呼び出しかの条件の終了
% ----------------------------------------------------------------------------------------------
if nargout == 1 % 出力引数の指定がある時は値を返す
OUTOBJ=OBJ;
end
% ----------------------------------------------------------------------------------------------
function LINEDATA = CALCLINE(AXS,LIM,LINEDIR) % クリックした所に作る線の座標を求める
CURPOINT = get(AXS,'CurrentPoint'); % クリック位置の座標を求める
switch LINEDIR % 奥側の点の位置を使って線を引く
case 1
LINEDATA = {LIM{1,1}, CURPOINT(2,2)*ones(1,2), CURPOINT(2,3)*ones(1,2)};
if any(get(AXS,'View')==90)
LINEDATA{1,3} = [0 0];
end
case 2
LINEDATA = {CURPOINT(2,1)*ones(1,2), LIM{1,2}, CURPOINT(2,3)*ones(1,2)};
if any(get(AXS,'View')==90)
LINEDATA{1,3} = [0 0];
end
case 3
LINEDATA = {CURPOINT(2,1)*ones(1,2), CURPOINT(2,2)*ones(1,2), LIM{1,3}};
otherwise
error('直線を引く方向を示す値がおかしいです。');
end % X,Y軸方向直線は2次元プロット時(Viewが[? 90]or[90 ?]の時)には[ZData]を[0 0]にする
% ----------------------------------------------------------------------------------------------
function [LINEPROP,LINEDATA] = GETLINEINFO(OBJ,LINESTYLE) % getで得た線種文字の番号変換もする
LINEPROP = get(OBJ,{'Color','LineWidth','LineStyle'});
if ~any(strcmp(LINESTYLE,LINEPROP{1,3}))
error('設定されていない線種です。');
end
LINEPROP{1,3} = find(strcmp(LINESTYLE,LINEPROP{1,3}));
LINEDATA = get(OBJ,{'XData','YData','ZData'});
% ----------------------------------------------------------------------------------------------
function APPLY(OBJ,LINESTYLE,XUIMIN,XUIMAX,YUIMIN,YUIMAX,ZUIMIN,ZUIMAX,COLOREDIT,WIDTHEDIT,STYLEEDIT)
set(OBJ,'XData',[str2num(get(XUIMIN,'String')) str2num(get(XUIMAX,'String'))],'YData',[str2num(get(YUIMIN,'String')) str2num(get(YUIMAX,'String'))],...
'ZData',[str2num(get(ZUIMIN,'String')) str2num(get(ZUIMAX,'String'))],'Color',str2num(get(COLOREDIT,'String')),'LineWidth',str2num(get(WIDTHEDIT,'String')),...
'LineStyle',LINESTYLE{1,get(STYLEEDIT,'Value')});
% ----------------------------------------------------------------------------------------------
function CLOSEREQFCN(FIG,UIFIG,INITWINBTNFCN,ALLCHILD,INITPOINTER,INITBTNDWNFCN)
set(FIG,{'WindowButtonDownFcn','WindowButtonMotionFcn','WindowButtonUpFcn'},INITWINBTNFCN);
set(ALLCHILD,{'ButtonDownFcn'},INITBTNDWNFCN);
set(FIG,'Pointer',INITPOINTER);
delete(UIFIG); % [UIFIG]を消す
% ----------------------------------------------------------------------------------------------