'/// EnvDataMove 1.0 for XSI 3.5+
'/// By Homam Bahnassi - In|Framez 2003
'--------------------------------------

set oSelection = CreateObject("XSI.Collection")
set oSelection = Application.Selection

if oSelection.count <> 0 then
	PickElement "model", "Select Target Model", "Select Target Model", oPickedModel, button
	if button = 0 then logmessage "EnvDataMove: Canceled by user..."
	EnvDataMove oSelection(0), oPickedModel
else
	logmessage "EnvDataMove: Object required..."
end if

function EnvDataMove(oEnvelopedObj,oTargetModel)
if typename(oEnvelopedObj) <> "X3DObject" then
	logmessage "EnvDataMove: Object is required..."
	EnvDataMove = false
	exit function
end if
set oEnvelope = oEnvelopedObj.Envelopes(0)

'--- Check if oEnvelopedObj is enveloped...
if typename(oEnvelope) <> "Envelope" then
	logmessage "EnvDataMove: Objcet has no envelope..."
	EnvDataMove = false
	exit function
end if
set oDeformers = oEnvelope.Deformers

'--- Check if oTargetModel is valid...
if typename(oTargetModel) <> "Model" then
	logmessage "EnvDataMove: Target model is required..."
	EnvDataMove = false
	exit function
end if

'--- Change Deformers Model
iDef = 0
set oDefsCollection = CreateObject("XSI.Collection")
for each oDef in oDeformers
	if InStr (oDef, "eff") then
		logmessage "EnvDataMove: " & oDef.Name & "is effector... cancelled"
	else
		sDef = oTargetModel & "." & oDef.Name
		oDefsCollection.add sDef
		aWeights = oEnvelope.Weights.Array
		iDef = iDef+1
	end if
next

'--- Read current weights and save them in oWeights collection
set oWeights = oEnvelope.Weights
aWeights = oEnvelope.Weights.Array

'--- Remove old weights clusters... House cleaning
set oGeometry = oEnvelopedObj.activeprimitive.geometry
set oClusters = oGeometry.Clusters
for each oCluster in oClusters  
	set oClsProp = oCluster.properties
	for each Prop in oClsProp
		if Prop.type = "envweights" then
			logmessage "EnvDataMove: Deleteing " & oCluster.name
			DeleteObj oCluster
		end if
	next
next

'--- Applay new Envelope
set oEnvelope = oEnvelopedObj.ApplyEnvelope( oDefsCollection ,0,0 )

'--- Apply new Weights
oEnvelope.Weights.Array = aWeights
EnvDataMove = true
end function
