diff --git a/ShoulderCase/@Humerus/loadAmiraLandmarks.m b/ShoulderCase/@Humerus/loadAmiraLandmarks.m index 302afb3..d0a5384 100644 --- a/ShoulderCase/@Humerus/loadAmiraLandmarks.m +++ b/ShoulderCase/@Humerus/loadAmiraLandmarks.m @@ -1,44 +1,35 @@ function outputArg = loadAmiraLandmarks(obj) %LOAD Load 5 humeral head landmarks - % TODO: Should be check for 'old' vs 'new' file definition - - SCase = obj.shoulder.SCase; - SCaseId4C = SCase.id4C; - amiraDir = SCase.dataAmiraPath; - - % Try 1st with new defiunition of HHLandmarks - fileName = "newHHLandmarks" + SCaseId4C + ".landmarkAscii"; - fileName = fullfile(amiraDir, fileName); - - if exist(fileName,'file') == 2 - importedData = importdata(fileName, ' ', 14); - else % Check for old version of HHLandmarks - fileName = ['HHLandmarks' SCaseId4C '.landmarkAscii']; - fileName = [amiraDir '/' fileName]; - if exist(fileName,'file') == 2 - importedData = importdata(fileName, ' ', 14); - warning([SCaseId4C ' is using old humeral landmarks definition']) - else - outputArg = 0; - return - end - end - % with other methods - - % Check validity of data in file - % Variable points belos should be renamed landmarks, for consistency - try - points = importedData.data; - catch - % Cant get landarks from file - warning([SCaseId4C ' cant load humeral landmarks']) - outputArg = 0; - return; - end - % We should add a test for validity of points + assert(obj.hasAmiraLandmarks(), "No Amira landmarks found."); + + landmarks = obj.getAmiraLandmarks(); + + assert(landmarksBelongToCorrectShoulder(landmarks, obj.shoulder),... + "Loaded Amira landmarks belong to the other shoulder."); + + obj.landmarks = landmarks; + + outputArg = 1; +end + +function output = landmarksBelongToCorrectShoulder(landmarks, shoulder) + % humerus landmarks should be located lateraly to the scapula coordinate + % system + + medioLateralAxis = Vector(shoulder.scapula.coordSys.ML); + scapulaOrigin = shoulder.scapula.coordSys.origin; + + originToLandmarks = []; + for i = 1:size(landmarks, 1) + originToLandmarks = [... + originToLandmarks... + ; Vector(scapulaOrigin, landmarks(i,:))]; + end - obj.landmarks = points; + landmarksLaterality = arrayfun(... + @(originToLandmark) originToLandmark.dot(medioLateralAxis),... + originToLandmarks); - outputArg = 1; % Should report on loading result + output = all(landmarksLaterality > 0); end \ No newline at end of file