RUS  ENG 

Добавление тематических фильтров ThemeFilterDesc

Страницы: 1
RSS
Добавление тематических фильтров ThemeFilterDesc
 
Добрай день.
Используется под NET. (использование только через COM)
Задача следующая:
1. Создание нового слоя.
2. Создание БД для слоя. (поля Sys и Val)
3. Добавление на него объектов.
4. Создание тематической раскраски объектов, привязывая к полю Val.
Шаги 1-4 не вызывают проблем
1. ZuluTools t = new ZuluToolsClass();
Layer l = new LayerClass();
t.LayerCreate(@"d:\test\MyLayer.b00", "Test", eLayerType.eMixedLayer);
l.Open(@"d:\test\MyLayer.b00");
2.
ZbDatabase zb = new ZbDatabaseClass();
zb.CreateTable(@"d:\test\MyLayer.db",
new string[] { "Sys", "Val" },
new zbFieldType[] { zbFieldType.zbftInteger, zbFieldType.zbftInteger },
new int[] { 0, 0 }, 1);
zb.CreateBySingleTable(@"d:\test\MyLayer.db");
zb.UserName = "NameBD";
zb.SaveAs(@"d:\test\MyLayer.zb", 0);
l.BaseName = zb.Name;
3.
....
Добавление объектов на слой и данных в базу
....
t.LayerOptimize(@"d:\test\MyLayer.b00");

далее необходимо добавить фильтры и сделать их активными
Через Theme получилось но цитирую

Parameter property (Theme):
Property Parameter(ElemID As Long, Field As eThemeField)
ElemID - ключ элемента слоя // Мне же необходимо привязатся не по ключу
Field - тип редактируемого поля"

Поэтому необходимо использовать фильтры

ThemeFilterDesc filter = new ThemeFilterDescClass();
filter.UserName = "TestFilter";
int idc = filter.AddCondition("h" + i.ToString(), 1);
filter.AddField(idc, "Val", ???????????); // Нет описания каким должен быть параметр ConditionString
filter.AddParameter(idc, eThemeField.eThemePatColor, 255);
filter.AddParameter(idc, eThemeField.eThemeFillStyle, 2);
l.ThemeFilters.SetFilter(1, filter);

что дальше???
 
Дальше нужно создать тему:
FilterID = l.ThemeFilters.SetFilter(1, filter);
ThemeID = CreateTheme(FilterID, -1, "Тема 111");

ConditionString - задается так же как и в окне запроса, например ">10" или ">10 AND <20"
 
Здравствуйте. У меня вопрос по тематическим раскраскам: почему-то перестал работать код при подключении к серверной карте, не могу определить наименование темы...
Код
//переменные
var
 flt: IThemeFilterDesc;
 name: String;
 fCount:Integer;
begin
.....
fCount  := layer.ThemeFilters.Count;
//fCount  - инициализируется правильно и равно числу 
//подключенных тематических раскрасок в zulu
for j:= 0 to fCount - 1 do
      begin
          flt := layer.ThemeFilters.GetItemByIndex(j);
          name := flt.UserName;
         if name <> '' then //но в переменной name всегда пусто
         begin
         .......
         //любой код внутри не выполнятся
        
         end;
end;
Темы были созданы в локальной карте и программно читаются при подключении к локальной карте.
Те же самые тематические раскраски из самой оболочки zulu v.8.0.0.6938 от 29.12.2018 подключаются как в локальной карте так и в серверной...
 
В ближайшем обновлении исправлено.
 
Спасибо, темы заработали.
Страницы: 1