Пересчитать символ

0 голосов
спросил 19 Март, 10 от 2008sean (1,020 баллов) в категории Программные продукты Esri
Как бы это яснее пояснить... задача довольно распространенная:
На карте нужный слой обозначен символом из закладки Charts (взял Bar). Bar - это столбики диаграммы.
Если данные статичные в слое - то один раз стоит этот символ создать, он сам рассчитает пропорции и нарисует диаграмму.

Но если данные меняются - то есть этот слой не shp, а таблица в sde, которую праваят другие пользователи, то по вызову метода ActiveView.Refresh данные одновляются, и график меняется, но вот его пропорции не пересчитываются. К примеру значения увеличиваются на порядок, символ тоже увеличиватся в 10 раз и не влазит на экран)
Приходится каждый раз заходить в настройки символа и жать кнопку "Ok", тогда размер символа становится равным указаному в пунктах, а значения столбиков пропорционально соответсвенно уменьшаются\увеличиватся.

Как этому символу программно сказать пересчитать пропорции?

    

19 Ответы

0 голосов
ответил 19 Март, 10 от pooperec (10,820 баллов)
0 голосов
ответил 21 Март, 10 от TDenis (42,620 баллов)
Вообще-то есть хороший сайт Let me google that for you...

image В избранное image   
0 голосов
ответил 22 Март, 10 от 2008sean (1,020 баллов)

спасибо за описание интерфейса, оно у меня и так естьimage Или вы предлагаете каждый раз мне создавать старый символ программно??? image Чет не совсем понял.
Вообщем вопрос остается (
0 голосов
ответил 22 Март, 10 от pooperec (10,820 баллов)
Вопрос был:
Как этому символу программно сказать пересчитать пропорции?

Как я вижу один из вариантов:
1. Создаете команду "Отобразить столбиками/сырами/чем-то выбраный слой " (к примеру).
2. По щёлчку на эту команду Вы назначаете слою свой собственный IFeatureRenderer, который при перерисовке, пересчитывает пропорции/вычиляет площадь сферического коня в вакууме...
3. Профит!

Если что-то не ясно, спрашивайте, попробуем поподробнее...

0 голосов
ответил 22 Март, 10 от 2008sean (1,020 баллов)
Вопрос был:Как этому символу программно сказать пересчитать пропорции?
Как я вижу один из вариантов:1. Создаете команду "Отобразить столбиками/сырами/чем-то выбраный слой " (к примеру).2. По щёлчку на эту команду Вы назначаете слою свой собственный IFeatureRenderer, который при перерисовке, пересчитывает пропорции/вычиляет площадь сферического коня в вакууме...3. Профит!Если что-то не ясно, спрашивайте, попробуем поподробнее...

дело в том что у меня занее IFeatureRenderer не определен, все эти пирожки и графики рисует клиент у себя в ArcMap.
Пока есть идея получить каким нибудь методом типа Clone копию (а не ссылку на него) существующего символа, и а потом его же назначить слою... по логике должно пересчитать...
    
0 голосов
ответил 22 Март, 10 от pooperec (10,820 баллов)
>все эти пирожки
Сыры! (тм)
>все эти пирожки и графики рисует клиент у себя в ArcMap

окей, давайте алгоритм работы пользователя. Что он хочет сделать и  что должно получиться.
0 голосов
ответил 22 Март, 10 от 2008sean (1,020 баллов)
Пользователь приходит на работу, загружает проект, и вах - печатает свежие сыры за вчера)))
***
Пользователю передается набор "шаблонов"(считай mxd файлов), в которых подцеплены слои из БД, которые в свою очередь постоянно обновляются.

Пример 1 - подтопления нас пунктов - обозначается "сыром" в пропорциях подтоплено\неподтоплено, данные оновляются раз в месяц.
Пример 2 - данные гидромета, столбчатая диаграмма, какая то там концентрация пыли и еще хрен знает чего, по отношению к ПДК, обновляется раз в сутки.

И так еще куча проектиков)
Прям реал-тайм обновления не требуется, достаточно что бы при открытии проета он видел свежие графики. Подразумевается что цвета "сыров", размер и тп. он может изменить под свои нужды, а вот поля по которым стоятся эти графики постоянные.

    
0 голосов
ответил 22 Март, 10 от pooperec (10,820 баллов)
Вопрос понял, ответ тестирую...
0 голосов
ответил 22 Март, 10 от pooperec (10,820 баллов)
Да, задача оказалась интереснее...
1. А в задаче  - пользователь не должен утруждать себя нажатием кнопки (на панели) - обновить данные?
2. Вариант обновления при обновлении экстента устраивает?
3. В какой среде работает пользователь (ArcMap/ArcEngine приложение/ ещё что-то)?
0 голосов
ответил 22 Март, 10 от 2008sean (1,020 баллов)
ArcMap (на данном этапе)
Экстент не обновляется кстати, точнее не перемещается, просто это как подготовленые карты для печати.
Кнопку то можно сделать, просто тогда с тем же успехом можно обучить (заставить image) пользователя каждый раз заходить в свойсво символа и жать ОК для перестоения)))

Как вариант, кнопка устроит image
P.S.
клонирование объекта не помогает, пропорции не пересчитываются(
    
            IActiveView activeView = mxDocument.ActiveView;
            IMap pMap = activeView.FocusMap;
            IGeoFeatureLayer pFeatureLayer = pMap.get_Layer(1) as IGeoFeatureLayer; //это напр. нужный слой
            IFeatureRenderer pFR = pFeatureLayer.Renderer;
            IObjectCopy pObjCopy = new ObjectCopy();
            pFeatureLayer.Renderer = pObjCopy.Copy(pFR) as IFeatureRenderer;
    
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...