function [imh,im]=kakuro_show(K,res)
%
% [imh,im]=kakuro_show(K,res)
%
% liefert eine Matlab-Figure mit der Standard-Darstellung eines Kakuros
% wie man sie z.B. in einer Zeitung findet.
% 
% Input:
%         K   - Kakuro (Struktur oder 3-D Matrix, siehe kakuro_example)
%         res - optional Eingabe der Loesung
% Output:
%         imh - Handle auf das dargestellte Image
%         im  - Matrix aus Nullen und Einsen
%               auf den Feldern mit Nullen darf gesetzt werden, 
%               die Felder mit Einsen markieren verbotene Bereiche
%
% Die Matrix im hat eine Zeile und eine Spalte mehr als das urspruengliche
% Kakuro, da eine zusataetzliche erste Zeile und erste Spalte fuer die
% Angabe gebraucht wird.
%
% Die Loesung des Kakuroes kann natuerlich nur angezeigt werden, wenn die 
% Loesung berechnet und uebergeben wird (optional).
%
% Winfried Kernbichler 13.05.2007

% Konvertieren
% K - Struktur, kak - 3D-Matrix
if isstruct(K)
    kak = kakuro_convert(K);
else
    kak = K;
    K = kakuro_convert(kak); 
end

im = zeros(size(kak,1)+1,size(kak,2)+1);
im(1,:) = 1; im(:,1) = 1;

im(2:end,2:end) = isnan(kak(:,:,1)) | isnan(kak(:,:,2));

screen_shift = 50;
screen_shift = [screen_shift,screen_shift,-2*screen_shift,-2*screen_shift];
screen_size = get(0,'ScreenSize') + screen_shift;


% Figure und Image
figure('Position',screen_size);
imh = image(im);
set(imh,'CDataMapping','scaled')
colormap([1,1,1;0,0,0]);
caxis([0,1])
axis equal
axis tight
axis off

% hold on
% xd = get(imh,'xdata'); yd = get(imh,'ydata');
% x = min(xd)-0.5:max(xd)+0.5;
% y = min(yd)-0.5:max(yd)+0.5;
% [X,Y]=meshgrid(x,y);
% mh = mesh(X,Y,zeros(size(X)),'EdgeColor','k','FaceColor','none');
% hold off

text_size = 14;

% Linien und Text
for ku = 1:2;
    [kzi,ksi] = find( kak(:,:,ku)~=0 & ~isnan(kak(:,:,ku)) ); 
    kzi = kzi + 1;
    ksi = ksi + 1;

    if ku == 1
        % horizontal
        h_align = 'left'; v_align = 'bottom';
        kz_shift = 0; ks_shift = 1;
        t_shift = [0.05,-0.05];
    else
        % vertical
        h_align = 'right'; v_align = 'top';
        kz_shift = 1; ks_shift = 0;
        t_shift = [-0.05,0.05];
    end


    for ind = 1:length(kzi)


        kz = kzi(ind)-kz_shift;
        ks = ksi(ind)-ks_shift;
        str = num2str(kak(kzi(ind)-1,ksi(ind)-1,ku));

        line( ...
            'xdata',ks+[-0.5,  0.5, 0.5, -0.5, -0.5, 0.5], ...
            'ydata',kz+[-0.5, -0.5, 0.5,  0.5, -0.5, 0.5], ...
            'Color',[1,1,1], 'lineWidth',1  ...
            )

        text( ...
            ks+t_shift(1),kz+t_shift(2),str, ...
            'horizontalalignment',h_align, ...
            'verticalalignment',v_align, ...
            'fontsize',text_size,'fontweight','bold', ...
            'color',[1,1,1] ...
            )

    end
    
end

[kzi,ksi] = find( ~isnan( sum(kak,3) ) );
for ind = 1:length(kzi)
    kz = kzi(ind);
    ks = ksi(ind);
    line( ...
        'xdata',ks+1+[-0.5,  0.5, 0.5, -0.5, -0.5], ...
        'ydata',kz+1+[-0.5, -0.5, 0.5,  0.5, -0.5], ...
        'Color','k', 'lineWidth',1  ...
        )
end
s = size(im)+0.5;
line( ...
    'ydata',[0.5, s(1), s(1), 0.5,  0.5], ...
    'xdata',[0.5, 0.5,  s(2), s(2), 0.5], ...
    'Color','k', 'lineWidth',1  ...
    )
    
% Darstellung der Loesung
if nargin > 1
    [kzi,ksi] = find( res~=0 ); 

    for ind = 1:length(kzi)
        kz = kzi(ind);
        ks = ksi(ind);
        str = num2str(res(kz,ks));
        text( ...
            ks+1,kz+1,str, ...
            'horizontalalignment','center', ...
            'verticalalignment','middle', ...
            'fontsize',24,'fontweight','normal', ...
            'color','k' ...
            )
        line( ...
            'xdata',ks+1+[-0.5,  0.5, 0.5, -0.5, -0.5], ...
            'ydata',kz+1+[-0.5, -0.5, 0.5,  0.5, -0.5], ...
            'Color','k', 'lineWidth',1  ...
            )
        
    end
end

