Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Визуализация карт / 25 сообщений из 44, страница 1 из 2
17.12.2004, 18:30:49
    #32833001
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Задача : карты (не игральные). Нада придумать интерморду с визуализацией (по минимуму) данных для диалогов юзера. (по результатам диалогов юзера - куча чего своего, но никакой правки графики не будет - только анализ. в конечном итоге - выгрузка отобранных юзером данных в некую другую базку ).

Единственно чем могу лехко отрисовывать в аксессе сложные контура (>255 линий) - отчеты (.Line). Красива, блин, палучается (для аксесса, ес-но). Вернее вполне приемлемо для рассмотрения и принятия решений. Но их...ххх, отчеты этти, не вставишь ни в формы, ни в картинку не выгрузишь - для возврата в форму уже из файла в рамки объектов.

?Думаю, если ничего не надумаю, придется юзеру на контекстных меню переходить в отчет(ы) и обратно (и галочки ставить по памяти супротив рассмотренных объектов).

Хотелось бы активаикса рисующего припахать какого-нть попроще. Кто в курсах о наличии/отсутствии/доступности?

Тут нашел только:
/topic/123633&hl=%ea%e0%f0%f2%fb

кто что ваял по теме?
рассмотрю и другие идеи. (кажется из API можно рисовать...
можно ли залабать аналог .Line для форм? или при любом движении перерисовывать задолбишься?

в дельфе так вабще канвас был, помнится, родной ейный, етить его через коромысло. но дельфы мне еще не хватало
...
Рейтинг: 0 / 0
17.12.2004, 20:53:25
    #32833122
GUESТ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
лабал в черновиках типа геоинформационная система - прокладывать маршруты для междугородних автобусов. Заказчик одно марийское АТП...
- забросил, глупо - есть готовые решения причем беЗплатно...

вощем никаких эктивэксов не нужно

я на маус мув брал координаты курсора и сливал в массив в ТиЭксТи файл на диске (дополнительно брал цвет линии) - потом по этим данным отрисовывал маршрут на карте стандартными средствами - про отрисовку Лайнз Дотс Ректэнглз Сёклз есть хороший пример на ЛебансКом -ЭйТуКейПикча бокс A2KPictureBox - оттуда брал все классы и весь код вообще чуть чуть приточить и нормал

+1 Оригинальная Карта (ЧБ изображение - хранится в БД) всегда чистая - все отрисовки по заказу на лету.

+2 имитируется работа со слоями - можно отрисовывать маршруты частями,отдельно, наносить города отдельно, отрисовывать границы тарифных зон и административных единиц отдельно

Дорожные знаки и обозначения брал из таблицы ОЛЕ объектов и вставлял на карту, одновременно в таблицу записывается координата и АйДи картинки - в принципе нужно тоже сливать в ТиЭксТи - но не стал заморачиваться

прикольное решение получилось с отображением карты и со скроллированием - никак не канали полосы прокруки - неудобно и медленно

сделал на форме 4 контрола Image. (Picture вставляются из таблицы) в разных контролах картинка равняется в разные углы - ТопЛефт, ТопРайт БаттомЛефт БаттомРайт.

общий размер всех четырех картинок вместе в 4 раза больше чем одновременно отображается на экране. прокручивать ничего не нужно, сделал как в автокаде нажимаешь кнопку и таскаешь рисунок влево право верх низ, в действительности ничего, конечно не таскается, а только меняется размер Image...

когда один из контролов сворачивается до нуля картинки перезагружаются - у пользователя ощущение что карта вообще никогда не кончается - довольно занятно... тут минус в том, что карты нужно предварительно очень точно готовить - большие карты резать на 4 части...

я купил атлас автодорог отсканил в ЧБ БМП и нарезал.
картинки сохранил в базе - отдельная база под карты всего одна таблица :))

впрочем может (да конечно есть!!!) и получче решения есть

я во всяком случае нашел получше - забросил эту идею - делать ГИС в ACCESS и поставил им бесплатную ГИС "ObjectLand"
...
Рейтинг: 0 / 0
17.12.2004, 21:17:49
    #32833134
weqwe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
во - вытащил какой-то завалящий остаток из корзины :))
...
Рейтинг: 0 / 0
17.12.2004, 21:22:36
    #32833138
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Моя смотрела. Моя теперь спрашивает:
чЁ таке A2KPictureBox, если не ативикса? Класс такой чё-ли? Че и посмотреть текст дадут?

А ЛебансКом? http://www.lebans.com/imageclass.htm
...
Рейтинг: 0 / 0
17.12.2004, 21:23:10
    #32833139
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
GUESТэктивэксов
я на маус мув брал координаты курсора и сливал в массив в ТиЭксТи ... про отрисовку Лайнз Дотс Ректэнглз Сёклз ... на ЛебансКом -ЭйТуКейПикча бокс A2KPictureBox ... приточить и нормал
АйДи картинки... ТиЭксТи

и так далее....
Шедевр!
...
Рейтинг: 0 / 0
17.12.2004, 21:31:17
    #32833142
е4уеукеке
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
4321Моя смотрела. Моя теперь спрашивает:
чЁ таке A2KPictureBox, если не ативикса? Класс такой чё-ли? Че и посмотреть текст дадут?

А ЛебансКом? http://www.lebans.com/imageclass.htm

http://www.lebans.com/DownloadFiles/PictureBoxA2K.zip - это он - но это только часть прикола - только инструмент отрисовки (причем я его переделывал конкретно :(( )

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

такие вещи на одном дыхании нужно кодить - потом хер разберешься довольно сложно все получается - ломает меня конкретно, разбираться с этим по-новой...
...
Рейтинг: 0 / 0
17.12.2004, 21:34:49
    #32833144
укеуеуке
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Темный GUESТэктивэксов
я на маус мув брал координаты курсора и сливал в массив в ТиЭксТи ... про отрисовку Лайнз Дотс Ректэнглз Сёклз ... на ЛебансКом -ЭйТуКейПикча бокс A2KPictureBox ... приточить и нормал
АйДи картинки... ТиЭксТи

и так далее....
Шедевр!

пятница вечер однака... хочецца немножко веселья...

REM> приношу извинения если не укладываюсь в местные стандарты и короблю представления уважаемых форумчан белибердовыми текстами
...
Рейтинг: 0 / 0
17.12.2004, 21:37:17
    #32833147
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Ни в коем разе! Говорю же - шедевр!
...
Рейтинг: 0 / 0
17.12.2004, 21:44:23
    #32833150
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
СИба, типа. Буду посмотреть (хотя склоняюсь к юзанью обычных репортов для просмотра/выборки - графика моя векторная - перереисовать лайны - при изменении окошка (масштаб, подмножество) - как два байта обасфальт... И все че надо вроде видно. А там поглядим.)

Приятно оттянуцца, и т.п.
...
Рейтинг: 0 / 0
17.12.2004, 21:59:50
    #32833154
енкнкнке
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
да еще один очень серьезный минус... мне не удалось в нормальном виде сделать редактирование маршрутов. не получились отмены...

т.е. в маршрут можно вносить дополнения (дорисовывать), но невозможно редактировать ранее сделанные записи. это не векторные рисунки а растровые и они просто рисуются на лету пикселами...

вообще-то способ в принципе я себе представляю, но когда начинаю конкретизировать в решениях - руки опускаются... ну его нафик,

а вот и ObjectLand:
...
Рейтинг: 0 / 0
20.12.2004, 16:39:42
    #32835381
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
папробывал. Рисует, ага.

Но шибко медленно однако. Порядка на 2-3 медленнее чем прорисовать то же Line-ами в отчет и вывести на просмотр. (~700 линий выводит за ~ минуты, а карту с ~20000 линий - можно включить и наслаждаться прорисовкой (DoEvent только не забыть - чтобы порвать можно было). Отчет карты рисуется за ~ десятки сек.

Думаю, как ускорить, мало-мало.

Если я правильно понимаю, надо отменить прорисовку картинки после каждой линии? Это где-то в методе DIBtoPictureData? Или еще где порыться.



если не найду метода ускорится в прорисовке - придется довольствоваться просмотром отчетов (при выборе). Ждать по минуте на прорисовку контура - напряг.
...
Рейтинг: 0 / 0
20.12.2004, 18:28:30
    #32835713
GUESТ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
за наслаждение прорисовкой возьми по особой смете - делов-то - скажи не бага, а фича.

1) зато полная интерактивность - по клику на карте можно выводить сведения об объектах - заправки, посты гаи нас.пункты и проч.

2) отрисованные карты можно сохранять как рисунки и не перерисовывать их а просто загружать.

3) скорость отрисовки вероятно зависит от конфигурации машины

если по существу - я уже отказался от такого решения в пользу других, готовых... но сам подход может показаться инетерсным в некоторых гипотетических случаях.
...
Рейтинг: 0 / 0
21.12.2004, 15:06:26
    #32837151
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Может кто из любителей API ускорял отрисовку http://www.lebans.com/imageclass.htm ?
Или идеи по этому поводу имеет?
(пробовал не лазить каждый раз "за пером" - использовать статики , если цвет не меняет - вроде бы не быстрее. И чеб ему такое нафик пооткрутить?
...
Рейтинг: 0 / 0
21.12.2004, 16:03:42
    #32837357
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
4321Может кто из любителей API ускорял отрисовку http://www.lebans.com/imageclass.htm ?
Или идеи по этому поводу имеет?
(пробовал не лазить каждый раз "за пером" - использовать статики , если цвет не меняет - вроде бы не быстрее. И чеб ему такое нафик пооткрутить?
вектор ускорения как правило направлен в сторону отказа от вызова части апи функций отрисовки в пользу получения получения указателя на битмап структуру и соответствующей ей двумерный массив пикселей и прямую
манипуляцию с ним.
В VB это дышит легкой грудью, в VBA будет тяжелее (проворачиваться).

Поупражнятся интересно, и при определенном упорстве, можно получить почти ту же скорость. (думаю,в худшем случае, на 15-20% или менее отстающий от самых выдающихся результатов на произвольно ткутом
средстве разработки.)

Вообще-то примеров есть в инете.

Вот сказал бы, какую конкретно функцию пооптимизировать хотел.
Подозреваю отриcовку множества прямых за раз?

ЗЫ
Где-то в завалах что-то было. Может вечером сыщу, если это еще будет актуально
:)
...
Рейтинг: 0 / 0
21.12.2004, 16:05:10
    #32837363
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
ткутом=ткнутом

(с выражением лица)
...
Рейтинг: 0 / 0
21.12.2004, 18:09:34
    #32837709
GUESТ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Victoshaткутом=ткнутом

(с выражением лица)


минут пять тупо втыкал в пост, пока доперло...
...
Рейтинг: 0 / 0
21.12.2004, 18:28:40
    #32837738
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
GUESТ Victoshaткутом=ткнутом

(с выражением лица)


минут пять тупо втыкал в пост, пока доперло...
И как?
...
Рейтинг: 0 / 0
21.12.2004, 23:57:09
    #32837961
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
выложил бы примерчик какой для целей "тестового ускорения" или словами сказал, что-доп. о характере рисования.

Глянул в тему.
понял пока,
1)
что группу связанных линий умнее рисовать одной командой
функциями типа
Private Declare Function apiPolyline& Lib "gdi32" Alias "Polyline" (ByVal hDC As Long, lpPoint As POINTAPI, ByVal nCount As Long)
Private Declare Function apiPolylineTo& Lib "gdi32" Alias "PolylineTo" (ByVal hDC As Long, lppt As POINTAPI, ByVal cCount As Long)

есть правда еще какая-то
Private Declare Function apiPolyPolyline& Lib "gdi32" Alias "PolyPolyline" (ByVal hDC As Long, lppt As POINTAPI, lpdwPolyPoints As Long, ByVal cCount As Long)

но пока не нашел, зачем она.

2)похоже, есть возможность работать с очередью рисовательных команд.
пока не щупал.

3) сильно засомневался, что напрямую с картой изображения работать будет умнее...



(с выражением лица)
...
Рейтинг: 0 / 0
22.12.2004, 03:44:46
    #32838015
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
я не понял ничего про скорость.

У меня 700 линий отрисовывается за 15 сотых секунды.
Это быстро или медленно?

рисовал так
в раздел объявлений класса добавил

Код: plaintext
1.
2.
Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function StrokePath Lib "gdi32" (ByVal hdc As Long) As Long


и дорисовал метод к классу по типу существующего
(RndInt воткнул приватный из формы)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Public Sub Draw700Lines()
  Dim X1 As Long, Y1 As Long, Index As Long
  Dim X2 As Long, Y2 As Long

  Dim hNewPen As Long
  Dim hOldPen As Long
  Dim TempColor As Long
  TempColor = RGB(RndInt( 256 ), RndInt( 256 ), RndInt( 256 ))
    
  hNewPen = apiCreatePen(PS_SOLID, m_DrawWidth, TempColor)
      
  hOldPen = SelectObject(m_hDC, hNewPen)
  BeginPath m_hDC
 
  For Index =  1  To  700 

     X1 = RndInt(Me.dib_width)
     Y1 = RndInt(Me.dib_height)
     X2 = RndInt(Me.dib_height)
     Y2 = X2
    

      ' Call the Line Method to draw some random Lines
      'pb.DrawLine X, Y, offset, offset, Color
      Call apiMoveToEx(m_hDC, X1, Y1, ByVal  0 &)
      LineTo m_hDC, X2, Y2
    
  Next
  
  EndPath m_hDC
  StrokePath m_hDC

  Call SelectObject(m_hDC, hOldPen)
  Call DeleteObject(hNewPen)    
  Me.DIBtoPictureData
    
End Sub

ЗЫ
а полилайн в классе задействован...

(с выражением лица)
...
Рейтинг: 0 / 0
22.12.2004, 04:03:01
    #32838020
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
время от наличия функций построения пути не зависит и колеблется в интервале 15 тысячных - 4 сотых секунды

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  'BeginPath m_hDC
 
  For Index =  1  To  700 
    TempColor = RGB(RndInt( 256 ), RndInt( 256 ), RndInt( 256 ))
    hNewPen = apiCreatePen(PS_SOLID, m_DrawWidth, TempColor)
    hOldPen = SelectObject(m_hDC, hNewPen)
   
  
     X1 = RndInt(Me.dib_width)
     Y1 = RndInt(Me.dib_height)
     X2 = RndInt(Me.dib_height)
     Y2 = X2
    

      ' Call the Line Method to draw some random Lines
    'pb.DrawLine X, Y, offset, offset, Color
      Call apiMoveToEx(m_hDC, X1, Y1, ByVal  0 &)
      LineTo m_hDC, X2, Y2
    
  Next
  'EndPath m_hDC
  'StrokePath m_hDC
  Call SelectObject(m_hDC, hOldPen)
  Call DeleteObject(hNewPen)
    
  Me.DIBtoPictureData



ЗЫ

однажды загнал в невозможность обноления экрана....

(с выражением лица)
...
Рейтинг: 0 / 0
22.12.2004, 04:10:49
    #32838022
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
хи-хи

не освобождал занятые ресурсы

Next
Call SelectObject(m_hDC, hOldPen)
Call DeleteObject(hNewPen)

надо перенести внутрь цикла .

Call SelectObject(m_hDC, hOldPen)
Call DeleteObject(hNewPen)
Next

(с выражением лица)
...
Рейтинг: 0 / 0
22.12.2004, 14:13:02
    #32839238
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
1. Про скорость:
Тупо вызывал в цикле
pb.DrawLine X, Y, X1, Y1, Color
- отсюда видимо и скорость.
__

2. Про полилайн в классе:
PolyPolyline объявлен, но не поюзан

PolylineTo объявлен, поюзан в маусе (метод отрисовки произвольных полилайнов для класса не реализован)

Polygon объявлен, реализован DrawPolygon (для пробы поюзал его - рисует существенно шустрее (чем множественным вызовом ДроЛайном) - сложный полигон (те же 700 линий за 3-4 сек (с открытием данных и пробегом по ним+нормировкой) - вероятно затртаты именно на прогон по данным + переопределение/заполнение массивов (пришлось Preserve добавить в clcVertices Property Let NumVertices - хотя класс clcVertices и лишние перегрузки из массива класса в массив для вызова API Polygon кажется надо вообще убирать). Карта, которая рисовалась ДроЛайнами ~20 минут укладывается ДроПолигонами в ~ минуту (может с гачком + ~минуты), но отчет лайнами строится таки за 5 сек. - еще порядок надо сгонять -а данные те же (массивов только не переопределяю в процессе рисовки отчета)).

зы. кстати любопытная метода программинга у лебанса:
Public Property Let NumVertices и
Public Property Get NumVertices()
присваивают и возвращают на 1 отличные величины :)
__


моя блдр-сть персонално 4 Victosha. Еще попробую либо юзать PolylineTo (без загрузки массивов для передачи), либо грузить массивы и вызывать для него аналог отрисовки в Draw700Lines. (авось поскорейше полигонов будет).
...
Рейтинг: 0 / 0
22.12.2004, 14:32:19
    #32839304
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
автор Еще попробую либо юзать PolylineTo (без загрузки массивов для передачи),

без загрузки не получится. Он как раз рисует ломаную, получая в качестве параметров адрес первого элемента МАССИВА точек отрисовки и "глубину списка" - количество точек из массива, которые надо отрисовать.

----------
ЗЫ1
класс работает честно. в том смысле, что рисует в памяти.
Вот и рисуй в памяти всю картинку (или курпкыми блоками).
Замедление происходит за счет "нестандартной" передачи отрисованного
поля экрану

ЗЫ2
Очень похоже, что этот класс можно заставить рисовать прямо на форме.
По крайней мере можно попытаться...
...
Рейтинг: 0 / 0
22.12.2004, 16:25:06
    #32839740
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
Спасибо.

Основной тормоз оставался от предыдущего вар-та (там понавтыкал DoEvents-ов - чтобы мочь рвать процесс - и не убрал (даже не проредил)).

Получается так (понаписал методов):
(отрисовка карты ~350 объектов (т.е. 350 вызовов))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
(с DoEvents между рисованием)
  42 . 484375  'DrawPolyLine  
  42 . 59375   'DrawPolygon
  42 . 671875  'DrawManyLines

(без DoEvents)
  7 . 59375  'DrawPolygon
  7 . 265625  'DrawPolygon
  7 . 703125  'DrawManyLines 
  7 . 28125   'DrawPolyLine
- полные времена отрисовки.

Время мало зависит от вида отрисовки, видимо больше от количества ('DrawManyLines (аналог "Draw700Lines") к тому же не производит обратного перевода точек из класса с точками в массив - т.ч. с классом точек бороться пока не буду).

Стоит ли ожидать, что при одной "перерисовке памяти в экран" (по всей картинке) будет побыстрее? (без дуевентсов экран все равно не перерисовывается до конца процесса).
...
Рейтинг: 0 / 0
22.12.2004, 16:32:32
    #32839772
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Визуализация карт
авторВремя мало зависит от вида отрисовки, видимо больше от количества ('DrawManyLines (аналог "Draw700Lines")
yt dblz rjlf е видя кода сказать трудно. Почему-то думаю, что цикл
обработки рекордсета оптимизировать надо. Пока кажется, что 7 сек чрезмерно многовато...

автор к тому же не производит обратного перевода точек из класса с точками в массив - т.ч. с классом точек бороться пока не буду).

что-то я совсем не понял, про что это...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Визуализация карт / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]