Skip to content

ObjectTable.Transform (ObjRef, Transform, Boolean)

Public Class

Constructs a new object that is the transformation of the existing object and deletes the existing object if deleteOriginal is true.

Namespace: Rhino.DocObjects.Tables

Assembly: RhinoCommon (in RhinoCommon.dll)

**Since:**5.0

Syntax

public Guid Transform(
ObjRef objref,
Transform xform,
bool deleteOriginal
)

Parameters

objref

Type: Rhino.DocObjects.ObjRef
reference to object to transform. The objref.Object() will be deleted if deleteOriginal is true.

xform

Type: Rhino.Geometry.Transform
transformation to apply.

deleteOriginal

Type:System.Boolean
if true, the original object is deleted if false, the original object is not deleted.

Return Value

Type:Guid
Id of the new object that is the transformation of the existing_object. The new object has identical attributes.

Remarks

If the object is locked or on a locked layer, then it cannot be transformed.

Examples

partial class Examples
{
public static Rhino.Commands.Result OrientOnSrf(Rhino.RhinoDoc doc)
{
// Select objects to orient
Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject();
go.SetCommandPrompt("Select objects to orient");
go.SubObjectSelect = false;
go.GroupSelect = true;
go.GetMultiple(1, 0);
if (go.CommandResult() != Rhino.Commands.Result.Success)
return go.CommandResult();
// Point to orient from
Rhino.Input.Custom.GetPoint gp = new Rhino.Input.Custom.GetPoint();
gp.SetCommandPrompt("Point to orient from");
gp.Get();
if (gp.CommandResult() != Rhino.Commands.Result.Success)
return gp.CommandResult();
// Define source plane
Rhino.Display.RhinoView view = gp.View();
if (view == null)
{
view = doc.Views.ActiveView;
if (view == null)
return Rhino.Commands.Result.Failure;
}
Rhino.Geometry.Plane source_plane = view.ActiveViewport.ConstructionPlane();
source_plane.Origin = gp.Point();
// Surface to orient on
Rhino.Input.Custom.GetObject gs = new Rhino.Input.Custom.GetObject();
gs.SetCommandPrompt("Surface to orient on");
gs.GeometryFilter = Rhino.DocObjects.ObjectType.Surface;
gs.SubObjectSelect = true;
gs.DeselectAllBeforePostSelect = false;
gs.OneByOnePostSelect = true;
gs.Get();
if (gs.CommandResult() != Rhino.Commands.Result.Success)
return gs.CommandResult();
Rhino.DocObjects.ObjRef objref = gs.Object(0);
// get selected surface object
Rhino.DocObjects.RhinoObject obj = objref.Object();
if (obj == null)
return Rhino.Commands.Result.Failure;
// get selected surface (face)
Rhino.Geometry.Surface surface = objref.Surface();
if (surface == null)
return Rhino.Commands.Result.Failure;
// Unselect surface
obj.Select(false);
// Point on surface to orient to
gp.SetCommandPrompt("Point on surface to orient to");
gp.Constrain(surface, false);
gp.Get();
if (gp.CommandResult() != Rhino.Commands.Result.Success)
return gp.CommandResult();
// Do transformation
Rhino.Commands.Result rc = Rhino.Commands.Result.Failure;
double u, v;
if (surface.ClosestPoint(gp.Point(), out u, out v))
{
Rhino.Geometry.Plane target_plane;
if (surface.FrameAt(u, v, out target_plane))
{
// Build transformation
Rhino.Geometry.Transform xform = Rhino.Geometry.Transform.PlaneToPlane(source_plane, target_plane);
// Do the transformation. In this example, we will copy the original objects
const bool delete_original = false;
for (int i = 0; i < go.ObjectCount; i++)
doc.Objects.Transform(go.Object(i), xform, delete_original);
doc.Views.Redraw();
rc = Rhino.Commands.Result.Success;
}
}
return rc;
}
}
import Rhino
import scriptcontext
import System.Guid
def OrientOnSrf():
# Select objects to orient
go = Rhino.Input.Custom.GetObject()
go.SetCommandPrompt("Select objects to orient")
go.SubObjectSelect = False
go.GroupSelect = True
go.GetMultiple(1, 0)
if go.CommandResult()!=Rhino.Commands.Result.Success:
return go.CommandResult()
# Point to orient from
gp = Rhino.Input.Custom.GetPoint()
gp.SetCommandPrompt("Point to orient from")
gp.Get()
if gp.CommandResult()!=Rhino.Commands.Result.Success:
return gp.CommandResult()
# Define source plane
view = gp.View()
if not view:
view = doc.Views.ActiveView
if not view: return Rhino.Commands.Result.Failure
source_plane = view.ActiveViewport.ConstructionPlane()
source_plane.Origin = gp.Point()
# Surface to orient on
gs = Rhino.Input.Custom.GetObject()
gs.SetCommandPrompt("Surface to orient on")
gs.GeometryFilter = Rhino.DocObjects.ObjectType.Surface
gs.SubObjectSelect = True
gs.DeselectAllBeforePostSelect = False
gs.OneByOnePostSelect = True
gs.Get()
if gs.CommandResult()!=Rhino.Commands.Result.Success:
return gs.CommandResult()
objref = gs.Object(0)
# get selected surface object
obj = objref.Object()
if not obj: return Rhino.Commands.Result.Failure
# get selected surface (face)
surface = objref.Surface()
if not surface: return Rhino.Commands.Result.Failure
# Unselect surface
obj.Select(False)
# Point on surface to orient to
gp.SetCommandPrompt("Point on surface to orient to")
gp.Constrain(surface, False)
gp.Get()
if gp.CommandResult()!=Rhino.Commands.Result.Success:
return gp.CommandResult()
# Do transformation
rc = Rhino.Commands.Result.Failure
getrc, u, v = surface.ClosestPoint(gp.Point())
if getrc:
getrc, target_plane = surface.FrameAt(u,v)
if getrc:
# Build transformation
xform = Rhino.Geometry.Transform.PlaneToPlane(source_plane, target_plane)
# Do the transformation. In this example, we will copy the original objects
delete_original = False
for i in range(go.ObjectCount):
rhobj = go.Object(i)
scriptcontext.doc.Objects.Transform(rhobj, xform, delete_original)
scriptcontext.doc.Views.Redraw()
rc = Rhino.Commands.Result.Success
return rc
if __name__=="__main__":
OrientOnSrf()