v8 does not developed
_NoEcho _-Options V R l A EnterEnd
I’ve got this set to ‘tvr’ which is short for Toggle View Rotate (mode).
This alias toggles between the ClassicV2Rotation (rotate mode that is most-like SolidWorks) and Rotate Around World Axes options.
Useful for quick switching between a presentation-friendly rotation mode where the Z-axis is locked to the vertical and a more free camera mode for modelling.
A simple macro to conveniently copy in place, ungroup, match the object properties and then add to existing group the pre-selected object(s):
! %_Copy _Pause _InPlace _SelLast _Ungroup
_MatchProperties _SelLast _Pause _AddToGroup
Could be handy for when existing groups consist some letters or other object that need to be copied and added to a new group. In this example, I copied the names of older metal plates for laser cutting and assigned them to the newer version.
I’m so thankful Rhino 8 didn’t break that new block edit plug-in!
Here’s two I use a lot:
MoveBlockDefinitionsToLayer.py (1003 Bytes)
MoveBlockWithContentsToLayer.py (1.2 KB)
I think they’re from this thread.
EDIT: Not sure why the forum renamed the first file… perhaps because it detected it had already been uploaded? It moves the definition and not the object, so make sure to rename it after downloading. The second script moves both the definition AND objects.
Along with the macro that rotates the view by 180 degrees sideways, I also made a similar one for rotating the camera upside-down. This is especially handy when working on the Top view, because it lets me flip to Bottom with the press of a button. Sometimes it’s also useful for flipping the side views upside-down, too.
Reverse camera view sideways:
-RotateView a 180 l, -RotateView a 180 r
Reverse camera view upside-down:
-RotateView a 180 u, -RotateView a 180 d
I’ll share a few of my efficiency tools here. I use them for drafting. A lot of them are tweaks of existing commands:
Draw square from one side
2PointSquare.py (1.2 KB)
Align Commands for corners
BottomLeftAlign.py (1.4 KB)
BottomRightAlign.py (1.4 KB)
TopLeftAlign.py (1.3 KB)
TopRightAlign.py (1.5 KB)
Select objects in same axis
SelWorldHorizontal.py (2.3 KB)
SelYZ.py (2.3 KB)
SelZX.py (2.3 KB)
Sel by PrintWidth (I believe Mitch made this one…)
SelCrvsByPrintWidth.py (2.2 KB)
1 Click Scale1D (I have these set to SS SE SF SC) (making a + sign on the keyboard)
Scale1DLeft.py (1.6 KB)
Scale1DRight.py (1.6 KB)
Scale1DTop.py (1.5 KB)
Scale1DBottom.py (1.6 KB)
I also love using Align instead of move with a + sign on the keyboard, extremely fast for drawing
AS AE AF AC AD (Align Left, Align Top, Align Right, Align Bottom, Align Concentric)
And the same with changing views with VS VE VF VC VD VDD, V1, V2, VZer (Left, Top, Right, Bottom, Front, Back, 1 Point Perspective, 2 Point Perspective, Parallel Projection
Scalar Offset using object midpoints
ScalarOffset.py (1.6 KB)
Rotate From Centerpoint (needs work, but useful)
RotateFromCenterpoint.py (3.0 KB)
Move up and down between layers (I have this automated to ER and EW)
PrevNextLayer.rvb (2.8 KB)
Point on Face: CTRL Click a face and it adds a point directly onto the face, can also do this with OnSurface (which I didn’t know about when I made this)
PointOnFace.py (858 Bytes)
MultiPictureFrame is like PictureFrame but allows you to shift select multiple images
MultiPictureFrame.py (1012 Bytes)
Boundary Trim: This is another Mitch script. Trims everything inside or outside a boundary
MultiNestedBoundaryTrimCurves.py (4.1 KB)
Individual AreaCentroid - Creates individual centerpoints for multiple objects
IndividualAreaCentroid.py (1.1 KB)
HatchXL - bypasses the Boundary Mode for super fast hatching
HatchXL.py (410 Bytes)
Explode Linetype (by Mitch) explodes dashed lines, considering making a version that also explodes printwidth…
ExplodeLinetypeV12.py (8.6 KB)
DupMultipleLayers - good if you want to copy a bunch of layers at once for a repetitive layer structure
DupMultipleLayers.py (2.0 KB)
DeleteMode - Need to delete scattered objects? turn it on, everything you click will be deleted until you press enter
DeleteMode.py (618 Bytes)
I also use a ton of macros but that can be more of a personal journey…
Also there’s some useful Aliases people added to this thread I made a while back
Finds the clearance between surfaces or polysurfaces. Adds the following alias:
_-Clearance
Clearance.rar (1.0 KB)
Tween plane between two curves. This is ideal for making cutting planes for pipes that meet together at an angle. I created 3 versions of the macro.
Temporarily turn off the History recording and automatic deletion of the unnecessary helper objects (this is the most straight-forward version which most people will like to use):
! _History _Record=_No _Enter _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _EnterEnd _SelLast _SetObjectName temp_object _Pause _SelLast _PlanarSrf _EnterEnd _SelLast _SetObjectName temp_object _SelNone _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _EnterEnd _SelLast _SetObjectName temp_object _Pause _SelLast _PlanarSrf _EnterEnd _SelLast _SetObjectName temp_object _SelNone _Pause _SelNone _TweenSurfaces _Multipause _EnterEnd _History _Record=_Yes _Enter -_SelName temp_object _delete
Temporarily turn off the History recording (deleting the unnecessary resulting curves will not bring the pop-up warning for breaking the History):
! _History _Record=_No _Enter _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _EnterEnd _Pause _SelLast _PlanarSrf _EnterEnd _SelNone _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _EnterEnd _Pause _SelLast _PlanarSrf _EnterEnd _Pause _SelNone _TweenSurfaces _Multipause _EnterEnd _History _Record=_Yes _Enter
Keep the History recording (deleting the unnecessary resulting curves will bring the pop-up warning for breaking the History):
! _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _PlanarSrf _SelLast _HistoryPurge _Pause _EnterEnd _SelNone _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _PlanarSrf _SelLast _HistoryPurge _EnterEnd _Pause _SelNone _TweenSurfaces _Multipause _EnterEnd
P.S. I set a value of 70 mm, because I usually work with pipes up to 45 mm diameter. However, you can change the size to any other value according to your liking.
Great, @Rhino_Bulgaria.
Very useful for many other cases too.
Thanks! I needed that for many years and finally managed to create a suitable macro. I still can’t figure out how to delete the two circles and their corresponding circle surfaces automatically, in order to leave just the square surface in-between.
You can name them all (both circles and circular surfaces) “temp_object” and then select them at the end and delete them:
Here I make one circle, name it and delete it:
! _circle w0,0,0 10 _SelLast _SetObjectName temp_object _SelNone -_SelName temp_object _delete
And here I make two circles and name them the same and delete them:
! _circle w0,0,0 10 _SelLast _SetObjectName temp_object _SelNone _circle w20,0,0 10 _SelLast _SetObjectName temp_object _SelNone -_SelName temp_object _delete
But your macros are getting complex now so I suggest you transit to python, once you get the basics down you can do a lot of fun stuff faster and more complex.
Great idea! I actually managed to create the macro and here is the new version that automatically deletes the unnecessary helper objects. I had to rename “temp_delete” with “temp_object”.
! _History _Record=_No _Enter _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _EnterEnd _SelLast _SetObjectName temp_object _Pause _SelLast _PlanarSrf _EnterEnd _SelLast _SetObjectName temp_object _SelNone _Circle _AroundCurve _Pause _Pause 70 _Enter _SelLast _EnterEnd _SelLast _SetObjectName temp_object _Pause _SelLast _PlanarSrf _EnterEnd _SelLast _SetObjectName temp_object _SelNone _Pause _SelNone _TweenSurfaces _Multipause _EnterEnd _History _Record=_Yes _Enter -_SelName temp_object _delete
Oh, sorry, I changed the naming here on discource since it wasn’t super readable, but didn’t change them all…
(It’s updated now in case anybody tries to copy paste that part and it fails)
I allways do these things by hand.
I unfortunately never found neither time nor motivation to look into macros and scripting.
I’m pretty weak at making macros, but I started to experiment in the last couple of years and somehow figured out how to make some simpler macros that make my workflow smoother. The main issue is that I still can’t find an official full list with every possible command that could be used in macros. That would make the creation of macros so much easier.
There are not much references for creating more complicated macros. I use the following basic help topic as a reference:
Here is a macro that triggers a specific number, eliminating the need to write it manually in the Command line. It’s handy that two of these could be added to a single icon. I use it to set two of the most common offset values in my workflow. I also made a custom icon for it.
If you only include a number in the command field of the icon, it will be entered in the Command field as soon as you press the icon.
Left mouse button command:
2.6
Right mouse button command:
0.2
However, if you want to add a waiting for additional confirmation, adding the “\” symbol behind a number in the command field of the icon is what does the magic.
Left mouse button command:
2.6\
Right mouse button command:
0.2\
32-bit PNG with transparency (32x32 pixels)
2,6 и 0,2 мм.rar (929 Bytes)
![]()
In a better World, Rhino will have this functionality implemented directly in the commands that use manually entered values. I made such a proposal at the end of the 1st post here:
For me it is not working. I created a button and wrote 2.6\ in command field but every time I do press that button I only get an Unknown command error.
You have to add the “\” symbol directly behind the numeric value. Also, this works only when the Command line prompts you to manually type a numerical value there, such like a radius fillet or offset distance. Simply watch the Command line while you press the icon consisting this particular macro and you will notice that the value set there will appear in the former.
If you take a look at this page, the example mentioned for using backslash is to create an on-screen numeric keypad.
I do made exactly that and it is not working at all. Maybe a Python script that can copy a value to clipboard will work better, but I have no clue on how to create such a script.
