  | 
				www.integro.ru ЦСИ ИНТЕГРО   
				 | 
			 
		 
		 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		Iron_Man
 
 
  Зарегистрирован: 02.09.2011 Сообщения: 20
 
  | 
		
			
				 Добавлено: Пн 10 Окт 2011 18:20    Заголовок сообщения: Список карт и слоёв | 
				     | 
			 
			
				
  | 
			 
			
				Мой вопрос заключается в следующем.
 
Подскажите, пожалуйста, как вывести список карт и слоёв в строго заданном порядке? Предполагается, что для каждого пользователя системы при входе будет жёстко задан свой набор карт и слоёв. Каким именно образом этого можно достичь? Вариант решения, который вижу я:
 
После открытия базы данных открываем нужный проект, в котором задаём нужный порядок карт и слоёв. Копать я думаю, нужно в сторону объекта IIngeoProject, а именно использовать его свойство Contents по типу IIngeoProjectContents. Спасибо.
 
P.S. Немного подумав, пришёл к выводу о том, что для каждого пользователя нужно будет создавать свой проект, и включать в него нужные карты из активной базы данных, какой-то конкретной территории. Со слоями я даже и не знаю как быть, подскажите. Есть ли возможность управлять не просто видимостью слоя, но и полностью скрывать его из поля зрения пользователя?
 
P.P.S. На форуме есть тема: "Порядок отображения слоев и карт в проекте", но в ней не раскрыта тема, имхо. Там просто устанавливается видимость слоёв текущего проекта. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Дамир
 
 
  Зарегистрирован: 14.10.2009 Сообщения: 75 Откуда: Туймазы, Архитектура
  | 
		
			
				 Добавлено: Ср 12 Окт 2011 09:21    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Вопрос не из легких.
 
Мы делаем так:
 
- создаем группу
 
- добавляем пользователей в группу
 
- для определенных карт и слоев задаем права доступа, т.е. добавляем группу (можно и пользователей)  | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Ср 12 Окт 2011 14:16    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				в проекте вы можете задать набор возможных для просмотра карт (отдельно слои задать невозможно), причем порядок карт и слоев задается не в проекте, а в IIngeoProjectView. Так как каждый пользователь может самостоятельно менять порядок карт/слоев, по порядок нужно устанавливать через IIngeoProjectView для каждого пользователя _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Iron_Man
 
 
  Зарегистрирован: 02.09.2011 Сообщения: 20
 
  | 
		
			
				 Добавлено: Ср 12 Окт 2011 14:22    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Дамир, Понятно, спасибо за подсказку про пользователей, но стоит немного другая задача. 
 
У меня вопрос в следующем: Для чего у территорий, проектов, карт, слоёв, стилей имеется метод AddWithID? Когда я пытаюсь при помощи этого метода добавить слой, Ингео выдаёт ошибку о том, что такой объект существует - primary key error.
 
Стоит задача копирования карт со всеми слоями и стилями в них.
 
Простым перебором слоёв, стилей и методов отображения видимо не получится забороть эту проблему, потому как многие методы символьные и для каждого из них рисовался отдельный рисунок средствами Ингео.
 
Меж тем как Ингео прекрасно справляется с этой задачей, когда карты копируются с помощью контекстного меню: "Копировать с вложенными объектами". Как эту же фичу можно реализовать программно? | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Ср 12 Окт 2011 15:35    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				метод AddWithID сделан в основном для целей импорта/экспорта.
 
он используется, если вы хотите в другой базе создать слой именно с этим идентификатором, естественно если слоя с таким идентификатором нет в базе.
 
 	  | Цитата: | 	 		  | Простым перебором слоёв, стилей и методов отображения видимо не получится забороть эту проблему, потому как многие методы символьные и для каждого из них рисовался отдельный рисунок средствами Ингео.  | 	  
 
скорее всего это направление верное. копию символьного метода тоже можно создать програмно, так что это не неразрешимая проблема.
 
вот примерный код копирования рисунка символьного элемента:
 
 	  | Код: | 	 		  function CopyPicFigureTo(const destFigures:IInPictureFigures;
 
                         const srcFigure:IInPictureFigure):IInPictureFigure;
 
  var newFig         :IInPictureFigure;
 
      figRect        :IInPictureRectFigure;
 
      figElps        :IInPictureEllipseFigure;
 
      figLine        :IInPictureLineFigure;
 
      figPoly        :IInPicturePolygonFigure;
 
      figText        :IInPictureTextFigure;
 
      figPict        :IInPicturePictureFigure;
 
      //figGrid        :IInPictureGridFigure;
 
      figMap         :IInPictureMapFigure;
 
begin
 
  newFig := destFigures.Add(srcFigure.FigureType);
 
  newFig.Left := srcFigure.Left;
 
  newFig.Bottom := srcFigure.Bottom;
 
  newFig.Width := srcFigure.Width;
 
  newFig.Height := srcFigure.Height;
 
  newFig.Visible := srcFigure.Visible;
 
  case newFig.FigureType of
 
    inftRect:with srcFigure as IInPictureRectFigure do begin
 
      figRect := newFig as IInPictureRectFigure;
 
      AssignPenProp(Pen, figRect.Pen);
 
      AssignBrushProp(Brush, figRect.Brush);
 
      figRect := nil;
 
    end;
 
    inftEllipse:with srcFigure as IInPictureEllipseFigure do begin
 
      figElps := newFig as IInPictureEllipseFigure;
 
      AssignPenProp(Pen, figElps.Pen);
 
      AssignBrushProp(Brush, figElps.Brush);
 
      figElps := nil;
 
    end;
 
    inftLine:with srcFigure as IInPictureLineFigure do begin
 
      figLine := newFig as IInPictureLineFigure;
 
      AssignPenProp(Pen, figLine.Pen);
 
      figLine.X1 := X1;
 
      figLine.Y1 := Y1;
 
      figLine.X2 := X2;
 
      figLine.Y2 := Y2;
 
      figLine.X1 := X1;
 
      figLine := nil;
 
    end;
 
    inftPolygon:with srcFigure as IInPicturePolygonFigure do begin
 
      figPoly := newFig as IInPicturePolygonFigure;
 
      AssignPenProp(Pen, figPoly.Pen);
 
      AssignBrushProp(Brush, figPoly.Brush);
 
      figPoly.Closed := Closed;
 
      figPoly.Points := Points;
 
      figPoly := nil;
 
    end;
 
    InScripting_TLB.inftText:with srcFigure as IInPictureTextFigure do begin
 
      figText := newFig as IInPictureTextFigure;
 
      AssignPenProp(Pen, figText.Pen);
 
      AssignBrushProp(Brush, figText.Brush);
 
      AssignFontProp(Font, figText.Font);
 
      figText.Alignment := Alignment;
 
      figText.Orientation := Orientation;
 
      figText.Indent := Indent;
 
      figText.Text := Text;
 
      figText := nil;
 
    end;
 
    inftPicture:with srcFigure as IInPicturePictureFigure do begin
 
      figPict := newFig as IInPicturePictureFigure;
 
      AssignPenProp(Pen, figPict.Pen);
 
      AssignBrushProp(Brush, figPict.Brush);
 
      figPict.HorAlign := HorAlign;
 
      figPict.VerAlign := VerAlign;
 
      figPict.Stretch := Stretch;
 
      figPict.TransparentBack := TransparentBack;
 
      figPict.Picture := Picture;
 
      figPict := nil;
 
    end;
 
    inftMap:with srcFigure as IInPictureMapFigure do begin
 
      figMap := newFig as IInPictureMapFigure;
 
      AssignPenProp(Pen, figMap.Pen);
 
      AssignBrushProp(Brush, figMap.Brush);
 
      figMap.MapVisible := MapVisible;
 
      figMap.CenterX := CenterX;
 
      figMap.CenterY := CenterY;
 
      figMap.ZoomScale := ZoomScale;
 
      figMap.XAngle := XAngle;
 
      figMap.YMirror := YMirror;
 
      figMap := nil;
 
    end;
 
    inftGrid:;//забъем на этот элемент; кто герой, тот нехай и пишет копирование этого чудесного элемента
 
  end;//case newFig.FigureType of
 
  Result := newFig;
 
  newFig := nil;
 
end;
 
 
procedure CopyLayerStyles(const FromLayer, ToLayer: IIngeoLayer;
 
                          const StyleMappingList:TStrings);
 
  var nStyle, nPaint, nFig :integer;
 
      newStyle       :IIngeoStyle;
 
      newPainter     :IIngeoPainter;
 
      newStdP        :IIngeoStdPainter;
 
      newTxtP        :IIngeoTextPainter;
 
      newSmbP        :IIngeoSymbolPainter;
 
      oldSmbPict     :IIngeoPicture;
 
      needMapping    :boolean;
 
begin
 
  if (FromLayer=nil)or(ToLayer=nil) then
 
    raise Exception.Create('Не найден слой-шаблон и/или конечный слой!');
 
  needMapping := assigned(StyleMappingList);
 
  for nStyle:=0 to FromLayer.Styles.Count-1 do begin
 
    newStyle := ToLayer.Styles.Add;
 
    with FromLayer.Styles.Item[nStyle] do begin
 
      newStyle.Name := Name;
 
      newStyle.Flags := Flags;
 
      newStyle.CreationStart := CreationStart;
 
      newStyle.CreationClosing := CreationClosing;
 
      newStyle.CreationStartOrtho := CreationStartOrtho;
 
      newStyle.CreationClosingOrtho := CreationClosingOrtho;
 
      newStyle.MinPoints := MinPoints;
 
      newStyle.MaxPoints := MaxPoints;
 
    end;
 
    newStyle.Update;
 
    if needMapping then StyleMappingList.Values[string(FromLayer.Styles.Item[nStyle].ID)] := newStyle.ID;
 
    for nPaint:=0 to FromLayer.Styles.Item[nStyle].Painters.Count-1 do
 
    with FromLayer.Styles.Item[nStyle] do begin
 
      newPainter := newStyle.Painters.Add(Painters.Item[nPaint].PainterType);
 
      newPainter.Comment := Painters.Item[nPaint].Comment;
 
      newPainter.VisibleMin := Painters.Item[nPaint].VisibleMin;
 
      newPainter.VisibleMax := Painters.Item[nPaint].VisibleMax;
 
      case newPainter.PainterType of
 
        inptStd:with Painters.Item[nPaint] as IIngeoStdPainter do begin
 
          newStdP := newPainter as IIngeoStdPainter;
 
          AssignPenProp(Pen, newStdP.Pen);
 
          AssignBrushProp(Brush, newStdP.Brush);
 
        end;//inptStd
 
        inptText:with Painters.Item[nPaint] as IIngeoTextPainter do begin
 
          newTxtP := newPainter as IIngeoTextPainter;
 
          AssignFontProp(Font, newTxtP.Font);
 
          newTxtP.Flags := Flags;
 
          newTxtP.BackColor := BackColor;
 
          newTxtP.Text := Text;
 
        end;//inptText
 
        inptSymbol:begin
 
          with Painters.Item[nPaint] as IIngeoSymbolPainter do begin
 
            newSmbP := newPainter as IIngeoSymbolPainter;
 
            newSmbP.PaintMethod := PaintMethod;
 
            newSmbP.PictureZoomScale := PictureZoomScale;
 
            oldSmbPict := Picture;
 
          end;
 
          newSmbP.Picture.X1 := oldSmbPict.X1;
 
          newSmbP.Picture.X2 := oldSmbPict.X2;
 
          newSmbP.Picture.Y1 := oldSmbPict.Y1;
 
          newSmbP.Picture.Y2 := oldSmbPict.Y2;
 
          for nFig:=0 to oldSmbPict.Figures.Count-1 do
 
            CopyPicFigureTo(newSmbP.Picture.Figures, oldSmbPict.Figures.Item[nFig]);
 
          oldSmbPict := nil;
 
        end; //inptSymbol
 
      end;//case newPainter.PainterType of
 
      newStdP := nil;
 
      newTxtP := nil;
 
      newSmbP := nil;
 
      newPainter := nil;
 
    end;//with FromLayer.Styles.Item[nStyle].Painters do begin
 
    newStyle.Update;
 
    newStyle := nil;
 
  end;//for nStyle:=0 to FromLayer.Styles.Count-1 do begin
 
  ToLayer.Update;
 
end;
 
 | 	  
 
 
здесь исходники не всех функций, нужных при копировании, но идею из кода наверное можно понять   _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Iron_Man
 
 
  Зарегистрирован: 02.09.2011 Сообщения: 20
 
  | 
		
			
				 Добавлено: Чт 13 Окт 2011 19:49    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				vvHedgehog,
 
Этот код жестяная жесть.     Но за находчивость ставлю пять.   
 
Спасибо, может быть ещё пригодится. Решил проблему тем, что создаю в Ингео проект, копирую карты врукопашную в Ингео, и подключаю их в нужном порядке во вновь созданные проекты. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		APopov
 
 
  Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
  | 
		
			
				 Добавлено: Пн 17 Окт 2011 12:24    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				В чем же здесь находчивость?    реализовано копирование "в лоб", без изысков. а код действительно получился большой, ибо элементы не совсем простые. _________________ ОАО "Самара-Информспутник",
 
   инженер-программист Попов Артем | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
  | 
   
 
		 |