PistonPusher is the result of my efforts to standardize a niche in asset creation: Pistons.
What is pistonpusher
Pistonpusher is an add-on dedicated to pistons and actuators. It comes with both assets and various tools to model, rig and place them. The pistons are modular and can easily be changed or replaced. In certain cases it will also simplify your rigs.
Advantages
Stretchable piston rigs
Telescopic pistons
Easy to change, replace or remove
Flexible and modular of nature
Asset browser compatible
Customizable cardan/universal joint rigs
Hose attachment points
Snap points system
Mirror rigs
Why/Who?
This add-on tries to prevent some repetitive tasks and reduce the overhead and planning required to model and rig mechanical objects more efficiently. I think it can be useful for anyone who makes vehicles and mechanical objects in blenders.
What can it not do?
Pistonpusher is a dedicated solution for pistons/actuators. It’s not a general purpose rigging kit.
You can now snap a piston into position right away by clicking on a thumbnail ( forgot to add that in the video) additionally, while you’re at it, you can cycle through all types and sub directories you have. Can be ram intensive though. Also added a use case that demonstrates where I would use it.
I used quite some assets that came with kit ops for this scene, and even more from a free kit ops pack made by Andrew Averkin:
Adding static connectors (and pipes) is also trivial, mirrors are handled as parts are added to the scene.(only mirrors with no mirror object set). (hose) connectors that are able to rotate around the piston are best added after the constraining process.
It’s pretty far done now. If i don’t run into issues while testing you can expect the update to be available this weekend.
Parts can now be accessed outside of the creation process. There’s a toggle for it in the create section in the N menu panel.
Collection clean up is now performed while you prepare the piston for constraints.
Constrained the creation process a bit more. You can’t constrain before the piston is prepared now and you can’t prepare anymore after the piston is constrained.
Small misc changes related to the above changes.
After adding a mount, the snap to dropdown menu switches to the other side. So you can add them quickly and don’t need to think about it really.
Edit:
Tested pistonpusher on linux. Works! And for those wondering, blender 3.0 is supported too.
I just uploaded 1.5.3 and a new parts directory. It’s recommend you replace the parts directory completely as most files had a name change. Hopefully you haven’t added too much parts yourself yet.
changes:
Snap modal now allows camera/view control when pressing middlemouse button/scroll
Rod end extrusion cutters now maintains offset while adjusting the piston rod radius.
‘Rods’ collection is now named ‘Rod’ when creating a piston
Fixed origin of the t mount
Once you constrained a piston you can’t change mounts anymore. Instead you can go back to the initial menu used to start the process.
Save function bug - Parts have their file names changed to accomodate. It’s best to replace your parts directory with the new one.
Mounts saved with an offset on the X axis will have this offset preserved once added to the scene. (Mainly useful for trunnion mounts)
Mounts will now automatically scale down to a sensible size.
Control empties or parent objects(connectors) are now selected when mounts and connectors are added to the scene.
4 more parts. 3 mounts, 1 banjo connector.
2 templates: single and double action welded rod designs. These have extrusions ready for connectors.
Part prepare/make feature! you’ll find this in the create panel as well. It allows you to easily prepare connectors, mounts and rods so that they can be used while creating pistons. It works like this:
For mounts:
You should create the mount in a vertical position. The bottom-most face(s) will connect/touch with the piston rod or cylinder. This face should be at the world origin, or slightly below it if the rod sticks into the mount. Then, the origin of the main object should be set to its pivot point. After this you can select all child objects and lastly the main object. Then click on make. selected objects will be parented to the main object, an empty is added and the mount is rotated into the proper position. For connectors the process is the same but they won’t be rotated or parented to an empty.
For rods:
Rods are created in a horizontal position. You can add details and child objects as well. You can basically just take a cylinder, off-set its origin to a number < 0 on the y axis. All vertices further than the origin relative to 0(y axis) will stick out of the cylinder once you place it later on. Due to the way the rod is scaled, child objects are handled slightly different: You’re supposed to select only 2 objects, even if there are more. The piston rod, which should be selected last so it’s the active object and the ‘main’ (or biggest) child object. (All other objects are parented to the selected object.) Then you can click on make.
Note that this adds the proper collections, constraints and adjusts objects names so they reflect the expected convention(for mounts too). I still recommend giving your objects sensible names. You don’t need to name the piston rod, it’ll be named properly for you. I use transformation constraints for decorative pieces that you might find on piston rods, these are added too. You can add detailing geometry to the rod itself too now but only if you added child objects too(due to cylic dependencies that would otherwise form by hooking these vertices to the ‘p_rend’ empty).
Mouse input modal operator logic adjusted, it’s now very similar to blender’s native scaling/resize functionality. Cleaned up various quirks with the tool as well.
Scaling is now toggled with the S key, shift can be held for finer adjustments. Original scale is preserved if cancelled. If the pistonpusher menu remains open after moving the mouse away, pressing shift will close it.
Certain keybinds returned a 'PASS_THROUGH needlessly, this has now been fixed.
The modal operator has new features: It can find the length anchor belonging to the instance it’s currently snapping. It’s currently only designed for pistons with a single length anchor This means that you can now press ‘E’ while snapping and drag the length anchor to the desired location. Only works if the length anchor has ‘Length anchor’ in its object name. You can also press ‘R’ to reset scale. I also disabled the ability to scale negatively.
Added 2 more connectors: One with a small oil reservoir, One flat like disk thing by lack of a better name.
Fixed issue with connector 6, a part was not in the right collection
Changed connector 0,1 and 2 so that they are more realistic,
Added a circle ngon for users that have cablerator, to connector parts that could use one.
Changed connector 11, reduced geometry in flat areas
Added 4 connectors, 2 of these have control empties to adjust them as you see fit, the other 2 are a nurbs and bezier pipe
Added a small kpack that contains 2 different bolts and 1 nut
After you made a part, save panel will now show, set at the proper sub directory
Added a simple notification system, these appear in the bottom center of your 3dview/viewport and give information about what’s happening.
Can now press ‘H’ while snapping to show modal keybinds. Like notifications, they will automatically dissappear after 3 seconds. You can change this duration in the add-on preferences
Fixed a bug that would occur if you tried to add a piston to the scene while having 2 objects selected which were not empties. It originally didn’t break the functionality but it did cause an error. This is now handled properly and the operator is cancelled when you try to do this.
Fixed bug when adding part while not in the piston creation process, this bug also did not break functionality and simply caused an error in the console.
Fixed bug when replacing a piston rod during the piston creation process.
I’m currently collaborating with the one and only @masterxeon1001
As a result of this, we’re adding some really fine, high quality hydraulic cylinders. We just added 4 new pistons. You’ll recognize some of these in masterxeon1001’s videos. A big thanks and shout out to him for helping me out and allowing me to add his work to PistonPusher.
Be sure to check his channel out if you often use cylinders/pistons cause this month his content will focus on them! MasterXeon1001’s youtube channel
Fixed gui bug when saving a piston, causing an incorrect notification to appear.
Added support for piston designs that can not use a length anchor but still need tracking constraints
Added support for subd workflow in the form of a ‘custom’ template. This is a more manual approach to the creation process, so it is not limited to subd workflow.
various changes to the N-panel(s). Mostly related to the new custom template/mode.
Added ‘C’ keybind to snap modal. This allows you to toggle the auto constrain opt-in.
MasterXeon1001 made another awesome looking cylinder/piston. This one is hydro-electric.
Bonus content: Also made possible by MasterXeon1001! There is a game ready variant of the glass/see through piston type. It’s also UV’ed. The file also contains the high res version.
Rods are now hooked to the rod anchor automatically if there is not a vertex group. This was a bug related to the custom template which did not re-hook the rod properly. For most rods, you can skip hooking the rod from now on.
Prepare operator can now work without a cutters collection.
Added a handler that fixed an issue after file reload, related to the piston select tool.
Added curve support for the creation system constrain operator.
Added a button to toggle subd modifiers viewport visibility of all objects. Found in N panel and pop up menu.
Ensured that the ‘go back’ button appears in custom template mode as well once constrained.
Masterxeon1001 has also been very busy!
Added 2 constrained game ready pistons.
Hydro-electric game ready bonus file
Added a ‘plunger’ piston.
Updated hydro-electric variant to a version with a better mesh and mount.
Skipped some numbers, kinda, pistonpusher 1.5.11 is out now.
Everything that was wrong with the creation system should be fixed with this update. Pistons that are constrained from now on can also be rotated in an easy way, on a per part basis ( mount/cylinder/rod).
changes:
UI works properly now and refined the constrain configuration opt-ins a bit more.
Rods are finally handled properly
rotation drivers are added when you constrain a piston now. This means you can freely rotate the cylinder and piston rod now. To rotate the piston rod(and child objects), select the piston rod anchor. For the cylinder, you can rotate the object that is called 'Cylinder. There must always be an object called ‘Cylinder’ from now on.
rear length anchors come with another empty called _rla now. This is the empty that you want to move now, if you wish to make the cylinder longer.
Pistons that are constrained without a length anchor, or without tracking constraints are no longer stretchable, this was needed so that you can easily rotate the cylinder in these cases too.
This only applies to newly constrained pistons. I still have to re-constrain all assets.