MATLAB: Translate the origin of a STL file

facetsMATLABoriginreadstlstlstlwritetranslationvertexes

I need to translate the origine of an STL. What I tried to do is to open the stl with the readstl script I found on the file exange. then I used reshape to do a 3 by n matrix with the cordinate:
X=reshape(coordinates, 3, [])';
Then I tooke of the offset I want to each point:
Y(i,:)=X(i,:)-Offset;
And generate a new STL from it with the stlwrite script also from the file exange.
stlwrite(strcat(input('Nom du fichier :','s'),'.stl'), Y(:, 1)', Y(:, 2)', Y(:, 3)', 'mode', 'ascii');
The problem I get is that when it build up the new stl is that the vertexes are in the good position according to the new origin but the facet are build "randomly" between any vertexes. (not randomly because it seems to build each time the same facet but not generate the same surface than the original file.)
I would really appreciate any help or advice about improving the my code or an other soft where it it is easier to translate the origin.
Thanks you all in advance.

Best Answer

Your logic and algorithm implementation look correct to me. I believe the problem is coming from the way you import the STL file. Instead of using that function, use one of the ones from the FEX that gives you an option to read it in as faces and vertices. E.g.
From here, repeat your centroid calculation and subtraction on the vertices component and then write it back out using the same faces and the modified vertices. The reason for the behavior you are seeing is because stlwrite is trying to connect the x/y/z data because it does not know the faces. A reader that gives you faces allows you it to skip this step.
Related Question