• Регистрация
astrgan
astrgan0.00
н/д
  • Написать
  • Подписаться

Как сделать автоматическое позиционирование элементов с помощью функции add_block в цикле?

30.05.2021

Здравствуйте.

В этом видео автор с помощью такого кода:

Создает такую сетку из элиментов:

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

Я нашел описание параметра Position - "vector of coordinates, in pixels: [left top right bottom]".

Но все равно у меня не получается :(

Теги

    30.05.2021

    Ответы

    • Marat
      Marat+54.00
      31.05.2021 13:16

      Ну а ваш-то код почему не приложили?

      • astrgan
        astrgan0.00
        1.06.2021 14:53

        Пока я на этом этапе.

        xSW = 30; % horizontal offset of your sinewave block
        ySW = 30; % vertical offset of your sinewave block
        wSW = 30; % width of your sinewave block
        hSW = 30; % height of your sinewave block
        
        for i = 1:cols*rows
            
            
            pos= [xSW ySW xSW+wSW ySW+hSW];
            add_block('.../Capacitor',['.../BCaps/capacitor' num2str(i)], 'Position',pos);
            y = y+1;
            ySW = ySW+y+20;
            if y >= rows
               y = 0;
               x = x+1;
               xSW = xSW+x+20;
               disp(['Столбец', num2str(x), 'из', num2str(cols), 'построен.']);
            end
            if x >= cols
                x = 0;
            end
        end
        

         

        • Marat
          Marat+54.00
          1.06.2021 15:28
          xSW = 30; % horizontal offset of your sinewave block
          ySW = 30; % vertical offset of your sinewave block
          wSW = 30; % width of your sinewave block
          hSW = 30; % height of your sinewave block
          
          cols = 2;
          rows = 3;
          
          new_system('myslx');
          open_system('myslx');
          
          %%
          
          y = 0;
          x = 0;
          
          for i = 1:cols*rows
              
              
              pos= [xSW ySW xSW+wSW ySW+hSW];
              add_block('simulink/Sinks/Scope',['myslx/Scope' num2str(i)],'Position',pos);
              y = y+1;
              ySW = ySW+y+20;
              if y >= rows
                 y = 0;
                 x = x+1;
                 xSW = xSW+x+20;
                 disp(['Столбец', num2str(x), 'из', num2str(cols), 'построен.']);
              end
              if x >= cols
                  x = 0;
              end
          end

          Базовые ошибки программирования подчистить, и всё вроде работает правильно.