Работа со слоями
Posted: 26 Nov 2012, 22:16
Пытаюсь получить имена всех слоёв таким образом:
procedure TForm1.EnumLayersCheck;
var
I: Integer;
vLayer: TsgDXFLayer;
begin
Img := TsgDXFImage(DNavigator.Picture.Graphic);
DNavigator.Picture.Graphic := Img;
DNavigator.Align := alClient;
Img.Converter.Params := @FCADParams;
//кол-во слоёв
CountLayer:=Img.Converter.Sections[csLayers].Count;
ShowMessage(IntToStr(CountLayer));
//
begin
for I := 0 to Img.Converter.Sections[csLayers].Count - 1 do
begin
vLayer := TsgDXFLayer(Img.Converter.Sections[csLayers].Entities);
ShowMessage('Имя слоя- '+vLayer.EntName);
end;
end;
//
end;
//
Перечисляет их (слои) корректно (но если вызвать процедуру ещё раз после отрисовки объекта, то покажет наличие одного слоя) Далее например рисую объект Circle, затем хочу отключить слой:
procedure TForm1.Button1Click(Sender: TObject);
Var
I,NumLay:Integer;
vLayer: TsgDXFLayer;
begin
//
Img := TsgDXFImage(DNavigator.Picture.Graphic);
DNavigator.Picture.Graphic := Img;
DNavigator.Align := alClient;
Img.Converter.Params := @FCADParams;
//кол-во слоёв
I:=Img.Converter.Sections[csLayers].Count;
ShowMessage(IntToStr(I));//
//
for I := 0 to Img.Converter.Sections[csLayers].Count - 1 do
begin
vLayer := TsgDXFLayer(Img.Converter.Sections[csLayers].Entities);
end;
Img.Converter.Layers[2].Visible:=False;
end;
//
Количество слоёв показывает 1, хотя их больше и выдаёт ошибку:
"List index out of bounds (1)",
Как правильно получить доступ к слоям, перечислить их, и включить отключить нужный слой?
С Уважением Иван.
procedure TForm1.EnumLayersCheck;
var
I: Integer;
vLayer: TsgDXFLayer;
begin
Img := TsgDXFImage(DNavigator.Picture.Graphic);
DNavigator.Picture.Graphic := Img;
DNavigator.Align := alClient;
Img.Converter.Params := @FCADParams;
//кол-во слоёв
CountLayer:=Img.Converter.Sections[csLayers].Count;
ShowMessage(IntToStr(CountLayer));
//
begin
for I := 0 to Img.Converter.Sections[csLayers].Count - 1 do
begin
vLayer := TsgDXFLayer(Img.Converter.Sections[csLayers].Entities);
ShowMessage('Имя слоя- '+vLayer.EntName);
end;
end;
//
end;
//
Перечисляет их (слои) корректно (но если вызвать процедуру ещё раз после отрисовки объекта, то покажет наличие одного слоя) Далее например рисую объект Circle, затем хочу отключить слой:
procedure TForm1.Button1Click(Sender: TObject);
Var
I,NumLay:Integer;
vLayer: TsgDXFLayer;
begin
//
Img := TsgDXFImage(DNavigator.Picture.Graphic);
DNavigator.Picture.Graphic := Img;
DNavigator.Align := alClient;
Img.Converter.Params := @FCADParams;
//кол-во слоёв
I:=Img.Converter.Sections[csLayers].Count;
ShowMessage(IntToStr(I));//
//
for I := 0 to Img.Converter.Sections[csLayers].Count - 1 do
begin
vLayer := TsgDXFLayer(Img.Converter.Sections[csLayers].Entities);
end;
Img.Converter.Layers[2].Visible:=False;
end;
//
Количество слоёв показывает 1, хотя их больше и выдаёт ошибку:
"List index out of bounds (1)",
Как правильно получить доступ к слоям, перечислить их, и включить отключить нужный слой?
С Уважением Иван.