%
%  Basisklasse für Grafik-Objekte
%
classdef Shape < handle
  
  properties (Access = protected)
    x = 0;        % x-Position, links unten 
    y = 0;        % y-Position 
    hnd = [];    % MATLAB-Graphic Handle zu Objekt
  end   % properties
   
  methods 
    function obj = Shape( x, y )
      obj.x = x;
      obj.y = y;
      obj.hnd = [];
    end
           
    % separat: MATLAB-Objekt löschen, 
    %   auch für Neuzeichnen  
    function clear( obj )
      if( isMatlabHandle(obj.hnd) )
        delete( obj.hnd );   % MATLAB-Objekt löschen
        obj.hnd = [];
      end        
    end    
  
    % Shape-Destruktor  
    function delete( obj )
      fprintf( 'delete: Shape-Objekt \n' ); 
      clear( obj );    % entfernt MATLAB-Grafik-Objekt
      obj.hnd = [];
    end 
    
    function obj = move( obj, dx, dy )
      obj.x = obj.x + dx; 
      obj.y = obj.y + dy; 
    end
    
  end   % methods
      
  % Virtuelle Funktionen
  methods (Abstract)
    draw( obj );
  end
 
end