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

Aufruf einer Plot-Funktion in einer Klassenmethode

 

Max24
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 29.06.14
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 04.11.2014, 13:57     Titel: Aufruf einer Plot-Funktion in einer Klassenmethode
  Antworten mit Zitat      
Hi!

Ich versuche gerade eine 3D-Kurve um eine 2D-Kurve zu plotten, die ich mit der Funktion freehand frei zeichne. Da ich den Plot (surf) jedoch häufiger verwende, wollte ich die Funktion als draw3DTube auslagern.

Hier der alte Code:

Code:

                [x1,y1] = freehand;                      % data of freehand-function for x,y-plane
                   if ~isempty([x1,y1])
                       interp_points = interparc(100/2,x1,y1);  % interpolating the data of freehand for equidistant points
                       x_n = interp_points(:,1);                % first column of interp_points (x-values)
                       y_n = interp_points(:,2);                % second column of interp_points (y-values)
                       xi = x_n';                               % transpose
                       yi = y_n';
                       
                       xyData(:,1) = x_n;
                       xyData(:,2) = y_n;    
                       obj.pathCoordinates.YData = y_n;
                       obj.pathCoordinates.XData = x_n;
                       obj.pathCoordinates.radius = obj.radialSpread;
                       
                       if newPtrSuperPath.ptrMySimulation.config.is2D == false
                         
                           z1(1:max(size(xi))) = 0;                 % z-plane = 0
                           r(1:max(size(xi))) = obj.radialSpread;   % radius of tube
                           o = ones(length(xi),2);

                           [X,Y,Z] = cylinder2(xi,yi,z1,r,500,o);
                     
                           h = surf( obj.ptrSuperPath.guiAxesHandle ,X,Y,Z,'EdgeColor','none','LineStyle','none','FaceLighting','phong');      
                           set( obj.ptrSuperPath.guiAxesHandle, 'DataAspectRatioMode','auto' );
                           daspect([1 1 1])              % relation between x,y,z
                           colormap(bone(128))
                           view(-37.5,30)
                           adata = Z.^5;    
                           axis auto;
                           set(h,'FaceColor','interp','FaceAlpha','interp','AlphaData',adata) % set transparency
 


Neuer Code:

Code:

  [x1,y1] = freehand;                      % data of freehand-function for x,y-plane
                   if ~isempty([x1,y1])
                       interp_points = interparc(100/2,x1,y1);  % interpolating the data of freehand for equidistant points
                       x_n = interp_points(:,1);                % first column of interp_points (x-values)
                       y_n = interp_points(:,2);                % second column of interp_points (y-values)
                       xi = x_n';                               % transpose
                       yi = y_n';
                       
                       xyData(:,1) = x_n;
                       xyData(:,2) = y_n;    
                       obj.pathCoordinates.YData = y_n;
                       obj.pathCoordinates.XData = x_n;
                       obj.pathCoordinates.radius = obj.radialSpread;
                       
                       if newPtrSuperPath.ptrMySimulation.config.is2D == false
                         
                           draw3DTube(obj.ptrSuperPath.guiAxesHandle, obj.radialSpread, xyData);
 


Funktion draw3DTube:

Code:

function draw3DTube(handles,radian,xyData)
%DRAW3DTUBE 3D tube around a drawn line by user
%   Detailed explanation goes here

    xi = (xyData(:,1))';                               % transpose
    yi = (xyData(:,2))';

    z1(1:max(size(xi))) = 0;    
    r(1:max(size(xi))) = radian;
    o = ones(length(xi),2);
    [X,Y,Z] = cylinder2(xi,yi,z1,r,points,o);
    h = surf(handles,X,Y,Z,'EdgeColor','none','LineStyle','none','FaceLighting','phong');
    set(handles, 'DataAspectRatioMode','auto' );
    daspect([1 1 1])              % relation between x,y,z
    grid on;
    colormap(bone(128))
    view(-37.5,30)
    adata = Z.^5;      
    set(h,'FaceColor','interp','FaceAlpha','interp','AlphaData',adata) % set transparency

end


 


Das geht jedoch schief. Ich frage mich nur wieso. Der Plot müsste meiner Meinung nach funktionieren. Ich bin aber gerade erst in die OOP mit Matlab eingestiegen.

Ist eventuell hier der Zugriff auf die Objektvariablen nicht erlaubt?

Grüße,
Max
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.11.2014, 17:09     Titel:
  Antworten mit Zitat      
Hallo

gibt es irgendwelche Fehlermeldungen, dann bitte diese hier posten.
Wo ist die Funktion definiert, in eigenem M-FILE? Liegt das File in Matlab Suchpfad?

Da diese Funktion aus der Klasse aufrufst und nur die Werte übergibst , sollte es keine Probleme hier mit Zugriff vorkommen.
Ansonsten wenn das Problem weiterhin besteht , bitte ich dich ein Lauffähiges minimal Beispiel zur Verfügung zu stellen.
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.