ich möchte gerne eine .stl in Matlab importieren.
Nach ein bisschen Recherche habe ich bereits herausgefunden, dass es einmal ein ASCII stl File gibt und ein Binär stl File.
Erste Frage wäre: Wie finde ich heraus, ob der stl File binär oder ASCII ist (leider ist nicht bekannt, was für ein File es ist)?
Da ich schon nach einem Programmcode in Matlab für den Import gesucht habe, allerdings wohl nur fehlerhafte Befehle im Umlauf sind, hier nochmal die Frage, wie so ein Befehl für Matlab aussehen würde?
nach ein bissl suchen habe ich folgenden Code gefunden:
Code:
function[v, f, n, c, stltitle] = stlread('6mV #99.stl', verbose) % This function reads an STL file in binary format into vertex and face % matrices v and f.
%
% USAGE: [v, f, n, c, stltitle] = stlread(filename, verbose);
%
% verbose is an optional logical argument for displaying some loading % information (default is false).
%
% v contains the vertices for all triangles [3*n x 3]. % f contains the vertex lists defining each triangle face [n x 3]. % n contains the normals for each triangle face [n x 3]. % c is optional and contains color rgb data in 5 bits [n x 3]. % stltitle contains the title of the specified stl file [1 x 80].
%
% To see plot the 3D surface use: % patch('Faces',f,'Vertices',v,'FaceVertexCData',c); % or % plot3(v(:,1),v(:,2),v(:,3),'.');
%
% Duplicate vertices can be removed using: % [v, f]=patchslim(v, f);
%
% For more information see: % http://www.esmonde-white.com/home/diversions/matlab-program-for-loading-stl-files
%
% Based on code originally written by: % Doron Harlev % and combined with some code by: % Eric C. Johnson, 11-Dec-2008 % Copyright 1999-2008 The MathWorks, Inc. % % Re-written and optimized by Francis Esmonde-White, May 2010.
use_color=(nargout>=4);
fid=fopen('6mV #99.stl', 'r'); %Open the file, assumes STL Binary format.
if fid == -1 error('File could not be opened, check name or path.') end
if verbose
fprintf('\nTitle: %s\n', stltitle);
fprintf('Number of Faces: %d\n', numFaces);
disp('Please wait...');
end
% Each facet is 50 bytes % - Three single precision values specifying the face normal vector % - Three single precision values specifying the first vertex (XYZ) % - Three single precision values specifying the second vertex (XYZ) % - Three single precision values specifying the third vertex (XYZ) % - Two color bytes (possibly zeroed)
% 3 dimensions x 4 bytes x 4 vertices = 48 bytes for triangle vertices % 2 bytes = color (if color is specified)
trilist = 1:48;
ind = reshape(repmat(50*(0:(numFaces-1)),[48,1]),[1,48*numFaces])+repmat(trilist,[1,numFaces]);
Tri = reshape(typecast(T(ind),'single'),[3,4,numFaces]);
Diesen habe ich in MATLAB eingelesen.
Ich habe meine .stl Datei in den von MATLAB verwendeten Ordner getan und die 'filename' auf meine Datei umgeschrieben.
Komischerweise spuckt er jetzt folgendes Problem aus:
Error wirting stlread.m.
C:\Users......\stlread.m (Das System kann den angegebenen Pfad nicht finden.)
Habs hinbekommen.
So wie du sagtest, hab ich einfach nur oben das '6mv...' rausgenommen
Visualisierung funktioniert auch super.
Noch ne kurze Frage: Die eingelesene .stl-Datei spuckt mir sehr viele Punkte aus, die mir mein Scanner in die .stl Datei geschrieben hat. Wenn ich es mit MATLAB plotte, wirft Matlab mir natürlich nur die Punkte aus. Ist es möglich, dass Matlab ein Volumenkörper daraus herstellt?
Um das vielleicht besser zu verstehen: Ich habe ein Elektronikbauteil abgescannt und die vorhandenen Lichtpunkte in die .stl Datei gespeichert. Ich möchte jetzt natürlich nicht in MATLAB nur die Scannpunkte sehen, sondern das ganze als Volumenkörper, sprich mein Bauteil ausgeben und es bearbeiten.
Ein sehr guter Ansatz solche Fragen zu lösen ist im Internet nach bereits vorhandenen Lösungen zu suchen. Z.B. könntest Du in Matlab's FileExchange danach suchen, oder auch Deine Lieblings-Internet-Suchmaschine nach "Matlab points to volume" fragen.
Das Problem ist nicht eindeutig lösbar, wenn Du nicht eine konvexe Hülle meinst. Es könnten zwischen allen Punkten ja auch Löcher liegen. Im FileExchange gibt es einige Lösungen, um Löcher bestimmter Größe ein- oder auszuschließen.
Gruß, Jan
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.