Перейти к публикации

Создать массив(array) НОМЕРОВ элементов в компоненте.


Алексеев Денис

Рекомендованные сообщения

Алексеев Денис
Здравствуйте. Возможно, вопрос решается элементарно, но облазил гугл и ничего подобного не нашел. Я создал компоненте (CM) состоящий из элементов. Далее я его выбрал (CMSEL). Теперь мне надо в цикле перебрать все выделенные элементы и что-то с каждым сделать (сравнить напряжения с каким-то конкретным значением, например). Не пойму, как всунуть в массив ТОЛЬКО номеры выделенных элементов. Вот маленький отрывок моего кода:

 

CMSEL,S,bv1_comp          ! выделим компонент

*get,el_count,ELEM,,count        ! число выделенных элементов

*DIM,elem_numbers,ARRAY,el_count,1 ! создаю пустой массив длиной el_count    

*VGET,elem_numbers,ELEM,.... ! КАК-ТО ТАК ХОЧУ ЗАПОЛНИТЬ МАССИВ НОМЕРАМИ ВЫДЕЛЕННЫХ ЭЛЕМЕНТОВ

 

Помогите, пожалуйста.

Ссылка на сообщение
Поделиться на других сайтах


перебрать все выделенные элементы и что-то с каждым сделать

Как вариант:

выбрали элементы (esel,s)

открыли цикл (*do)

получили минимальный номер активного элемента (*get)

сделали, что нужно, с ним

выкинули элемент из текущего выбора (esel,u)

закрыли цикл (*enddo)

 

 

 

сравнить напряжения с каким-то конкретным значением, например

Если конкретное значение - константа, то могут помочь команды SADD или SALLOW.

Ссылка на сообщение
Поделиться на других сайтах
Алексеев Денис

 

перебрать все выделенные элементы и что-то с каждым сделать

Как вариант:

выбрали элементы (esel,s)

открыли цикл (*do)

получили минимальный номер активного элемента (*get)

сделали, что нужно, с ним

выкинули элемент из текущего выбора (esel,u)

закрыли цикл (*enddo)

 

 

 

сравнить напряжения с каким-то конкретным значением, например

Если конкретное значение - константа, то могут помочь команды SADD или SALLOW.

 

"получили минимальный номер активного элемента (*get)" - а можно конкретнее? Что-то вроде этого мне и нужно. Мне нужно работать с конкретной группой элементов, принадлежащих конкретной группе (компоненту). Поясню подробнее.

 

Что я делаю сейчас: 

выделяю все элементы в модели(esel)

открываю цикл (*DO) от 1 до "all_elements_count"

зная, что у меня всего N элементов выбираю определенный элемент просто по номеру итерации.

сравниваю координаты центра масс элемента с нужными, и если элемент принадлежит какой-то области -  

работаю с ним(не важно, как, сравнить напряжения с каким-то конкретным значением - ПРИМЕР ).

 

Что я хочу делать:

выделяю все элементы в КОМПОНЕНТЕ, т.е сам компонент(cmsel)

открываю цикл (*DO) от 1 до "elements_in_component_count"

у меня в этой области есть много элементов с разными номерами, не по порядку идущими. Поэтому я беру в цикле не по номеру итерации элементы а по номеру взятому из заранее приготовленного СПИСКА НОМЕРОВ ВЫДЕЛЕННЫХ ЭЛЕМЕНТОВ.

работаю с ним, и никаких сравнений координат уже не надо.

Ссылка на сообщение
Поделиться на других сайтах
 получили минимальный номер активного элемента (*get)" - а можно конкретнее? Что-то вроде этого мне и нужно.

Вы же смогли найти команду

 

*get,el_count,ELEM,,count        ! число выделенных элементов

там рядом описано как вытащить минимальный номер элемента

*get,el_min_num,ELEM,,num,min
Ссылка на сообщение
Поделиться на других сайтах
Алексеев Денис

Ага. Теперь понял Вас. А раньше не понял. Да, должно сработать, и никакой список не нужен будет :happy:. Спасибо большое за помощь, попробую, если что, еще напишу сюда...

Ссылка на сообщение
Поделиться на других сайтах

Код, лишенный всех недостатков и проверенный героями многих легенд на протяжении многих тысячелетий.

ne=0
cmsel,s,...

*dowhile,i
   *get,ne,elem,ne,nxth
   *if,ne,eq,0,then
      *exit
   *endif

   .... ! Делаем что нужно
 
*enddo
allsel,all
Ссылка на сообщение
Поделиться на других сайтах

С точки зрения структурного программирования выход из середины цикла уже серьезный недостаток :)

http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Ссылка на сообщение
Поделиться на других сайтах
С точки зрения структурного программирования выход из середины цикла уже серьезный недостаток :)

Можно номер элемента в счетчик цикла читать. Тогда цикл сам вывалится, когда элементы закончатся.

Ссылка на сообщение
Поделиться на других сайтах

Надежнее ввести переменную флажок и ей присваивать значения в зависимости от ситуации. И выходить из цикла в зависимости от этого флажка. С его помощью и ветвления осуществлять. В виндовом программировании такие флажки называются событиями. Их и обрабатывают по существу. Способ борьбы со сложностью, которая по системному анализу растет по квадратичному закону от управляемой системы. Примерно как сопротивление движению байдарки в воде. Хочешь идти вдвое быстрее, маши веслами в четыре раза шустрее :)

Ссылка на сообщение
Поделиться на других сайтах
Надежнее ввести переменную флажок и ей присваивать значения в зависимости от ситуации. И выходить из цикла в зависимости от этого флажка.

А счетчик цикла не такой флажок?

Ссылка на сообщение
Поделиться на других сайтах

 

Надежнее ввести переменную флажок и ей присваивать значения в зависимости от ситуации. И выходить из цикла в зависимости от этого флажка.

А счетчик цикла не такой флажок?

 

Такой. Просто эта идея распространяется на гораздо большее число возможных ситуаций и не связана с натуральным рядом.

 

http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

 

В Qt они называются сигналами http://ru.wikipedia.org/wiki/Qt

Ссылка на сообщение
Поделиться на других сайтах
Просто эта идея распространяется на гораздо большее число возможных ситуаций и не связана с натуральным рядом.

В предложенном выше куске кода счетчик не натуральный. dowhile проверяет равенство счетчика нулю, а уж изменяется он как будет угодно.

Ссылка на сообщение
Поделиться на других сайтах

Дa i вообще не нужна, надо бритвой Оккама побрить. Вообще не понятно какая она. While обычно проверяется в начале цикла, в него  можно и не попасть вообще.

Если приглядеться по программистски , то похоже, что код вообще из одних недостатков  :)

Ссылка на сообщение
Поделиться на других сайтах
Дa i вообще не нужна, надо бритвой Оккама побрить. Вообще не понятно какая она. While обычно проверяется в начале цикла, в него  можно и не попасть вообще. Если приглядеться по программистски , то похоже, что код вообще из одних недостатков  :)

Если i заменить на ne, то счетчик циклов окажется таки используемым(хотя не совсем правильно его счетчиком называть. переменная для проверки условия). Также надо будет убрать обнуление ne перед циклом, а задать, наоборот, любое ненулевое значение(хоть тот же минимальный номер элемента). Тогда можно будет убрать условие проверки равенства нулю ne, поскольку это сам по себе делает цикл. И в цикл хотя бы один раз зайдем наверняка.

Но алгоритма это все равно не изменит. Так... вылизывание и причесывание.

Ссылка на сообщение
Поделиться на других сайтах

!Стопроцентно работает

 

*get,EN,elem,,count                 !получили количество элементов
*get,EMIN,elem,,num,min         !получили минимальный номер элемента

*dim,massiv_elementov,array,en

*do,i,1,EN
  *if,i,ne,1,then
    ii=elnext(ii)
  *else
    ii=EMIN
  *endif
 
massiv_elementov(i)=ii

 

*enddo

Изменено пользователем Petr_ansys
Ссылка на сообщение
Поделиться на других сайтах

*do,i,1,EN   !!! здесь текстом прокомментируйте что делается
        *if,i,ne,1,then  $     ii=elnext(ii)   $     *else   $      ii=EMIN
  *endif

 

И не рекомендуется давать идентификаторам имена типа kk   иначе когда-нибудь вляпаетесь в трудно уловимую ошибку.

А так неплохо, легко воспринимается смысл. Через год посмотрите и не будете мучиться :)

Ссылка на сообщение
Поделиться на других сайтах
Алексеев Денис

Все работает, как часы, спасибо большое всем за активную помощь :smile: Думаю, к этой теме я больше не вернусь.

Ссылка на сообщение
Поделиться на других сайтах
  *if,i,ne,1,then

Все-таки каждый раз выполнять проверку не очень эффективно. В случае больших объемов обрабатываемой информации даже здесь имеет смысл сэкономить время и вынести первый проход за пределы цикла, а дальше работать без проверки.

Ссылка на сообщение
Поделиться на других сайтах

Логично. Начальную инициализацию всегда надо делать вне цикла. Оптимизирующие компиляторы в принципе часто сами это делают, но грамотнее все-таки позаботиться самому об этом :)

 

ii=EMIN  $  *do,i,1,EN $  ii=elnext(ii)  $  *endif  !! комментарий ...

 

 Что то в таком духе и в одну строчку. И все запутал :) Ну надеюсь поняли, что главное в коде читаемость иначе будут ругать. Программисты это называют в чужом дерьме ковыряться. Проще выкинуть и по новой написать обычно если ясно что надо делать :)

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

А вообще-то можно сделать еще проще

 

*get,NN,node,,count        !определение количества узлов

*vget,nn_array,node,,nlist        !заполнение массива номеров узлов (автоматом в порядке возрастания)

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • Bot
      Оригинал: Roopinder Tara. Watch this space: Here come manufacturable generative designs Такие кронштейны демонстрируют облегчение конструкции с помощью топологии. У этого кронштейна острые края и гладкие поверхности, это означает, что деталь еще можно подвергнуть машинной обработке, чтобы сделать ее максимально легкой Мы уже знакомы с Майклом Богомольным — мы встречались с ним на его предыдущем предприятии ParaMatters, которое было продано Carbon, компании по производству 3D-принтеров, в августе 2022 года. После этого он собрал свою команду ParaMatters (шестеро из них имеют докторскую степень) и получил инвестиции в размере 2,5 млн долларов для запуска InfinitForm. Эта компания вполне может создать первое генеративное программное обеспечение, которое проектирует подходящие для использования и производства детали. Крупные поставщики САПР могут заявить, что их программное обеспечение для генеративного проектирования имеет возможности для создания [...] View the full article
    • lux59
      построить дугами барашку я пробовал, не то слегка, он в списке выдаст количество сегментов, да норм сделаю покажу, что вышло, правда пришлось делать сборкой не единой деталью, в общем я понял как это работает, Спасибо за помощь!
    • lem_on
      Ага, особенно некоторых бестолочей со своим пониманием реальности.  По типу, я скачал программу, я так вижу, я пишу книгу. 
    • malvi.dp
      Так в чем проблема создать кривую и протянуть профиль? Единственная трудность это кривую сделать из дуг и отрезков, а не сплайном. Если же не использовать инструментарий сварных конструкций, то можно и сплайн использовать в качестве направляющей.  
    • Alexey0336
      Добрый день. Как то фигурировал тут вопрос с точкой в названии файла. У меня проблема, не могу захватить модель, пишет, что с этим символом нельзя. Обойти никак нельзя получается?
    • malvi.dp
      У вас там скорее всего скрыты размеры. Перетяните их дальше от штриховки, чтоб не пересекали.
    • Snake 60
      @Бестолковый С названием топика не ошиблись? Человек спрашивает: ' VBA ' 1. Open a document in SOLIDWORKS. ' 2. Run the macro below to set inch units with '     a fractional base of 16 and no rounding. Dim swApp As SldWorks.SldWorks Dim Part As SldWorks.ModelDoc2 Option Explicit Sub main()    Set swApp = Application.SldWorks    Set Part = swApp.ActiveDoc    Part.SetUnits swINCHES, swFRACTION, 16, 0, False End Sub   Код взят отсюда: https://help.solidworks.com/2019/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~setunits.html Вот еще описание всех методов: https://help.solidworks.com/2021/English/api/swconst/DP_Units.htm Ну и на вкусное, статья от Артема (см. через ВПН) https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.codestack.net/solidworks-api/options/document/set-units/&ved=2ahUKEwjgpL-apN6GAxU7HxAIHYO0D2IQFnoECBAQAQ&usg=AOvVaw15xq49gocoVQ5BzEA31qGf
    • Shvg
      IModelDocExtension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitSystem, swUserPreferenceOption_e.swDetailingNoOptionSpecified, swUnitSystem_e.<Value>), где swUnitSystem_e.<Value> перечисление swUnitSystem_CGS           1 = Centimeter, gram, second  swUnitSystem_Custom        4 = Lets you set length units, density units, and force  swUnitSystem_IPS           3 = Inch, pound, second  swUnitSystem_MKS           2 = Meter, kilogram, second  swUnitSystem_MMGS          5 = Millimeter, gram, second   
    • Ветерок
      Вопрос про "включение RGK". Если в модели какие-то функции сделаны с использованием RGK, эта модель будет работоспособной на другом компе, где RGK "не включен"? И вообще не понятно, получается система использует два разных ядра одновременно? Или включая RGK, автоматически выключается Прасолид? А обратно переключиться можно? Если можно итак, и так, и туда, и обратно, тогда не понятно зачем вообще это включение-выключение.
    • TVM
      Так на скорую руку строились. Ясно что такое воспроизвести в живую затруднительно. 
×
×
  • Создать...