Verfasst am: 10.09.2019, 11:04
Titel: Vom 3D-Objekt die Wände dicker machen ?
funktioniert i-wie nicht, bin nicht so lange in matlab und wollte fragen, wie man die wandstärke oder die Linien dicker machen kann, damit es beim ausdrucken nicht auseinanderfällt
Die Oberfläche wird nicht angezeigt, ich weiß nicht woran es liegt. Es war erstmal geplant, das die Wänder dicker gemacht werden. Die Wand habe ich "verdoppelt" und um 0.8 Skalierung, kleiner gemacht. Normalerweise sollte dann zwischen der Wand und der etwas kleinere Wand ausgefüllt sein. Man sieht es auf dem Bild besser.
Code:
clear
name='010010_XBlockBigIsoz'; %Einlesen der Datei
info=dicominfo(name); %Zugreifen auf der Datei
es=(info.BeamSequence.Item_1.RadiationType);
ps=(info.BeamSequence.Item_1.RadiationType);
sz=size(info.BeamSequence.Item_1.BlockSequence.Item_1.BlockData,1); % Größe der Datei
bd=(info.BeamSequence.Item_1.BlockSequence.Item_1.SourceToBlockTrayDistance)/10;
bh=(info.BeamSequence.Item_1.BlockSequence.Item_1.BlockThickness)/10;
b(:,1)=info.BeamSequence.Item_1.BlockSequence.Item_1.BlockData(1:2:sz)/10; %x-Koordinaten
b(:,2)=info.BeamSequence.Item_1.BlockSequence.Item_1.BlockData(2:2:sz)/10;
for i=1:sz_z
x=kz(i)*b(:,1)/100;
y=kz(i)*b(:,2)/100;
xi=(x)*.8;
yi=(y)*.8;
tmp=inpolygon(X,Y,x,y);
tmp_i=inpolygon(X,Y,xi,yi);
bin(:,:,i)=xor(tmp,tmp_i);
end end
Verfasst am: 19.09.2019, 07:44
Titel: Umsetzung erfolgreich, nur das Objekt ist kleiner geworden
Code:
% Es hat geklappt, indem ich in der untersten Schicht und der obersten Schicht , die z-Achse um "1 Einheit nach oben" gezogen und sie mit "0ern" ausgefüllt habe, somit schließen sich die zwei Wände zu einer dicken Wand % Das Problem ist jetzt das die Skalierung verändert wurde, auf dem Bild sieht % man das der "Block" nur 1 cm breit und 1 cm hoch ist... % der "Block" ist aber 5 cm hoch.. muss jetzt schauen, wie man das bearbeitet
clear
name='010010_XBlockBigIsoz'; %Einlesen der Datei
info=dicominfo(name); %Zugreifen auf der Datei
es=(info.BeamSequence.Item_1.RadiationType);
ps=(info.BeamSequence.Item_1.RadiationType);
sz=size(info.BeamSequence.Item_1.BlockSequence.Item_1.BlockData,1); % Größe der Datei
bd=(info.BeamSequence.Item_1.BlockSequence.Item_1.SourceToBlockTrayDistance)/10;
bh=(info.BeamSequence.Item_1.BlockSequence.Item_1.BlockThickness)/10;
b(:,1)=info.BeamSequence.Item_1.BlockSequence.Item_1.BlockData(1:2:sz)/10; %x-Koordinaten
b(:,2)=info.BeamSequence.Item_1.BlockSequence.Item_1.BlockData(2:2:sz)/10;
bin = squeeze(bin);
[X,Y,Z] = meshgrid(kx,ky,kz); % Ab hier wird die unterste und oberste Schicht erstellt und dann mit 0ern gefüllt, nur die Skalierung wurde verändert und ich bekomm ein kleineres Objekt
bin=smooth3(bin);
bin(:,:,1)=0;
bin(:,:,end)=0;
Oberfl = isosurface(X,Y,Z,bin(:,:,:),'verbose');
if(tf == true) %Ist es eine Elektronenstrahlung ? -> ja dann soll es hierfür speziell geglättet werden
Oberfl=smoothpatch(Oberfl,1,2); %Glättungsfaktor, wie oft soll es geglättet werden
subplot(1,2,2), patch(Oberfl,'FaceColor',[101],'EdgeAlpha',0); view(3); camlight; % Darstllung des Objekts
stlwrite('test.stl', Oberfl.faces, Oberfl.vertices);
else
%msgbox('No Electron Radiation')
if(tu == true) %Ist es eine Photonenstrahlung ? -> ja dann soll es hierfür speziell geglättet werden
Oberfl=smoothpatch(Oberfl,1,5,1,1) subplot(1,2,2), patch(Oberfl,'FaceColor',[101],'EdgeAlpha',0); view(3); camlight;
stlwrite('test.stl', Oberfl.faces, Oberfl.vertices);
%msgbox('No PhotonRadiation');
end end
gridsz=.5; %in cm
isodist=1000; %umrechnung in cm, kann ich in die For-schleife einfügen anstatt die 1000 -> isodist;
[maxix]=max(b(:,1)); %Damit man das nicht manuell machen muss, einfach den maximalen wert für x und y raussuchen und
[maxiy]=max(b(:,2)); %mithilfe von max für x und y -> das Koordinatensystem erstellen, damit keine Löcher später entstehen
mx=round(maxix);
my=round(maxiy);
mx=mx+4;
my=my+4;
kx = -mx:gridsz:mx;
ky = -my:gridsz:my;
kz = bd+gridsz:-gridsz:bd-bh-gridsz; % Damit die unterste und oberste Schichterstellt wird -> + gridsz für die obere Schicht und für die unterste Schicht -> - gridsz
Umwandlung in cm um und somit hab ich die richtigen Maße. Man muss beachten, dass er jedesmal Flächen rausgeschnitten hat und sie nicht erkennent, da ich die Grenzen der x und y Werte zu klein gehalten habe. Beispielsweise habe ich einfach den maximalen Wert aus x und y genommen-> diese als Grenzen festgelegt und es wurde das komplette Objekt angezeigt und die richtige Skalierung, ohne i-welche Löcher.
Ich bin jetzt nur noch gespannt wie das ausgedruckte Objekt aussieht und ob dann wirklich die Maße übernommen worden sind.
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.