Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
sysrepos
Зарегистрирован: 22.10.2012 Сообщения: 39
|
Добавлено: Вс Ноя 04, 2012 12:57 pm Заголовок сообщения: как ускорить процедуру (alter object) |
|
|
написал инструмент, который меняет цвет у всех объектов на карте в 1 слое.
но он очень долго выполняется (1000 объектов - 20 секунд), (та же самая функция которая есть в мапифно - делает тоже самое за 1 секунду, для тех же 1000 объектов) - выделить все объекты и сменить стиль области
Подскажите пожалуйста как можно ускорить выполнение этой функции?
Может я ее как то не так написал?
Все, из того, что я нашел для ускорения
Set Event Processing Off
Set Map Redraw Off
set table doma FastEdit On
не помогло
Include "mapbasic.def"
Include "icons.def"
Create ButtonPad "Мои Кнопки" As
pushbutton
Icon MI_ICON_ZOOM_QUESTION
Calling proc3
HelpMsg "proc3 изменяет все объекты"
global ob3 as object
global br3 as brush
global i, nomer3, cols as integer
sub proc3
Set Event Processing Off 'отключает реакцию на системные события
Set Map Redraw Off 'отключает автоматическую перерисовку окна карты
set table doma FastEdit On 'изменения записываются сразу в в файл, минуя файл транзакций
cols=tableinfo("doma", TAB_INFO_NROWS) 'количество строк в таблице
br3=makebrush(2,16776960,16776960) 'стиль, который будет присваиваться объектам
for i=1 to cols
fetch rec i from doma
nomer3=doma.rowid
ob3=doma.object
alter object ob3
info obj_info_brush, br3
update doma set object = ob3
where rowid=i
next
end sub
или может быть есть какое то зарезервированное слово/функция в mapbasic, которое выполняет эту процедуру? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Пн Ноя 05, 2012 12:53 pm Заголовок сообщения: |
|
|
Возможно так будет быстрее:
Include "mapbasic.def"
Declare Sub Main
Declare Sub tst1
Sub Main
call tst1
end sub
Sub tst1
'для выделенных объектов
dim lr as string
dim br as brush
lr=SelectionInfo(SEL_INFO_SELNAME)
br=MakeBrush(2,16776960,16776960)
update lr Set obj = ConvertToPline(obj)
Set Style Brush br
update lr Set obj = ConvertToRegion(obj)
end sub
Хотя, если речь идет о слое целиком, разумнее использовать глобальные настройки стиля. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пн Ноя 05, 2012 4:44 pm Заголовок сообщения: |
|
|
Попробуйте вот это убрать:
set table doma FastEdit On
были случаи на практике, когда оно наоборот замедляло операции обновления. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
sysrepos
Зарегистрирован: 22.10.2012 Сообщения: 39
|
Добавлено: Пн Ноя 05, 2012 6:34 pm Заголовок сообщения: |
|
|
set table doma FastEdit On - пробовал и с ним и без, особой разницы нету.
а вот код thegeo - действительно быстро все делает.
только тогда вопрос, как аналогичным способом сделать для точек? их вроде не во что конвертировать.
и как использовать глобальные настройки стиля (это имеется ввиду в инструменты в самом мапинфо? или какая то функция в мапбэйсике) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Вт Ноя 06, 2012 2:41 pm Заголовок сообщения: |
|
|
1. Установка глобальных стилей оформления для слоя. Аналогично для линии, заливки, шрифта.
Sub tst2 (byval Idmap as integer,byval nameLr as string)
dim sm as Symbol
sm=MakeSymbol(45, GREEN, 14)
Set Map Window Idmap Layer nameLr Display Global Global Symbol sm
end sub
Idmap – идентификатор окна карты
nameLr – имя слоя
2. Установка стилей для точек. Вариант хотя и выглядит несколько надуманным, но вполне рабочий.
Sub tst3
dim lr as string
dim sm as Symbol
lr=SelectionInfo(SEL_INFO_SELNAME)
sm=MakeSymbol(45, RED, 16)
Set Style Symbol sm
update lr Set obj = CreatePoint(CentroidX(obj),CentroidY(obj))
end sub |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
sysrepos
Зарегистрирован: 22.10.2012 Сообщения: 39
|
Добавлено: Ср Ноя 07, 2012 10:40 pm Заголовок сообщения: |
|
|
спасибо, 2. Установка стилей для точек - тоже быстро делает.
1. Установка глобальных стилей - понял что имелось ввиду под глобальными настройками стиля, но это не то. (сами линии процедура не меняет) просто внешний вид в слое делает другой.
Спасибо. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
spawner
Зарегистрирован: 01.04.2009 Сообщения: 77
|
Добавлено: Сб Фев 06, 2021 1:04 pm Заголовок сообщения: |
|
|
Ооо, thegeo!!! Огромное тебе человеческое спасибо!
Я года три искал как быстро программно переоформлять большие объемы объектов, но до такой дичи конечно не мог даже додуматься! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|