Экспорт лица-вершины меня sh в STL - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь добавить толщину к гироиду me sh и экспортировать это в STL. Я могу успешно построить утолщенный щитовидный железо me sh, как показано ниже, но это потому, что я написал функцию для удаления нежелательных граней, а именно граней, у которых ребра длиннее определенного предела. Я должен также упомянуть, что все грани имеют три angular, поэтому матрицы вершин и граней имеют форму N x 3.

thickened gyroid

Вот код, который проверяет длину ребер и удаляет те, которые too_long:

function [F] = remove_bad_faces(F,V,too_long)

%% Initiate various counters/storage matrices

bad_face_count = 0;     % Number of bad faces
bad_faces = [];         % Matrix of bad faces
bad_vertices = [];      % Matrix of bad vertices
bad_face_indexes = [];  % Matrix of bad face row indices. I know that the plural of index is not indexes.

%% Find all bad faces

for i=1:size(F,1)

   face = F(i,:);
   v1 = V(face(1),:);
   v2 = V(face(2),:);
   v3 = V(face(3),:);

   if norm(v1-v2) >= too_long || norm(v2-v3) >= too_long || norm(v1-v3) >= too_long
       bad_face_count = bad_face_count + 1;
       bad_faces = [bad_faces; face];
       bad_vertices = [bad_vertices;v1;v2;v3];
       bad_face_indexes = [bad_face_indexes,i];
   end

end

%% Remove bad faces

for j=1:size(bad_face_indexes,2)
   index = bad_face_indexes(j);
   F(index,:) = nan;
end

end

Как вы можете видеть, я заменяю "плохие лица" (то есть строки матрицы F) на NaN, но это работает только для визуализации. Когда я пытаюсь передать результирующие грани и вершины в функцию, генерирующую STL (см. здесь ), я получаю следующую ошибку:

Index in position 2 is invalid. Array indices must be positive integers or logical values.

Error in stlwrite (line 76)
facets = reshape(facets(:,faces'), 3, 3, []);

Error in Gyroid_Mesh_Script (line 60)
stlwrite('gyroid_test.stl', F, V)

Итак, ясно, что проблема NaN и я попытался поменять его местами с [] и 0, но ни одна из них не сработала. Любая помощь очень ценится, спасибо заранее!

Редактировать: Когда я использую [] вместо NaN, я могу экспортировать в STL, но он включает эти "плохие лица" , показано ниже (увеличенное изображение):

bad faces

1 Ответ

0 голосов
/ 27 марта 2020

Благодаря ответу @ benJephunneh! Это все исправило. Я публикую обновленную функцию, которая удаляет грани с ребрами too_long:

function [F] = remove_bad_faces(F,V,too_long)

%% Initiate various counters/storage matrices

bad_faces = [];         % Matrix of bad faces
bad_vertices = [];      % Matrix of bad vertices
bad_face_indexes = [];  % Matrix of bad face row indices. I know that the plural of index is not indexes.

%% Find all bad faces

for i=1:size(F,1)

   face = F(i,:);
   v1 = V(face(1),:);
   v2 = V(face(2),:);
   v3 = V(face(3),:);

   if norm(v1-v2) >= too_long || norm(v2-v3) >= too_long || norm(v1-v3) >= too_long
       bad_faces = [bad_faces; face];
       bad_vertices = [bad_vertices;v1;v2;v3];
       bad_face_indexes = [bad_face_indexes,i];
   end

end

bad_face_count = numel(bad_face_indexes);

%% Remove bad faces

F(bad_face_indexes,:) = [];

end

. Она также успешно экспортирует в STL, используя stlwrite('gyroid_test.stl', F, V)

.
...