среда, 11 апреля 2012 г.

Изучение Blender API Часть 3

Подумав по поводу дальнейших действий, пришел к выводу, что модель, мне потребуется делить на части. Я это сделаю, создав функцию Slider:
Входные параметры:
  • Высота среза (координата по оси Z)
Выходные параметры:
  • Матрица координат, по которым поочередно пройдется фреза
Как получим достигнутое:
  1. Создаем списки:
    1. Вершин, которые расположены выше, плоскости среза.
    2. Ребер, которые пересекают, плоскость среза, либо, чтобы нижняя точка лежала на плоскости среза.
    3. Граней, которые пересекают, плоскость среза (они помогут составить список граней, которые в дальнейшем будут разбиты в нужном месте для получения координаты для станка)
    4. Составляем список ребер (listofFaces), имеющий следующий формат:
      [[2, 4], [4, 6], [6, 7], [2, 7]] где каждая пара внутренних квадратных скобок отвечают за грань, а цифры внутри, ребра входящие в состав.
    5. Данный двумерный список необходимо рассортировать, так, чтобы он себя представлял следующий вид:
      [[2, 4], [4, 6], [6, 7], [7, 2]]
  2. Составляем список ребер для разбиения, имеющий следующий формат
    [1 2 3 4 1 5 6 7 8 5]
    Цифра, которая повторяется означает конец контура. Фреза выводится за пределы заготовки и в холостом ходе переходит к обработке следующего контура.
  3. После получения списка, считываем число повторений и заносим в счетчик контуров.
  4. Создаем список, содержащий по отдельному списку, для каждого контура, имеющий следующий формат: [[1 2 3 4 1] [5 6 7 8 5]]
  5. Создается список координат [X, Y], в результате прохода через все ребра контура, следующего формата:
    [[[X1 Y1] [X2 Y2] [X3 Y3] [X4 Y4] [X1 Y1]] [[X5 Y5] [X6 Y6] [X7 Y7] [X8 Y8] [X5 Y5]]]
  6. Благодаря дальнейшему анализу координат, определяем зоны внутри, и зоны снаружи.
  7. (Данный пункт добавлен) Необходимо провести анализ, внешний это контур или нет.
  8. Создаем внешние контуры (по ним будет двигаться фреза, и данные контуры будут построены на расстоянии равном половине диаметра фрезы).
  9. Производим анализ, внешних контуров, если они пересекаются, выдать предупреждение, на усмотрение пользователя. (Данное предупреждение означает, что фреза не может пройти по заданной траектории без порчи, первоначальной затеи фрезеровщика)
Алгоритм был изменен и первичный алгоритм, канул в лета, так как начал, писать код в голову пришел другой алгоритм, который я считаю более оптимальным.
На данный момент, почти выполнил первый пункт, просто поленился его доделать.
***
В результате очередного тестирования скрипта выявились, проблемы, функция slider исправно сортирует список (пункт 1.4), но неисправно составляет, список listofFaces при условии, что в сцене несколько объектов.
Однако, если на сцене один объект (производим операцию boolean union). Даже для объектов находящихся в разных местах. Скрипт правильно выполнит поставленную перед ним задачу.
Такое объединение объектов в один считается изначально заданным. Так как у разных объектов может совпадать нумерация вершин, граней и фасок.
***
На данный момент 13.04.2012 пункт 1 полностью выполнен.
***
15.04.2012 Добрая половина уже сделана, но в дальнейшем, самым сложным является анализ зон. К сожалению, пока скрипт не оптимизирован. Но в дальнейшем после, того, как доведу работу до конца, планирую, оптимизировать выполнение скрипта. На данный момент, он содержит, слишком большое количество циклов.
***
18.04.2012 К сожалению, учеба отнимает сильно много времени, и у нас еще как назло конференции. Но от них есть и плюсы. Так из всех докладчиков меня интересовал лишь один доклад, то вовремя остальных докладов, я писал свой алгоритм и теперь осталось только создание внешнего контура. И анализ, на наличие пересечений. Два пункта, но самые сложные на мой взгляд в плане программной реализации.
***
В тот же день заметил, еще одну неурядицу, лучше нарисую ее.
Черной линией я нарисовал внешние контуры, красной линией внутренний.
То есть может быть потребуется начертить именно внутренний контур, а не внешний! Следовательно, перед пунктом 7 необходим, дополнительный пункт 7'. Который бы определял, внешний это контур или внутренний.
***
30.04.2012 Долго мучился с созданием внешнего/внутреннего контуров
В итоге выяснил, что на предыдущих этапах происходит плохая обработка данных, потому что на вход для испытаний мне попали данные с повторными элементами, что не соответствует заданному формату. Поэтому поставлю дополнительный фильтр, для чистки от повторных элементов.
Теперь осталось только научить, свой постпроцессор анализировать. Под анализом в данном случае, я имею ввиду умение определять по какому контуру должна идти фреза, дабы не нарушить замысел моделиста. И умение определять подойдет ли диаметр фрезы или нет. Фреза может оказаться сильно большой, и не сможет отработать заданную траекторию.
Основные задачи на ближайшее будущее:
  1. Написать фильтр значений, дабы формат входных параметров соответствовал требуемому формату.
  2. Написать анализатор вложенности контуров.
  3. Написать анализатор наличия пересечений.

    Комментариев нет:

    Отправить комментарий