
Управление маркерами вершин через API
- 
				GIS-dev
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
							 Управление маркерами вершин через API
						Управление маркерами вершин через API
		
													
							
						
			
			
			
			
			Никак не найду, каком образом устанавливается вид маркеров вершин на карте в режиме редактирования геометрии (по-умолчанию красные крестики на каждой вершине в режиме редактирования векторного слоя)! Если цвет заливки выбранной фичи удалось задать методом "QgsRenderer::setSelectionColor()", то для управления маркерами логической цепочки не прослеживается в исходниках. Например в файле "qgsoptions.cpp" считывается, задается и сохраняется стиль маркеров, в виде креста: "settings.setValue( "/qgis/digitizing/marker_style", "Cross" );" и т.п.  Но обращение к объекту "settings" более нигде не обнаруживается, кроме самого вышеназванного файла... Интуитивно угадать какие переменные или методы и где непосредственно в других классах или в самих библиотеках API задают внешний вид маркеров вершин, мне пока не удалось. Если кто-то знает, в каком классе они запрятаны, подскажите, плз! Мне их нужно попросту отключить,  я сам отрисовываю анимированное выделение поверх растра карты, и эти красные кресты здорово портят внешний вид.  
			
			
									
						
										
						
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Управление маркерами вершин через API
Я насколько бегло смотрел - надо искать не переменную settings, а ее тип. Ибо имя переменной может быть любое. Еще наверное надо искать по "/qgis/digitizing/marker_style".
Может вам стоить переопределить переменную примерно так: settings.setValue( "/qgis/digitizing/marker_style", "Circle" );
			
			
									
						
										
						Может вам стоить переопределить переменную примерно так: settings.setValue( "/qgis/digitizing/marker_style", "Circle" );
- 
				GIS-dev
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
							 Re: Управление маркерами вершин через API
						Re: Управление маркерами вершин через API
		
													
							
						
			
			
			
			
			Я пробовал найти ключ "/qgis/digitizing/marker_style", предполагая, что в любом случае обращение к настройкам должно идти через него(больше просто ничего не меняется в "qgsoptions.cpp"). Однако в исходниках QGIS его нет, что заставляет предположить обращение к нему где-то в недрах библиотек API. 
Я пробовал так: в функцию "main()" на первое место ставил код:
Если бы он сработал, маркерами по идее выделялся бы только объект, с которым производятся действия (так происходит в самом QGIS). Но выделяются по-прежнему вершины всех объектов слоя... Да и мне кажется было бы странно управлять параметрами отображения через объект QSettings, предназначенный только для запоминания конфигураций. Должен быть какой-то вызов вроде "QgsMapcanvas->setSelMarkerType(xxx);" или что-то подобное. Но ничего похожего поиском я не нашел ни в исходниках, ни в "справочнике" по API на сайте QGIS.
			
			
									
						
										
						Я пробовал так: в функцию "main()" на первое место ставил код:
Код: Выделить всё
QSettings settings;
        settings.setValue( "/qgis/digitizing/marker_only_for_selected",true);Если бы он сработал, маркерами по идее выделялся бы только объект, с которым производятся действия (так происходит в самом QGIS). Но выделяются по-прежнему вершины всех объектов слоя... Да и мне кажется было бы странно управлять параметрами отображения через объект QSettings, предназначенный только для запоминания конфигураций. Должен быть какой-то вызов вроде "QgsMapcanvas->setSelMarkerType(xxx);" или что-то подобное. Но ничего похожего поиском я не нашел ни в исходниках, ни в "справочнике" по API на сайте QGIS.
- 
				Voltron
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Управление маркерами вершин через API
Установка произовольных маркеров вершин в данный момент не возможна, вы можете использовать только один из трех вариантов: перекрестие, полупрозрачный круг и без маркера. Т.о, чтобы отключить маркеры достаточно записать в /qgis/digitizing/marker_style значение None.
Ах, да. Код, отвечающий за отрисовку маркеров ищите в файле qgsvectorlayer.cpp.
Hint: в TotalCommander есть возможность искать по содержимому, да и в других нормальных файловых менеджерах тоже (про Linux вообще молчу). Это если не удается «проследить цепочку»
			
			
									
						
										
						Ах, да. Код, отвечающий за отрисовку маркеров ищите в файле qgsvectorlayer.cpp.
Hint: в TotalCommander есть возможность искать по содержимому, да и в других нормальных файловых менеджерах тоже (про Linux вообще молчу). Это если не удается «проследить цепочку»
- 
				GIS-dev
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
							 Re: Управление маркерами вершин через API
						Re: Управление маркерами вершин через API
		
													
							
						
			
			
			
			
			Хм. Да. Вот фрагмент необходимого кода в функции main(), чтобы всё наконец-то заработало (спасибо разработчикам Qt за подробный мануал, в частности по QSettings):
			
			
									
						
										
						Код: Выделить всё
int main(int argc, char *argv[])
{    
    QgsApplication a(argc, argv, true, QObject::tr(""));
    QCoreApplication::setOrganizationName( "QuantumGIS" );
    QCoreApplication::setOrganizationDomain( "qgis.org" );
    QCoreApplication::setApplicationName( "QGIS" );
    QSettings settings;        
        settings.setValue( "/qgis/digitizing/marker_style","None");
........................
}
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей
