virtual public bool DoneTransformation() { curChange.parentAfter = GetLocalFrame(CoordSpace.SceneCoords); curChange.parentScaleAfter = GetLocalScale(); if (target.IsTemporary) { curChange.after = new List <Frame3f>(); curChange.scaleAfter = new List <Vector3f>(); foreach (TransformableSO so in curChange.childSOs) { curChange.after.Add(so.GetLocalFrame(CoordSpace.SceneCoords)); curChange.scaleAfter.Add(UnityUtil.GetFreeLocalScale(so.RootGameObject)); } } target.GetScene().History.PushChange(curChange, true); curChange = null; return(true); }
/// <summary> /// Assuming dimensionIn is in space eFrom of fromSO, transform to eTo /// </summary> public static float TransformTo(float dimensionIn, TransformableSO fromSO, CoordSpace eFrom, CoordSpace eTo) { if (eFrom == eTo) { return(dimensionIn); } FScene scene = fromSO.GetScene(); float sceneDim = dimensionIn; if (eFrom == CoordSpace.ObjectCoords) { // if we are in Object coords, we are either going up to Scene or World sceneDim = ObjectToScene(fromSO, dimensionIn); } else if (eFrom == CoordSpace.WorldCoords) { // if we are in World coords, we are going down to Scene or Object sceneDim = scene.ToSceneDimension(dimensionIn); } // (otherwise frameIn is in Scene coords) // going World->Scene or Object->Scene if (eTo == CoordSpace.SceneCoords) { return(sceneDim); } // going Scene->World or Object->World if (eTo == CoordSpace.WorldCoords) { return(scene.ToWorldDimension(sceneDim)); } // only thing left is going from Scene to Object //return SceneToObject(fromSO, sceneDim); throw new NotImplementedException("SceneTransforms.TransformTo: transforming to object coordinates not supported yet"); }
/// <summary> /// Assuming frameIn is in space eFrom of fromSO, transform to eTo /// </summary> public static Frame3f TransformTo(Frame3f frameIn, TransformableSO fromSO, CoordSpace eFrom, CoordSpace eTo) { if (eFrom == eTo) { return(frameIn); } FScene scene = fromSO.GetScene(); Frame3f sceneF = frameIn; if (eFrom == CoordSpace.ObjectCoords) { // if we are in Object coords, we are either going up to Scene or World sceneF = ObjectToScene(fromSO, frameIn); } else if (eFrom == CoordSpace.WorldCoords) { // if we are in World coords, we are going down to Scene or Object sceneF = scene.ToSceneFrame(frameIn); } // (otherwise frameIn is in Scene coords) // going World->Scene or Object->Scene if (eTo == CoordSpace.SceneCoords) { return(sceneF); } // going Scene->World or Object->World if (eTo == CoordSpace.WorldCoords) { return(scene.ToWorldFrame(sceneF)); } // only thing left is going from Scene to Object return(SceneToObject(fromSO, sceneF)); }
public static GroupSO CreateGroupSO(TransformableSO so1, TransformableSO so2) { FScene scene = so1.GetScene(); if (scene.IsSelected(so1)) { scene.Deselect(so1); } if (scene.IsSelected(so2)) { scene.Deselect(so2); } GroupSO group = new GroupSO(); group.Create(); scene.AddSceneObject(group); group.AddChild(so1); group.AddChild(so2); return(group); }
public SOAddFrameLinkChangeOp(TransformableSO source, TransformableSO target) : base(false) { Scene = source.GetScene(); TargetUUID = target.UUID; SourceUUID = source.UUID; }