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

Rechteck in GUI

 

wusa
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 30.04.2021, 08:54     Titel: Rechteck in GUI
  Antworten mit Zitat      
Hallo,

ich probiere mich an einer GUI.

Folgendes will ich realisieren:
Einen Schieberegler, mit dem ein Winkel zwischen 0° und 90° ausgewählt werden kann.

Ein Rechteck innerhalb der Grafik, welches durch die Eckpunkte (-2;0.1), (0.2;0.1), (0.2; -0.1), (-0.2;-0.1) gegeben ist. Hier komme ich im Editor nicht zurecht, wie ich zum einen den Achsenbereich richtig vorgebe (soll -10 bis + 10 auf x un y) und zum anderen nicht, wie ich die rectangle Funktion aufrufe.

Die rectangle Fkt clipt mir momentan das Recheck an die Achsen, was ich nicht möchte. Wie ist hier der Ansatz.

In einem späteren Schritt soll das Rechteck gedreht werden (winkel vom Schieberegler), wofür ich auch Rotationsfkt gestellt bekommen habe.

Code:

function varargout = aufgabe(varargin)
% 30-Apr-2021
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @erstling_OpeningFcn, ...
                   'gui_OutputFcn',  @erstling_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before erstling is made visible.
function erstling_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to erstling (see VARARGIN)

% Choose default command line output for aufgabe
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

%axes1_CreateFcn(hObject, eventdata, handles)

% uiwait(handles.figure1);
global hEdit;
handles.output = hObject;
pos=get(hObject,'position');
txt=sprintf('Breite:%d, Hoehe:%d',pos(3),pos(4))
set(hEdit,'string',txt);

rectangle('Position',[12, 3, 10, 10],'EdgeColor','r','LineWidth',1);


% --- Outputs from this function are returned to the command line.
function varargout = erstling_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on slider movement.
function slider3_Callback(hObject, eventdata, handles)
% hObject    handle to slider3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider


% --- Executes during object creation, after setting all properties.
function slider3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end
 


Freue mich auf Eure Tipps, Grüße
Michael

autoRot.m
 Beschreibung:

Download
 Dateiname:  autoRot.m
 Dateigröße:  857 Bytes
 Heruntergeladen:  223 mal
erstling.fig
 Beschreibung:

Download
 Dateiname:  erstling.fig
 Dateigröße:  30.01 KB
 Heruntergeladen:  259 mal
erstling.m
 Beschreibung:

Download
 Dateiname:  erstling.m
 Dateigröße:  5.42 KB
 Heruntergeladen:  233 mal
aufgabe.m
 Beschreibung:

Download
 Dateiname:  aufgabe.m
 Dateigröße:  2.82 KB
 Heruntergeladen:  222 mal
aufgabe.fig
 Beschreibung:

Download
 Dateiname:  aufgabe.fig
 Dateigröße:  28.12 KB
 Heruntergeladen:  224 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2021, 15:57     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die rectangle Fkt clipt mir momentan das Recheck an die Achsen, was ich nicht möchte.

Was meinst du mit clip? Das englische Wort heißt meines Wissens "abgeschneiden", aber hier wird doch nichts abgeschnitten?
Falls du mehr Platz um das Rechteck haben willst: mit xlim und ylim kannst du die Skalierung der Achsen ändern, z.B.
Code:
xlim([11 23])
ylim([2 14])


Zitat:
In einem späteren Schritt soll das Rechteck gedreht werden (winkel vom Schieberegler), wofür ich auch Rotationsfkt gestellt bekommen habe.

Hast du dazu eine Frage? Wenn ja, was ist sie?

GUIDE würde ich übrigens nicht mehr für neue Projekte verwenden, sondern App Designer.
Zitat:
The GUIDE environment will be removed in a future release. After GUIDE is removed, existing GUIDE apps will continue to run in MATLAB® but they will not be editable in GUIDE.
To continue editing an existing GUIDE app, see GUIDE Migration Strategies for information on how to help maintain compatibility of the app with future MATLAB releases. To create new apps interactively, Develop Apps Using App Designer instead.

https://www.mathworks.com/help/matl.....le-guide-gui-example.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 30.04.2021, 16:34     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für deine Nachricht.
Mit clip meinte ich Festklammern. Ich habe Probleme, die Grafik anzupassen und komme mit dem Editing im App Designer nicht zurecht. Und ja, habe guide versucht wegen den Problemen im App Designer.

Habe das so probiert:
Code:

pgon = polyshape([0 0 2 2],[2 0 0 2]);   % erste Klammer alle x Koord, zweite Klammer alle y Koord.
plot(pgon)

% einzelne Eckpunkte
PointA = [0;2];
PointB = [0;0];
PointC = [2;0];
PointD = [2;2];
 


Als nächstes möchte ich im App Designer einen Slider einbauen und mit dem einzustellenden Wert zw. 0 und 90° einen Drehwinkel vorgeben. Um diesen SliderDegree-Wert will ich an einem mit chooseEdge gewählten Punkt die Form drehen.


Ich brauche den Wert des Sliders, den ich wohl so bekomme:
Code:

function SliderValueChanging(app, event)
             changingValue = event ;
             SliderDegree = changingValue.Value ;
end
 

Wie kann ich für eine unbestimmte Anzahl an Rotationen mein Rechteck drehen und in der Grafik den Plot erneuern?
Code:

for k = 1:inf
    newPgon = rotate(pgon,SliderDegree, PointA);   % Wenn es geht Point.. ueber chooseEdge zu waehlen, waere es optimal
   plot(newPgon)
   pause(0.5);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2021, 16:43     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich habe Probleme, die Grafik anzupassen und komme mit dem Editing im App Designer nicht zurecht.

Welche konkreten Probleme hast du?

Zitat:
Und ja, habe guide versucht wegen den Problemen im App Designer.

Das ist in etwa so, als ob du auf Windows 98 wechselst, weil du Probleme mit Windows 10 hast.

Zitat:
Um diesen SliderDegree-Wert will ich an einem mit chooseEdge gewählten Punkt die Form drehen.

Was ist chooseEdge?

Zitat:
Wie kann ich für eine unbestimmte Anzahl an Rotationen mein Rechteck drehen

Eine for-Schleife über eine unbestimmte Anzahl ist nicht sinnvoll. Wenn, dann solltest du while verwenden.
Du meintest aber doch, du willst um einen bestimmten Winkel drehen?

Insgesamt schreibst du zwar ausführlich, was du machst oder machen willst. Mir wird daraus aber nicht recht klar, welche Probleme oder Fragen du dazu hast.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 30.04.2021, 18:34     Titel:
  Antworten mit Zitat      
chooseEdge soll eine Funktion werden, die mir den Punkt durch Benutzereingabe über einen Button liefert, der als Drehpunkt dient.

Wie kann man diese Funktion auf die einfachste Art im App Designer umsetzen?

Dann die zweite Funktion , die ich brauche, ist die, die um den Winkel sliderDegree am gewählten Punkt dreht:
Code:

rotate(pgon,SliderDegree, PointA);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 30.04.2021, 18:56     Titel:
  Antworten mit Zitat      
Code:

sliderDegree = get(handles.slider1,'Value')
 

Diese Zeile würde ich als nächstes nehmen. Bin ich mit dem Aufrufen unter der openingFunction auf dem richtigen Weg?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2021, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
chooseEdge soll eine Funktion werden, die mir den Punkt durch Benutzereingabe über einen Button liefert, der als Drehpunkt dient.

Wie kann man diese Funktion auf die einfachste Art im App Designer umsetzen?


Am einfachsten wäre es, den Anwender über Textfelder oder Slider den Punkt auswählen zu lassen.
Eleganter wäre z.B. über ButtonDownFcn
https://www.mathworks.com/matlabcen.....or-a-plot-in-app-designer

Zitat:
Bin ich mit dem Aufrufen unter der openingFunction auf dem richtigen Weg?

In der openingFunction müssen die Befehle stehen, die beim Starten der GUI ausgeführt werden sollen. Wenn du dort die Position des Sliders abfragen willst, dann ist der Aufruf dort richtig - ansonsten nicht.
Sowohl die Zeile als auch openingFunction legen für mich die Verwendung von GUIDE nahe, und so gesehen ist man dann automatisch nicht auf dem richtigen Weg.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 30.04.2021, 20:07     Titel:
  Antworten mit Zitat      
Vielen Dank für den Link. Mit der Datei von dort habe jetzt das probiert:
Code:

classdef test_app < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure                       matlab.ui.Figure
        chooseedgepointEditField       matlab.ui.control.EditField
        chooseedgepointEditFieldLabel  matlab.ui.control.Label
        UIAxes                         matlab.ui.control.UIAxes
    end

   
    methods (Access = public)
       
        function plotShape(app)
            pgon = polyshape([0 0 2 2],[2 0 0 2]);  
            plot(app.UIAxes, pgon);
           
            PointA = [0;2];
            PointB = [0;0];
            PointC = [2;0];
            PointD = [2;2];
        end
       
        function rotateShape(app)
            rotate(pgon,SliderDegree, PointA);
        end
    end


    % Callbacks that handle component events
    methods (Access = private)

        % Code that executes after component creation
        function startupFcn(app)
               plotShape(app)
               rotateShape(app)
           
        end

        % Value changing function: chooseedgepointEditField
        function A(app, event)
            changingValue = event.Value;
            Point = PointA;
        end
    end

    % Component initialization
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create UIFigure and hide until all components are created
            app.UIFigure = uifigure('Visible', 'off');
            app.UIFigure.Position = [100 100 640 480];
            app.UIFigure.Name = 'UI Figure';

            % Create UIAxes
            app.UIAxes = uiaxes(app.UIFigure);
            title(app.UIAxes, 'Title')
            xlabel(app.UIAxes, 'X')
            ylabel(app.UIAxes, 'Y')
            app.UIAxes.PlotBoxAspectRatio = [1 1.28398791540786 1];
            app.UIAxes.Position = [1 1 378 480];

            % Create chooseedgepointEditFieldLabel
            app.chooseedgepointEditFieldLabel = uilabel(app.UIFigure);
            app.chooseedgepointEditFieldLabel.HorizontalAlignment = 'right';
            app.chooseedgepointEditFieldLabel.Position = [378 427 103 22];
            app.chooseedgepointEditFieldLabel.Text = 'choose edge point';

            % Create chooseedgepointEditField
            app.chooseedgepointEditField = uieditfield(app.UIFigure, 'text');
            app.chooseedgepointEditField.ValueChangingFcn = createCallbackFcn(app, @A, true);
            app.chooseedgepointEditField.Position = [496 418 98 40];

            % Show the figure after all components are created
            app.UIFigure.Visible = 'on';
        end
    end

    % App creation and deletion
    methods (Access = public)

        % Construct app
        function app = test_app

            % Create UIFigure and components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.UIFigure)

            % Execute the startup function
            runStartupFcn(app, @startupFcn)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.UIFigure)
        end
    end
end
 


Und ich kriege diesen Fehler
Code:

Unrecognized function or variable 'pgon'.

Error in test_app/startupFcn (line 36)
               rotateShape(app)

Error in test_app (line 95)
            runStartupFcn(app, @startupFcn)
 


In der App Designer Maske konnte ich nur die Auswahl auf "A" festlegen
Code:

        % Value changing function: chooseedgepointEditField
        function A(app, event)                           % ich moechte aber das dieses Feld auch auf die Eingabe von B, C oder D reagiert
            changingValue = event.Value;
            Point = PointA;
        end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2021, 21:33     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung sollte nicht überraschen, denn jeder Callback ist eine eigene Funktion / Methode und hat somit einen eigenen Workspace. Abhilfe: pgon als Property definieren und dann mit app.pgon darauf zugreifen. Das wird, wenn ich mich recht erinnere, auch im integrierten Tutorial von App Designer gezeigt.

Zitat:
In der App Designer Maske konnte ich nur die Auswahl auf "A" festlegen

Ich habe keine Ahnung, von welcher "Maske" du sprichst. Was soll es bezwecken, die Funktion A zu nennen?
Wenn eine Auswahl zwischen A, B, C und D getroffen werden soll, dann würden sich doch Radio Buttons anbieten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
wusa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 20.06.17
Wohnort: Berlin
Version: 2021
     Beitrag Verfasst am: 30.04.2021, 22:05     Titel:
  Antworten mit Zitat      
Ja, stimmt! Ich probiere Radio Buttons aus, vielen Dank für den weiteren Tipp!
Private Nachricht senden Benutzer-Profile anzeigen
 
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.