Назначение данных слоям карты
setMapData( принимает map,layername,layerinputs)layerinputs аргументы и передает их setMapData для указанного имени слоя карты. Чтобы указать отдельные ячейки или блоки данных в мире, локальных координатах или координатах сетки, см. синтаксы setMapData.
возвращает массив значений для заданных расположений в inBounds = setMapData(map,layername,layerinputs)layerinputs входной аргумент.
multiLayerMap позволяет группировать несколько слоев карты и определять поведение этих слоев при настройке и получении данных. С помощью отдельных слоев карты можно сохранять различные данные карты и задавать различные варианты поведения для каждого из них. Можно также определить SetTransformFcn и GetTransformFcn дескрипторы функций для слоя карты, так что зависимости создаются между слоями. В этом примере показано, как хранить данные на уровне карты и реализовывать прослушиватели событий, которые обновляют другие карты. В этих картах хранится количество обновлений или обращений к данным.
Зависимые слои
Создайте два независимых слоя карты.
mapAccessed = mapLayer(zeros(10,10),'LayerName','GetListener'); mapModified = mapLayer(zeros(10,10),'LayerName','SetListener');
Укажите дескрипторы функций для функций get и set transform, используемых в основном слое карты. Эти функции увеличивают значение местоположения сетки при получении или установке данных карты на входной карте. mainMap. См. раздел Дескрипторы функций прослушивателя для реализации функции.
setHookFcn = @(mainMap,values,varargin)exampleHelperSetHookFcn(mapModified,mainMap,values,varargin{:});
getHookFcn = @(mainMap,values,varargin)exampleHelperGetHookFcn(mapAccessed,mainMap,values,varargin{:});Создайте главный слой карты со значениями по умолчанию 0,5. Укажите дескрипторы функций для создания зависимостей слоев.
map = mapLayer(repmat(0.5,10,10),... 'GetTransformFcn',getHookFcn,... 'SetTransformFcn',setHookFcn);
Добавление всех карт к одному и тому же multiLayerMap объект.
mapLayers = multiLayerMap({map,mapAccessed,mapModified});Установите (0,0) местоположение карты со значением нуля, используя setMapData объектная функция map.
setMapData(map,[0 0],0)
Проверьте, что mapModified увеличили их значение.
getMapData(mapModified,[0 0])
ans = 1
Получите только что установленные данные на уровне основной карты. Возвращается ожидаемое значение, равное нулю.
getMapData(map,[0 0])
ans = 0
Проверьте, что mapAccessed увеличили их значение.
getMapData(mapAccessed,[0 0])
ans = 1
Обновите всю карту с помощью матрицы значений. Также получите доступ к данным.
setMapData(map,rand(10,10)) getMapData(map)
ans = 10×10
0.6443 0.2077 0.3111 0.5949 0.0855 0.9631 0.0377 0.1068 0.0305 0.1829
0.3786 0.3012 0.9234 0.2622 0.2625 0.5468 0.8852 0.6538 0.7441 0.2399
0.8116 0.4709 0.4302 0.6028 0.8010 0.5211 0.9133 0.4942 0.5000 0.8865
0.5328 0.2305 0.1848 0.7112 0.0292 0.2316 0.7962 0.7791 0.4799 0.0287
0.3507 0.8443 0.9049 0.2217 0.9289 0.4889 0.0987 0.7150 0.9047 0.4899
0.9390 0.1948 0.9797 0.1174 0.7303 0.6241 0.2619 0.9037 0.6099 0.1679
0.8759 0.2259 0.4389 0.2967 0.4886 0.6791 0.3354 0.8909 0.6177 0.9787
0.5502 0.1707 0.1111 0.3188 0.5785 0.3955 0.6797 0.3342 0.8594 0.7127
0.6225 0.2277 0.2581 0.4242 0.2373 0.3674 0.1366 0.6987 0.8055 0.5005
0.5870 0.4357 0.4087 0.5079 0.4588 0.9880 0.7212 0.1978 0.5767 0.4711
Проверьте, что mapModified и mapAccessed увеличили их значения.
getMapData(mapModified)
ans = 10×10
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1
getMapData(mapAccessed)
ans = 10×10
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1
Нижнее левое расположение возвращает два, а все остальные значения равны одному. Это подтверждает, что функции прослушивателя работают по назначению.
Дескрипторы функций прослушивателя
Эти функции реализуют вспомогательные функции get и set example, которые обновляют другие слои карты.
function valuesOut = exampleHelperSetHookFcn(modifiedMap,sourceLayer,valueIn,varargin) % Pass output through valuesOut = valueIn; % If no additional inputs are passed, return immediately. if numel(varargin) == 0 return; else % Otherwise, increment the value in the modifiedMap. if numel(varargin) == 1 currentValue = getMapData(modifiedMap); setMapData(modifiedMap,currentValue+1); else currentValue = getMapData(modifiedMap,varargin{1},varargin{3:end}); % setMapData syntax <<<<>>>> setMapData(modifiedMap,varargin{1},currentValue+1,varargin{3:end}); end end end function data = exampleHelperGetHookFcn(accessedMap,sourceLayer,valuesIn,varargin) data = valuesIn; % If no additional inputs are passed, check if the values in if numel(varargin) == 0 if isequal(size(valuesIn),sourceLayer.DataSize) % Increment the depedent map. currentValue = getMapData(accessedMap); setMapData(accessedMap,currentValue+1); end else currentValue = getMapData(accessedMap,varargin{:}); setMapData(accessedMap,varargin{1},currentValue+1,varargin{3:end}); end end
map - Многослойная картаmultiLayerMap объектМногослойная карта, заданная как multiLayerMap объект.
layername - Имя слоя картыИмя слоя сопоставления, указанное как строковый скалярный или символьный массив. Слои карты имеют указанное имя при создании multiLayerMap объект.
layerinputs - Входные данные переменной длины для слоя картыvararginВходные данные переменной длины для setMapData функция слоя карты, указанная как varargin. Чтобы указать отдельные ячейки или блоки данных в мире, локальных координатах или координатах сетки, см. синтаксы setMapData.
inBounds - Допустимые расположения картДопустимые расположения карт, возвращаемые в виде вектора столбца n-by-1, равного по длине xy или ij. Расположение внутри границ карты возвращает значение 1. Местоположения за пределами границ карты возвращают значение 0.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.