Verfasst am: 17.12.2011, 18:16
Titel: surf-Graphik als eps-Vektorgraphik speichern
Hallo Matlab-Experten,
ich versuche, eine Graphik per print als eps-Vektorgraphik zu speichern. Das Bild ist mit zahlreichen plot3-Aufrufen und zwei surf-Objekten hergestellt.
Wenn ich die surf-Plots rausnehme, sehe ich in Inkscape eine Vektorgraphik, mit ihnen aber nicht.
Gibt es einen Weg, alles gemeinsam als Vektorgraphik abzuspeichern?
Verfasst am: 17.12.2011, 22:40
Titel: Re: surf-Graphik als eps-Vektorgraphik speichern
Hallo helmat,
Das Einfügen eines SURFACE-Objekts stellt den Renderer der FIGURE auf OpenGL, falls der RendererMode auf 'auto' gestellt ist (das ist der default Wert). Der OpenGL-Renderer kann aber nur Pixel-Grafiken exportieren. Für Vektorgrafiken benötigst Du den Painters Renderer. Dieser kann aber z.B. keine Transparenzen darstellen.
Gruß, Jan
helmat
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.12.2011, 00:05
Titel:
Vielen Dank, Jan!
Mit set(f0, 'Renderer','painters') sieht meine Graphik f0 (fast) so aus, wie sie soll.
Zum "fast": Eines der beiden surf-Ofjekte ist eine Halbkugel. Mit etwas kleinerem Radius verläuft darin ein konzentrischer Kreis. Wo der Kreis unsichtbar sein müsste, ist er es überwiegend auch, aber leider nicht überall. Da scheint er unregelmäßig gestrichelt durch.
Wahrscheinlich geht Deine Bemerkung "Dieser [painters] kann aber z.B. keine Transparenzen darstellen" in diese Richtung. Nun möchte ich gerade keine Transparenz. Hast Du dafür noch einen Tipp?
Dies hört sich nach den Standard-Problemen der Computergrafak an. Dein SURF-Objekt ist nämlich keine Kugel, da sie 1. aus Polygonen zusammengesetzt ist, und 2. diese auch noch als Pixels gerastert werden. Wenn sich zwei Objekte (der Kreis ist wieder ein gepixeltes Polygon) schneiden, hängt es von Rundungseffekten ab, welche Pixel weiter vorne liegen. Dabei rendern OpenGL und ZBuffer geschickter, da sie die Entfernung vom Auge explizit berücksichtigen. Painters dagegen zeichnet die Objekte in der Reihenfolge ihrer Erstellung (siehe UISTACK). Bei sich gegenseitig durchdringenden Objekten ist das natürlich ein Problem...
Wenn Du den relevanten Abschnitt des Codes postest, könnten wir etwas experimentieren.
Gruß, Jan
helmat
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.12.2011, 17:36
Titel:
Hallo Jan,
ich habe die Kugel so goß gewählt, dass ihre ebenen Facetten den Kreis nicht durchdringen können.
Hier der Code:
Code:
%http://www.gomatlab.de/viewtopic,p,82348.html#82348
%Graphik soll mit Inkscape als eps-Vektorgraphik weiterverarbeitet werden.
%Transparenzproblem
clear
rad=pi/180;
delete(gcf) %ggfls. figure löschen
clc
%% userpath('C:\Daten\MatlabFun') % [EDITED: not nice]
f0=figure('position',[100, 0, 580,580], 'color','white','Renderer','painters');
phi=linspace(0,2*pi,50);
x=cos(phi); y=sin(phi); z=zeros(size(phi)); %Kreis in z=0 plot3(x,y,z,'color','blue');
hold on
phiK=linspace(pi/2,3*pi/2,30); %Halbkugel
thetaK=linspace(0,pi,30);
r=1.1;
[PHI,THETA] = meshgrid(phiK,thetaK);
x=r.*sin(THETA).*cos(PHI);
y=r.*sin(THETA).*sin(PHI);
z=r.*cos(THETA);
surf(x,y,z,2*ones(size(x)),'FaceColor',[100],'EdgeColor',[100],...
'EdgeAlpha',1,'FaceAlpha',1) axis equal
view(164,22)
%print(f0); print(f0,'-dpsc','C:\...')
Ja, der Painters renderer scheitert an der überlappenden Tiefe der Objekte.
Hast Du mal den SVG-Export aus den FileExchange-Seiten bei mathworks.com versucht?
Ich habe den "userpath"-befehl in Deinem Code auskommentiert - wenn jemand Deinen Code laufen lassen würde, hätte er danach eventuell einen defekten Matlab PATH.
Diese Zeilen sind in dem code überflüssig, zerstören aber eventuell die aktuelle Arbeit von Nutzern des Forums. Ich würde solche Zeilen grundsätzlich niemals in Funktionen einbauen, da man diese dann nicht mehr ohne weiteres mal so eben zwischen durch nochmal laufen lassen kann.
Gruß, Jan
helmat
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.12.2011, 19:08
Titel:
Hallo Jan,
danke für Deine Warnung vor userpath. Werde ich nicht wieder posten.
Ich verstehe plot2svg als Funktion, die ich von matlab.com erst runterladen und installieren müsste. Das wird mir jetzt echt zuviel - bei sowas verbringe ich bei genügend realistischem Pech Stunden.
Ich habe meine Aufgabenstellung etwas umgemodelt, so dass ich sie lösen kann. Das Ergebnis kannst Du unter http://www.hlmths.de/Scilab/Feuilles.pdf besichtigen.
Ich werde mich jetzt in diesem Forum registrieren. Vielleicht hab ich demnächst mal wieder etwas.
Schönen Sonntagabend noch
helmat
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.12.2011, 18:15
Titel:
Wir haben an den falschen Stellen gesucht. Der Knackpunkt ist:
Man darf die von Matlab erzeugte Datei in Inkscape nicht öffnen, man muss sie importieren. Dann hat's sich ausgerastert.
Und nochmal danke für Eure Hilfe!
HG
helm
Einstellungen und Berechtigungen
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.