powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Визуализация карт
44 сообщений из 44, показаны все 2 страниц
Визуализация карт
    #32833001
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача : карты (не игральные). Нада придумать интерморду с визуализацией (по минимуму) данных для диалогов юзера. (по результатам диалогов юзера - куча чего своего, но никакой правки графики не будет - только анализ. в конечном итоге - выгрузка отобранных юзером данных в некую другую базку ).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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


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

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


минут пять тупо втыкал в пост, пока доперло...
И как?
...
Рейтинг: 0 / 0
Визуализация карт
    #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
Визуализация карт
    #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
Визуализация карт
    #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
Визуализация карт
    #32838022
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хи-хи

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

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

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

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

(с выражением лица)
...
Рейтинг: 0 / 0
Визуализация карт
    #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
Визуализация карт
    #32839304
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Еще попробую либо юзать PolylineTo (без загрузки массивов для передачи),

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

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

ЗЫ2
Очень похоже, что этот класс можно заставить рисовать прямо на форме.
По крайней мере можно попытаться...
...
Рейтинг: 0 / 0
Визуализация карт
    #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
Визуализация карт
    #32839772
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВремя мало зависит от вида отрисовки, видимо больше от количества ('DrawManyLines (аналог "Draw700Lines")
yt dblz rjlf е видя кода сказать трудно. Почему-то думаю, что цикл
обработки рекордсета оптимизировать надо. Пока кажется, что 7 сек чрезмерно многовато...

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

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

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

что-то я совсем не понял, про что это...

вот
7.37537500000326 5.86649999995279
2-я цифирь - сумма чистого времени только на вызовах "отрисовки" (350 раз вызвал - <~0.02 на вызов -в пределах ваших 4 сотых. (правда есть контура и из 7-ми точек и из >700). Т.ч прогон рекордсета -1.5, из которых, на самом деле 1.203125 - до завершения открытие рекордсета (есть еще кое что).

а "не понял " - см DrawPolygon в первоисточнике
...
Рейтинг: 0 / 0
Визуализация карт
    #32840072
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все-таки не могу понять характерные размеры - общее к-во точек, например...

если действительно контура и замкнутые - полигон, если не замкнутые полилайн.

если хочешь - попробуй выложить тестовые данные любой длины или покажи структуру таблиц в которых хранишь описания.

все-таки я пока не понимаю, откуда 5-7 сек берутся...



(с выражением лица)
...
Рейтинг: 0 / 0
Визуализация карт
    #32840292
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тест:
20 000 точек
в 367 контуров. (340 объектов из 1 и более контуров)
Данные не мои

если сделать:
Set pb = Nothing
(процедура отработает - т.к. On error resume next, только вызовы методов обрабатываться не будут)
1.6414999999979 0.168500000007043
0.168500000007043 - это сумма времени по вызовам методов отсутствующего объекта.
т.е. 5.8 сек набегает на DrawPoligon (он, в отличии от полилинии еще и поля красит, но замыкает разомкнутые контура (если таковые есть - придется линией))


Если включить отрисовку (.Repaint) после каждого вызова метода то из 7 сек непринужденно получаем >11 (4 - 350 перерисовок экрана).


ну, и чтоб не быть голословным (не причесывая):
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
Private Sub cmdDrawLine_Click()

Dim X As Double, Y As Double
Dim X1 As Double, Y1 As Double, ouid1 As Long
Dim xX As Double, yX As Double
Dim xN As Double, yN As Double
Dim dx As Double, dy As Double
Dim rX As Long, rY As Long

Dim rst As DAO.Recordset
Dim plid0 As Long, ouid As Long, plid As Long

Dim vVer As New clsVertices, i As Long
Dim lngColor As Long
Dim t As Double, tP As Double, sP As Double

    On Error Resume Next
    DoCmd.Hourglass True
    StopDrow = False
    pb.Clear
    DoEvents
    plid0 = - 1 
    plid0 = Me.plid
    
    t = Timer
    'pl_MinMaxXY
    Set rst = CurrentDb.OpenRecordset("pl_MinMaxXY", dbOpenSnapshot)
    With rst
        If .EOF Or .BOF Then
            .Close
            Exit Sub
        End If
        xN = .Collect("xN"): xX = .Collect("xX")
        yN = .Collect("yN"): yX = .Collect("yX")
        .Close
    End With
    dx = xX - xN: dy = yX - yN
    rX = pb.dib_width 'Me.Image0.Width:
    rY = pb.dib_width 'Me.Image0.Height
    Set rst = CurrentDb.OpenRecordset("pl_dots", dbOpenSnapshot)
    Debug.Print Timer - t
    With rst
        If .EOF Or .BOF Then
            .Close
            Exit Sub
        End If
        Do While Not .EOF
            X1 = X: Y1 = Y: ouid1 = ouid
            X = .Collect("dx") - xN: Y = .Collect("dy") - yN
            ouid = .Collect("ouid")
            plid = .Collect("plid")
            X = (X / dx) * rX: Y = (Y / dy) * rY
            If plid = plid0 Then
                pb.DrawWidth =  25 
            Else
                pb.DrawWidth =  1 
            End If
            If ouid1 = ouid Then
                'продолжение контура
                i = i +  1 
                vVer.NumVertices = i +  1 
                vVer.SetVertsX i, (X)
                vVer.SetVertsY i, (Y)
                'pb.DrawLine (X), (Y), (X1), (Y1), lngColor 'Color
            Else
                'начало контура
                If i >  0  Then
                    'рисуем предыдущий
                    tP = Timer
                    pb.DrawPolygon vVer, lngColor
                    'pb.DrawManyLines vVer, lngColor
                    'pb.DrawPolyLine vVer, lngColor
                    sP = sP + Timer - tP
                End If
                i =  0 
                vVer.NumVertices = i +  1 
                vVer.SetVertsX i, (X)
                vVer.SetVertsY i, (Y)
                lngColor = RGB((( 45  * ouid) Mod  122 ) +  122 , _
                    ( 122  - (( 45  * ouid) Mod  122 )) +  122 , (( 125  +  45  * ouid) Mod  255 ) +  122 )
                'lngColor = RGB(((62 * ouid) Mod 122), _
                     122  - (( 62  * ouid) Mod  122 ), ( 125  +  123  * ouid) Mod  255 )
                'lngColor = RGB(0, 0, 0)
                'lngColor = RGB(255, 255, 255)
            End If
            'DoEvents
            'Me.Repaint
            If StopDrow Then Exit Do
            .MoveNext
        Loop
        .Close
    End With
    'рисуем последний
    pb.DrawPolygon vVer, lngColor
    sP = sP + Timer - tP
    'pb.DrawManyLines vVer, lngColor
    'pb.DrawPolyLine vVer, lngColor
    Debug.Print Timer - t, sP
    DoCmd.Hourglass False
End Sub
практически то же самое рисуется Line-ами в отчетах (там где 'pb.DrawLine ...) чутка быстрее. (но уже не в разы и не на порядки)
...
Рейтинг: 0 / 0
Визуализация карт
    #32840785
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извини, вчера не увидел.
для начала - раздели DrawPologon на 2 метода -
PreparePoligon + UpdateScreen

PreparePoligon = DrawPoligon без последней команды -

' Update the display
Me.DIBtoPictureData

Это вынеси в отдельный метод - UpdateScreen
и применяй его после последней отрисовки

End With
'рисуем последний
' pb.DrawPolygon vVer, lngColor
pb.PreparePolygon vVer, lngColor
pb.UpdateScreen



Если не затруднит - скажи - ускорило ли это что-нибудь?
...
Рейтинг: 0 / 0
Визуализация карт
    #32841134
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот посмотрел чуть внимательнее и не понял
как это
автор If ouid1 = ouid Then
'продолжение контура
i = i + 1
vVer.NumVertices = i + 1
vVer.SetVertsX i, (X)
vVer.SetVertsY i, (Y)

работает без изменений в clsVertices?


По коду похоже, что почти все время из наблюденного съедает обращение к
vVer.

Мораль - надо приводить clsVertices к пригодному для работы виду.
...
Рейтинг: 0 / 0
Визуализация карт
    #32841403
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victoshaвот посмотрел чуть внимательнее и не понял
как это
автор If ouid1 = ouid Then
'продолжение контура
i = i + 1
vVer.NumVertices = i + 1
vVer.SetVertsX i, (X)
vVer.SetVertsY i, (Y)

работает без изменений в clsVertices?

оно и не работает. см в 1200294 :
1200294
(пришлось Preserve добавить в clcVertices Property Let NumVertices ...

Victosha
По коду похоже, что почти все время из наблюденного съедает обращение к
vVer.

Мораль - надо приводить clsVertices к пригодному для работы виду.
см там же (думал вабше сбавиться от класса, оставив паблик массив, чтобы не перекидывать массивы туда-сюда, но там трабла с явной передачей массива пользовательских типов в методы классов - передача вариантом выигрыша не даст (помнится смотрели как то) - массив будет "размещаться" в вариант - а это время).


Код: plaintext
PreparePoligon + UpdateScreen 
- думал и об энтом, к тому же метод типа UpdateScreen (или даже именно одноименный) там ужо есть (и даже по началу пытался это же с дролайнами проделать - влет не получилось). Разгребусь с текучкой - проверю и то и сё.
...
Рейтинг: 0 / 0
Визуализация карт
    #32841431
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ззы

сообразил:
процедура при дропнутом объекте рисования точки в класс все равно размещает, при этом времена (см выше):
1.6414999999979 0.168500000007043
~1.2 сек до цикла (открытие обоих рекордстеов).
т.ч. заполнение класса, кажется не шибко ест время (<~0.5 s) суммарно на все проходы цикла.
Видимо и четние - не многим более. (ReDim-ов при этом не происходит).
...
Рейтинг: 0 / 0
Визуализация карт
    #32842541
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрел UpdateScreen из класса картинки - то что надо.

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

и вариант метода PreparePoligon для класса картнинки.

метод отрисовки набора случайных полигонов в цикле на 700 оборотов
работает 0.3 сек

вот текст тестового метода


Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Private Sub cmdPolygons_Click()
' Draw random Polygons
    Dim X As Long, Y As Long, X2 As Long, Y2 As Long
    Dim Color As Long
    Dim varTemp As Variant
    
    'Dim pts(2) As POINTAPI
    Dim pts As clsVertices2
    
    Set pts = New clsVertices2
    Dim iNdex As Long
    Dim tt As Single
    tt = Timer
    
    For iNdex =  1  To  700 
    
    pts.NumVertices = RndInt( 16 )
    'Debug.Print "NumVertices:" & pts.NumVertices
    'DoEvents
    ' Limit our random values<grin>
    For X =  0  To pts.NumVertices -  1 
     pts.SetVertsX X, RndInt(pb.dib_width)
     pts.SetVertsY X, RndInt(pb.dib_height)
    Next X
    
    'pts(1).x = RndInt(pb.dib_width)
    'pts(1).y = RndInt(pb.dib_height)
    'pts(2).x = RndInt(pb.dib_width)
    'pts(2).y = RndInt(pb.dib_height)
    
    'varTemp = pts
    
    'pb.PolygonVertices = varTemp
     Color = RGB(RndInt( 256 ), RndInt( 256 ), RndInt( 256 ))
    '
    ' Call the Polygon Method to draw some random Polygons
    pb.PreparePolygon2 pts, Color
    pts.ClearArrayContent
    
    'pb.DrawPolygon pts, Color
    
    Next
    
    pb.UpdateScreen
    DoEvents
    Set pts = Nothing
    MsgBox Timer - tt
End Sub

выкладывать ли clsVertices2 и .PreparePolygon2
??
...
Рейтинг: 0 / 0
Визуализация карт
    #32842587
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал ~
PreparePoligon + UpdateScreen

(Вернее сделал:
Код: plaintext
1.
2.
3.
Public Sub DrawPolygon(pts As clsVertices, _
Optional TempFillColor As Long =  0 , _
Optional TempColor As Long =  0 , _
Optional OnlyPrepare As Boolean = False)


Время на прорисовку сущ-нно снизилось :
(2 пробы)
Код: plaintext
1.
2.
3.
4.
 0 . 71912500000326  
  1 . 56287500000326              0 . 325374999898486  

 0 . 703249999998661  
  1 . 54699999999866              0 . 247250000007625  
от ~0.19 до ~0.33 (на одних и тех же данных)

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

(Хотя от изначальной идеи дать каждому объекту его рисунок в ленточной имеет смысл отказатья - долговато будет). А жаль.

Большой сенька в реке мяч 2 Мшсещырф.
...
Рейтинг: 0 / 0
Визуализация карт
    #32842601
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не видел предыдущего.


Любопытно посмотреть на отличия clsVertices и их вызовов из PreParePolygon2 от исходных

(т.е. есть ли за что бороться).
...
Рейтинг: 0 / 0
Визуализация карт
    #32842623
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321Не видел предыдущего.


Любопытно посмотреть на отличия clsVertices и их вызовов из PreParePolygon2 от исходных

(т.е. есть ли за что бороться).

вот как раз это и проверил на длине pts.NumVertices = RndInt(320)
в цикле на 700 оборотов
так вот однократный апдейт экрана дает более чем трех-кратный выигрыш.
а модифицированный clsVertices2 всего 3 - 12% за счет исключения
повторного копирования массива точек.
При этом несколько меняется Declare

ЗЫ
выложу чуть позже...
...
Рейтинг: 0 / 0
Визуализация карт
    #32842708
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот текст класса


Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
' clsVertices2
' Required for Polygon API call

'Updated by Victosha 23.12.2004

Option Compare Binary
Option Explicit


Private Declare Sub CopyMemory Lib "kernel32" Alias _
    "RtlMoveMemory" (pDst As Any, pSrc As Any, _
    ByVal ByteLen As Long)
    
'Описание ZeroMemory в WinAPI32.txt неправльное. Потерял некоторое время, пока понял это:
Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (dest As Any, _
    ByVal numBytes As Long)

'структура для хранения информации о размерности
Private Type SAFEARRAYBOUND
    cElements As Long
    lLbound As Long
End Type

'описатель одномерного массива
Private Type SAFEARRAY1D
    cDims As Integer
    fFeatures As Integer
    cbElements As Long
    cLocks As Long
    pvData As Long
    Bounds( 0  To  0 ) As SAFEARRAYBOUND
End Type


'Шаг увеличения длины массива
'для экономии к-ва редимов
'здесь надо установить размер наиболее вероятного
'размера массива точек
'очень слабо - почти незаметно влияние на общую скорость
'
Const CChunkSize As Long =  50 &


' Number of vertices for our Polygon
Private m_NumVertices As Long

' Array to hold the vertices
' тип массива пришлось сменить, иначе проблема с определением адресов
Private m_pts() As Currency 'POINTAPI

'просто текущая длина массива
Private uArrayBound As Long

'описатель массива
Private pSaPtr As SAFEARRAY1D


Private Function VarPtrArray(arr As Variant) As Long
'функция для определения адреса массива
  CopyMemory VarPtrArray, ByVal VarPtr(arr) +  8 &,  4 &
End Function

Private Sub GetArrPtr()
'формирует описатель массива точек
  Dim arrPtr As Long
  Dim saPtr As Long
  
  arrPtr = VarPtrArray(m_pts)
  
  ' восстанавливаем адрес описателя
  CopyMemory ByVal VarPtr(saPtr), ByVal arrPtr,  4 &
  
  'копируем информацию в описатель массива
  CopyMemory pSaPtr, ByVal saPtr, _
        Len(pSaPtr) ' - 8 * (60 - cDims)
        
End Sub

Private Sub reserveArray(ByVal x As Long)
'выделяет память под массив
  If x <  1 & Then x =  1 &
  If x > uArrayBound Then
    ReDim Preserve m_pts((x -  1 &) + CChunkSize) As Currency
    uArrayBound = UBound(m_pts)
    GetArrPtr
  End If
End Sub

Friend Sub ClearArrayContent()
'очищает массив, заполняя его нулями
Dim numElems As Long
  numElems = pSaPtr.cbElements * pSaPtr.Bounds( 0 ).cElements
  ZeroMemory m_pts( 0 &), ByVal numElems
  GetArrPtr
  m_NumVertices =  0 &
End Sub


Property Get getPointerToArray() As Long
'возвращает указатель на первый элемент массива
'для последующего использования функциями отрисовки
'в соответствующих декларациях нужно подправить x as POINTAPI на ByVal x As Long
  getPointerToArray = pSaPtr.pvData
End Property



Friend Property Let NumVertices(ByVal x As Long)
' Erase m_pts
' Zero based index
  If x =  0  Then x =  1 
  
  If x > uArrayBound Then
    reserveArray x
  End If
  
  m_NumVertices = x -  1 
End Property

Friend Property Get NumVertices() As Long
  NumVertices = m_NumVertices
End Property

Friend Property Get VertsX(x) As Long
  CopyMemory ByVal VarPtr(VertsX), ByVal (pSaPtr.pvData + x *  8 &),  4 &
End Property

Friend Property Get VertsY(x) As Long
  CopyMemory ByVal VarPtr(VertsY), ByVal (pSaPtr.pvData + x *  8 & +  4 &),  4 &
End Property


Friend Function SetVertsX(inDex As Long, x As Long)
  CopyMemory ByVal pSaPtr.pvData + inDex *  8 &, ByVal VarPtr(x),  4 &
'm_pts(inDex).X = X
End Function

Friend Function SetVertsY(inDex As Long, x As Long)
  CopyMemory ByVal pSaPtr.pvData + inDex *  8 & +  4 &, ByVal VarPtr(x),  4 &
'm_pts(inDex).Y = X
End Function

Friend Function SetVertsXY(inDex As Long, x As Long, y As Long)
'предпочтительно устанавлиать точки ею, единицы процентов на этом выиграются
   CopyMemory ByVal pSaPtr.pvData + inDex *  8 &, ByVal VarPtr(x),  4 &
   CopyMemory ByVal pSaPtr.pvData + inDex *  8 & +  4 &, ByVal VarPtr(y),  4 &
End Function

Private Sub Class_Initialize()
' To reduce errors setup as 2 vertices
  'firstStart = True
  NumVertices =  1 &
End Sub

Private Sub Terminate()
On Error Resume Next
    Erase m_pts
End Sub

Private Sub Class_Terminate()
  Terminate
End Sub
...
Рейтинг: 0 / 0
Визуализация карт
    #32842716
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в clsPictureBox
надо добавить декларацию
Код: plaintext
1.
Private Declare Function Polygon2 Lib "gdi32" Alias "Polygon" _
(ByVal hdc As Long, ByVal lpPoint As Long, ByVal nCount As Long) As Long

тогда медод "подготовки полигона" будет таким

Код: 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.
37.
38.
39.
40.
41.
42.
43.
Friend Sub PreparePolygon2(pts As clsVertices2, Optional TempFillColor As Long =  0 )
    
    Dim hNewBrush As Long
    Dim hOldBrush As Long
    'Dim pt() As POINTAPI
    'Dim x As Long
    
On Error GoTo Exit_Err
    
   'ReDim pt(pts.NumVertices)
    
   'For X = 0 To pts.NumVertices
   '  pt(X).X = pts.VertsX(X)
   '  pt(X).Y = pts.VertsY(X)
   'Next
   
    If TempFillColor <>  0  Then
        hNewBrush = apiCreateSolidBrush(TempFillColor)
    Else
    ' Use FillColor Prop
        hNewBrush = apiCreateSolidBrush(m_FillColor)
    End If
    
    ' Select new brush onto our DC
    hOldBrush = SelectObject(m_hDC, hNewBrush)
    
    ' Draw the Polygon
    Call Polygon2(m_hDC, ByVal pts.getPointerToArray, pts.NumVertices)
    
    Call SelectObject(m_hDC, hOldBrush)
    Call DeleteObject(hNewBrush)
    
    '' Update the display
    'Me.DIBtoPictureData


Exit_OK:
Exit Sub

Exit_Err:

MsgBox Err.Description, vbCritical, "Error Number:" & Err.Number
GoTo Exit_OK:
End Sub

ЗЫ1
с полилайном все тоже самое.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Friend Property Get VertsX(X) As Long
  Dim adr As Long
  adr = pSaPtr.pvData + X *  8 &
  CopyMemory ByVal VarPtr(VertsX), ByVal adr,  4 &
End Property

Friend Property Get VertsY(X) As Long
  Dim adr As Long
  adr = pSaPtr.pvData + X *  8 & +  4 &
  CopyMemory ByVal VarPtr(VertsY), ByVal adr,  4 &
End Property
(с выражением лица)
...
Рейтинг: 0 / 0
Визуализация карт
    #32842875
Фотография GUESТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я смотрю ты серьезно завелся на эту тему...

респект
...
Рейтинг: 0 / 0
Визуализация карт
    #32842880
Фотография Rafa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может чего не понимаю, с наскоку то, но попробуй шрифты True Type они масштабируются до любого размера, нарисуй свой какой нужен в смысле фигуры и растаскивай в лабелях фоть по форме, хоть по отчету.....
где -то на hiprog.ru я давно выкладывал способ создания интерфейсов вместо картинок были как раз символы шрифта. Весит фигня знакомест море до 65535
Извините если не в тему попал....
...
Рейтинг: 0 / 0
Визуализация карт
    #32842928
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал, как это выглядит на «другой» машине.

При том, что она номинально слабее, результат, с одной стороны лучше по
времени (первая П4-1700, вторая - Атлон1400, атлон получился «лучше»), а с
другой модифицированный clsVertices дает более стабильную и лучше
измеримую разницу в 7-10%. На П4 3-12%.

Думается, что - теоретически это не все, что можно выжать из вба,но у меня
больше нет лимита времени и интереса, к сожалению.


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

К этому выводу пришел на основании наблюдения относительных времен
подготовки массива данных и их отрисовки на виртуальном устройстве.


В широком диапазоне длин цепочек – от 150 до 700 элементов,
отношение времени подготовки массива к времени рисовки остается
практически неизменным и колеблется в районе 53:47 – 56:44.

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

Но на времени рисовки при аналогичном движении так существенно, думаю,
не выиграть – предполагаю, что там речь на длинных цепочках пойдет о
десятке-другом процентов.

Таким образом, граница снизу по улучшению скорости – время выполнения
АПИ-функций отрисовки множества точек. Можно поиграть стилями
наложения картинки («видеорежимами»). Однако, это немного другое поле для
экспериментов, и вне задачи, я нос ни ковырять, ни пудрить не буду на эту
тему.
:)

Ускоряться в смысле рисовки можно на дороге прямой манипуляции битовыми
массивами. Но, до опыта (и вне специфики задачи, позволяющей что-то
докрутить по месту), это кажется смелым начинанием на ВБА.
Впрочем – посмотрим – охота пуще неволи…



На ВБ я бы не стал бы в этом месте опускать флага :)


ЗЫ
А что там с очередями – входят и выходят?
...

(с выражением лица)
...
Рейтинг: 0 / 0
Визуализация карт
    #32843265
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм, а вот к очередям мы туточки и возвратились. Есть ли красивое решение с отрезанием от массива первых элементов (без ручного передвигания задних элементов вперед)? И как красиво сшить два массива в один. (вариант - Вшить один вунутрь второго?)


Хотя меня это интересует не в смысле очередей, а в смысле контуров, которые, в некотором роде, "очереди". И манипуляции с ними весьма сродни очередям ("уточннение" контура - суть вставка одного массива в некоторый другой, возможно на место вырезаемого участок другого (другой длины), -т.е. чаще всего с изменением нумерации хвоста массива-назначения. Понятно, что можно так оперировать с коллекциями - благо текстовый индекс позволяет вставлять без переиндексации хвостов, но коллекция видимо потяжельше массива будет). Есть маза работать со строками - (Replace). Но массив на строку надо отображать (CopyMem ByRef ?) как впрочем и взад (после преобразования). Будет ли это шустро? (Думается подсобрав с энтого форума старые опусы на тему CopyMem я таки разберусь, но если есть интерес - могу и просто понаблюдать за полетом.)




ЗЗЗЫ Чисто очереди (сами по себе в БД) интересовали некоего ораклиста. Я просто заметил, что "списки" неудобны тем, что надо следить за образованием паразитных колец по ссылкам (выпадением части очереди из общей - из за того, что кто-то перезаймет где то в хвосте). И делать в аксессе это придется не встроенными средствами контроля правил/целостности (а правилами перестройки списков приложением). То же относится и к (кустящимся) деревьям, построенным как списки (по ссылкам на нижеторчащего).
...
Рейтинг: 0 / 0
Визуализация карт
    #32843328
интов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
про отображение строк на массив интов я тут пытался изголиться.
http://www.sql.ru/forum/actualthread.aspx?tid=98800&hl=%ec%e0%f1%f1%e8%e2+%e8%ed%f2%ee%e2#729963
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Визуализация карт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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