classdef dutyHridel < handle
    properties
        Component;
    end
    methods
        function obj=dutyHridel
            clc, close all
            obj.Component.fig=figure('MenuBar','none','Tag','dutyHridel','Name','Dutý Hřídel','Position',[150 100 1000 600]);
            obj.Component.panel1=uipanel(obj.Component.fig,'Title','Parametry hřídele','FontSize',12,'BackgroundColor','white',...
                'Position', [0 0.35 0.75 0.65]);
            obj.Component.panel2=uipanel(obj.Component.fig,'Title','Materiál','FontSize',12,'BackgroundColor','white',...
                'Position', [0.75 0.7 0.25 0.3])
            obj.Component.panel3=uipanel(obj.Component.fig,'Title','Konkrétní hodnoty','FontSize',12,'BackgroundColor','white',...
                'Position', [0.85 0.1 0.15 0.25]);
            obj.Component.panel4=uipanel(obj.Component.fig,'Title','Číselné výsledky','FontSize',12,'BackgroundColor','white',...
                'Position', [0 0 0.85 0.35])
            obj.Component.panel5=uipanel(obj.Component.fig,'Title','Grafické průběhy','FontSize',12,'BackgroundColor','white',...
                'Position', [0.75 0.4 0.25 0.3]) 
            obj.Component.picture=axes('parent',obj.Component.panel1,'Position', [0.05 0.3 0.9 0.65]);
            im=imread('Schema.jpg');
            obj.Component.picture=imshow(im);
            
            % Vstupní parametry
            obj.Component.text_D=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Vnější průměr D [mm]',...
                'Units','normalized','Position',[0.05 0.2 0.1 0.08]);
            obj.Component.edit_D=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_D','Units','normalized','Position',[0.05 0.15 0.1 0.05]);
            obj.Component.text_L=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Vzdálenost ložisek L [mm]',...
                'Units','normalized','Position',[0.23 0.2 0.1 0.08]);
            obj.Component.edit_L=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_L','Units','normalized','Position',[0.23 0.15 0.1 0.05]);
            obj.Component.text_C=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Maximální délka letmého konce C [mm]',...
                'Units','normalized','Position',[0.43 0.2 0.15 0.08]);
            obj.Component.edit_C=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_C','Units','normalized','Position',[0.43 0.15 0.1 0.05]);           
            obj.Component.text_mk=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Hmotnost kotouče mk [kg]',...
                'Units','normalized','Position',[0.05 0.07 0.11 0.08]);
            obj.Component.edit_mk=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_mk','Units','normalized','Position',[0.05 0.02 0.1 0.05]);
            obj.Component.text_Ik=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Moment setrvačnosti kotouče Ik [kg*m^2]',...
                'Units','normalized','Position',[0.23 0.07 0.15 0.08]);
            obj.Component.edit_Ik=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_bp','Units','normalized','Position',[0.23 0.02 0.1 0.05]);
            obj.Component.text_mr=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Hmotnost rotoru mr [kg]',...
                'Units','normalized','Position',[0.43 0.07 0.1 0.08]);
            obj.Component.edit_mr=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_mr','Units','normalized','Position',[0.43 0.02 0.1 0.05]);
            obj.Component.text_otz=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Provozní otáčky n [ot/min]',...
                'Units','normalized','Position',[0.62 0.07 0.11 0.08]);
            obj.Component.edit_otz=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_otz','Units','normalized','Position',[0.62 0.02 0.1 0.05]);
            obj.Component.text_dpr=uicontrol('parent',obj.Component.panel1,'Style','text','BackgroundColor','white','String','Dovolený průhyb mezi podporami [mm]',...
                'Units','normalized','Position',[0.8 0.07 0.15 0.08]);
            obj.Component.edit_dpr=uicontrol('parent',obj.Component.panel1,... 
                'Style', 'edit','String','','Tag','Edit_dpr','Units','normalized','Position',[0.8 0.02 0.1 0.05]);
            
            % Materiál
            obj.Component.text_E=uicontrol('parent',obj.Component.panel2,'Style','text','BackgroundColor','white','String','Modul pružnosti E [GPa]',...
                'Units','normalized','Position',[0.05 0.7 0.4 0.2])
            obj.Component.edit_E=uicontrol('parent',obj.Component.panel2,'Style','edit','String','','Tag','Edit_E',...
                'Units','normalized','Position',[0.05 0.5 0.4 0.2]);
            obj.Component.text_Re=uicontrol('parent',obj.Component.panel2,'Style','text','BackgroundColor','white','String','Mez kluzu Re [MPa]',...
                'Units','normalized','Position',[0.05 0.25 0.4 0.1])
            obj.Component.edit_Re=uicontrol('parent',obj.Component.panel2,'Style','edit','String','','Tag','Edit_Re',...
                'Units','normalized','Position',[0.05 0.05 0.4 0.2]);
            obj.Component.text_ro=uicontrol('parent',obj.Component.panel2,'Style','text','BackgroundColor','white','String','Hustota materiálu [kg/m^3]',...
                'Units','normalized','Position',[0.55 0.7 0.4 0.2])
            obj.Component.edit_ro=uicontrol('parent',obj.Component.panel2,'Style','edit','String','','Tag','Edit_ro',...
                'Units','normalized','Position',[0.55 0.5 0.4 0.2]);
             obj.Component.text_k=uicontrol('parent',obj.Component.panel2,'Style','text','BackgroundColor','white','String','Koeficient bezpečnosti k MSP',...
                'Units','normalized','Position',[0.55 0.25 0.4 0.2])
            obj.Component.edit_k=uicontrol('parent',obj.Component.panel2,'Style','edit','String','','Tag','Edit_k',...
                'Units','normalized','Position',[0.55 0.05 0.4 0.2]);
            
            % Konkrétní hodnoty
           obj.Component.text_z=uicontrol('parent',obj.Component.panel3,'Style','text','BackgroundColor','white','String',' Požadovaný vnitřní průměr d [mm]',...
                'Units','normalized','Position',[0.15 0.8 0.68 0.22]);
           obj.Component.edit_dz=uicontrol('parent',obj.Component.panel3,... 
                'Style', 'edit','String','','Tag','Edit_dz','Units','normalized','Position',[0.15 0.55 0.7 0.2]);
           obj.Component.text_cz=uicontrol('parent',obj.Component.panel3,'Style','text','BackgroundColor','white','String','Délka letmého konce C [mm]',...
                'Units','normalized','Position',[0.15 0.3 0.68 0.22]);
           obj.Component.edit_cz=uicontrol('parent',obj.Component.panel3,... 
                'Style', 'edit','String','','Tag','Edit_cz','Units','normalized','Position',[0.15 0.07 0.7 0.2]);
            % Výpočet konkrétních hodnot
            obj.Component.pushbutton_vypocet=uicontrol('parent',obj.Component.fig,'Style','pushbutton',...
                'String','Výpočet','Units','normalized','Position',[0.85 0.0 0.15 0.1],'Tag','Vypocet','callback',@obj.callbackVypocet);            
            % Výpočtové
            obj.Component.pushbutton_prLK=uicontrol('parent',obj.Component.panel5,'Style','pushbutton',... % průhyby letmého konce
                'String','Průhyby letmého konce','Units','normalized','Position',[0 0.75 1 0.25],'Tag','PruhybyLetmehoKonce','callback',@obj.callbackGrafy);
            obj.Component.pushbutton_prMP=uicontrol('parent',obj.Component.panel5,'Style','pushbutton',... % průhby mezi podporami
                'String','Průhyby mezi podporami','Units','normalized','Position',[0. 0.5 1 0.25],'Tag','PruhybyMeziPodporami','callback',@obj.callbackGrafy);
            obj.Component.pushbutton_napMP=uicontrol('parent',obj.Component.panel5,'Style','pushbutton',... % napětí mezi podporami
                'String','Napětí mezi podporami','Units','normalized','Position',[0 0.25 1 0.25],'Tag','NapetiMeziPodporami','callback',@obj.callbackGrafy);
             obj.Component.pushbutton_napB=uicontrol('parent',obj.Component.panel5,'Style','pushbutton',... % napětí v místě B
                'String','Napětí v místě B','Units','normalized','Position',[0 0 1 0.25],'Tag','NapetiLoziskoB','callback',@obj.callbackGrafy);
            % Číselné výsledky
            obj.Component.text_popis=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Hodnoty za klidu',...
                'Fontsize',10,'Units','normalized','Position',[0.02 0.85 0.12 0.1])
            obj.Component.text_RA=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Reakce ložisko A [N]',...
                'Units','normalized','Position',[0.02 0.66 0.09 0.16])
            obj.Component.edit_RA=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_RA',...
                'Units','normalized','Position',[0.02 0.5 0.09 0.16],'Enable','off');
            obj.Component.text_RB=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Reakce ložisko B [N]',...
                'Units','normalized','Position',[0.02 0.26 0.09 0.16])
            obj.Component.edit_RB=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_RB',...
                'Units','normalized','Position',[0.02 0.1 0.09 0.16],'Enable','off');
            obj.Component.text_napMP=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Napětí mezi podporami [MPa]',...
                'Units','normalized','Position',[0.13 0.66 0.1 0.16])
            obj.Component.edit_napMP=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_napMP',...
                'Units','normalized','Position',[0.13 0.50 0.1 0.16],'Enable','off');
            obj.Component.text_napB=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Napětí v ložisku B [MPa]',...
                'Units','normalized','Position',[0.13 0.26 0.1 0.16])
            obj.Component.edit_napB=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_napB',...
                'Units','normalized','Position',[0.13 0.1 0.1 0.16],'Enable','off');
            obj.Component.text_prLK=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Průhyb letmý konec [mm]',...
                'Units','normalized','Position',[0.25 0.66 0.08 0.16])
            obj.Component.edit_prLK=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_prLK',...
                'Units','normalized','Position',[0.25 0.50 0.08 0.16],'Enable','off');
            obj.Component.text_prMP=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Průhyb mezi podporami [mm]',...
                'Units','normalized','Position',[0.25 0.26 0.1 0.16])
            obj.Component.edit_prMP=uicontrol('parent',obj.Component.panel4,'Style','edit','BackgroundColor','white','String','','Tag','Edit_mpMP',...
                'Units','normalized','Position',[0.25 0.1 0.1 0.16],'Enable','off');
            % setrvačné účinky
            obj.Component.text_popis=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Hodnoty za rotace',...
                'Fontsize',10,'Units','normalized','Position',[0.42 0.85 0.13 0.1])
            obj.Component.text_RAg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Reakce ložisko A [N]',...
                'Units','normalized','Position',[0.42 0.66 0.09 0.16])
            obj.Component.edit_RAg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_RA',...
                'Units','normalized','Position',[0.42 0.5 0.09 0.16],'Enable','off');
            obj.Component.text_RBg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Reakce ložisko B [N]',...
                'Units','normalized','Position',[0.42 0.26 0.09 0.16])
            obj.Component.edit_RBg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_RB',...
                'Units','normalized','Position',[0.42 0.10 0.09 0.16],'Enable','off');
            obj.Component.text_napMPg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Napětí mezi podporami [MPa]',...
                'Units','normalized','Position',[0.53 0.66 0.1 0.16])
            obj.Component.edit_napMPg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_napMP',...
                'Units','normalized','Position',[0.53 0.50 0.1 0.16],'Enable','off');
            obj.Component.text_napBg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Napětí v ložisku B [MPa]',...
                'Units','normalized','Position',[0.53 0.26 0.1 0.16])
            obj.Component.edit_napBg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_napB',...
                'Units','normalized','Position',[0.53 0.10 0.1 0.16],'Enable','off');
            obj.Component.text_prLKg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Průhyb letmý konec [mm]',...
                'Units','normalized','Position',[0.65 0.66 0.08 0.16])
            obj.Component.edit_prLKg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_prLK',...
                'Units','normalized','Position',[0.65 0.50 0.08 0.16],'Enable','off');
            obj.Component.text_prLKg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Průhyb letmý konec [mm]',...
                'Units','normalized','Position',[0.65 0.66 0.08 0.16])
            obj.Component.edit_prLKg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_prLK',...
                'Units','normalized','Position',[0.65 0.50 0.08 0.16],'Enable','off');
            obj.Component.text_prMPg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','Průhyb mezi podporami [mm]',...
                'Units','normalized','Position',[0.65 0.26 0.1 0.16])
            obj.Component.edit_prMPg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_mpMP',...
                'Units','normalized','Position',[0.65 0.10 0.1 0.16],'Enable','off');
            obj.Component.text_wkritg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','První kritická rychlost nehmotná hřídel [ot/min]',...
                'Units','normalized','Position',[0.8 0.66 0.15 0.16])
            obj.Component.edit_wkritg=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_wkrit',...
                'Units','normalized','Position',[0.8 0.50 0.1 0.16],'Enable','off');
            obj.Component.text_wkritg=uicontrol('parent',obj.Component.panel4,'Style','text','BackgroundColor','white','String','První kritická rychlost hmotná hřídel  [ot/min]',...
                'Units','normalized','Position',[0.8 0.26 0.15 0.16])
            obj.Component.edit_wkritghm=uicontrol('parent',obj.Component.panel4,'Style','edit','String','','Tag','Edit_wkrit',...
                'Units','normalized','Position',[0.8 0.10 0.1 0.16],'Enable','off');
            
        end
        function callbackGrafy(obj,handle,eventdata)            
            % Parametry hřídele
            D=str2num(obj.Component.edit_D.String);
            if isempty(D)
                        errordlg('Nezadali jste vnější průměr D')
                        return
            end 
            L=str2num(obj.Component.edit_L.String);
            if isempty(L)
                        errordlg('Nezadali jste vzdálenost mezi podporami L')
                        return
            end
            C=str2num(obj.Component.edit_C.String);
            if isempty(C)
                        errordlg('Nezadali jste délku letmého konce C')
                        return                     
            end
            mr=str2num(obj.Component.edit_mr.String);
            if isempty(mr)
                        errordlg('Nezadali jste hmotnost rotoru mr')
                        return                     
            end
            mk=str2num(obj.Component.edit_mk.String);
            if isempty(mk)
                        errordlg('Nezadali jste hmotnost kotouče letmého konce')
                        return                     
            end          
            Ik=str2num(obj.Component.edit_Ik.String);
            if isempty(Ik)
                        errordlg('Nezadali jste moment setrvačnosti kotouče letmého konce')
                        return                     
            end   
            cz=str2num(obj.Component.edit_cz.String);
            
            otz=str2num(obj.Component.edit_otz.String);
            if isempty(otz)
                        errordlg('Nezadali jste provozní otáčky')
                        return
            end
            dpr=str2num(obj.Component.edit_dpr.String);
            if isempty(dpr)
                errordlg('Nezadali jste dovolený průhyb')
                return
            end           
            %Materiál
            E=str2num(obj.Component.edit_E.String);
            if isempty(E)
                        errordlg('Nezadali jste modul pružnosti')
                        return
                    end
            Re=str2num(obj.Component.edit_Re.String);

            ro=str2num(obj.Component.edit_ro.String);
            if isempty(ro)
                        errordlg('Nezadali jste hustotu')
                        return
                    end
            k=str2num(obj.Component.edit_k.String);

            switch handle.Tag
                          
                case 'PruhybyLetmehoKonce'
                    clc
                    [wp,wpg] = GrafPrLK(D, L, C, mr, mk, Ik, otz, E, ro);
                    wp;wpg;
                    d=[0:D]';
                    c=[0:C];        
                    fig1h = findall(0,'type','figure','Tag','dutyHridel');
                    figh = findall(0,'type','figure','Tag','PrLK');
                    delete(setdiff(figh, fig1h))    
                    if isempty(cz)|| cz == 0
                    newF=figure('Name','PruhybyLetmehoKonce','Tag','PrLK');
                    [M,N]=meshgrid(d,c);
                    subplot(1,2,1);
                    mesh(M,N,wp')
                    title('průhyb letmého konce za klidu');
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Průhyb letmého konce [mm]')  
                    axis tight
                    subplot(1,2,2);
                    mesh(M,N,wpg')
                    title('průhyb letmého konce za rotace');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Délka letmého konce C [mm]');zlabel('Průhyb [mm]')
                    axis tight
                    elseif cz > 0 & cz < C
                    newF=figure('Name','PruhybyLetmehoKonce','Tag','PrLK');
                    [M,N]=meshgrid(d,c);
                    subplot(2,2,1);
                    mesh(M,N,wp')
                    title('průhyb letmého konce za klidu');
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Průhyb letmého konce [mm]')  
                    axis tight
                    subplot(2,2,2);
                    mesh(M,N,wpg')
                    title('průhyb letmého konce za rotace');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Délka letmého konce C [mm]');zlabel('Průhyb [mm]')
                    axis tight
                    subplot(2,2,3);
                    contour(M,wp',N,[cz,cz])
                    title('Průbyb při zadaném C');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Délka letmého konce C [mm]');zlabel('Průhyb [mm]')     
                    axis tight
                    subplot(2,2,4);
                    contour(M,wpg',N,[cz,cz])
                    title('Průhyb při zadaném C');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Průhyb letmého konce [mm]');
                    axis tight
                    elseif cz < 0
                        errordlg('POZOR záporná hodnota C')
                        return
                    elseif cz > C 
                        errordlg('Konkrétní hodnota C je mimo rozsah')
                        return
                    end
                    
                case 'PruhybyMeziPodporami'
                    clc
                    [wr, wrg] = GrafPrMP(D, L, C, mr, mk, Ik, otz, E, ro);
                    wr; wrg;                    
                    d=[0:D]';
                    c=[0:C];
                    fig1h = findall(0,'type','figure','Tag','dutyHridel');
                    figh = findall(0,'type','figure','Tag','PrMP');
                    delete(setdiff(figh, fig1h))
                    if isempty(cz) || cz == 0
                    newF=figure('Name','PruhybyMEziPodporami','Tag','PrMP');                   
                    subplot(1,2,1);
                    [RS1,RS2]=meshgrid(d,c);
                    mesh(RS1,RS2,wr')
                    title('Průhyb mezi podporami za klidu');
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Průhyb [mm]')
                    axis tight
                    subplot(1,2,2);
                    [RD1,RD2]=meshgrid(d,c);
                    mesh(RD1,RD2,wrg')
                    title('Průhyb mezi podporami za rotace');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Délka letmého konce C [mm]');zlabel('Průhyb [mm]')
                    axis tight
                    elseif cz > 0 
                    newF=figure('Name','PruhybyMEziPodporami','Tag','PrMP');                   
                    subplot(2,2,1);
                    [RS1,RS2]=meshgrid(d,c);
                    mesh(RS1,RS2,wr')
                    title('Průhyb mezi podporami za klidu');
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Průhyb [mm]')
                    axis tight
                    subplot(2,2,2);
                    [RD1,RD2]=meshgrid(d,c);
                    mesh(RD1,RD2,wrg')
                    title('Průhyb mezi podporami za rotace');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Délka letmého konce C [mm]');zlabel('Průhyb [mm]')
                    axis tight
                    subplot(2,2,3);
                    [RS1,RS2]=meshgrid(d,c);
                    contour(RS1,wr', RS2, [cz,cz])                   
                    title('Průhyb při zadaném C');
                    xlabel('Vnitřní průměr d [mm]');ylabel('Průhyb mezi podporami');
                    axis tight                    
                    subplot(2,2,4);
                    [RD1,RD2]=meshgrid(d,c);
                    contour(RD1,wrg',RD2,[cz,cz])
                    title('Průhyb při zadaném C');                    
                    xlabel('Vnitřní průměr d [mm]');ylabel('Průhyb mezi podporami');
                    axis tight
                    elseif cz < 0
                        errordlg('POZOR záporná hodnota C')
                        return
                    elseif cz > C 
                        errordlg('Konkrétní hodnota C je mimo rozsah')
                        return
                    end
                    
                case 'NapetiMeziPodporami'
                    clc
                    if (isempty(Re) && ~isempty(k)) || (~isempty(Re) && isempty(k))                       
                        errordlg('Re nebo k je prázdné')
                        return
                    end
                    [sigs, sigd]= GrafNapMP(D, L, C, mr, mk, Ik, otz, E, ro);
                    sigs; sigd;
                    d=([0:D]');
                    c=([0:C]);                   
                    fig1h = findall(0,'type','figure','Tag','dutyHridel');
                    figh = findall(0,'type','figure','Tag','NapMP');
                    delete(setdiff(figh, fig1h))
                    if (isempty(Re) & isempty(k)) || (Re==0 && k==0)
                    newF=figure('Name','NapetiMeziPodporami','Tag','NapMP');
                    subplot(1,2,1)
                    [SS,TS]=meshgrid(d,c);
                    meshc(SS,TS,sigs')
                    title('napětí mezi podporami za klidu')                   
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí [MPa]')                   
                    [SD,TD]=meshgrid(d,c);
                    subplot(1,2,2)
                    meshc(SD,TD,sigd')
                    title('napětí mezi podporami za rotace')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí [MPa]')
                    axis tight                    
                    elseif Re > 0 && k > 0
                    newF=figure('Name','NapetiMeziPodporami','Tag','NapMP');
                    subplot(2,2,1)
                    [SS,TS]=meshgrid(d,c);
                    meshc(SS,TS,sigs')
                    title('napětí mezi podporami za klidu')                   
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí [MPa]')                   
                    [SD,TD]=meshgrid(d,c);
                    subplot(2,2,2)
                    meshc(SD,TD,sigd')
                    title('napětí mezi podporami za rotace')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí [MPa]')
                    axis tight
                    subplot(2,2,3)
                    contour(SS,TS,sigs',Re/k)
                    title('Průběhy napětí do max kritéria')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí mezi podporami')
                    axis tight
                    [SD,TD]=meshgrid(d,c);
                    subplot(2,2,4)
                    contour(SD,TD,sigd',Re/k)
                    title('Průběhy napětí do max kritéria')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí mezi podporami')
                    axis tight
                    elseif Re < 0 || k < 0
                        errordlg('Re nebo k je záporné')
                        return    
                    end                   
                    
                case 'NapetiLoziskoB'
                    clc
                    if (isempty(Re) && ~isempty(k)) || (~isempty(Re) && isempty(k))                       
                        errordlg('Re nebo k je prázdné')
                        return
                    end
                    [sigbs,sigbd] = GrafNapB(D, L, C, mr, mk, Ik, otz, E, ro);
                    sigbs; sigbd;
                    d=[0:D]';
                    c=[0:C];
                    fig1h = findall(0,'type','figure','Tag','dutyHridel');
                    figh = findall(0,'type','figure','Tag','NapB');
                    delete(setdiff(figh, fig1h))
                    if (isempty(Re) && isempty(k)) || (Re == 0 && k == 0)                   
                    newF=figure('Name','NapetiLoziskoB','Tag','NapB');                    
                    subplot(1,2,1)
                    [BS1,BS2]=meshgrid(d,c);
                    meshc(BS1,BS2,sigbs')
                    title('Napětí v ložisku B za klidu')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí v ložisku B [MPa]')
                    axis tight
                    [BD1,BD2]=meshgrid(d,c);
                    subplot(1,2,2)
                    meshc(BD1,BD2,sigbd')
                    title('napětí v ložisku B za rotace')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí v ložisku B [MPa]')
                    axis tight
                    elseif Re > 0 && k > 0
                    newF=figure('Name','NapetiLoziskoB','Tag','NapB');
                    subplot(2,2,1)
                    [BS1,BS2]=meshgrid(d,c);
                    meshc(BS1,BS2,sigbs')
                    title('Napětí v ložisku B za klidu')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí v ložisku B [MPa]')
                    axis tight
                    [BD1,BD2]=meshgrid(d,c);
                    subplot(2,2,2)
                    meshc(BD1,BD2,sigbd')
                    title('napětí v ložisku B za rotace')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('Napětí v ložisku B [MPa]')
                    axis tight
                    subplot(2,2,3)
                    contour(BS1,BS2,abs(sigbs'),Re/k)
                    title('Průběhy do max kritéria')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('velikost napětí v ložisku B')
                    axis tight
                    [BD1,BD2]=meshgrid(d,c);
                    subplot(2,2,4)
                    contour(BD1,BD2,abs(sigbd'),Re/k)
                    title('Průběhy do max kritéria')
                    xlabel('vnitřní průměr d [mm]');ylabel('délka letmého konce C [mm]');zlabel('velikost napětí v ložisku B')
                    axis tight
                    elseif Re < 0 || k < 0
                        errordlg('Re nebo k je záporné')
                        return  
                    end
                otherwise
                    handle.Tag
            end

        end
         
        function callbackVypocet(obj,handle,eventdata)            
           % Parametry hřídele
            D=str2num(obj.Component.edit_D.String);
            if isempty(D)
                        errordlg('Nezadali jste vnější průměr D')
                        return
            end 
            L=str2num(obj.Component.edit_L.String);
            if isempty(L)
                        errordlg('Nezadali jste vzdálenost mezi podporami L')
                        return
            end           
            mr=str2num(obj.Component.edit_mr.String);
            if isempty(mr)
                        errordlg('Nezadali jste hmotnost rotoru mr')
                        return                     
            end
            mk=str2num(obj.Component.edit_mk.String);
            if isempty(mk)
                        errordlg('Nezadali jste hmotnost kotouče letmého konce')
                        return                     
            end          
            Ik=str2num(obj.Component.edit_Ik.String);
            if isempty(Ik)
                        errordlg('Nezadali jste moment setrvačnosti kotouče letmého konce')
                        return                     
            end            
            otz=str2num(obj.Component.edit_otz.String);
            if isempty(otz)
                        errordlg('Nezadali jste provozní otáčky')
                        return
            end            
            dpr=str2num(obj.Component.edit_dpr.String);
            if isempty(dpr)
                errordlg('Nezadali jste dovolený průhyb')
                return
            end     
            % Konkrétní hodnoty
            dz=str2num(obj.Component.edit_dz.String);
            if isempty(dz)
                        errordlg('Nezadali jste vnitřní průměr d')
                        return
            elseif dz > D || dz == D
                errordlg('vnitřní průměr d je větší nebo roven průměru hřídele D')
                return
            end            
            cz=str2num(obj.Component.edit_cz.String);
            if isempty(cz)
                        errordlg('Nezadali jste délku letmého konce C')
                        return
            end
            %Materiál
            E=str2num(obj.Component.edit_E.String);
            if isempty(E)
                        errordlg('Nezadali jste modul pružnosti')
                        return
                    end
            Re=str2num(obj.Component.edit_Re.String);
            if isempty(Re)
                        errordlg('Nezadali jste mez kluzu')
                        return
                    end
            ro=str2num(obj.Component.edit_ro.String);
            if isempty(ro)
                        errordlg('Nezadali jste hustotu')
                        return
                    end
            k=str2num(obj.Component.edit_k.String);
                    if isempty(k)
                        errordlg('Nezadali jste koeficient bezpečnosti k MSP')
                        return
                    end
            switch handle.Tag
                case 'Vypocet'
                    g=9.81;
                    Ep=E*10^9; 
                    D=D*10^-3; L=L*10^-3; cz=cz*10^-3; dz=dz*10^-3;  
                    a=L/2; b=L-a;
                    % natočení letmého konce
                    ukz=((64)/(12*Ep*pi*(D^4-dz^4)))*(-3*a^2*(mr*g+ro*g*0.25*(D^2-dz^2)*L)+(8*a*cz+6*cz^2)*(mk*g+ro*g*0.25*(D^2-dz^2)*cz));
                    % převod otáček na rad/s
                    ot=2*pi*otz/60;
                    % moment setrvačnosti letmého konce
                    I=Ik+0.5*(ro*g*cz*0.25*(D^4-dz^4));
                    % gyroskopický moment na disk letmého konce
                    Mgz=ot^2*sin(ukz*180/pi)*I;
                    
                    %Reakce ložisko A za klidu
                    Rasz=(((mr*g+ro*g*0.25*(D^2-dz^2)*L)*b-(mk*g+ro*g*0.25*(D^2-dz^2)*cz)*cz))/L;
                    %Reakce ložisko A za rotace
                    Radz=(((mr*g+ro*g*0.25*(D^2-dz^2)*L)*b-(mk*g+ro*g*0.25*(D^2-dz^2)*cz)*cz+Mgz))/L;

                    %Reakce ložisko B za klidu
                    Rbsz=((mr*g+ro*g*0.25*(D^2-dz^2)*L)*a-(mk*g+ro*g*0.25*(D^2-dz^2)*cz)*(L+cz))/L;
                    %Reakce ložisko B za rotace
                    Rbdz=((mr*g+ro*g*0.25*(D^2-dz^2)*L)*a-(mk*g+ro*g*0.25*(D^2-dz^2)*cz)*(L+cz)+Mgz)/L;
                    
                    % Výpočet kritických otáček
                    % zavedení příčníkových součinitelů
                    J=pi*(D^4-dz^4)/64;                    
                    % zavedení příčníkových součinitelů
                    a11=(a^3*b^3)/(3*Ep*J*L);
                    a12=(a*cz*(a^2-L^2))/(6*Ep*L*J); a21=a12;
                    a22=(cz^2*(L+cz))/(3*Ep*J);

                    b11=(a^2*b^2*(a-b))/(2*L^3*Ep*J);
                    b12=(cz*(L^2-3*a^2))/(6*Ep*L*J); b21=b12;
                    b22=(cz*(2*L+3*cz))/(6*Ep*J);
                    
                    g11=b11;
                    g12=(a*(a^2-L^2))/(6*Ep*J*L);g21=g12;
                    g22=(cz*(2*L+3*cz))/(6*Ep*J);

                    d11=(a*b*(a^3+b^3))/(L^4*Ep*J);
                    d12=(3*a^2-L^2)/(6*Ep*L*J);d21=d12;
                    d22=(L+3*cz)/(3*Ep*J);

                    w=(1:10:200000);
                    % matice pro kritické otáčky, vektor determinantu
                    % matice 
                    for iw=1:length(w)
                    detw(iw)=det([(a11*mr*(w(iw))^2)-1, a12*mk*(w(iw))^2,    (-g12)*0.5*Ik*(w(iw))^2;...
                                   a21*mr*(w(iw))^2,   (a22*mk*(w(iw))^2)-1, (-g22)*0.5*Ik*(w(iw))^2;...
                                   b21*mr*(w(iw))^2,    b22*mk*(w(iw))^2,   ((-d22)*0.5*Ik*(w(iw))^2)-1]);
                    end
                     wkrit=inf;
                    % metoda půlení intervalu   
                    for o=1:length(detw)-1
                        if (detw(o)<0 && detw(o+1)>0) || (detw(o)>0 && detw(o+1)<0)
                            break
                        end
                        ak=w(o); bk=w(o+1);
                        wkrit=((ak+bk)/2);
                        wkrit=(wkrit*60)/(2*pi);                         
                    end                    
                    
                    % hmotná hřídel
                    w=(1:10:200000);
                    % matice pro kritické otáčky, vektor determinantu
                    % matice 
                    for iw=1:length(w)
                    detw(iw)=det([(a11*(mr+ro*0.25*(D^2-dz^2)*L)*(w(iw))^2)-1, a12*(mk+ro*0.25*(D^2-dz^2)*cz)*(w(iw))^2,    (-g12)*0.5*I*(w(iw))^2;...
                                   a21*(mr+ro*0.25*(D^2-dz^2)*L)*(w(iw))^2,   (a22*(mk+ro*0.25*(D^2-dz^2)*cz)*(w(iw))^2)-1, (-g22)*0.5*I*(w(iw))^2;...
                                   b21*(mr+ro*0.25*(D^2-dz^2)*L)*(w(iw))^2,    b22*(mk+ro*0.25*(D^2-dz^2)*cz)*(w(iw))^2,   ((-d22)*0.5*I*(w(iw))^2)-1]);
                    end
                     wkrithm=inf;
                    % metoda půlení intervalu   
                    for o=1:length(detw)-1
                        if (detw(o)<0 && detw(o+1)>0) || (detw(o)>0 && detw(o+1)<0)
                            break
                        end
                        ak=w(o); bk=w(o+1);
                        wkrithm=((ak+bk)/2);
                        wkrithm=(wkrithm*60)/(2*pi);                         
                    end          
                    
                    D=D*10^3; L=L*10^3; cz=cz*10^3; dz=dz*10^3;
                    a=L/2; b=L-a;
                    % gyroskopický moment na disk letmého konce
                    Mgz=ot^2*sin(ukz*180/pi)*I*10^3;
                    Ep=E*10^3;
                                                                      
                    % výpočet průhybu letmého konce za klidu
                    wpz=((64/(12*pi*Ep*(D^4-dz^4)))*(-3*a^2*(mr*g+ro*g*0.25*(D^2-dz^2)*L*10^-9)+(8*a*cz+4*cz^2)*(mk*g+ro*g*0.25*(D^2-dz^2)*cz*10^-9))*cz);
                    % dynamický výpočet po roztočení průhyb letmého konce
                    wpgz=((64/(12*pi*Ep*(D^4-dz^4)))*(-3*a^2*(mr*g+ro*g*0.25*(D^2-dz^2)*L*10^-9)+(8*a*cz+4*cz^2)*(mk*g+ro*g*0.25*(D^2-dz^2)*cz*10^-9)-(8*a+6*cz)*Mgz)*cz);
                      
                    % výpočet průhybu mezi podporami za klidu
                    wrz=((64/(12*Ep*pi*(D^4-dz^4)))*(2*a*(mr*g+ro*g*0.25*(D^2-dz^2)*L*10^-9)-3*cz*(mk*g+ro*g*0.25*(D^2-dz^2)*cz*10^-9))*a^2);
                    % výpočet průhybu mezi podporami za rotace
                    wrgz=((64/(12*Ep*pi*(D^4-dz^4)))*(2*a*(mr*g+ro*g*0.25*(D^2-dz^2)*L*10^-9)-3*cz*(mk*g+ro*g*0.25*(D^2-dz^2)*cz*10^-9)+3*Mgz)*a^2);
                    
                    %napětí mezi podporami v klidu
                    sigsz=((32*D*a)*((mr*g+g*ro*g*0.25*(D^2-dz^2)*L*10^-9)*b-(mk*g+g*ro*0.25*(D^2-dz^2)*cz*10^-9)*cz))/(pi*L*(D^4-dz^4));
                    % napětí mezi podporami po roztočení
                    sigdz=((32*D*a)*((mr*g+g*ro*g*0.25*(D^2-dz^2)*L*10^-9)*b-(mk*g+g*ro*0.25*(D^2-dz^2)*cz*10^-9)*cz+Mgz))/(pi*L*(D^4-dz^4));

                    % napěti v lozisku B za klidu
                    sigbsz=((32*D*(mk*g+ro*g*0.25*(D^2-dz^2)*cz*10^-9)*cz)/(pi*(D^4-dz^4)));
                    % napětí v ložisku B za rotace
                    sigbdz=((32*D*((mk*g+ro*g*0.25*(D^2-dz^2)*cz*10^-9)*cz-Mgz))/(pi*(D^4-dz^4)));
                    
                    
                    % Číselné výsledky
                    obj.Component.edit_RA.String=num2str((Rasz))  
                    obj.Component.edit_RB.String=num2str((Rbsz))  
                    obj.Component.edit_napMP.String=num2str(sigsz)  
                    obj.Component.edit_napB.String=num2str(sigbsz)  
                    obj.Component.edit_prMP.String=num2str(wrz)  
                    obj.Component.edit_prLK.String=num2str(wpz)
                    % setrvačné účinky
                    obj.Component.edit_RAg.String=num2str((Radz))  
                    obj.Component.edit_RBg.String=num2str((Rbdz))  
                    obj.Component.edit_napMPg.String=num2str(sigdz)  
                    obj.Component.edit_napBg.String=num2str(sigbdz)    
                    obj.Component.edit_prMPg.String=num2str(wrgz)   
                    obj.Component.edit_prLKg.String=num2str(wpgz)
                    obj.Component.edit_wkritg.String=num2str(round(wkrit))      
                    obj.Component.edit_wkritghm.String=num2str(round(wkrithm)) 
                otherwise handle.Tag
            end
        end        
    end
end