www.map-info.ru :: Просмотр темы - Изменение цвета обьекта в Мапе через панель МапБазик
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Gats



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

СообщениеДобавлено: Чт Май 29, 2008 4:26 pm    Заголовок сообщения: Изменение цвета обьекта в Мапе через панель МапБазик Добавить ответ со ссылкой на данный текст

Дорогие мастера помогите пожалуйсто
Я пытаюсь менять цвет объекта обращаясь:

SELECT * FROM _3333 WHERE id=28
cst=_3333.obj Alter OBJECT cst INFO OBJ_INFO,makebrush(2,rgb(0,0,255))

Вместо OBJ_INFO пробовал разные варианты описаные в справочнике по мапбазик (OBJ_INFO_BRUSH и ObjectInfo(cst,OBJ_INFO_BRUSH)) но как я понял МапИнфо не понимает их.

Подскажите, что тут можно использовать и верен ли такой подход.
МапИнфо 6.0
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zzzio



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

СообщениеДобавлено: Чт Май 29, 2008 8:10 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Если выпадает ошибка типа "неопределена переменная OBJ_INFO", то в начале напишите:
include "mapbasic.def"
И чтобы цвет объекта все-таки поменялся после alter object... пишем:
update table 3333 where rowid=28
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gats



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

СообщениеДобавлено: Пт Май 30, 2008 3:17 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо за ответ.
При написании include “mapbasic.def”
MapInfo говорит не определена переменная include :shock: .
А возможно ли подключение модуля с панели мапбазик в мапинфо?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Нестеров Валерий



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

СообщениеДобавлено: Пт Май 30, 2008 2:56 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Подключение модуля по моему только в самом редакторе MapBasic. Из мапинфо можно только простые однострочные скриптики запускать и без переменнных.

А использовать ObjectInfo можно в MapInfo, только вместо OBJ_INFO_BRUSH сразу писать сам код, соответствующий этому предложению (откройте в блокноте “mapbasic.def” и там посмотрите соответствия). В частности для "OBJ_INFO_BRUSH" это цифра "3".

Пример, ищем объекты типа регион:
и вместо -
SELECT * FROM участки WHERE int(objectinfo(obj,OBJ_INFO_TYPE))=OBJ_TYPE_REGION

пишем -
SELECT * FROM участки WHERE int(objectinfo(obj,1))=7

запускаете этот запросик из окна MapBasic в MapInfo (меню "Настройки\Показать окно MapBasic") и у вас будут отобраны в окне карты площадные объекты.

Кстати, этот запросик, так же для примера входит в "Библиотеку запросов" в новом инструментарии 4.0 (ранее я уже упоминал о новом инструментарии и приводил пример другого запроса).

----ниже вырезка списка стандартных определений из “mapbasic.def”----
============================================================================
ObjectInfo() defines
============================================================================
Define OBJ_INFO_TYPE 1
Define OBJ_INFO_PEN 2
Define OBJ_INFO_SYMBOL 2
Define OBJ_INFO_TEXTFONT 2
Define OBJ_INFO_BRUSH 3
Define OBJ_INFO_NPNTS 20
Define OBJ_INFO_TEXTSTRING 3
Define OBJ_INFO_SMOOTH 4
Define OBJ_INFO_FRAMEWIN 4
Define OBJ_INFO_NPOLYGONS 21
Define OBJ_INFO_TEXTSPACING 4
Define OBJ_INFO_TEXTJUSTIFY 5
Define OBJ_INFO_FRAMETITLE 6
Define OBJ_INFO_TEXTARROW 6
Define OBJ_INFO_FILLFRAME 7

----------------------------------------------------------------------------
Object types, returned by ObjectInfo(<obj>, OBJ_INFO_TYPE)
----------------------------------------------------------------------------
Define OBJ_TYPE_ARC 1
Define OBJ_TYPE_ELLIPSE 2
Define OBJ_TYPE_LINE 3
Define OBJ_TYPE_PLINE 4
Define OBJ_TYPE_POINT 5
Define OBJ_TYPE_FRAME 6
Define OBJ_TYPE_REGION 7
Define OBJ_TYPE_RECT 8
Define OBJ_TYPE_ROUNDRECT 9
Define OBJ_TYPE_TEXT 10
_________________
Жизнь прекрасна!i
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Gats



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

СообщениеДобавлено: Сб Май 31, 2008 11:07 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо за ответ. Изменил запрос в соответствии с выше сказаным
select * from _3333 where id=9 cst=_3333.obj Alter Object cst INFO ObjectInfo(cst,2),makebrush(2,rgb(0,0,255),)
Но MapInfo выдает сообщение
Что преобразоватьданные не удалось :shock: , искомый обьект на карте выделил. Подскажите вчем может быть причина
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Нестеров Валерий



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

СообщениеДобавлено: Пн Июн 02, 2008 1:26 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Скорее всего ваш запрос выполнил только это:
select * from _3333 where id=9

а что такое cst=_3333.obj?

и предложение
Alter Object cst INFO ObjectInfo(cst,2),makebrush(2,rgb(0,0,255),)
нельзя использовать в предложении Select.
_________________
Жизнь прекрасна!i
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
blackswan



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

СообщениеДобавлено: Пн Ноя 01, 2010 11:24 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

у меня схожая задача, хочу изменить цвет и тип заливки объекта, делаю так

myobj = selection.obj
p_var = ObjectInfo(selection.obj,OBJ_INFO_PEN)
p_width = StyleAttr(p_var,PEN_WIDTH)
p_pattern = StyleAttr(p_var,PEN_PATTERN)
p_color = StyleAttr(p_var,PEN_COLOR)
new_color = StyleAttr(pen_style,PEN_COLOR)
new_pen = MakePen(p_width,p_pattern,new_color)
Alter Object myobj
Info OBJ_INFO_PEN, new_pen
Update selection Set obj = myobj Where RowId =intr

b_var = ObjectInfo(selection.obj,OBJ_INFO_BRUSH) ***********
b_pattern = StyleAttr(b_var,BRUSH_PATTERN)
b_forecolor = StyleAttr(b_var,BRUSH_FORECOLOR)
b_backcolor = StyleAttr(b_var,BRUSH_BACKCOLOR)
new_brush = MakeBrush(b_pattern,new_color,b_backcolor)
Alter Object myobj
Info OBJ_INFO_BRUSH, new_brush
Update selection Set obj = myobj Where RowId =intr

в строке *********** выдаёт сообщение , что ObjectInfo: аргумент 2 вышел за заданные пределы, что не так? он ругается на OBJECT_BRUSH? У меня MapInfo и MapBasic v 9.5
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SergS



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

СообщениеДобавлено: Пн Ноя 01, 2010 6:58 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Это единый кусок кода?
тогда считываение из selection после update может дать произвольную запись. и, соответственно, совершенно другой объект
если меняется стиль у одного и того же объекта, повторное считывание совсем не нужно, и имеет смысл записать проблемную строку так
b_var = ObjectInfo(myobj,OBJ_INFO_BRUSH)
ну и до кучи update перенести в конец фрагмента.

если это различные куски кода, то просто проверить на тип объекта, типа:
if objectinfo(selection.obj) in (OBJ_TYPE_ELLIPSE, OBJ_TYPE_FRAME, OBJ_TYPE_REGION, OBJ_TYPE_RECT, OBJ_TYPE_ROUNDRECT) then
......
'если объект в принципе может иметь заливку, то все это делаем
end if
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

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


Top.Mail.Ru