| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		nawakster
 
 
  Зарегистрирован: 17.06.2008 Сообщения: 59
 
  | 
		
			
				 Добавлено: Пт 29 Янв 2016 18:32    Заголовок сообщения: Подпись объекта - вычисление координат подписи | 
				     | 
			 
			
				
  | 
			 
			
				Добрый день.
 
 
Нужно разместить на участках подпись, желательно в середине. Многие из объектов многоугольники не являющиеся выпуклыми, что затрудняет задачу.
 
 
Может кто уже реализовывал? Поделитесь, пожалуйста, куском кода вычисляющим координаты подписи объекта. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Азаматов Азамат Хадисович
 
 
  Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
  | 
		
			
				 Добавлено: Пт 29 Янв 2016 23:33    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| горизонтальные надписи? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		nawakster
 
 
  Зарегистрирован: 17.06.2008 Сообщения: 59
 
  | 
		
			
				 Добавлено: Сб 30 Янв 2016 00:04    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Ага | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Азаматов Азамат Хадисович
 
 
  Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
  | 
		
			
				 Добавлено: Сб 30 Янв 2016 13:16    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				я делал для наклонных надписей. 
 
Принцип.
 
выбираем самую длинную линию объекта. 
 
Делаем перпендикуляр из центра линии и находим ближайшее пересечение с другой линией объекта.
 
Центр полученного отрезка с большой вероятностью и есть оптимальное место для центра надписи.
 
 	  | Код: | 	 		  
 
private static Text GenerateOneText(IIngeoApplication app,     IIngeoMapObject mobj, string text)
 
        {
 
            PointF lp1=new PointF(),lp2=new PointF();
 
            GetLongestLine(mobj,ref lp1,ref lp2);
 
            ...
 
            PointF lpc = GetLineCenter(lp1, lp2);
 
            PointF ip=GetInterPoint(mobj, lp1, lp2);
 
            PointF cip = GetLineCenter(lpc, ip);
 
            ...
 
            return txt;
 
        }
 
 
 | 	 
  | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		nawakster
 
 
  Зарегистрирован: 17.06.2008 Сообщения: 59
 
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |