Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Работа с двумерными массивами.Содержание книги
Поиск на нашем сайте
Если под модификатором Edit_Poly находятся несколько объектов, то если не указать явно, с какими объектами производить действия в этом случае будет обрабатываться лишь какой-то один объект. Например рассмотрим скрипт, который вычисляет среднее положение выделенных вершин объектов под модификатором Edit_Poly и масштабированием сбрасывает их позиции к этому среднему положению. Немного про алгоритм: Чтобы посчитать среднюю точку всех выделенных вершин, надо сложить все позиции вершин и разделить полученное на количество вершин. Другими словами например, среднее положение между 0 и 10 по оси X будет 5, ответ получается из сложения 0 и 10 и делением на количество позиций (а позиций у нас 2). И вот таким же макаром получается вычисление средей точки по всем осям. Итак начнём: fo = modPanel.getCurrentObject() --Наш объект панели Modify - в переменную fo ( arrV=#() -- Пустой массив для добавления в него выделенных вершин For i=1 to selection.count do /* Для каждого i с единицы до selection.count (числа, равного количеству выделенных объектов) делать*/ append arrV (fo.getSelection #Vertex node: selection[i]) /*в массив arrV добавить fo.getSelection #Vertex (битовый массив вершин) для каждого node: selection[i] (объекта i среди выделенных)*/ /* Результатом выполнения этого цикла будет массив arrV из битовых массивов выделенных вершин всех объектов под модификатором Edit_Poly. */ -- Например #(#{9, 16, 21}, #{9, 16, 21}) if arrV[1].numberset!=0 do -- Если arrV[1].numberset (количество элементов первого бит. массива) не 0, то делать ( sum=[0,0,0] -- сумма всех позиций выделенных вершин (пока равна нулю) countV=0 /* количество выделенных вершин (так как у нас массив из бит. массивов, то просто так arrV.count нам не даст количества вершин, поэтому посчитаем количество вершин через тот же цикл, в котором будем считать сумму позиций вершин)*/ For i=1 to selection.count do /* Для каждого i с единицы до selection.count (числа, равного количеству выделенных объектов) делать*/ for b=1 to arrV.count do /*-- для b=1 (каждого битМассива b начиная с первого) до arrV.count (количества битМассивов массива arrV) делать*/ for v in arrV[b] do --для каждой вершины v в битовом массиве b массива arrV делать ( vPos=fo.getVertex v node: selection[i] /* fo.getVertex (получить позицию) каждой вершины v */ sum+=vPos -- сумма равна сумма+позиция каждой вершины countV+=1 -- счётчик обработанных вершин увеличиваем на 1 ) midPos=sum/countV -- Средняя позиция = сумма позиций / на счётчик вершин fo.SetOperation #Transform -- устанавливаем операцию для модификатора Edit_Poly fo.ScaleSelection [1e-005,1e-005,1e-005] parent:(transMatrix midPos) axis:(transMatrix midPos) /*Операция масштабирования с параметрами, [1e-005,1e-005,1e-005] Point3 взята из макрорегистратора для зануления масштаба Если родитель (parent): указан, то его локальная система координат используется. Если ось (axis): указан, то он используется в качестве пользовательской системы координат. Координаты трансформации как видно используем - вычисленный midPos */ fo.Commit () --совершаем вышеуказанную трансформацию масштабирования max select --переключение в режим выделения ) ) Стоит отметить, что код будет работать если в нём будет просто написано append arrV fo.getSelection #Vertex (без node:()), но будет происходить частичный сбор данных о выделенных вершинах лишь с одного из выделенных объектов под модификатором. Поэтому, если не указывать в цикле ноду (node:()) то будет происходить однобокое масштабирование к какой то одной стороне полученных вершин (можно даже понаблюдать как это будет выглядеть, если удалить код оранжевого цвета). Именно по этому здесь дважды используется конструкция (помечена оранжевым), первый раз для сбора вершин, второй раз для получения позиции каждой вершины. С учётом этого всё работает правильно. _______________________________________________________________
|
||||
Последнее изменение этой страницы: 2021-04-13; просмотров: 100; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.34.211 (0.007 с.) |