Как понимать «детей» в SciLab? - PullRequest
0 голосов
/ 24 апреля 2018
clc
 x = [1:1:10];
 y1 = x;
 y2 = 2*x;
 y3 = 3*x;
 plot2d(x,y1);
 plot2d(x,y2);
 plot2d(x,y3)


gca().children(1).children(1).thickness = 2
gca().children(2).children(1).thickness = 7
gca().children(3).children(1).thickness = 4

Я новичок от Matlab до Scilab

Может кто-нибудь сказать мне, как понимать детей?

Что значит

gca().children?

gca().children.children?

gca().children.children(1)?

gca().children(1).children?

Как мы можем узнать, какой атрибут принадлежит детям?

e.g gca().children(1).children(1).color = ... // not exist

Я сейчас очень растерялся .. Заранее спасибо

1 Ответ

0 голосов
/ 25 апреля 2018

Давайте схематизируем вложенный графический объект по его дочерним свойствам.

У нас есть

figure (f)
- axes (a)
  - compound1 (c1)
    - polyline (p1)
  - compound2 (c2)
    - polyline (p2)
  - compound3 (c3)
    - polyline (p3)

Поскольку gca является функцией, давайте сделаем a = gca(), потому что gca().children вызовет ошибку, потому что scilab не понимает, что вы пытаетесь получить доступ к полям его возвращаемого значения.

  1. gca() возвращает маркеры по осям текущего рисунка: a.
  2. a.children возвращает массив дескрипторов всех дочерних элементов этих осей. : c1, c2, c3
  3. a.children.children возвращает массив дескрипторов всех дочерних элементов вышеуказанных объектов: p1, p2, p3
  4. a.children.children(1) возвращает первых детей c1, c2, c3: p1
  5. a.children(1).children возвращает все дочерние элементы первых дочерних элементов текущих осей (c1). Так как там только один: p1

Чтобы получить доступ к стоимости ваших сущностей

Либо перейдите к временной переменной:

a = gca();
idcolor=a.children(1).children(1).foreground // gives the color of a.c1.p1

или используйте get

// idcolor is an array , with idcolor(i) the color of pi
idcolor = get(get(get(gca(),'children'),'children'),'foreground') 

FYI

Команда

gce() возвращает дескриптор последнего созданного объекта. С plot2d это соединение, поэтому нам нужно получить его детей.

вы можете переписать вашу программу как

clc
x = [1:1:10];
y1 = x;
y2 = 2*x;
y3 = 3*x;
plot2d(x,y1);
e1 = get(gce(),'children');
plot2d(x,y2);    
e2 = get(gce(),'children');
plot2d(x,y3)
e3 = get(gce(),'children');
e1.thickness = 2
e2.thickness = 7
e3.thickness = 4
...