www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcfoundation/@gridDefinition/fixMerge.m
function fixMerge(obj) %FIXMERGE Make sure merging setup is valid % % FIXMERGE(OBJ) ensures that there are no merge blocks defined that go % beyond the size of the grid. % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. if obj.DoMerge mergeSize = size(obj.MergeNRows); if obj.Rows > mergeSize(1) obj.MergeNRows(obj.Rows,end)= uint16(0); obj.MergeNCols(obj.Rows,end)= uint16(0); elseif obj.Rows < mergeSize(1) obj.MergeNRows = obj.MergeNRows(1:obj.Rows,:); obj.MergeNCols = obj.MergeNCols(1:obj.Rows,:); % check the merge blocks don't overrun rows matrix obj.MergeNRows = i_clipmergeblocks(obj.MergeNRows,1); end if obj.Columns > mergeSize(2) obj.MergeNRows(end,obj.Columns)= uint16(0); obj.MergeNCols(end,obj.Columns)= uint16(0); elseif obj.Columns < mergeSize(2) obj.MergeNRows=obj.MergeNRows(:,1:obj.Columns); obj.MergeNCols=obj.MergeNCols(:,1:obj.Columns); % check the merge blocks don't overrun cols matrix obj.MergeNCols = i_clipmergeblocks(obj.MergeNCols,2); end end function data = i_clipmergeblocks(data,dim) % find non-zero values and ensure their position + value is not greater than maxsz I = find(data)'; sz = size(data); if dim==1 k = ind2sub(sz,I); else [k,k] = ind2sub(sz,I); end for n = 1:length(I) if (data(I(n))+k(n)-1) > sz(dim) data(I(n)) = uint16(sz(dim)-k(n)+1); end end