CopyPaste

Introduced

v1.0

Categories

selection edit

Description

Pastes a copy of something without going through the clipboard. This is the scripting equivalent of a drag-and-drop operation. You can use this command to move items that already exist in the scene (for example, reparenting a scene object) or to paste items that are sitting in the TransientObjectContainer (for example, instances of built-in property sets such as the Annotation).

Note: The CopyPaste command is the only way to transfer things from the TransientObjectContainer to the current scene, because the TransientObjectContainer is inaccessible from the UI.

Warning: Prior to v7.0, you could also use this command to create a shader from preset and copy it to the TransientObjectContainer until you were ready to connect it in the RenderTree. However, this command no longer supports that functionality: now you must create a temporary copy of the shader in the scene's material library ("Sources.Materials.DefaultLib.Scene_Material") using the CreateShaderFromPreset command instead. See the ReplaceShader reference page for an example.

Scripting Syntax

CopyPaste( [Source], [FileName], Target, [Mode] );

Parameters

Parameter Type Description
Source String Object to copy
FileName String File or preset to import in the scene
Target String Target object
Mode vbCopyPaste constant or Integer The (VisualBasic) mode to copy paste.

Default Value: vbDefaultCopyPaste

Possible Values:

Description:

vbDefaultCopyPaste (0) Use the default mode of copy paste.
vbCutSource (1) Cut and paste
vbCopySource (2) Copy and paste
vbLinkSource (3) Link source to destination.

Examples

1. Python Example

#
# Example of creating a temporary custom property (aka custom pset)
# which can be written to before actually depositing in the scene
# 
app = Application
from win32com.client import constants as c
app.NewScene( "", 0 )
# Demonstrate how you can use it to create a built-in custom pset
presetFullPath = XSIUtils.BuildPath( 
        app.InstallationPath(c.siFactoryPath), 
        "Data", "DSPresets", "Properties", "Annotation.Preset"
)
oAnnotation = app.CreateObjectFromPreset( presetFullPath, "Notes" )
if ( oAnnotation ) :
        # Even though it only exists on the clipboard you can still populate it
        app.InspectObj( oAnnotation, "", "Annotation Test", "siModal", 0 )
        # Notice how the owner of this annotation doesn't have to 
        # exist until you are ready to cut-and-paste it
        oNull = app.ActiveSceneRoot.AddModel("", "Jerry")
        app.CopyPaste(oAnnotation, "", oNull, 1)
        # Just to prove that it exists any modifications 
        for oParam in oNull.Properties("Notes").Parameters :
                app.LogMessage( oParam.Name + ": " + str(oParam.Value) )
else :
        app.LogMessage( "Couldn't create Annotatation property." )
# Expected results (similar to):
# INFO : Title: 
# INFO : Text: need to refine right bicep
# INFO : Keyword: modeling
# INFO : Flag 1: False
# INFO : Flag 2: True

2. JScript Example

/*
        This example demonstrates how to use the CopyPaste command to 
        reparent scene objects by physically moving objects under 
        their new parents (a la drag-and-drop in the UI).
*/
// Create a new scene with 4 nulls
var app = Application;
NewScene(null, false);
GetPrim("Null");
GetPrim("Null");
GetPrim("Null");
GetPrim("Null");
// Reparent null2 and null3 under null1
CopyPaste("null3", null, "null1", 1);
CopyPaste("null2", null, "null1", 1);
// Reparent null under null2
CopyPaste("null", null, "null2", 1);
// Print the visual hierarchy
ShowMeTheHierarchy(app.ActiveSceneRoot, "");
// Expected results:
// INFO : Camera_Root
// INFO : ...Camera
// INFO : ...Camera_Interest
// INFO : light
// INFO : null1
// INFO : ...null3
// INFO : ...null2
// INFO : ......null
// Convenience function to print out a graphical representation 
// of the hierarchy in the scene starting at the specified object
function ShowMeTheHierarchy(in_parent, in_depth)
{
        var kid = new Enumerator(in_parent.Children);
        for (; !kid.atEnd(); kid.moveNext()) {
                app.LogMessage(in_depth + kid.item().FullName);
                if (kid.item().Children.Count) {
                        ShowMeTheHierarchy(kid.item(), in_depth + "...");
                }
        }
}

See Also

Copy Cut Paste CopyAnimation