------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ -- Mirror Copy(World) : ÁÂÇ¥°è¸¦ À¯ÁöÇϸ鼭 Mirror Copy¸¦ ÇØÁÝ´Ï´Ù. -- Script¸¦ ÀÌ¿ëÇØ Mirror Copy µÈ Á¿ì ObjectÀÇ Key °ªÀ» ¼­·Î Copy&Paste ÇÒ ¼ö ÀÖ½À´Ï´Ù. -- Á¦ÀÛ : Ȳ±º ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ persistent global pg_aMirrorCopyTargetInfo global g_MirrorCopyCoordinateFloater global g_aObjKeyInfo ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ -- Mirror Copy Coordinate Rollout ------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ rollout MirrorCopyCoordinateRollout "Mirror Copy (World)" ( group "Object Mirror Axis (World) : " ( radiobuttons rdob_ObjectMirrorAxis labels:#("X", "Y", "Z", "XY", "YZ", "ZX") columns:6 button btn_MirrorCopy "Mirror Copy" width:222 ) group "Mirror Key" ( button btn_CopyKey "Copy Key" width:222 button btn_PasteKey "Paste Key" width:100 across:2 button btn_PasteOppositeKey "Paste Opposite Key" width:100 ) label lbl_Maker "Hwanggoon" --====================================================================================== -- Fn --====================================================================================== -------------------------------------------------------------------- -- ResetMirrorCopyArray -------------------------------------------------------------------- fn ResetMirrorCopyArray = ( if isKindOf pg_aMirrorCopyTargetInfo array then ( -- ºÒÇÊ¿äÇÑ Á¤º¸ »èÁ¦ --------------------------- if pg_aMirrorCopyTargetInfo.count > 0 then ( tempArray = deepCopy pg_aMirrorCopyTargetInfo pg_aMirrorCopyTargetInfo = #() for i = 1 to tempArray.count do ( if tempArray[i][1] != undefined and tempArray[i][2] != undefined then ( if not isDeleted tempArray[i][1] and not isDeleted tempArray[i][2] then append pg_aMirrorCopyTargetInfo tempArray[i] ) ) ) ------------------------------------------------ ) else pg_aMirrorCopyTargetInfo = #() ) -------------------------------------------------------------------- -- ResetObjKeyInfo -------------------------------------------------------------------- fn ResetObjKeyInfo = ( if isKindOf g_aObjKeyInfo array then ( -- ºÒÇÊ¿äÇÑ Á¤º¸ »èÁ¦ --------------------------- if g_aObjKeyInfo.count > 0 then ( tempArray = deepCopy g_aObjKeyInfo g_aObjKeyInfo = #() for i = 1 to tempArray.count do ( if not isDeleted tempArray[i].obj then append g_aObjKeyInfo tempArray[i] ) ) ------------------------------------------------ ) else g_aObjKeyInfo = #() ) -------------------------------------------------------------------- -- GetWorldMirrorTransform -------------------------------------------------------------------- fn GetWorldMirrorTransform obj = ( local newTransform local row1 local row2 local row3 local row4 -- Axis --------------------------------------------- case rdob_ObjectMirrorAxis.state of ( -- X -- 1 : ( row1 = obj.transform.row1*[-1,1,1] row2 = obj.transform.row2*[1,-1,-1] row3 = obj.transform.row3*[-1,1,1] row4 = obj.transform.row4*[-1,1,1] ) -- Y -- 2 : ( row1 = obj.transform.row1*[1,-1,1] row2 = obj.transform.row2*[-1,1,-1] row3 = obj.transform.row3*[1,-1,1] row4 = obj.transform.row4*[1,-1,1] ) -- Z -- 3 : ( row1 = obj.transform.row1*[1,1,-1] row2 = obj.transform.row2*[-1,-1,1] row3 = obj.transform.row3*[1,1,-1] row4 = obj.transform.row4*[1,1,-1] ) -- XY -- 4 : ( row1 = obj.transform.row1*[-1,-1,1] row2 = obj.transform.row2*[-1,-1,1] row3 = obj.transform.row3*[-1,-1,1] row4 = obj.transform.row4*[-1,-1,1] ) -- YZ -- 5 : ( row1 = obj.transform.row1*[1,-1,-1] row2 = obj.transform.row2*[1,-1,-1] row3 = obj.transform.row3*[1,-1,-1] row4 = obj.transform.row4*[1,-1,-1] ) -- ZX -- 6 : ( row1 = obj.transform.row1*[-1,1,-1] row2 = obj.transform.row2*[-1,1,-1] row3 = obj.transform.row3*[-1,1,-1] row4 = obj.transform.row4*[-1,1,-1] ) ) ----------------------------------------------------- newTransform = matrix3 row1 row2 row3 row4 return newTransform ) --====================================================================================== -- UI Control --====================================================================================== ---------------------------------------------------------------------------------------- -- btn_MirrorCopy ---------------------------------------------------------------------------------------- on btn_MirrorCopy pressed do ( aSels = selection as array atargetObjInfo = #() atargetObj = #() struct sCopyInfo (obj, targetObj) -- ResetMirrorCopyArray -- ResetMirrorCopyArray() -- Mirror Copy ----------------------------------------- for obj in aSels do ( targetObj = copy obj targetObj.wirecolor = obj.wirecolor targetObj.transform = GetWorldMirrorTransform obj -- Bone À̸é Bone ¼Ó¼º ºÎ¿© ------------ if isKindOf obj BoneGeometry then ( if obj.boneEnable then targetObj.boneEnable = true ) ---------------------------------------- boneInfo = sCopyInfo obj targetObj append atargetObjInfo boneInfo -- Link Àç¼³Á¤ ¿ë append atargetObj targetObj -- Select ¿ë append pg_aMirrorCopyTargetInfo #(obj, targetObj) -- Key Copy ¿ë ) ------------------------------------------------------- -- Link ¼³Á¤ ------------------------------------------- for i = 1 to atargetObjInfo.count do ( objParent = atargetObjInfo[i].obj.parent for j = 1 to atargetObjInfo.count do ( if atargetObjInfo[j].obj == objParent then atargetObjInfo[i].targetObj.parent = atargetObjInfo[j].targetObj ) ) ------------------------------------------------------- select atargetObj ) ---------------------------------------------------------------------------------------- -- btn_CopyKey ---------------------------------------------------------------------------------------- on btn_CopyKey pressed do ( -- ResetMirrorCopyArray -- ResetMirrorCopyArray() g_aObjKeyInfo = #() aSels = selection as array struct localTm (positionX, positionY, positionZ, rotationX, rotationY, rotationZ, scaleX, scaleY, scaleZ) struct objTm (obj, localTm) for selObj in aSels do ( if isKindOf selObj.position.controller Position_XYZ and isKindOf selObj.rotation.controller Euler_XYZ then ( bezier_scale ScaleXYZ localPositionX = selObj.position.controller.X_Position localPositionY = selObj.position.controller.Y_Position localPositionZ = selObj.position.controller.Z_Position localRotationX = selObj.rotation.controller.X_Rotation localRotationY = selObj.rotation.controller.Y_Rotation localRotationZ = selObj.rotation.controller.Z_Rotation localScaleX = selObj.controller.scale.x localScaleY = selObj.controller.scale.y localScaleZ = selObj.controller.scale.z selObjLocalTm = localTm \ positionX:localPositionX positionY:localPositionY positionZ:localPositionZ \ rotationX:localRotationX rotationY:localRotationY rotationZ:localRotationZ \ scaleX:localScaleX scaleY:localScaleY scaleZ:localScaleZ objTmInfo = objTm obj:selObj localTm:selObjLocalTm append g_aObjKeyInfo objTmInfo ) ) ) ---------------------------------------------------------------------------------------- -- btn_PasteKey ---------------------------------------------------------------------------------------- on btn_PasteKey pressed do ( -- ResetObjKeyInfo -- ResetObjKeyInfo() -- ResetObjKeyInfo -- ResetObjKeyInfo() undo on ( for i = 1 to g_aObjKeyInfo.count do ( local targetObj = g_aObjKeyInfo[i].obj local copyLocalTm = g_aObjKeyInfo[i].localTm if isKindOf targetObj.position.controller Position_XYZ and isKindOf targetObj.rotation.controller Euler_XYZ then ( targetObj.position.controller.X_Position = copyLocalTm.positionX targetObj.position.controller.Y_Position = copyLocalTm.positionY targetObj.position.controller.Z_Position = copyLocalTm.positionZ targetObj.rotation.controller.X_Rotation = copyLocalTm.rotationX targetObj.rotation.controller.Y_Rotation = copyLocalTm.rotationY targetObj.rotation.controller.Z_Rotation = copyLocalTm.rotationZ targetObj.controller.scale.x = copyLocalTm.scaleX targetObj.controller.scale.y = copyLocalTm.scaleY targetObj.controller.scale.z = copyLocalTm.scaleZ ) ) ) ) ---------------------------------------------------------------------------------------- -- btn_PasteOppositeKey ---------------------------------------------------------------------------------------- on btn_PasteOppositeKey pressed do ( -- ResetMirrorCopyArray -- ResetMirrorCopyArray() -- ResetObjKeyInfo -- ResetObjKeyInfo() undo on ( for i = 1 to g_aObjKeyInfo.count do ( local baseObj = g_aObjKeyInfo[i].obj local copyLocalTm = g_aObjKeyInfo[i].localTm for mirrorInfo in pg_aMirrorCopyTargetInfo do ( local targetObj if baseObj == mirrorInfo[1] then targetObj = mirrorInfo[2] if baseObj == mirrorInfo[2] then targetObj = mirrorInfo[1] if targetObj != undefined then ( if isKindOf targetObj.position.controller Position_XYZ and isKindOf targetObj.rotation.controller Euler_XYZ then ( targetObj.position.controller.X_Position = copyLocalTm.positionX targetObj.position.controller.Y_Position = copyLocalTm.positionY * -1 targetObj.position.controller.Z_Position = copyLocalTm.positionZ targetObj.rotation.controller.X_Rotation = copyLocalTm.rotationX * -1 targetObj.rotation.controller.Y_Rotation = copyLocalTm.rotationY targetObj.rotation.controller.Z_Rotation = copyLocalTm.rotationZ * -1 targetObj.controller.scale.x = copyLocalTm.scaleX targetObj.controller.scale.y = copyLocalTm.scaleY targetObj.controller.scale.z = copyLocalTm.scaleZ ) ) ) ) ) ) ---------------------------------------------------------------------------------------- -- Rollout Open ---------------------------------------------------------------------------------------- on MirrorCopyCoordinateRollout open do ( -- ResetMirrorCopyArray -- ResetMirrorCopyArray() ) ) try(CloseRolloutFloater g_MirrorCopyCoordinateFloater) catch() g_MirrorCopyCoordinateFloater = newRolloutFloater "Mirror Copy (World)" 286 205 addrollout MirrorCopyCoordinateRollout g_MirrorCopyCoordinateFloater