Softwareentwickler MATLAB/Simulink (w/m) Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLinkdSPACE GmbH - Paderborn
Verfasst am: 10.08.2010, 20:31
Titel: Funktion der Superclass aus Unterklasse aufrufen
Hi,
ich habe ein Problem mit Klassen. Bin blutiger Anfänger auf dem Gebiet. Ich will aus der Unterklasse eine Funktion der Hauptklasse aufrufen.
Es gibt die Klasse c_frequencyPoints mit Messdaten an Frequenzpunkten, und die Klasse c_measurementdata, welche allgemeine Informationen der Messungen enthält. In dieser Klasse ist auch eine Funktion setPlotMenu, welche mir von plots die menus erzeugt. Ich habe die mit in die Superclass mit rein, damit alle späteren Plots gleich aussehen, ohne das ich viel zaubern muss. Nun würde ich diese Funktion gern direkt aufrufen, so wie es z.B. mit measValues.getMeasurementInfo auch geht, also:
Code:
measValues.setPlotMenu(target)
Aber das geht nicht. Statisch ist es kein Problem. Aber ich würde es gern auch "anders" können. Danke für die Hilfe
Hier die Klassen:
Code:
classdef c_frequencyPoints < c_measurementdata
properties
valuesVector;
freqVector;
end
methods
function plotFrequencyValues(self, target)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% plot data
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
axes(target);
plot(self.freqVector, self.valuesVector);
c_measurementdata.setPlotMenu(target)% static end end end
Klasse 2:
Code:
classdef c_measurementdata %< handle
properties
date; % when measured
description; % more info about the data
device; % device name
die; % name of the measured die
end
methods (Static = false) function obj = c_measurementdata(date, description, device, die) switchnargin case0
obj.date = '';
obj.description = '';
obj.device = '';
case4
obj.date = date;
obj.description = description;
obj.device = device;
obj.die = die;
end end function returnString = getMeasurementInfo(self)
returnString = char(['Measurement date : ', self.date,],... ['Measurement device : ', self.device,],... ['Die Name: ', self.die,],... ['Measurement description : ', self.description,]);
end end
methods (Static = true) function setPlotMenu(target) axes(target);
% Define a context menu; it is not attached to anything
hcmenu = uicontextmenu;
h1 = uimenu(hcmenu,'label','LineWidth'); % Make a menu for the lineWidth
h2 = uimenu(hcmenu,'label','LineStyle'); % Make a menu for the lineStyle
h3 = uimenu(hcmenu,'label','Extras'); % Make a menu for the extras
% Define callbacks for context menu items that change linestyle
width1 = ['set(gco, ''LineWidth'', 1)'];
width2 = ['set(gco, ''LineWidth'', 2)'];
width3 = ['set(gco, ''LineWidth'', 3)'];
width4 = ['set(gco, ''LineWidth'', 4)'];
lin1 = ['set(gco, ''LineStyle'', ''--'')'];
lin2 = ['set(gco, ''LineStyle'', '':'')'];
lin3 = ['set(gco, ''LineStyle'', ''-'')'];
extra1 = ['delete(gco)'];
% Define the context menu items and install their callbacks uimenu(h1, 'Label', '1', 'Callback', width1);
uimenu(h1, 'Label', '2', 'Callback', width2);
uimenu(h1, 'Label', '3', 'Callback', width3);
uimenu(h1, 'Label', '4', 'Callback', width4);
uimenu(h2, 'Label', 'dashed', 'Callback', lin1);
uimenu(h2, 'Label', 'dotted', 'Callback', lin2);
uimenu(h2, 'Label', 'solid', 'Callback', lin3);
uimenu(h3, 'Label', 'DELETE', 'Callback', extra1);
% Locate line objects
hlines = findall(target, 'Type','line');
% Attach the context menu to each line forline = 1:length(hlines) set(hlines(line),'uicontextmenu',hcmenu) end end end end
figure;
h = axes; grid on; holdall;
measValues.plotFrequencyValues(h)
%%%%%%%%%%%%%%%%%%%%%%
%%% GEHT NICHT, WARUM?
%%%%%%%%%%%%%%%%%%%%%%
measValues.setPlotMenu(target)
Options and Permissions
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.