Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

IIngeoPaintSurface - перерисовка

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
nawakster



Зарегистрирован: 17.06.2008
Сообщения: 59

СообщениеДобавлено: Пт 12 Июл 2013 15:29    Заголовок сообщения: IIngeoPaintSurface - перерисовка Ответить с цитатой

Добрый день.
Набросал модуль на c#
.....
style.PaintContour(surface, tempContour, null);

Не могу понять:
1. Как сделать, чтобы нарисованное не пропадало при перерисовке карты, масштабировании и т.д.
2. Интересно, как реализованно в модуле подключения dxf, возможность выделять временные объекты.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Пн 15 Июл 2013 10:01    Заголовок сообщения: Ответить с цитатой

Надо процедуру рисования поместить в один из обработчиков рисования.

Если ваше изображение по смыслу относится к изображению карты и должно присутствовать в макете печати, то помещать следует в цепочку обработчиков "Рисование БД", например DbPaint_PaintComplete(aSurface).

Если ваше изображение относится к оформлению процесса редактирования, например рисование вспомогательных линий, то помещать следует в цепочку обработчиков "Окно карты" или "Редакторы карты", например MapWindow_PaintComplete(aSurface).

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nawakster



Зарегистрирован: 17.06.2008
Сообщения: 59

СообщениеДобавлено: Чт 18 Июл 2013 10:53    Заголовок сообщения: Ответить с цитатой

Михаил, спасибо за ответ.

Можно Вас попросить в трех словах рассказать о способах взаимодействия программы на c# и ингео?

Нет глубокого понимания. Я сделал просто:
Код:

                System.Reflection.Assembly IngeoAssembly = System.Reflection.Assembly.LoadFile(IngeoAssemblyPath);
                System.Type IngeoAppClass = IngeoAssembly.GetType("Ingeo.IngeoApplicationClass");
                System.Guid GUID = IngeoAppClass.GUID;
                object ingeo;
                GetActiveObject(ref GUID, IntPtr.Zero, out ingeo);
                ingeoApp = ingeo as Ingeo.IIngeoApplication;

Далее просто работаю с ingeoApp.

Как в этом случае добраться до обработчиков событий?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Чт 18 Июл 2013 14:14    Заголовок сообщения: Ответить с цитатой

nawakster писал(а):
Михаил, спасибо за ответ.

Можно Вас попросить в трех словах рассказать о способах взаимодействия программы на c# и ингео?

Нет глубокого понимания. Я сделал просто:
Код:

                System.Reflection.Assembly IngeoAssembly = System.Reflection.Assembly.LoadFile(IngeoAssemblyPath);
                System.Type IngeoAppClass = IngeoAssembly.GetType("Ingeo.IngeoApplicationClass");
                System.Guid GUID = IngeoAppClass.GUID;
                object ingeo;
                GetActiveObject(ref GUID, IntPtr.Zero, out ingeo);
                ingeoApp = ingeo as Ingeo.IIngeoApplication;

Далее просто работаю с ingeoApp.

Как в этом случае добраться до обработчиков событий?

В трех словах:

  1. Сделать COM-объект на .Net.
  2. В ИнГео сделать программный модуль, который создает и дергает методы COM-объекта.
  3. В программном модуле добавить скриптовые обработчики событий и из них дерагать реализацию из COM-объекта.


По-моему где-то на форуме даже были детальные примеры такого подхода. Поищите "C#", ".Net".

Вот ссылка для загрузки примера на C#: http://integro.ru/dl/ingeo/examples/sampledotnetmodule.rar

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nawakster



Зарегистрирован: 17.06.2008
Сообщения: 59

СообщениеДобавлено: Пт 02 Авг 2013 13:24    Заголовок сообщения: Ответить с цитатой

Подсобите, товарищи.
Не могу понять логику surfac`а.

Задача простая:
выделить объект -
получить координаты -
нарисовать каждую координату значком -
при выделении в таблице координат поменть эту вершину другим значком.

Код:
        private void DrawPoints(IIngeoPaintSurface aSurface)
        {
            IIngeoStyle style = ingeoApp.ActiveDb.StyleFromID("001300064530");
            IIngeoStyle styleVertex = ingeoApp.ActiveDb.StyleFromID("001300064532");

            if (currentContour != null)
            {
                style.PaintContour(aSurface, currentContour, null);
            }
            if (currentVertex != null)
            {
                styleVertex.PaintContour(aSurface, currentVertex, null);
            }
            surface = aSurface;
        }


Если я передвигаю карту мышкой на пару экранов, то при выделении объекта точки уже не появляются. Но если нажать f5 - то сразу все появляется. Почему?

При выделнии точки в таблице делаю:
Код:

if (surface != null)
            {
                DrawPoints(surface);
            }

Закрашенная точка пояляется только после того как нажму f5. Хотя вызываю тот же DrawPoints, но с сохраненным surface. Почему?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Пт 02 Авг 2013 14:38    Заголовок сообщения: Ответить с цитатой

Не следует запоминать ссылку на surface - часто это временный объект, который теряет актуальность после завершения рисования.

Выполняйте рисование в обработчике событий:

Если надо рисовать и в окне карты и в макете печати, то это события "Рисование БД".

Если надо рисовать только в окне карты, то это событие "Окно карты/после отрисовки".

Чтобы заставить ИнГео перерисовать окно карты, используйте MainWindow.MapWindow.Invalidate, или MainWindow.MapWindow.InvalidateRect для перерисовки части окна.

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nawakster



Зарегистрирован: 17.06.2008
Сообщения: 59

СообщениеДобавлено: Пт 02 Авг 2013 15:32    Заголовок сообщения: Ответить с цитатой

Михаил Власов писал(а):

Чтобы заставить ИнГео перерисовать окно карты, используйте MainWindow.MapWindow.Invalidate, или MainWindow.MapWindow.InvalidateRect для перерисовки части окна.


Тогда баг в 4.6 - MainWindow.MapWindow.Invalidate - вообще не перерисовывает.

в 4.4 все ок.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Foton



Зарегистрирован: 09.10.2006
Сообщения: 158
Откуда: Ярославль

СообщениеДобавлено: Пн 15 Июн 2015 19:15    Заголовок сообщения: Ответить с цитатой

nawakster писал(а):


Тогда баг в 4.6 - MainWindow.MapWindow.Invalidate - вообще не перерисовывает.


Как перерисовать в 4.6? зум дергать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Foton



Зарегистрирован: 09.10.2006
Сообщения: 158
Откуда: Ярославль

СообщениеДобавлено: Пн 22 Июн 2015 19:55    Заголовок сообщения: Ответить с цитатой

а подскажите как отобразить текст на поверхности? есть свойство Font. а как его использовать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Азаматов Азамат Хадисович



Зарегистрирован: 17.02.2005
Сообщения: 100
Откуда: г. Учалы, Респ. Башкортостан

СообщениеДобавлено: Вт 23 Июн 2015 17:12    Заголовок сообщения: Ответить с цитатой

Foton писал(а):
а подскажите как отобразить текст на поверхности? есть свойство Font. а как его использовать?

вот так рисуется круглая точка и подпись с номером к ней

Код:

            IIngeoSymbolPainter pntr=maker.app.CreateObject(TIngeoObjectClass.inocPainter,
                TIngeoPainterType.inptSymbol) as IIngeoSymbolPainter;
            IInPictureEllipseFigure ell=  pntr.Picture.Figures.Add(InScripting.TInPictureFigureType.inftEllipse)
                as IInPictureEllipseFigure;
            double pointsize = 0.0015;
            ell.Bottom = -pointsize/2;
            ell.Left = -pointsize/2;
            ell.Width = pointsize;
            ell.Height = pointsize;
            ell.Brush.Style = TInBrushStyle.inbsSolid;
            ell.Brush.BackColor = 0;
            ell.Pen.Color = 0;
            ell.Pen.Style = TInPenStyle.inpsSolid;

            IInPictureTextFigure txt = pntr.Picture.Figures.Add(TInPictureFigureType.inftText) as IInPictureTextFigure ;
            txt.Left = pointsize * 1;
            txt.Bottom = pointsize * 1;
            txt.Width = pointsize * 10;
            txt.Height = pointsize * 2;
            txt.Text = "{Text}";
            txt.Font.Name = "Arial";
            txt.Font.Size = 8;
            txt.Font.ForZoomScale = 0;
            txt.Pen.Style = TInPenStyle.inpsClear;
            txt.Brush.Style = TInBrushStyle.inbsClear;

            pntr.Picture.X1 = -pointsize;
            pntr.Picture.X2 = pointsize * 4;
            pntr.Picture.Y1 = -pointsize;
            pntr.Picture.Y2 = pointsize * 4;
            pntr.PictureZoomScale = 0;

            IIngeoContour cntr = maker.app.CreateObject(TIngeoObjectClass.inocContour, "") as IIngeoContour;
            IIngeoContourPart cntp = cntr.Insert(-1);

            foreach (DMPoint pnt in maker.points)
           
            {
                cntp.Clear();
                cntp.InsertVertex(-1, pnt.x, pnt.y, 0);
                pntr.PaintContour(image.Surface, cntr, "Text=" + pnt.number);
            }

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB