Wednesday, October 9, 2019

Art Deco Lightswitch Cover and Multi-color Prints

This started off as a project to make a lightswitch cover that was interesting and unique. We've been looking at buying a house, and when I mentioned that maybe doing custom ones would be fun — yes.

For this project, I used Blender 2.8 and older developer version Cura (2.x, but is able to run on an ancient OSX desktop). The file can be found here - https://www.thingiverse.com/thing:3907742

Lightswitch Cover Design & the Foray into Art Deco


It would have been an easier start if I had just remixed someone else's lightswitch cover as a base. In this case, I decided to do everything from scratch. Starting with digital calipers, I decided the plate would be 114 mm tall and 71 mm wide. I measured the slot and the holes, using blocks and cylinders to punch holes in the plate. (The cylinder was wider at the top, to represent the tapered screw that lightswitches use.)

I did some beveling on the top and the underside to get a rounded feel for the cover — one of the useful techniques when using control-B to bevel, or Edge>Bevel Edges is using "M" to change the mode...I clicked M several times to get to "percent", which turned out really well. I've done some basic bevels in the past, but this is the first time I experimented with every combination of options before settling on the one true way.

Added some cylinders on the bottom for more screw support. The bevel on the actual bottom came from inset, followed by moving the portion up past the top's bevels, then applying bevel/percentage to the rectangle that had moved up. Tricky.
Before printing this cover, I downloaded someone else's plate from thingiverse, compared the slots and holes...pretty close. I did end up moving the screw holes .3mm closer to the center, but not bad. Printing it, I realized I had not put enough taper space into the plate for the screws. Ah well.

With the basic object shape out of the way, we get into an introduction of "art deco". As I'm not a designer, I went to Google Images, and searched for "art deco pattern". After browsing a ton of images and styles, I decided on one that was relatively simple. (Showing my beta version to an actual designer type person, he asked if I was a designer, and explained that I got the style right - basically a simple image that repeats...that's what I got out of his comments at least.)

The goal was an image that would merge together with itself. Didn't like my design at first, but it looks good printed. 

I created the basic image, sized it up to 15 mm, then used the array modifier for the relative offset y-axis at "1.25", 20 times. I created a second array modifier, .65 for x-axis, .025 y-axis. This wasn't science, it was trial and error to get a feel for what it would look like.



Next was...ugly. I clearly need to learn better habits on how to merge the art deco design onto an object.  It *eventually* worked. I needed to use a lot of the 3D Print Toolbox plugin to look for non-manifold edges. There were over 300, and I did too much manual fixes and partially manual fixes to get down to 0.

Multi-color Prints & How to Pause in Mid-print


A friend asked me how hard it was to imbed something within a print. Specifically, adding a metal nut into a knob as it prints. Sure, it could be done, but I didn't know how or had a project that needed me to stop in mid-print...until NOW.

The idea was to print the art deco image in a different color - imagine a white plate with a series of black stamps. There's a plugin that comes native to Cura, found under Extensions>Post-Processing>Modify G-Code>Add a script>"Pause at height". From Blender, I recognized I needed about 5mm of white before switching over to black. Loading the cover, clicking on the View, Layers...it looked like I needed to switch over at layer 21, at a .24 mm layer height. The only number I had to change for the input was the Pause Height to 5.04mm (arrived at by multiplying 21 * .24).

[edit: I came back a year later to update some of this.]

If you have a different initial layer height, make sure that is figured as layer 1. (For example, a .3mm layer height, and 20 layers at .24...5.10mm.) You can also resume the print from your Octoprint browser window, if you don't have Cura open.

I'm trying out "Extrude Amount" with a new print - it's supposed to extrude filament after you resume. You'll still need to be quick, to clean off that extruded filament before it starts printing on the model.

[edit end. November 29th, 2020.]

You can add multiple pause at heights, for multiple color changes from highest (top) to lowest (bottom).


And I started the print. At layer 21, the printer paused and sent the printer head to the far right corner, and elevated on the z-axis slightly. The Cura software was still open, and registered as "Paused". I opened up the tensioner on the feeder, slowly pulled the white filament out, slowly pushed the black filament through. Caution! Try hard not to move the printer head - if it loses where it is, it won't be aligned when it starts with the new color. (If you look closely, you can see white at the top of each black circle, where I bumped it slightly when using the feeder gear to push it through. The second time, I just pushed it through manually, no gear.)

Going back to the Cura software, it was still paused. Click the resume button, and it goes back to printing. Sadly, my bed temperature was low for PETG (and the room was drafty), so you can see how the corners were pulling up. That's fine for experiments, but wouldn't be good for the final result.

Action shot, printing the black as layer 21

I also found that the cover no longer printed correctly. The screw holes and switch slot in the cover filled on some of the layers! Sure enough, back in Cura in View Layers, I noticed that it filled up. Spending some time in internet searches, the solution that I found suggested in the "Mesh Fixes" options, to DISABLE "Union Overlapping Volumes". That brought back the holes and slot that should have been there in the first place.

The screw holes are white, the switch was black...clearly neither were holes anymore This version had beveled edges on the outside, which meant they ended lower than 5.04 mm (still the white filament).

Having done that, I went back to printing the white/teal PETG to get this final product. (230 degrees nozzle, 70 degree plate, .24mm layer height, .5mm nozzle.) Polymaker's Polylite PETG, 2.85mm.

Ta-da!


Wednesday, September 25, 2019

Removing the background & converting a JPEG or PNG to SVG

Disclaimer: this isn't a strictly 3D printing post. Blender will consume SVG files, and with some effort can MAKE svg files...but I needed some SVG files for a project, so I will go over how it works for me.

For my current project, I need to remove the background of a photo, then turn the subject into a SVG file - all so I can use a laser cutter to etch animals onto slate coasters. 



I'll be using Illustrator...CS3. I was a student once, and the Indesign/Photoshop/Illustrator package was $300 as a one-time purchase. I'm not using this for commercial purposes (if I end up needing to do commercial purposes, I might come back and show how to do this in Inkscape). I'm sure the habits are very similar.

I start with a 10 cm x 10 cm square as the document size - the size of the coaster I'll be etching with a laser. (This can also be useful for someone using a Cricut - my girlfriend got one last week.)

Next, under File>Place, I put my image file on my document - this also creates the first layer. The image is ideally too big - scaling down keeps details, while scaling it up will lose them. Regardless, select a corner with your right mouse button, hold down shift (so the image will scale on its X/Y at the same rate)...and then scale your picture to fit in the box. If you used a PNG, you're fine. If you used a JPEG, go to Object>Rasterize and click okay in the dialog box. (If you don't rasterize your JPEG you will not see "Live Trace" later.)

Rasterized Baby Leopard scaled down to fit in the 10 cm x 10 cm frame (Layer 1)
You have the photo within the box - let's take a step back and do some other prep work. Under Window>Layers - you'll want that visible. Under View>Show Transparency Grid, you want the background to be transparent - checkered instead of pure white. Also under View>Smart Guides, I like turning those off for this kind of project. (Feel free to turn them back on later - you can decide for yourself what you like.)
View Menu for adding Show Transparency Grid & turning off Smart Grid

As a good practice, create a new layer and select it - this is where you'll do your tracing. Both your foreground and background should be a white box with a red line through it...this means any fill you have will be transparent. (If you don't do this step, you'll see your picture being covered up as you trace.)

Transparent fill
With the pen tool, start right-clicking along the border of your image. You can make curves with a curve tool, but...more learning. When I hit an area that needs more of a curve, I'll just place more vertices. Once you get back around to the start, click from your first spot, and it will automatically make it complete. (If you had Smart Guides from earlier turned on, it would try to suggest certain angles for the next vertex.)

The red vertices are pretty small, so I often zoom in for close details

With that done, drag that part of the layer 2 on top of that the original layer. Under Select>All, it should highlight both the image and the border you just drew. Object>Clipping Mask should cut out the background!

The clipping can be more exact, but the conversion to SVG will change the detail level too.
Now comes a more basic "turn this into an svg" - you can always save an Illustrator file as an SVG. But I needed a black with transparency object. With the selection tool (not pen tool), double right-click on the new image. You want a "Live Trace" button to show up in the top bar, and for some reasonable-but-not-known-to-me, it takes two double-clicks. Press "Live Trace". Boom - white and black...but not transparent. There's a button in the bar that opens up tracing options, and you'll want to check the "Ignore White" checkbox. (You'll notice now that it's just transparent and black now.) I would also recommend experimenting with different amounts of Threshold, instead of sitting at 128. The higher the number, the more black. Min. Area is going to give you a higher detail at a smaller number.

Trace Dialog Box

And that's it. Save as a SVG, and you're done! Wish you good luck translating this into your vector-based experiences.

Thursday, September 12, 2019

Remixing a d20 countdown dice holder in Blender - BoltFactory plugin

I figured I would share some of the remix process of my latest project.

The final result - whoops, where is my d12?
You can find the final results here on Thingiverse. The original version was done by the user kittka on Thingiverse, a little larger and using magnets.

My original remix that I didn't share, was scaled down and using different magnets. Sadly, the thin magnets I normally use for my projects did not hold the d20 together, as it jostled around in the gaming bag. Remix #2, I used more powerful magnets in the base where the d20 had more room.

As this wasn't a major remix, I didn't bother posting it. There were still minor issues - knocking the d20 at just the wrong angle, it would spill all of the dice out. I considered replacing one set of magnets with a post and hole, so you'd have to pull it apart vertically...but it was in a design backlog.

Enter the Puppy


My friend hosting D&D has a pup that likes to chew. Alfred climbed into my bag, pulled out my d20, and chewed on the lid...breaking off part of the top. Fortunately, none of the magnets were swallowed, no PETG was eaten, but I now needed a new d20.
Post-Alfred


Enter the BoltFactory plugin


Blender 2.8 has a bunch of plugins, most of which I had played with in the earlier versions. I had not experimented very much making bolts in the past. I did make a screw thread once using arrays, but...it was work. Boltfactory is stock, just needing to be turned on. Edit>Preferences>Add-ons, then type in "bolt".


Once that's turned on, you can shift-A to create a mesh, and select "Bolt" at the bottom, which gives you this handy bolt creation menu.


I used the default bolt generated. To get the corresponding nut, just change the Model: BOLT to Model: NUT.


I scaled them both up at the same ratio, to fit to the die. From there, I made a wide-but-not-tall cube to boolean-intersect a thread section from the bottom of the bolt (slightly bigger than the nut part I was cutting out), and a boolean-intersect from the nut. I printed a prototype, to see if my .24 mm layer height and .5mm nozzle would provide good enough tolerances for the scaled-up threads. Success!
Orange nut, purple bolt, with a longer orange test bolt
Scaling up the nut/bolt gave me a really "chunky" thread. Easy to print, as well as not needing a lot of turning to open. (Turned out to be about 108 degrees of turning.) Enough to have a tight seal, but not enough to make it too much effort.

The Real Work


It gets tedious and ugly after this. I dissolved all of the vertices that held the magnets, and made smooth edges to merge with future bolt/nut sections. There were three design issues to overcome, and in my first time doing this, I didn't come up with a clean system.

  1. The top needs to be flush with the base, plane to plane (bottom of the top, to the top of the base)
  2. The number faces on the top need to match the "spin" of the bolt into the nut
  3. The number faces on the top need to be flush with the number faces on the base
The first one was awkward — the top and base needed to be rotated the exact amount. I probably should have just reimported the original, but I continued my original remix. They needed to be the same z-plane coordinates on each facing plane. I checked the z-coordinates of the vertices, and rotated on x/y axis to balance opposite sides. After that was flat, I merged the bolt and nuts (skipping some finer details here). 

I printed the d20 bottom, as the nut part wasn't going to change. Printed a top, testing the "right amount" of bolt.

The second design issue should have been more manageable in Blender, but I didn't trust virtual tolerances. To match up the faces, I would rotate everything BUT the screw portion. It's easiest if you dissolve the unnecessary edges on the bottom of the top - otherwise the spin might get some of your edges cutting into other edges. Again, printed a couple more to get the alignment of faces correct.

The third design issue, I noticed that the top wasn't completely aligned with the bottom, on the x/y axis. I could run my fingernail up the face from #6 into #5, but it would catch...and there was one millimeter-ish gap on the #2 to #10. A couple of printed tops later, it matched.
Closed



Thursday, July 4, 2019

Using Array modifier for an object around a point in space in Blender

Building an array of an object around a point - it always feel messy and non-intuitive in Blender. The first half-dozen times, I'd have to look things up on the internet to recognize where I went wrong. I did this in Blender 2.78, but it applies the same in 2.8.

The two primary tips


  • Set your object to scale & rotation (Scale should be 1.00 when doing an array)
  • Put the object origin on whatever you're going to rotate around

To demonstrate the process, make any object, grab it so it's not in the center, and scale it some fashion.
For this example, I took a cube, extruded it on the Y-axis, added some loop cuts in edit mode (control-r), scaled those cuts in x- and y-axis — then moved it on the y-axis away from the center.

We'll want to spin this object around the center of the grid on 0, 0, 0 - so shift-s to put cursor to center (if it wasn't already there).  Under Object>Transform>Origin to 3D Cursor (or under Tools>Set Origin, or shift-control-alt C)...set the origin to the cursor.

If we DON'T set the origin to cursor, it'll spin around the center of the object when it was a lonely little cube. The green and red arrows should no longer be set on the object, they should have moved down to the center.

This is the killer - Object>Apply>Rotation & Scale.

With the cursor still in the center, shift-a to add an empty axis.

Now for the fun.
The Modifier (wrench) > Array panel

You'll want to turn off the relative and constant offsets. The Object Offset, you will want to turn on, and mark the Empty axis as your offset. (It'll be a drop down in the list of objects you have in Blender.) Nothing will appear to have happened to your object, as the array objects are stacked in the same space.

The next step is selecting the Empty axis, and then rotate it 45 degrees on the Z-axis. This will fan out your objects, based on the rotation of your empty axis. If you want an even distribution of these objects, you would take 360 degrees, divide by 7, and use that instead of 45. (This is convenient sometimes when building a complex objects.)

The array of 7 pieces, at 45 degrees. Note that the original piece counts towards the "Count" from the array modifier panel.

Troubleshooting

If it didn't look like this, go back and revisit the first two points: apply the rotation & scale to the object, and make sure the origin of your object is set to the same spot as your Empty axis.

Extra Tricks


Let's say you wanted to add a number to each of those tiles in space. You could Add Text (then duplicate it any number of times, but hide the extras) above one of those tiles, convert it to mesh, thicken it, boolean it into the object...and then rotate the Empty axis another 45 degrees, to add each number.

Alternatively, you could "set rotation" on your Empty axis each time, and then type in the 45 degrees again....this could be useful, if your rotation is something more complex, like 31.528 — meaning you wouldn't have to do the extra math each step.

You can also do some funky things, by changing the scale of your Empty axis which will stretch or shrink your array in a given direction.

Tuesday, June 18, 2019

Blendering a remixed Treasure Puzzle Box

A friend wanted a puzzle box that could hold one thousand crisp US dollar bills.

The first step was to figure out how much space would be necessary, which gets messy with imperial measurements. 1000 bills stacked on each other - 4.3"? What is that on a ruler? I added 5%, as a safety. (4.5 inches became 115mm.) 2.61" by 6.14" were converted to mm, then rounded to 70mm by 160 mm. Then I created a "cash-block" in a Blender file, designed as a testing metric. Similar to software engineering, if you come up with your tests beforehand, you can test to the challenge. (Otherwise, it is similar to writing a question to an answer you have written down already.)

The next step was finding an initial puzzle box. I chose this steampunk version from Thingiverse, and imported the stl files into the Blender file. Obviously, it's not big enough internally to hold the money. Using the MeasureIt plugin, I mapped out the existing internal measurements, in order to do casual scaling of the object on the appropriate x/y/z axis (130% x 120% x 244%). It wasn't necessary for the box, but I wanted to keep the same scale for the other parts.

With that said, there are issues. The steampunk gears decorations on the side stretched more on the z-axis, as did the compass rose. No good — so I switched to wireframe mode, the edit...selecting all of the gear & compass vertices on the outside of the box, and deleted them. Then I rebuilt the faces. A simple box. But...no decorations. To deal with that, I imported another copy of the base box stl into the project.

You'll notice a vertical measurement of 134.99mm. I added more overall space for the lock mechanism, as well as a plate for the locks to rest on — don't want to damage the dollar bills when the locks turn.
With the "old" version of box, I went into wireframe (z), and edit mode. Once again, selecting all of the vertices of a single gear. It'll pick up any of the faces as well, which is inconvenient for the spaces between the gear teeth. Oh well. With the vertices selected, "p" lets you separate by selection. Switch to object mode, select your new gear object, go back into edit mode. Using face select, I chose all of the ugly, not-needed faces between the gear teeth, and "x" to delete those faces.

The import process isn't always clean. Most of the time, you can ignore the cleanup. It will sometimes cause issues with edge select, selected an edge while holding down shift-alt (OSX). If you do have awkward faces/edges, you merge vertices to a "corner of a plane" vertex, using alt-m and then merging to the last one selected.

If you look at the two horizontal lines, there should just be one face (or two faces, if you have a diagonal line, like the faces above the selection. It probably wasn't designed this way...just a function of importing an stl file.
Getting back to the gear as a whole, let's assume the edge select with shift-alt selected the back edge of the gear. I (e)xtruded those edges by 2 to thicken it, then use "f" to fill in a face for those edges. As a best practice, try to merge only solid piece to another solid piece. (Either by using control-j to join, or boolean>union — I prefer Boolean>Union.)

As I finished each gear, I dropped them into a new collection just for gears (a feature of Blender 2.8).

The compass rose turned out to be...problematic. I wonder how much of it was from the STL, vs. how I took it apart in Blender.



You can see how the faces behind the star work, instead of the separate faces connecting between the spokes. When I saw all of those weird lines, I knew from experience that those faces would need to be cleaned up.

I deleted all of the bad faces, rebuilt them by hand. For each of the 8 face areas between the compass rose spikes, grabbing the vertices in edit mode with the (c)ircular select tool, then making a (f)ace.

There were also some non-manifold faces/edges on the back of the 4 tips, as well as edges/faces BEYOND the other faces already cleaned up. Those non-manifold pieces were just deleted. (Sample selections as viewed from the back of the compass rose.)

You can see the top tip highlighted - it had multiple edges that needed to be cleaned up as well, where it touched the back ring. I would guess this was a function of the software made the original remix.

After those were done, from the back side, I selected the outside edge and the tip edges, and made that a (f)ace. (Everything was now manifold - no air gaps.) I made the whole thing thicker, and recessed the separate faces between the compass spokes. I was a bit concerned that the detail might get lost, with a larger puzzle box...and it make it easier to Boolean>Union with the box.




I made the compass rose and gears 160% bigger on the x-axis and z-axis to match the box's ends, and 120% thicker on the y-axis to make it similar in look. They were put into their own collection.

The final box — the hinges stick straight out, but the rest of the box is accurate.



Friday, May 10, 2019

Blender Design Iterations

I just put up a sub on Thingiverse, based on board game art from Underwater Cities. There was another sub, part of a bigger "replacement parts", but it was relatively plain.

Final Piece

I went through about 14 different versions - with each one getting closer to the final piece. The first useful piece was adding a camera in the side panel, so I could look at the picture of the sub WITH the model.

Version 7 - Adding Camera View
You can see in the upper right panel, you can see a bunch of pieces in an Outliner panel. In the middle right, you can see a camera shot in a 3D Viewport. (There's a lower right, where a properties panel is.) The jpeg of the box front was added using shift-A>Add Image, and I changed the rotation and scale to match the idealized object.

The iterations were roughly 3 categories of work:

  1. Getting it to look like the sub in the picture (70% of the total work)
  2. Making it printable (25%)
  3. Giving it characteristics of a game piece (5%)

Getting it to look like the sub in the picture

A lot of this process is just taking standard shapes and modifying them. The buoyancy tanks are the same — I took a cylinder, did some loop cuts for the ridges that stick out. I copied a couple of UV spheres, turned them on the sides, aligned them with the ends of the cylinder. Select the vertices of the spheres that weren't visible and delete those vertices. Remove the ends of the cylinder, then boolean>union the spheres to those ends. In Edit>Vertex>Remove Double Vertices, to clean up problems. You can either copy it, or use Modifiers>Mirror>Apply.


Honestly, the shoulders and sacs were the messy parts. Shoulders were a lot of proportional editing from a cylinder. Look under the shoulders, there's a strange "sac". It was a isomorphic sphere, that was stretched on the z-axis, added a wireframe modification, and then I removed some vertices to make planes. This next part falls under making it printable: I tried to make it a pure mesh sphere, but it never quite turned out....so I took the inner areas of the holes and turned them into faces. (And the other internal faces I removed, so it would be a manifold object.)

I probably spend way too much time cleaning that up.

Making it printable

The side headlights broke off occasionally — I tried to make them interesting by mounting them to a sphere, then mounting the sphere to the sub. The angled headlights would break off when pulling supports.

The buoyancy tanks were round on the bottom. I'd get weird layers too often down there, so I used Pivot Point>Active Element...selecting a bunch of vertices on the bottom of the main platform, and the lowest 3-4 pairs of vertices on the buoyancy tanks...then Scale>Z to have them scale to the last selected vertex. (As a reminder, when doing this, it can be helpful to look straight on, use "Z" to go into Wireframe mode.) This flattening took care of the weird layers.

The braces that reached the buoyancy tanks were just bars to start — I made them thicker as they entered the sub's body, but eventually also extruded them down on the z-axis through the tanks...this eliminated the tiny interior supports, as well as giving it a more solid-looking feel (necessary for the next part).

Giving it characteristics of a game piece

It was too tall (z-axis, solved by shrinking the dome and the dome cage on the z-axis, then scaling out on the x- and y-axis.). The shoulders and sacs needed to expand in the x- and y-axis (primarily by using Scale).  Keep in mind, these were all separate pieces...making it easy to scale each piece, but also taking longer because I wasn't doing a single operation.

I put the angled headlights forward more on the model, to give a cleaner look. I did not include the "probes" that were on the right side of the sub's art...they were going to be too thin and easily breakable.

These were all relatively easy fixes. If I was more of a designer, I would probably have stronger (and earlier) design principles to fall back on.

Overall Learning Experience

If you're sweating a piece, maybe you're doing it wrong. I probably worked on the mesh sacs for too long. There were simple brute force methods that would have been fine. The dome brace was done as a separate piece, I should have just made it part of the dome. The buoyancy tanks on the bottom, I wanted perfectly round — for no real necessity. (The tanks had those brackets going all the way around, so that first layer was trying to keep those, but then have the tanks.) I printed multiple versions, trying to make the smallest change for the best result.






Monday, April 22, 2019

Cura Lulzbot Edition - The Good, the Bad, and the Ugly

I've been using the "Lulzbot" version of Cura for the whole time I've been printing. It uses a different number versioning system than the original Ultimaker Cura. (I'll refer to it as Cura LE.)

I have an ancient desktop OSX machine that is still functioning. Apple maxed out its upgrades at 10.9.5 which has caused some small headaches that will only get worse. For now, it works. It handles Blender with ease. It's stable. There's old software that I don't have replacements for. And it is maxed out in Cura "Developer edition" through Lulzbot - a test build from August 2017...every upgrade I've tried to install has failed.

The Must-Solve Issue


Lately though, the 2017 Cura LE has been problematic. The amazing Micro .25 SL toolhead prints fine objects with an uneven top relatively well. Sometimes on the bottom, the walls don't meet up with the infill, but it's been mostly minor. But give Cura LE a flat top, and...it gets bad.

You can see the bottom dino meeples have what appears to be support showing through - it's actually the top printing layer...and does not get any better than that.

Dinosaurs on the top, showing the "best results" for the side on the printer bed.
Dinosaurs on the bottom showing bad cross-hatching/spiraling for their top layer.

On this T(eal) Rex, you can also see the wall not meeting up with infill. Photo is a little blurry, not the dinosaur's fault...it wasn't moving THAT fast.

T-Rex from the printer bed side - walls and infill separating

The older Cura LE is fine for printing with the .5mm nozzle, and the Micro *could* print okay on non-flat surfaces, but why make bad prints if you can solve it? Incidentally, the upcoming experience has been summarized. I probably burned about 6-8 hours this weekend troubleshooting the logs, then trying various solutions.

The Good (eventually) - Ubuntu 18.04

Let's start with the Good — this morning I managed to get my laptop running Ubuntu 18.04 to run "one-step behind current", i.e. Cura LE 3.2.32. I finally have access to ironing, in case that was necessary for the fix (it wasn't necessary to resolve the surface issues, but it's nice). The best stories are one with an element of hope.

The Bad - OSX 10.9.5

Don't bother, it's not going to work. (I tried the various OSX installs on the Lulzbot site.) Some versions would just crash and terminate, not generating a log. The best case scenario, was when it generated a log as it failed to launch. You can poke around Console>Applications>cura (stderr.log) and learn some troubleshooting.

The "useful" error log:

  File "cura/CrashHandler.pyc", line 17, in <module>
ImportError: dlopen(/Applications/cura-lulzbot.app/Contents/Resources/lib/python3.5/lib-dynload/PyQt5/QtCore.so, 2): Symbol not found: _LSCopyDefaultApplicationURLForURL
  Referenced from: /Applications/cura-lulzbot.app/Contents/MacOS/../Frameworks/libQt5Core.5.9.1.dylib
 in /Applications/cura-lulzbot.app/Contents/MacOS/../Frameworks/libQt5Core.5.9.1.dylib
  File "/Applications/cura-lulzbot.app/Contents/Resources/__boot__.py", line 81, in <module>
  File "/Applications/cura-lulzbot.app/Contents/Resources/__boot__.py", line 66, in _run
  File "/Applications/cura-lulzbot.app/Contents/Resources/cura_app.py", line 86, in <module>
    import cura.CuraApplication
  File "cura/CuraApplication.pyc", line 4, in <module>
ImportError: dlopen(/Applications/cura-lulzbot.app/Contents/Resources/lib/python3.5/lib-dynload/PyQt5/QtNetwork.so, 2): Symbol not found: _LSCopyDefaultApplicationURLForURL
  Referenced from: /Applications/cura-lulzbot.app/Contents/MacOS/../Frameworks/libQt5Core.5.9.1.dylib
 in /Applications/cura-lulzbot.app/Contents/MacOS/../Frameworks/libQt5Core.5.9.1.dylib

It turns out that the modern libraries of PyQt5 (Qt 5.10+?) aren't compatible with 10.9.5. This won't stop someone from publishing software that "works" with 10.9.5...their code is fine. It's just PyQt5 that will reject you. There's a suggestion of this problem here: https://github.com/Ultimaker/Cura/issues/4466

The Ugly - Back to Ubuntu 18.04


How can it be both Good and Ugly? Because it is. I'm pretty sure that the Lulzbot developers are Debian folks. The Ubuntu instructions...*should* work. "Jessie" is Debian 8, "Stretch" is Debian 9, and "Buster" is Debian 10...what is Ubuntu 18.04? (You can check /etc/debian_version and find out.) Buster! So...it should be easy enough. But if it's ugly, clearly there is something up.

It turns out that their most recent (3.6.3) Buster build doesn't work with 18.04. (If you want to skip ahead to the solution, go to the Lulzbot site here and grab the older 3.2.32. Afterward, go to the directory you downloaded it to, and enter this command - "sudo dpkg -i cura-lulzbot_3.2.32_amd64.deb") The current Cura LE 3.6.3 is looking for a file (GLIBC_2.28), and Ubuntu 18.04 uses GLIBC_2.27. (The event viewer for Ubuntu 18.04 is called Gnome Logging, and you can find it as an application installed on the general build.) The problem is called out in the Cura backlog, but I don't expect it to be fixed again (although it had been previously fixed the 3.2.32 version) Someone else mentioned the same solution here: Ultimaker Cura github page. (Basically, use 3.2.32, install command is done differently.)

You might be able to install 3.6.3 by using "sudo apt-get install glib2.0", to get GLIBC_2.28. I'm not an expert on Linux, and don't know what it could break. (For the most part, I use my laptop for internet, and for portable Blender/Cura...easily refreshed if I needed to do a clean reinstall.) If I hadn't spent the time setting up preferences and printers in 3.2.32, I would go back and try it.

So...what does this mean?

If you're not running straight Debian, you might be stuck with 3.2.32. I wouldn't get too hung up...3.2.32 and ironing seems to work just fine. At least the ironed T-Rex on the left thinks so...

Ironed T-Rex on the left, regular 3.2.32 T-Rex on the right


Credits:

The T-Rex meeple was remixed (thickened) from here: https://www.thingiverse.com/thing:2749410
The Teal PETG is Polymaker's PolyLite.
The Stegosaurus meeple was taken from here: https://www.thingiverse.com/thing:2749406
The Silver PETG is Filastruder.
The Triceratops meeple was remixed (thickened) from here: https://www.thingiverse.com/thing:2749413
The Orange PETG is leftover from MakerGeeks. Sadly, I can't recommend shopping with them anymore...6+ months of not fulfilling an order, I'm still unhappy about that. Used to be so great.

Wednesday, April 17, 2019

Using Blender to take a 2D image into a 3D cutout

One of the easiest and most magical things, is the speed at which you can turn an image into a 2D mesh object with depth. Calling it 3D is...tough — it doesn't turn a cutout image into a full-formed velociraptor!


This is a phone stand, remixed from a phone holder on Thingiverse — although I also added an extra piece below the holder, to make it more stable. The cutout of the velociraptor is from an image that looked like this:


Once you have the image (jpeg, png, whatever), take it to a (free) website that converts images to SVG - scalable vector graphics format. There's also techniques where you use Inkscape or Adobe Illustrator, but the free websites are pretty much drag-drop-convert.

In Blender, use File>Import to import the SVG.  It will be a microscopic "curve". I typically scale it in x/y about by *40. Important next step: Object>Apply>Scale. If you skip this, it will do crazy things to your object. Object>Convert to "Mesh from Curve/etc". This will turn the curve into a regular mesh. Next, Add Modifier>Solidify>Thickness = 1, and apply it. This gives the mesh depth, instead of just being a plane. It's solid black, which is hard to see details...under Materials, I used the slider to make it gray.



At this point, your image is now a 2D object with depth. If you weren't doing this project in your main blender file, save it, open your main blender file, and then Append>[filepath/file]>Objects>[objectname]. It should be listed in your Scene now, as a mesh object.

I thickened it to about 5mm, Object>Transform>Snap>Origin to Geometry, and then in Orthographic mode, clicked through keypad 1/3/7, adjusting the orientation and rotation of the cutout piece. (For example, in the phone stand, rotated it 90 degrees while looking from above. From the side of the stand, rotated it 55 degrees to match the plane of the upper part of the stand. Once you have your object aligned, scaled, and rotated...I usually hide it, then select the primary object. Add Modifier>Boolean>Difference, then apply.

You're stamping through the main object - make sure nothing is left hanging. For example, if you look at the capital letter "A", If you stamp an "A" through an object, that triangle in the upper half is going to be hanging in mid-air. (Maybe you have your stamp go halfway through the wall of the primary object.) An example of this is another stand, using a Zelda-based image:


Part of the FDM printing process, behind the Zelda icon...the back wall was not a clean print. Probably because the stamp almost went through the wall. A thicker wall, or a shallower boolean could have eliminated it. Not really a problem, as people aren't going to see that back wall, but an imperfection.





Monday, April 1, 2019

Flexible Filament (and buying a printer from Craigslist)

October 2018, I listed a bunch of filaments and my experiences with them. It was an older post than that, but had never gotten around to posting before then...and it was correct for the time. I had picked up some flexible filament earlier in 2018 as well as a toolhead to print flexible filament...but didn't get around until this past month.

The Craigslist Printer from February 2018



When I bought my (used)backup Lulzbot Mini from Craigslist, it was $1000 for the printer, and a spare flexystruder head (which at the time was about $300, designed for TPU use). I paid the guy an extra $40 or so for the remains of his two Ninjaflex (TPU) spools. He had been posting the printer locally for several months without buyers, and I had negotiated the flexystruder head in with his original price of $1000.

Was it a good deal?

Kind of. New retail for 1.04 at the time was $1250, plus tax. The Flexystruder head at the time was $275 — it was the only way a Mini could print flexible filament. The Ninjaflex, was probably break-even, maybe trending towards not. Within 4 months, the glass bed cracked. I also noticed that the "scrub" phase of warmup, it would knock into the plastic frame that held the scrub pad. (And he must have printed a replacement frame.)

Fixing up the Craigslist printer


My 1.03 Mini was 18 months in, and its glass was still good. (I actually stole that bed to the Craigslist one, because the 1.03 was out of commission. It's now over 30 months in use, so maybe the seller didn't treat his 1.04 right. I printed a new scrub pad frame, and manually edited the startup gcode to rub on the pad correctly. (This is awkward, because I have to check a text file every time I tamper with the printer's settings.)

When I bought the printer from Craigslist, I did have the guy run through a sample print, so I could see warm-up and first layers. I just missed the scrub issue. (And forgot the printer came with a putty knife, single-ended pick.) It wasn't the worst deal, but 4-5 months later, Lulzbot announced the Mini 2, and I picked up a refurbished Mini 1.04 from them for $1000. No issues with that one.

I guess I still have the Flexystruder head. And the Ninjaflex. I never got around to swapping out a head to print it. I wasn't really sure what I wanted to print, that would be worth the time to swap the head in and out and change settings around.

Remember the Micro .25 SL toolhead from three months ago (December 2018)? In addition to printing normal filament, it can also print 3mm flexible filament. (I have two 1.04 machines, the refurbished "standard" machine, and the other with the Micro toolhead. The original 1.03 is still in the closet, waiting for me to fix the z-axis.)

Trying out Flexible Filament aka TPU


The orange "Cheetah" line of Ninjaflex was nothing short of magic. 230 degrees, just like PETG. The bed was 40 degrees. Printed very easily, with a little bit of extra stringing. With two shells, and 20% infill it was spongy but firm (for a solid object). The filament feels similar - it has a slight give, but firm overall. If you flick it, there's a bit of bounce as it returns to its semi-rigid state.

I printed a voronoi-style ball, about 3.5cm across - it bounces a little. The TPU also made for an excellent 20-sided die, with just the right amount of bounce.

The white Ninjaflex was probably a more generic TPU. It was much more flexible. Printing a solid object like the orange TPU, you could definitely tell it was a soft version...you could gently pinch the same model and it would collapse all the way through. It was still solid — I couldn't tear it apart with my fingers. The solid object would still stand upright and not deform. More stringing occurred than with the orange.

Swapping out TPU seemed problematic. It felt like it was harder to get the initial flow correct, and also difficult to swap back out to PETG. Normally switching from one PETG color to another PETG, is usually 60 mm of extrude to flush out the previous filament. After 120, there were still bits of PETG in the TPU. I probably won't be going back-and-forth between the two often, but it's much easier than swapping in toolheads (maybe a 30-minute process, and then another 30 to verify all of the settings are correct.)

Overall, the Cheetah was really good. I could see using that in designs. The more basic white was flimsy feeling. I'm sure it has a purpose, but something to design for.

Sunday, March 24, 2019

Printing Miniatures

Printing miniatures is a popular topic for 3D printing. If you play something like D&D, you never have enough of the right miniature. "I need 20 goblins." "I need some plant-tree creature, small-size, on a base." Thingiverse has a ton of models. Hero Forge lets people design figures, then buy the figure's stl. (And then send the .stl to a friend of theirs to print, if they can.) My friend's Starfinder figure will be an example further down.

My Lulzbot Mini is a workhorse, but uses a stock .5mm nozzle. This means it prints faster than smaller nozzles, as it can push through more melted plastic.  A lot of other printers use .4mm as their standard nozzle...and people generally stop designing a "successful" print when they get it right...which means sometimes I'll get a model that doesn't print well on my bigger nozzle diameter.

A Finer Nozzle


Maybe you have a collection of nozzles, or you buy an extra nozzle off of Amazon for $15. (I've bought some Microswiss ones in the past.)

[The next paragraph will be something specific to a Lulzbot printer...]

Enter...the "Aerostruder .25mm SL Micro" tool head. It's released through the Lulzbot site for $250, needs a $50 converter to fit my Lulzbot Mini 1.3/1.4. You can guess it's a .25mm diameter nozzle, which allows for higher resolution. It also has a custom fan shroud to blow in air from more angles...allowing for better cooling and better resolution.

[...back to the regular broadcast...]

I swapped the new toolhead on one of my 1.4 Mini's, as a long-term switch out. You also need to flash the firmware so it recognizes to print with a smaller nozzle, which is a little bit of an effort. Once you load the default .25mm Micro profile, do NOT change the e-steps. The documentation and Cura is a little wonky....it tells you to copy your e-steps when you change your nozzle...don't. The new profile will have different e-steps, and it should. Imagine that you are shoving filament through at the same rate as before...but you have a smaller nozzle. It won't go through, and you'll have problems.

In Cura, I set up a new printer profile for this "new" printer. It makes it easier in the future if I swap back to a different toolhead. I went to my Octoprint instance, and changed the nozzle size there — if you extrude 30mm, you want that based on the smaller nozzle...

New Layer Heights


It also took some new habits, when it came to printing miniatures. You now have much finer detail available to you...I started printing at .05mm height, which was always so difficult with a bigger nozzle to do it right. (Fine detail for a .5mm nozzle profile was usually .15mm.) Honestly, a .1mm layer height is completely fine - you won't notice much of a difference. I'd recommend starting with .1mm, and seeing how you like it. (My experience is usually about 2 hours at .1mm layer height, including the trees listed below.)

Meshmixer


Miniatures typically have dynamic poses — pointing their sword, or a spell shooting out from their outstretched hand, which means supports. Normal supports can be okay, but sometimes you're missing details in key spots. I started playing around with Meshmixer - a free-to-hobby software released by Autodesk, which can allow for a lot of leeway when it comes to adding tree supports. I'll be talking about my experience in 3.3.15, in case you're reading this in a future that my assistance does not make sense.

A couple of tips...first, when you import an .stl in, first step is Edit>Align [Accept]. This will bump your miniature up into the correct plane. If you don't do this, it sometimes cuts off the lowest part of your model. Next, try letting Meshmixer do the orientation (Analysis/Orientation [Accept].). Hopefully it'll preserve your details better than the stock "as the figure stands".

The real work is Analysis>Overhangs>Generate Support. You may want to try Meshmixer's baseline attempt, before you do a deep dive. Some key settings: Density (how much tree support you want), and Post Diameter (how thick the tree posts are). More density = more support...but it can also introduce more scarring as well as make the support more difficult to pop off. Less support means that parts can droop. A thicker post can be useful - if you print a bunch of really tiny posts, it increases the chances of some getting loose and gumming up the whole print job. The adverse effect — you can't print the posts as closely together, regardless of density...which means you risk more droop between supports.

With a difficult miniature, I was running a density of 80 (a bit high), post diameter of 2mm (a bit thin)...and the Starfinder miniature looked a bit like this:



Export your figure. Now, keep in mind, this is no longer a normal .stl. Don't use supports - you've already added supports. If you generate supports in your slicer....it will not know that your tree supports are anything separate from the figure. It will add more, which defeats the purpose of tree supports.

Finally, I'd urge you to use a "raft" when printing. Usually when I print with Cura, I do a quick skirt. The drawback of trees is you're going to be printing a lot of small support bases onto the bed, and if any of them come loose....not good. The typical 'bad' aspect of a raft is that it needs to be pulled off of whatever model you're making...but that's great for these tree supports. It makes removing them that much easier, beyond making it reliable for the support's bases to stick to the raft.


Good luck!

Sunday, March 3, 2019

Blender Gears

I've been using gears for a couple of different projects.

My first foray into gears using Blender, was using the Add Mesh: Extra Objects plug-in. It opens up another "base" object in the Add Mesh > Gears > Gear options. It creates a gear without the faces connecting the inside of the center hole (a non-manifold model). It's easy enough to create these faces - alt-shift each inside ring, the bridge the edge loops (through Control-E for the edge menu, then Bridge Edge Loops, or spacebar-find Bridge Edge Loops).



Breaking it down

  • Teeth is...teeth - the distance from the inside ring to the outside tooth tip is Base+Dedendum+Addendum
  • Radius is the distance from the middle of a tooth, to the opposing side's middle tooth
  • Width is the z-axis height
  • Base is the inside of the ring to the outside of the ring
  • Dedendum - the distance from the "middle" of a tooth, to the outside ring (increasing it, also shrinks the hole in the center)
  • Addendum is the tip of the tooth, distance is figured again from the middle of the tooth to the tip
  • Pressure angle is going to the slant of the tips of each tooth - anywhere from 0 degrees (square), to a maximum of 45 degrees (if your addendum is a larger value than your overall size, you'll need to reduce the pressure angle to avoid bad topology)
  • Skewness is used for helical and herringbone gears - also known as a helix angle
  • Conical angle has one end shrink to a cone - 45 degrees leads to a tip, where 0 is no cone, and 90 is flat (practical uses - 0 to 45)
  • Crown makes a crown by elevating the tips and mid-points of each tooth - a measurement of the z-axis difference between the base of a tooth to the connected top of tooth (not a hypotenuse, which would be longer)

Woodgears

That's just how to lay out the gear, once you get your gear designed! I used this perfectly fine option from a site called Woodgears...he does a lot of great woodworking, and the gear tool is useful.

Otvinta's Instant Gear

My current gear-making assistant is Otvinta's Instant Gear. Their branding is "A collection of tutorials & resources for 3D modeling and 3D printing enthusiasts". The useful part, is how it generates a python script to create the gears.

You can then go into a Text Editor window in Blender (usually on the 3D View, lower left hand corner), click on the "+ New" button, to create a new text data block...paste that code, and the press the "Run Script" button. You have the outside outline of two gears, both preset as meshes (back in the 3D View).