WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zugriff auf Stützpunkte im Figure mit der Maus

 

gast__

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2008, 10:37     Titel: Zugriff auf Stützpunkte im Figure mit der Maus
  Antworten mit Zitat      
Hallo,

ich hoffe, hier finden sich ein paar Experten die mir weiterhelfen könnten:

Ausgangssituation: Für die Bearbeitung von Kennfeldern (Kennlinien) gibt es momentan keine komfortable Lösung diese per Maus in einem Figure zu verändern...

die Idee ist nun mit der Maus einzelne Stützstellen "anzuklicken" und per "drag&drop" im figure zu verschieben...

Mein Fortschritt bis jetzt: Ich habe zunächst ein etwas entartetes Beispiel erstellt, diese besteht aus zwei Kennlinie mit 3 Stützstellen... über die 2 Funktionen line_button_downx() kann ich nun bei jedem Mausklick auf die antsprechende axis jeweils die erste Stützstelle nach links bzw rechts versetzen...

Code:
function example_plot()

    x1 = [-3 1 5];
    y1 = [2  2.5 4];

    plot(x1, y1,...
        'Color', 'g',...
        'Marker', 'o',...
        'MarkerEdgeColor', 'r',...
        'ButtonDownFcn','line_button_down1');
   
    hold on;
   
    x2 = [-2 2 6];
    y2 = [2  2.5 4];
    plot(x2, y2,...
        'Color', 'm',...
        'Marker', 'x',...
        'MarkerEdgeColor', 'b',...
        'ButtonDownFcn','line_button_down2');
   
    grid on;


Code:
function line_button_down1()

    display('Aufruf der funktion line_button_down1()');
   
    XData = get(gco, 'XData');
    XData(1) = XData(1)+0.1;
    set(gco, 'XData', XData);


Code:
function line_button_down2()

    display('Aufruf der funktion line_button_down2()');
   
    XData = get(gco, 'XData');
    XData(1) = XData(1)-0.1;
    set(gco, 'XData', XData);


Die nächsten erforderliche Schritte: Wie kann ich nicht nur die aktuelle line sondern auch die aktuelle Stützstelle feststellen?... Gibt es eine Funktion unter Matlab, die mir die Infos über die aktuelle Position der Maus, und ob die Maustaste "pressed" oder "released" ist, liefert.

Wie gesagt ich erwarte hier bestimmt keine Komplettlösung, aber vielleicht findet sich ja jmd der mir ein paar Tipps für die Realisierung geben könnte.

Vielen Dank

franzbull



Code:


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2008, 11:59     Titel:
  Antworten mit Zitat      
Hallo,

das dürfte mit
Code:
p1 = get(gca,'CurrentPoint');
waitforbuttonpress;
p2 = get(gca,'CurrentPoint');
zu schaffen sein. Alternativ gibts im Figure die Eigenschaften
Code:
WindowButtonDownFcn
WindowButtonMotionFcn
WindowButtonUpFcn
Vielleicht helfen dir die ja schon weiter.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
gast__

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2008, 14:15     Titel:
  Antworten mit Zitat      
Vielen Dank für den Tipp... neben diesem und auch weiteren Beiträgen in diesem Forum bin ich zunächst auf diese erste Version gekommen...

für tipps und verbesserungsvorschläge hinsichtlich der Programmierung wäre ich dankbar

Code:
function disppos

h.f = figure;
plot(rand(1,10),...
    'Marker', 'o',...
    'MarkerEdgeColor', 'r',...
    'Color', 'r');

hold on;

plot(rand(1,10),...
    'Marker', 'o',...
    'MarkerEdgeColor', 'g',...
    'Color', 'g');

grid on;
h.a=gca;
set(h.f,'WindowButtonDownFcn',{@druecken,h});
set(h.f,'WindowButtonUpFcn', {@loesen,h});


%%
function druecken(o,e,h)

display('Maus Druecken');
pt = get(h.a, 'CurrentPoint');
x_mouse = pt(1,1);
y_mouse = pt(1,2);

h.l = findobj(h.a,'Type', 'line');
nr_l = length(h.l);
flag_mouse_on_point = 0;
set(h.f, 'WindowButtonMotionFcn', '');
delta_x = 0.2;
delta_y = 0.2;
for i = 1:nr_l
    XData = get(h.l(i,1), 'XData');
    YData = get(h.l(i,1), 'YData');
    for m = 1:length(XData)
        diff_x = abs(XData(1,m)-x_mouse);
        diff_y = abs(YData(1,m)-y_mouse);
        if ((diff_x < delta_x) && (diff_y < delta_y))
            flag_mouse_on_point = 1      
            point_to_move.handle_line = h.l(i,1);
            point_to_move.index = m;
            setappdata(h.f,'point_to_move', point_to_move);
            set(h.f, 'WindowButtonMotionFcn', {@ziehen,h});
        end        
    end    
end

set(h.f,'Name',num2str([pt(1,1) pt(1,2)]));

%%
function ziehen(o,e,h)
display('Maus Ziehen');
point_to_move = getappdata(h.f, 'point_to_move');

pt = get(h.a, 'CurrentPoint');

x_mouse = pt(1,1);
y_mouse = pt(1,2);

XData = get(point_to_move.handle_line, 'XData');
YData = get(point_to_move.handle_line, 'YData');

XData(1,point_to_move.index) = x_mouse;
YData(1,point_to_move.index) = y_mouse;

set(point_to_move.handle_line, 'XData', XData);
set(point_to_move.handle_line, 'YData', YData);

set(h.f,'Name',num2str([pt(1,1) pt(1,2)]));

%%
function loesen(o,e,h)
display('Maus Loesen');
set(h.f, 'WindowButtonMotionFcn', '');
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.