رفتن به مطلب

جمع اوری مختصات vertex و بردارهای نرمال یک فایل stl در دو ماتریس جداگانه در متلب


shervinjafari69

ارسال های توصیه شده

عرض ادب و احترام هدف بنده، جمع اوری مختصات vertex و بردارهای نرمال یک فایل stl در دو ماتریس جداگانه در متلب هستش. که کد را هم نوشتم اما جواب صفر میده کدم. دوستان کسی میتونه کمکم کنه؟

j.zip

لینک به دیدگاه
عرض ادب و احترام هدف بنده، جمع اوری مختصات vertex و بردارهای نرمال یک فایل stl در دو ماتریس جداگانه در متلب هستش. که کد را هم نوشتم اما جواب صفر میده کدم. دوستان کسی میتونه کمکم کنه؟

 

سلام

فکر نکنم مستقیم بشه با textscan فقط اون اعداد رو استخراج کرد، به نظرم میشه کل فایل رو خط به خط خوند، بعد اون قسمت هایی که نیاز هست رو از داخلش پیدا کرد. یه همچین کدی، این فقط سه عددی که جلوی لغت vertex اومده رو توی یه ماتریس میریزه.

 

clear;
fid=fopen('Part1.stl');
MyText = textscan(fid,'%s','Delimiter','\n');
Vertex_rows = strfind(MyText{1},'vertex');
AllVertexSTR = MyText{1}(~cellfun('isempty',Vertex_rows));
Vertices = cellfun(@(x)textscan(x,'vertex %f %f %f'),AllVertexSTR,'Un',0);
Vertices = cellfun(@(x)cell2mat(x),Vertices,'Un',0);
Vertices = cell2mat(Vertices);

لینک به دیدگاه

درود

سپاسگزارم. یعنی با کدی که بنده نوشته بودم نمیشد به هیچ عنوان؟ مشکل از این بود که نمیشد دقیقا مقادیرو جدا کرد؟

بنده لطلاعات stl رو ریختم توی یه تکست فایل و نوشته های داخا اونم پاک کردم ولی نشد.

اما کد شما جواب میده بسیار متشکرم.

امکان داره در مورد بردارهای نرمال نیز بنده را راهنمایی بکنید. میخاهم normal factor ها هم توی یه ماتریس جداگانه ریخته شود. و هر دو با یه کد اجرا شود .

متشکرم

لینک به دیدگاه
درود

سپاسگزارم. یعنی با کدی که بنده نوشته بودم نمیشد به هیچ عنوان؟ مشکل از این بود که نمیشد دقیقا مقادیرو جدا کرد؟

بنده لطلاعات stl رو ریختم توی یه تکست فایل و نوشته های داخا اونم پاک کردم ولی نشد.

اما کد شما جواب میده بسیار متشکرم.

امکان داره در مورد بردارهای نرمال نیز بنده را راهنمایی بکنید. میخاهم normal factor ها هم توی یه ماتریس جداگانه ریخته شود. و هر دو با یه کد اجرا شود .

متشکرم

 

سلام

گفتم مطمئن نيستم، چون يه جا مثلا جدا كننده رو خط جديد تعريف كردي، در حالي فرمت خودش هم چند خط هست، البته فرمت تعريف شده هم در جاهايي مثل فاصله بين f%ها و يا خط جديد درست تعريف نشده.

 

فكر كنم با يه تغيير كوچيك توي همين كدي كه من نوشتم بتوني اون قسمت رو هم انجام بدي، نياز هم نيست كد جديدي براي اون نوشته بشه، مي توني ادامه همين اضافه كني.:a030:

لینک به دیدگاه

MENTION]درود

بسیار متشکر از توضیحات کاربردی شما،

با توضیح شما بنده کد اولیه را اصلاح کردم. جواب داد اما مشکل اینجاست که قسمت اول کد یعنی مختصات vertex ها را جواب میدهد اما برای نرمال فکتور ها نه ولی وقتی قسمت نرمال فکتورها را جداگانه در کد دیگری میریزیم جواب میدهد.

در واقع منظور من این است که هر دو در یک کد جواب بدهد.

 

بازم ممنونم

کد اصلاح شده:

function [Vertices,normal_Vector]= bbbb
fid = fopen('Part1.txt');
c = textscan(fid,...
   '%*s %*s vertex  %f  %f  %f  vertex  %f  %f  %f vertex  %f  %f  %f %*s %*s',...
   'delimiter', '\n','endofline','\r\n',...
   'collectoutput', true);
   a=c{1,1};
   Vertices=zeros(3*length(a),3);
k=1;
for i=1:1:length(a)
Vertices(k,:)=a(i,1:3);
Vertices(k+1,:)=a(i,4:6);
Vertices(k+2,:)=a(i,7:9);
k=k+3;
end
fclose(fid);
fod = fopen('Part1.txt');
d = textscan(fod,...
   'facet normal %f  %f  %f %*s %*s  %*s %*s  %*s %*s',...
   'delimiter', '\n','endOfLine','\r\n',...
   'CollectOutPut',true);
normal_Vector=d{1,1};
fclose(fod);
end

 

 

کد نرمال فکتور جداگانه:


function [normal_Vector]=Untitled3
fod = fopen('Part1.txt');
d = textscan(fod,...
   'facet normal %f  %f  %f %*s %*s  %*s %*s  %*s %*s',...
   'delimiter', '\n','endOfLine','\r\n',...
   'CollectOutPut',true);
normal_Vector=d{1,1};
fclose(fod);

لینک به دیدگاه
MENTION]درود

بسیار متشکر از توضیحات کاربردی شما،

با توضیح شما بنده کد اولیه را اصلاح کردم. جواب داد اما مشکل اینجاست که قسمت اول کد یعنی مختصات vertex ها را جواب میدهد اما برای نرمال فکتور ها نه ولی وقتی قسمت نرمال فکتورها را جداگانه در کد دیگری میریزیم جواب میدهد.

در واقع منظور من این است که هر دو در یک کد جواب بدهد.

 

بازم ممنونم

کد اصلاح شده:

function [Vertices,normal_Vector]= bbbb
fid = fopen('Part1.txt');
c = textscan(fid,...
   '%*s %*s vertex  %f  %f  %f  vertex  %f  %f  %f vertex  %f  %f  %f %*s %*s',...
   'delimiter', '\n','endofline','\r\n',...
   'collectoutput', true);
   a=c{1,1};
   Vertices=zeros(3*length(a),3);
k=1;
for i=1:1:length(a)
Vertices(k,:)=a(i,1:3);
Vertices(k+1,:)=a(i,4:6);
Vertices(k+2,:)=a(i,7:9);
k=k+3;
end
fclose(fid);
fod = fopen('Part1.txt');
d = textscan(fod,...
   'facet normal %f  %f  %f %*s %*s  %*s %*s  %*s %*s',...
   'delimiter', '\n','endOfLine','\r\n',...
   'CollectOutPut',true);
normal_Vector=d{1,1};
fclose(fod);
end

 

 

کد نرمال فکتور جداگانه:


function [normal_Vector]=Untitled3
fod = fopen('Part1.txt');
d = textscan(fod,...
   'facet normal %f  %f  %f %*s %*s  %*s %*s  %*s %*s',...
   'delimiter', '\n','endOfLine','\r\n',...
   'CollectOutPut',true);
normal_Vector=d{1,1};
fclose(fod);

 

بسیار سپاسگزار از کد عالی که فرستادید و همینطور از پاسختون

ممنون میشم بازم کمکک کنید

موفق باشید.

 

سلام

فایل Part1.txt چی هست؟ من به جاش همون پسوند stl رو گذاشتم چیزی نیاورد.

برای شروع یه کد توی متلب ترجیح بر این هست که از mfile استفاده بشه، چون وقتی از فانکشن استفاده می کنی، دسترسی به متغیرهای داخلیش ساده نیست، نمیشه عملکرد کد رو به خوبی دنبال کرد.:a030:

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...