 |
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 Заголовок сообщения: |
|
|
В чем же здесь находчивость? реализовано копирование "в лоб", без изысков. а код действительно получился большой, ибо элементы не совсем простые. _________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|