www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@calibrationdata/@mbc2matinterface/pWrite.m

    function pWrite(obj, calibration, filename)
%PWRITE  Private static method.

%  PWRITE writes a calibration to a MAT file.
%
%  PWRITE(OBJ,CALIBRATION,FILENAME)
%
%  See also COMMIT, PREAD.

%  Copyright 2000-2011 The MathWorks, Inc.


narginchk(3,3);
nargoutchk(0,0);

% Do not write to empty
if isempty(filename)
    return
end

pm = obj.ProgressManager;
pm.reset;
pm.notify('Performing startup tasks');

% Get identifiers
valueIdentifiers = calibration.getValueIdentifiers;
axisIdentifiers = calibration.getAxisIdentifiers;
curveIdentifiers = calibration.getCurveIdentifiers;
mapIdentifiers = calibration.getMapIdentifiers;

% Store lengths for convenience
nValues = numel(valueIdentifiers);
nAxes = numel(axisIdentifiers);
nCurves = numel(curveIdentifiers);
nMaps = numel(mapIdentifiers);

% Initialize
dataStructure = struct;

% Process values
if nValues > 0
    pm.notify(sprintf('Processing %d values', nValues));
    for i = 1:nValues,
        % Retrieve
        thisValue = calibration.getValue(valueIdentifiers{i});
        thisValueS.name = thisValue.Identifier;
        thisValueS.X.values = thisValue.Value;
        % Store
        dataStructure.(thisValueS.name) = thisValueS;
        pm.update(i/(nValues+nAxes+nCurves+nMaps));
    end
end

% Process axes
if nAxes > 0
    pm.notify(sprintf('Processing %d axes', nAxes));
    for i = 1:nAxes,
        % Retrieve (only public axes)
        thisAxis = calibration.getAxis(axisIdentifiers{i});
        if strcmp(calibration.pGetAxisIdentifierType(thisAxis.Identifier),'public') % only public
            thisAxisS.name = thisAxis.Identifier;
            thisAxisS.X.values = transpose(thisAxis.Value); % column vector
            thisAxisS.Y.values = transpose(thisAxis.Index-1); % CAGE is 0-based, axis is 1-based
            % Store
            dataStructure.(thisAxisS.name) = thisAxisS;
        end
        pm.update((i+nValues)/(nValues+nAxes+nCurves+nMaps));
    end
end

% Process curves
if nCurves > 0
    pm.notify(sprintf('Processing %d curves', nCurves));
    for i = 1:nCurves,
        % Retrieve
        thisCurve = calibration.getCurve(curveIdentifiers{i});
        thisXAxis = calibration.getAxis(thisCurve.XAxisIdentifier);
        thisCurveS.name = thisCurve.Identifier;
        thisCurveS.X.values = transpose(thisXAxis.Value); % column vector
        thisCurveS.Y.values = transpose(thisCurve.Value); % column vector
        % Store
        dataStructure.(thisCurveS.name) = thisCurveS;
        pm.update((i+nValues+nAxes)/(nValues+nAxes+nCurves+nMaps));
    end
end

% Convert maps to structure
if nMaps > 0
    pm.notify(sprintf('Processing %d maps', nMaps));
    for i = 1:nMaps,
        % Retrieve
        thisMap = calibration.getMap(mapIdentifiers{i});
        thisXAxis = calibration.getAxis(thisMap.XAxisIdentifier);
        thisYAxis = calibration.getAxis(thisMap.YAxisIdentifier);
        thisMapS.name = thisMap.Identifier;
        thisMapS.X.values = thisXAxis.Value;
        thisMapS.Y.values = thisYAxis.Value;
        thisMapS.Z.values = thisMap.Value;
        % Store
        dataStructure.(thisMapS.name) = thisMapS;
        pm.update((i+nValues+nAxes+nCurves)/(nValues+nAxes+nCurves+nMaps));
    end
end

% Save structure
pm.notify('Writing file to disk');
matlabVersion = str2num(version('-release'));
if matlabVersion < 14
    save(filename, '-struct', 'dataStructure', '-mat');
else
    save(filename, '-struct', 'dataStructure', '-mat', '-v6');
end

pm.update(1);
pm.notify('Cleaning up');