% % % Track Translate Function for Imaris % % Copyright Bitplane AG 2006 % % % Installation: % % - Copy this file into the XTensions folder in the Imaris installation directory. % - You will find this function in the Image Processing menu % % % % % % Matlab::BPTrackTranslate(%i) % % % % % % % Matlab::BPTrackTranslate(%i) % % % % % % % Description: % % Copy the tracks that are in the same group of the selected track. % The copies are then translated so that they have the same starting point. % % function BPTrackTranslate(aImarisApplicationID) % connect to Imaris Com interface if ~isa(aImarisApplicationID, 'COM.Imaris_Application') vImarisServer = actxserver('ImarisServer.Server'); vImarisApplication = vImarisServer.GetObject(aImarisApplicationID); else vImarisApplication = aImarisApplicationID; end % the user has to create a scene with some tracks vSurpassScene = vImarisApplication.mSurpassScene; if isequal(vSurpassScene, []) msgbox('Please create some tracks in the surpass scene!'); return; end % get the track vTrack1 = vImarisApplication.mFactory.ToTrack(vImarisApplication.mSurpassSelection); if ~vImarisApplication.mFactory.IsTrack(vTrack1) msgbox('Please select a track!'); return; end % get the spots and edges vEdges1 = vTrack1.GetEdges; vSpots1 = vTrack1.GetSpots; [vSpots1XYZ,vSpots1Time,vSpots1Radius] = vSpots1.Get; % get the second track vParentGroup = vTrack1.GetParent; vParentGroup.mVisible = 0; vNewGroup = vImarisApplication.mFactory.CreateDataContainer; vNewGroup.mName = ['Tracks compared to ',vTrack1.mName]; vSurpassScene.AddChild(vNewGroup); vCopy = vImarisApplication.mFactory.CreateTrack; vCopy.SetSpots(vSpots1); vCopy.SetEdges(vEdges1); vCopy.mName = ['Copy of ',vTrack1.mName]; vNewGroup.AddChild(vCopy); vNumberOfChildren = vParentGroup.GetNumberOfChildren; for vChildIndex = 1:vNumberOfChildren vDataItem = vParentGroup.GetChild(vChildIndex - 1); if vImarisApplication.mFactory.IsTrack(vDataItem) && ... ~strcmp(vDataItem.mName,vTrack1.mName) && ... vDataItem.mVisible == true vTrack2 = vDataItem; vEdges2 = vTrack2.GetEdges; vSpots2 = vTrack2.GetSpots; [vSpots2XYZ,vSpots2Time,vSpots2Radius] = vSpots2.Get; vNewSpots = vImarisApplication.mFactory.CreateSpots; vNewTrack = vImarisApplication.mFactory.CreateTrack; vSpots2XYZ(:,1) = vSpots2XYZ(:,1) - vSpots2XYZ(1,1) + vSpots1XYZ(1,1); vSpots2XYZ(:,2) = vSpots2XYZ(:,2) - vSpots2XYZ(1,2) + vSpots1XYZ(1,2); vSpots2XYZ(:,3) = vSpots2XYZ(:,3) - vSpots2XYZ(1,3) + vSpots1XYZ(1,3); vNewSpots.Set(vSpots2XYZ,vSpots2Time,vSpots2Radius); vNewTrack.SetSpots(vNewSpots); vNewTrack.SetEdges(vEdges2); vNewTrack.mName = [vTrack2.mName,' translated']; vNewGroup.AddChild(vNewTrack); end end