Tag Archives: 3D printers
Quick Post #5: A Utility for Converting .obj Files Created by Microsoft 3D Builder
There are several different file formats for specifying 3d objects (as Tannenbaum wrote, “The good thing about standards is that there are so many to choose from.” One such standard is the obj or .obj open format. By itself, the .obj file definition does not support coding surface shading properties in the .obj file, but these can be provided in a separate Material Template Library (.mtl) file.
While not part of the official file format, many program support vertex coloring by adding the RGB values for color to the end of the relevant vertex line. The de facto “standard” for this non-standard usage is to code the RGB values as decimals between 0 and 1. However for some reason, Microsoft’s 3D Builder codes them as integers between 0 and 255. As a result, other programs, e.g., Bambu Studio, while capable of using vertex coloring using values between 0.0 and 1.0, won’t read the color information when you import such a file. This simple script converts the RGB values from a range of 0-255 to a range of 0.0 – 1.0 and writes out the modified file. Here’s the code, which is also published as a Gist:
import sys def convert_obj_vertex_colors(input_file, output_file): with open(input_file, 'r') as infile, open(output_file, 'w') as outfile: for line in infile: parts = line.strip().split() if parts and parts[0] == 'v' and len(parts) == 7: # Convert RGB from [0, 255] to [0, 1] r, g, b = map(float, parts[4:7]) r, g, b = r / 255.0, g / 255.0, b / 255.0 outfile.write(f"{parts[0]} {parts[1]} {parts[2]} { parts[3]} {r:.6f} {g:.6f} {b:.6f}\n") else: outfile.write(line) if __name__ == "__main__": if len(sys.argv) != 3: print("Usage: python convert_obj_rgb.py input.obj output.obj") else: convert_obj_vertex_colors(sys.argv[1], sys.argv[2])
Quick Post #4: 3d Printed Monitor Stand
I have a 7″ touch screen monitor for Raspberry Pi’s. I wasn’t happy with the stand that it originally came with, which was rather flimsy, and the stand broke twice. But I got a 3d printer from my wife for Christmas, and I decided I could build a better stand for it. To design the stand, I used TinkerCad, which while less sophisticated than many other tools, has one of the easiest learning curves.
I started with just a large block in TinkerCad, sized to the dimensions I needed, than cut out sections one by one to form the sloping back, the slot that the monitor slides into to hold it, and a section cut out of the stand so that it would use less plastic.
After I started printing, I realized I could make it even more efficient by making the main section of the stand hollow. To do that, I made a copy of the stand in TinkerCad, cut off the front, then shrank the copy. Then I changed the copy from a solid object to a hole, positioned it inside the original, and joined the hole to the stand.
I’m really happy about how it came out, and as you can see in the pictures, the monitor fits perfectly!
I’ve published the model files on Thingiverse.