|
|
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
Victosha авторВремя мало зависит от вида отрисовки, видимо больше от количества ('DrawManyLines (аналог "Draw700Lines") yt dblz rjlf е видя кода сказать трудно. Почему-то думаю, что цикл обработки рекордсета оптимизировать надо. Пока кажется, что 7 сек чрезмерно многовато... автор к тому же не производит обратного перевода точек из класса с точками в массив - т.ч. с классом точек бороться пока не буду). что-то я совсем не понял, про что это... вот 7.37537500000326 5.86649999995279 2-я цифирь - сумма чистого времени только на вызовах "отрисовки" (350 раз вызвал - <~0.02 на вызов -в пределах ваших 4 сотых. (правда есть контура и из 7-ми точек и из >700). Т.ч прогон рекордсета -1.5, из которых, на самом деле 1.203125 - до завершения открытие рекордсета (есть еще кое что). а "не понял " - см DrawPolygon в первоисточнике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 17:20:02 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
все-таки не могу понять характерные размеры - общее к-во точек, например... если действительно контура и замкнутые - полигон, если не замкнутые полилайн. если хочешь - попробуй выложить тестовые данные любой длины или покажи структуру таблиц в которых хранишь описания. все-таки я пока не понимаю, откуда 5-7 сек берутся... (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 17:48:33 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
тест: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 19:18:31 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
извини, вчера не увидел. для начала - раздели DrawPologon на 2 метода - PreparePoligon + UpdateScreen PreparePoligon = DrawPoligon без последней команды - ' Update the display Me.DIBtoPictureData Это вынеси в отдельный метод - UpdateScreen и применяй его после последней отрисовки End With 'рисуем последний ' pb.DrawPolygon vVer, lngColor pb.PreparePolygon vVer, lngColor pb.UpdateScreen Если не затруднит - скажи - ускорило ли это что-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 09:51:39 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
вот посмотрел чуть внимательнее и не понял как это автор If ouid1 = ouid Then 'продолжение контура i = i + 1 vVer.NumVertices = i + 1 vVer.SetVertsX i, (X) vVer.SetVertsY i, (Y) работает без изменений в clsVertices? По коду похоже, что почти все время из наблюденного съедает обращение к vVer. Мораль - надо приводить clsVertices к пригодному для работы виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 11:58:15 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 13:01:24 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
ззы сообразил: процедура при дропнутом объекте рисования точки в класс все равно размещает, при этом времена (см выше): 1.6414999999979 0.168500000007043 ~1.2 сек до цикла (открытие обоих рекордстеов). т.ч. заполнение класса, кажется не шибко ест время (<~0.5 s) суммарно на все проходы цикла. Видимо и четние - не многим более. (ReDim-ов при этом не происходит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 13:08:11 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
посмотрел 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. выкладывать ли clsVertices2 и .PreparePolygon2 ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:14:36 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
сделал ~ PreparePoligon + UpdateScreen (Вернее сделал: Код: plaintext 1. 2. 3. Время на прорисовку сущ-нно снизилось : (2 пробы) Код: plaintext 1. 2. 3. 4. теперь можно и рекордсеты пооптимизировать. И с многократными передачами массивов побороться. (Хотя от изначальной идеи дать каждому объекту его рисунок в ленточной имеет смысл отказатья - долговато будет). А жаль. Большой сенька в реке мяч 2 Мшсещырф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:35:27 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
Не видел предыдущего. Любопытно посмотреть на отличия clsVertices и их вызовов из PreParePolygon2 от исходных (т.е. есть ли за что бороться). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:42:53 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
4321Не видел предыдущего. Любопытно посмотреть на отличия clsVertices и их вызовов из PreParePolygon2 от исходных (т.е. есть ли за что бороться). вот как раз это и проверил на длине pts.NumVertices = RndInt(320) в цикле на 700 оборотов так вот однократный апдейт экрана дает более чем трех-кратный выигрыш. а модифицированный clsVertices2 всего 3 - 12% за счет исключения повторного копирования массива точек. При этом несколько меняется Declare ЗЫ выложу чуть позже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 18:55:14 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
вот текст класса Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:47:45 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
в clsPictureBox надо добавить декларацию Код: plaintext 1. тогда медод "подготовки полигона" будет таким Код: 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. ЗЫ1 с полилайном все тоже самое. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 19:53:39 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
виноват методы доступа должны быть такими Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 20:58:51 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
я смотрю ты серьезно завелся на эту тему... респект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 23:58:31 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
может чего не понимаю, с наскоку то, но попробуй шрифты True Type они масштабируются до любого размера, нарисуй свой какой нужен в смысле фигуры и растаскивай в лабелях фоть по форме, хоть по отчету..... где -то на hiprog.ru я давно выкладывал способ создания интерфейсов вместо картинок были как раз символы шрифта. Весит фигня знакомест море до 65535 Извините если не в тему попал.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 00:06:02 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
Попробовал, как это выглядит на «другой» машине. При том, что она номинально слабее, результат, с одной стороны лучше по времени (первая П4-1700, вторая - Атлон1400, атлон получился «лучше»), а с другой модифицированный clsVertices дает более стабильную и лучше измеримую разницу в 7-10%. На П4 3-12%. Думается, что - теоретически это не все, что можно выжать из вба,но у меня больше нет лимита времени и интереса, к сожалению. Одна из причин формулируется так. Подкрутить подготовку массива в рамках вба, как будто еще возможно, и, может оказаться, что существенно . Вот с отрисовкой на этой дороге применительно к скорости, кажется делать больше нечего. Дальше можно бороться за мировые преобразования, сглаживание, завершение маршрутов и масштабирование. К этому выводу пришел на основании наблюдения относительных времен подготовки массива данных и их отрисовки на виртуальном устройстве. В широком диапазоне длин цепочек – от 150 до 700 элементов, отношение времени подготовки массива к времени рисовки остается практически неизменным и колеблется в районе 53:47 – 56:44. В лоб время заполнения массива можно улучшить не менее, чем на полпорядка, вынеся соответствующий класс в Актив-Икс длл. Но на времени рисовки при аналогичном движении так существенно, думаю, не выиграть – предполагаю, что там речь на длинных цепочках пойдет о десятке-другом процентов. Таким образом, граница снизу по улучшению скорости – время выполнения АПИ-функций отрисовки множества точек. Можно поиграть стилями наложения картинки («видеорежимами»). Однако, это немного другое поле для экспериментов, и вне задачи, я нос ни ковырять, ни пудрить не буду на эту тему. :) Ускоряться в смысле рисовки можно на дороге прямой манипуляции битовыми массивами. Но, до опыта (и вне специфики задачи, позволяющей что-то докрутить по месту), это кажется смелым начинанием на ВБА. Впрочем – посмотрим – охота пуще неволи… На ВБ я бы не стал бы в этом месте опускать флага :) ЗЫ А что там с очередями – входят и выходят? ... (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 04:48:37 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
хм, а вот к очередям мы туточки и возвратились. Есть ли красивое решение с отрезанием от массива первых элементов (без ручного передвигания задних элементов вперед)? И как красиво сшить два массива в один. (вариант - Вшить один вунутрь второго?) Хотя меня это интересует не в смысле очередей, а в смысле контуров, которые, в некотором роде, "очереди". И манипуляции с ними весьма сродни очередям ("уточннение" контура - суть вставка одного массива в некоторый другой, возможно на место вырезаемого участок другого (другой длины), -т.е. чаще всего с изменением нумерации хвоста массива-назначения. Понятно, что можно так оперировать с коллекциями - благо текстовый индекс позволяет вставлять без переиндексации хвостов, но коллекция видимо потяжельше массива будет). Есть маза работать со строками - (Replace). Но массив на строку надо отображать (CopyMem ByRef ?) как впрочем и взад (после преобразования). Будет ли это шустро? (Думается подсобрав с энтого форума старые опусы на тему CopyMem я таки разберусь, но если есть интерес - могу и просто понаблюдать за полетом.) ЗЗЗЫ Чисто очереди (сами по себе в БД) интересовали некоего ораклиста. Я просто заметил, что "списки" неудобны тем, что надо следить за образованием паразитных колец по ссылкам (выпадением части очереди из общей - из за того, что кто-то перезаймет где то в хвосте). И делать в аксессе это придется не встроенными средствами контроля правил/целостности (а правилами перестройки списков приложением). То же относится и к (кустящимся) деревьям, построенным как списки (по ссылкам на нижеторчащего). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:03:50 |
|
||
|
Визуализация карт
|
|||
|---|---|---|---|
|
#18+
про отображение строк на массив интов я тут пытался изголиться. http://www.sql.ru/forum/actualthread.aspx?tid=98800&hl=%ec%e0%f1%f1%e8%e2+%e8%ed%f2%ee%e2#729963 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 11:20:41 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32842716&tid=1669557]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 331ms |

| 0 / 0 |
