Как Slic3r определяет расстояние между соседними прядями вместо использования плотности заполнения?

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

Вопрос 1:

Все, что я могу понять, - это исходный код Slic3r в ~/Slic3r/xs/src/libslic3r/Flow.cpp,

Ссылка на Flow.cpp исходный код

/* Этот метод возвращает межосевое расстояние между экструзией, использующей этот
поток, и другой экструзией, использующей другой поток.
   this->spacing(other) возвращает то же значение, что и other.spacing(*this). */

float Flow::spacing(const Flow &other) const {
   assert(this->height == other.height);
   assert(this->bridge == other.bridge);

   if (this->bridge) {
      return this->width/2 + other.width/2 + BRIDGE_EXTRA_SPACING; //Строка A
   }
   return this->spacing()/2 + other.spacing()/2;                   //Строка B
}

Если я прав, будет ли изменение линии A или Линии Bправильным способом изменить расстояние между соседними прядями?

Вопрос 2:

И раз уж мы затронули эту тему, что представляет собой переменная моста?

, 👍2


1 ответ


2

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

Чтобы ответить на вопрос 2, предположим, что bridge - это просто логическое значение (bool), которое указывает, есть ли мост или нет.

От потока.линия ГЭС 32

/// Представляет материальный поток; предоставляет методы прогнозирования расстояния между материалами. 
class Flow
{
    public:
    float width, height, nozzle_diameter;
    bool bridge;

    Flow(float _w, float _h, float _nd, bool _bridge = false)
        : width(_w), height(_h), nozzle_diameter(_nd), bridge(_bridge) {};

Кроме того, строки 68-73также могут представлять интерес:

    private:
    static float _bridge_width(float nozzle_diameter, float bridge_flow_ratio);
    /// Рассчитать относительно нормальную ширину экструзии, исходя из высоты и диаметра сопла.
    /// Используемый алгоритм плохо работает при высоте слоя <0,1 мм. 
    static float _auto_width(FlowRole role, float nozzle_diameter, float height);
    static float _width_from_spacing(float spacing, float nozzle_diameter, float height, bool bridge);

Однако лучше всего, чтобы получить точный ответ на оба ваших вопроса, связаться с Алессандро Ранеллуччи - alexrjи спросить его, поскольку он является разработчиком кода Slic3r. Когда вы получите ответ, возможно, вы захотите опубликовать его здесь... это может быть полезно для кого-то еще.


,