GroupRenderer

0 голосов
спросил 10 Апр, 06 от Alpachin (640 баллов) в категории Программные продукты Esri

Привет всем.

Использую Delphi 5 whith MO 2.2.

Необходимо сделать следущее, закрасить полигональную тему слой  с использованием цветовой заливки (ClassBreksRenderer) с одновременным подписываением данных по тому же слою (TextSymbol). В хелпе и на диаграмме сказано что достигается это использованием объекта GroupRenderer.

Пока получилось только вывести надписи, при этом сами полигоны не появляются вообще...image

вот пример кода

 lp := coLabelPlacer.create;
  lp.Field := cboNOL.text;

  scaleHeightUnit := lyr.Extent.Width / 10000;

  symfnt:=lp.DefaultSymbol.Font;
  symfnt:=FontToOleFont(cdlFont.Font);

  with lp.DefaultSymbol do
  begin
    Height := scaleHeightUnit * (1001 - hsbNOL.Position);
    color := colorText;
    Font := IFontDisp(symfnt);
  end;

  lp.PlaceAbove := optNOL1.Checked;
  lp.PlaceBelow := optNOL2.Checked;
  lp.PlaceOn := optNOL0.Checked;
  lp.DrawBackground:=chkNOL0.Checked;
  lp.AllowDuplicates:=chkSL1.Checked;
  lp.MaskLabels:=chkNOL2.Checked;
  if (lp.MaskLabels) then
   lp.MaskColor:=picNOL.Color;
  grRend.Add(lp);
  grRend.DrawBackground := true;

Делал ли кто нить так, есть примерчик, желательно на дельфи.

1 Ответ

0 голосов
ответил 16 Май, 06 от dios (5,300 баллов)
// Создание объекта для отображения надписей
labelRenderer := CoLabelPlacer.Create;
with IMoLabelPlacer(labelRenderer) do
begin
    Field := 'Note';
    with DefaultSymbol do
    begin
      ft := TFont.Create;
      try
        ft.Name := 'Arial';
        ft.Size := 10;
        ft.Style := [fsBold];
        Font := IFontDisp(IDispatch(FontToOleFont(ft)));
      finally
        ft.Free;
      end;
    end;
    PlaceBelow := True;
    UseDefault := True;
end;

// Создание объекта для отображения точек в зависимости от типа
rValue := CoValueMapRenderer.Create;
with rValue do
begin
    SymbolType := moPointSymbol; // тип Symbol
    Field := 'nType';            // название поля для значений типа
    ValueCount := 6;             // кол-во значений

    Value[0] := 'ntyPoint';      // строка для идентификации 0 типа
    with Symbol[0] do begin Color := moBlue; Style := moCircleMarker; end; // Symbol для 0 типа
    Value[1] := 'ntySkvag';      // строка для идентификации 1 типа
    with Symbol[1] do begin Color := moCyan; Style := moCircleMarker; end; // Symbol для 1 типа
    Value[2] := 'ntyKust';
    with Symbol[2] do begin Color := moBrown; Style := moCircleMarker; end;
    Value[3] := 'ntyGZU';
    with Symbol[3] do begin Color := moBlack; Style := moCircleMarker; end;
    Value[4] := 'ntyBG';
    with Symbol[4] do begin Color := moGreen; Style := moCircleMarker; end;
    Value[5] := 'ntyPlosh';
    with Symbol[5] do begin Color := moPurple; Style := moCircleMarker; end;
end;

   // Создание группового объекта, который отвечает за отображение
Result := CoGroupRenderer.Create;
Result.Add(rValue); // добавление объекта, который отображет цвет, в зависимости от типа
if NoteVisible then
    Result.Add(labelRenderer); // добавление объекта, который отображет подписи
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...