BCad fork

Конструкция ≺code≻profile()≺/code≻ в BCad
Login

Конструкция ≺code≻profile()≺/code≻ в BCad

Конструкция profile() является расширением языка OpenSCAD, введённым в BCad для определения 2D-профилей, которые затем могут быть использованы для создания 3D-геометрии с помощью таких операций, как linear_extrude(), rotate_extrude() и других.

В отличие от OpenSCAD, где 2D-формы определяются через polygon(), square(), circle() и автоматически объединяются, profile() предоставляет специализированный контекст для построения 2D-контуров из последовательности примитивов. В этом контексте примитивы не создают отдельные 2D-фигуры, а формируют единую непрерывную проволочную структуру (wire).

Общие принципы

Примитивы профиля

move(point)

Устанавливает текущую позицию пера (pen up) без рисования отрезка.

Также задаёт начальную точку контура для последующего замыкания через close().

Пример:

profile() {
  move([0, 0]);
  line([10, 0]);   // от (0,0) до (10,0)
  line([10, 10]);  // от (10,0) до (10,10)
}

line(point_start, point_end) / line(point_end)

Рисует прямой отрезок. Может вызываться с одним или двумя аргументами.

Пример:

profile() {
  move([0, 0]);
  line([10, 0]);   // от (0,0) до (10,0)
  line([10, 10]);  // от (10,0) до (10,10)
  line([10, 10], [0, 10]); // явный отрезок
}

arc(center, angle)

Рисует дугу окружности от текущей позиции вокруг заданного центра на заданный угол.

Пример:

profile() {
  move([10, 0]);
  arc(center=[0, 0], angle=90);  // дуга от (10,0) на 90° CCW вокруг (0,0)
  line([0, 10]);                 // продолжение от конечной точки дуги
}

fillet(radius)

Создаёт дугу скругления между предыдущим и следующим рёбрами.

Должен располагаться между двумя примитивами. Если fillet стоит после последнего ребра, он скругляет стык последнего ребра с первым (замыкание).

Пример:

profile() {
  move([0, 0]);
  line([10, 0]); fillet(2);
  line([10, 10]); fillet(2);
  line([0, 10]); fillet(2);
  close(fillet=2);  // замыкает + скругляет последний угол
}

spline(points)

Рисует гладкую интерполяционную B-сплайн кривую, проходящую через заданный массив 2D-точек. Первая точка массива соединяется с текущей позицией current_pos.

Пример:

profile() {
  move([0, 0]);
  spline([[3, 5], [7, 4], [10, 10]]);
  line([15, 10]);
}

close(fillet=Noval)

Замыкает контур: рисует отрезок от current_pos обратно к начальной точке (заданной через move или первым вызовом line).

Пример:

profile() {
  move([0, 0]);
  line([10, 0]);
  line([0, 10]);
  close(fillet=2);  // замыкает со скруглением
}

Полный пример: скруглённый квадрат

profile() {
  move([0, 0]);
  line([10, 0]); fillet(2);
  line([10, 10]); fillet(2);
  line([0, 10]); fillet(2);
  close(fillet=2);
}