Is it possible to create a mirror of a CPlane?
A clunky way, but it works, I think:
! _Plane _Center 0 10 10 _Sellast _Mirror_Copy=No _Pause _Pause _SelLast _CPlane _Object _Delete
-Pascal
Thanks @pascal, I’ve tried that but the Cplane still isn’t mirrored - I’ve realized that what I’m looking for may not be technically possible in the way Cplanes are set up in Rhino - I remember reading that they always follow the “right hand” rule, so their orientation is set.
What I was looking for was using RemapCplane
command in combination with CPlanes to mirror objects aka make them “left handed”. Images below show how a “mirrored” Cplane is in fact only rotated.
I imagine that mirroring objects isn’t possible with Cplanes, but perhaps with some Transform Methods directly.
Right, you can’t have a left hand cplane but - what is the underlying need?
-Pascal
I’m trying to move/copy objects around the model using different Cplanes, please see the screenshot and the script below. It prompts you for a “from” and “to” Cplanes.
Some blocks however need to mirrored and it seems to me that it isn’t possible with CPlanes.
I imagine that instead it could be done by setting a dummy gizmo block and multiplying transformation matrices relative to that gizmo block (or perhaps the original block) in the script. I imagine it to be way more complicated, but probably also flexible.
import rhinoscriptsyntax as rs
import scriptcontext as sc
named_cplanes = [i.Name for i in list(sc.doc.NamedConstructionPlanes.GetEnumerator())]
selected_cplane_from = rs.ComboListBox(sorted(named_cplanes), "Cplane to Map from")
selected_cplane_to = rs.ComboListBox(sorted(named_cplanes), "Cplane to Map to")
current_cplane = rs.ViewCPlane()
rs.RestoreNamedCPlane(selected_cplane_from)
rs.Command("RemapCplane Copy=Yes Cplane " + chr(34) + selected_cplane_to + chr(34))
#restore previous Cplane
rs.ViewCPlane(plane=current_cplane)
Hi Daniel - It should be possible to mirror the block on its own - can you post a file with the planes, a block and the start and end states?
-Pascal
Sorry, would a video recording be also okay? I didn’t mean to modify any specific block in the model, yes they could be mirrored in the usual way (e.g. mirror
command, gumball
, "scaleND"
), but I was looking for a general way of transforming objects via RemapCplane
command.
I wanted to use CPlanes to be sure that no human error creeps into these transformations (as it often does when picking arbitrary objects in the model).
If that’s okay the video below hopefully shows how “convenient” it may be to use Named Cplanes for these transformations. I’m only using them for positioning objects vertically, but if mirroring became available this could possibly be a viable substitute for blocks (in some situations).
OK - yeah, I see the basic functionality of the script - it should be possible to mirror the block - I am tuning up your script (well, later or this evening) to do this internally without the top level Rhino conmand, so mirroring can be done there, and you’ll see at least one way to accomplish that.
-Pascal
Brilliant, thanks a lot! I’m looking forward to see how you’d do it. I’ve been reading up on related topics for a while now, but still couldn’t write anything functional - a working or a semi-working example would be very helpful.
also I’m on UTC +0, so no rush
That would be especially useful if Cplanes could be replaced with the matrix from the blocks themselves - for example a “grid block” (a line with an arrowhead turned into a block) could perhaps be more intuitive for an architect than a Named Cplane.
Hi Daniel Here’s a script that might have enough in it to help - there are comments in the code. In this quick-and-dirty there is no UI to determine what to do with block instances, it just mirrors them in a direction I chose, just so you can see one way to go about this…
DKPlaneToPlane.py (2.2 KB)
-Pascal
Fantastic, thank you, I will read it through and test it tomorrow