Как написать свою cad программу

Ребят, я конструктор, технолог, электронщик и в том числе и программист, который реально шарит в 3D графики и DirectX 11.

Вот сам, работая раньше в основном в SolidWorks частенько задумывался над тем, что данный кад становится всё хуже и хуже, много чего не хватает и присутствует куча багов, исправление которых ждёшь от версии к версии, от сервис пака к сервис паку, а их кол-во только увеличивается :smile:

Появилась у меня тут создать так сказать глобальный онлайн эксперимент по созданию собственного 3D CAD, который не надо будет подгонять под ЕСКД и ругать матом, что там что — то не так работает или чего — то не хватает.

Что я предлагаю: скорее всего в ближайший месяц, там посмотрю как по времени будет, я начну написание кода новейшего 3D CADa :smile: , а вы все будете по мере возможности участвовать в его создание в плане оставления тут комментариев с пожеланиями и предложениями по всем аспектам создания — какие нужны функции, какие нет, что добавить, что убрать, периодический проверяя работоспособность очередной бета версии …

Конечно же я не маньяк, чтоб чисто ради интереса заниматься огромной работой и в последующем я планирую его продавать, причём буду устанавливать цену, доступную простому Российскому конструктору, тоесть в 10…30 раз дешевле того же SolidWorks. Все же участники данного эксперимента получат свои копии данного продукта абсолютно бесплатно и в большом кол-ве.

Хотел спросить, будет ли интерес у Вас, конструкторов, к подобному эксперименту? Нужен ли Вам CAD, который реально бы создавался по всем Вашим потребностям ? :rolleyes:

P.S.: Да кстате, потом можно и CAE-шников подключить и тд и тп. Да и ваще набрать хорошую команду и дать жару всем десаулт системсам? (или они меня застрелят из — за конкуренции ? :gun_guns::biggrin: )


Изменено 23 июля 2012 пользователем ORION

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
class polyline;
class less_for_polyline:
    public std::binary_function<polyline *, polyline *, bool>
{
public:
    bool operator () (polyline * const x, polyline * const y) const;
};
 
enum type_ids
{
    unknown_type_id = 0,
    polyline_type_id,
    rect_type_id,
    triangle_type_id,
    trapezium_type_id,
    line_type_id,
    point_type_id,
    circle_type_id,
    ellipse_type_id,
    arc_type_id,
    txt_type_id
};
 
#define DEFINE_TYPE_ID_PROC(type)
virtual unsigned type_id(void) {return type##_type_id;}
 
#define DEFINE_CLONE_PROC(type)
virtual polyline *clone(void)
{
    type *res = new type(*this);
    res->name = ++names_count;
    res->compile();
    return res;
}
 
#define DEFINE_BLANK_PROC(type)
virtual polyline *blank(void)
{
    type *res = new type;
    return res;
}
 
class polyline
{
public:
    polyline(void):
        name(++names_count),
        closed(false),
        r(0),
        g(0),
        b(0),
        ccw(true),
        area(0),
        length(0),
        left(0),
        right(0),
        bottom(0),
        top(0),
        width(0),
        height(0)
    {}
    polyline(const GLuint name):
        name(name),
        closed(false),
        r(0),
        g(0),
        b(0),
        ccw(true),
        area(0),
        length(0),
        left(0),
        right(0),
        bottom(0),
        top(0),
        width(0),
        height(0)
    {}
    virtual ~polyline(void)
    {}
 
    static int names_count;
 
    DEFINE_TYPE_ID_PROC(polyline)
 
    int name;
    bool closed;
 
    float r;
    float g;
    float b;
 
    bool ccw;
    float area;
    float length;
    float left;
    float right;
    float bottom;
    float top;
    float width;
    float height;
 
    std::vector<vector> vs; //вершины
    std::vector<vector> hs; //ручки
 
    virtual void compile(void);
 
    virtual void render(void);
    virtual void render_hs(void);
    virtual void render_invisible_parts(void) {}
 
    DEFINE_BLANK_PROC(polyline)
    DEFINE_CLONE_PROC(polyline)
 
    virtual void get_base_point(float * const x, float * const y);
    virtual void get_rect(void);
 
    virtual bool get_h_by_idx(const int idx, float * const x, float * const y);
    virtual bool get_h_by_coords(int * const idx, float * const x, float * const y, const float &size);
    virtual void set_h(const int idx, float * const x, float * const y);
    virtual void remove_h(const int idx); //при удалении нескольких ручек обязательно упорядочиваем idx ручек по убыванию
 
    virtual bool add_node(void);
    virtual void set_last_node(float * const x, float * const y);
    virtual void remove_last_node(void);
    virtual bool incomplete(void);
    virtual std::string last_node_hint(void);
 
    virtual void translate(const float &dx, const float &dy);
    virtual void rotate(const float &x, const float &y, const float &a);
    virtual void scale(const float &x, const float &y, const float &s);
    virtual void mirror(const float &x1, const float &y1, const float &x2, const float &y2);
    virtual void split(std::set<polyline *, less_for_polyline> * const objs); //части помещаются в список
    virtual bool can_merge(void) {return !closed && vs.size() > 1;}
 
    virtual bool series(void) {return false;} //конечная точка объекта может быть использована как начальная точка нового объекта
 
    virtual bool can_close(void);
    virtual bool close(void); //замыкает полилинию если это возможно
 
    virtual bool save(std::ostream &os);
    virtual bool load(std::istream &is);
 
    virtual void get_area(void);
    virtual void get_length(void);
 
    virtual vector get_centroid(void);
};

How do I create my own CAD software?

1. Visualization engine: Hoops visualize, Redway3D, Eyeshot, VTK(Free).

2. Geometry kernel: ACIS, Parasolid, C3D, OpenCascade(Free)

3. UI framework: QT.

How can I make a software like AutoCAD?

1. SolidFace – Download for Free. We will start with ours, because we consider it the best existing free AutoCAD alternative.

2. BricsCAD.

3. DraftSight.

4. SketchUp.

5. AutoCAD (student version)

6. FreeCAD.

7. NanoCAD Free / Windows.

8. QCAD / Windows / MacOS / Linux.

What language are CAD programs written in?

Lisp

What is an example of CAD software?

Examples of CAD software AutoCAD, 3ds Max, and Maya — commercial CAD software titles published by Autodesk. Blender — an open-source CAD, animation, and image processing application with an active community of users. SketchUp — a proprietary CAD application that runs in a web browser, formerly developed by Google.13 nov. 2018

Can you get AutoCAD for free?

Full Version – Free Trial First of all, anyone interested in trying out the full version of AutoCAD can obtain a 30-day free trial from Autodesk’s website. Click DOWNLOAD FREE TRIAL. … Enter your personal information to create an Autodesk account. Alternatively, sign in to your existing Autodesk account.11 fév. 2021

Is AutoCAD Web free?

Beginning July 1, 2020, Autodesk is offering the new Web App Program so anyone can access all of the tools and commands of the AutoCAD web app for free for an extended period, including free for commercial use. … The AutoCAD web app is also available for free to any AutoCAD 2021 subscriber.24 jui. 2020

Is FreeCAD better than AutoCAD?

AutoCAD is better as a drawing and drafting program whereas FreeCAD is more geared towards 3D parametric modeling. When using FreeCAD as an STL editor, you really notice its power. It is a CAD program to create exact and models for mechanical use, not for modeling only.29 août 2020

What is the cheapest version of AutoCAD?

Despite being a paid software like AutoCAD, BricsCAD is more affordable with three editions: Classic, Pro, and Platinum. The latter is feature-packed with tools that aren’t found in AutoCAD such as Sheet metal, 3D Compare, and BIM.2 nov. 2019

Is FreeCAD like AutoCAD?

AutoCAD vs FreeCAD Comparison Table. AUTOCAD is a 3D computer-aided design software from Autodesk. … FREECAD is a general-purpose 3D parametric modeler that ratify a modular software architecture. This Framework allows you to enhance the functionality by adding plugins.

Do software engineers use CAD?

Computer Aided Design is used in the engineering industry to produce designs, specifications and models for mechanical components or systems. Engineers can use this software throughout the entire engineering process—from the conceptual stages to strength analysis to the manufacturing methods for components.13 mai 2017

Is solidworks written in?

3D Mechanical CAD software such as CATIAv5, Pro/Engineer and Solidworks are mostly written in C++, sometimes with a thin COM interface for publishing basic API to customers.21 mar. 2010

What is the best programming language for AutoCAD?

C++

What is the easiest CAD software to learn?

So for a beginner, you can start working in AutoCAD. It is one of the first CAD software that was made available. It’s an easy software, easy to learn, easy to understand, user friendly, etc. So if you are a beginner and if you need to learn CAD, you can always start with AutoCAD.

Do I need to have computer skills to learn CAD?

Many have a steep learning curve, however, in an engineering society driven by computers, it is more important than ever to learn CAD skills. Many of the programs are incredibly expensive, but they do not have to be. There are a few programs which are excellent as a learning tool to begin exploring CAD.6 août 2018

How much does CAD software cost?

How much does AutoCAD cost?Subscription lengthTotal costMonthly costMonthly$195.00$195.001 year$1,575.00$131.252 years$2,992.50$124.693 years$4,252.50$118.131 autre ligne•6 juil. 2018

How do I create my own CAD software?

1. Visualization engine: Hoops visualize, Redway3D, Eyeshot, VTK(Free).

2. Geometry kernel: ACIS, Parasolid, C3D, OpenCascade(Free)

3. UI framework: QT.

How can I make a software like AutoCAD?

1. SolidFace – Download for Free. We will start with ours, because we consider it the best existing free AutoCAD alternative.

2. BricsCAD.

3. DraftSight.

4. SketchUp.

5. AutoCAD (student version)

6. FreeCAD.

7. NanoCAD Free / Windows.

8. QCAD / Windows / MacOS / Linux.

What language are CAD programs written in?

Lisp

What is an example of CAD software?

Examples of CAD software AutoCAD, 3ds Max, and Maya — commercial CAD software titles published by Autodesk. Blender — an open-source CAD, animation, and image processing application with an active community of users. SketchUp — a proprietary CAD application that runs in a web browser, formerly developed by Google.13 nov. 2018

Can you get AutoCAD for free?

Full Version – Free Trial First of all, anyone interested in trying out the full version of AutoCAD can obtain a 30-day free trial from Autodesk’s website. Click DOWNLOAD FREE TRIAL. … Enter your personal information to create an Autodesk account. Alternatively, sign in to your existing Autodesk account.11 fév. 2021

Is AutoCAD Web free?

Beginning July 1, 2020, Autodesk is offering the new Web App Program so anyone can access all of the tools and commands of the AutoCAD web app for free for an extended period, including free for commercial use. … The AutoCAD web app is also available for free to any AutoCAD 2021 subscriber.24 jui. 2020

Is FreeCAD better than AutoCAD?

AutoCAD is better as a drawing and drafting program whereas FreeCAD is more geared towards 3D parametric modeling. When using FreeCAD as an STL editor, you really notice its power. It is a CAD program to create exact and models for mechanical use, not for modeling only.29 août 2020

What is the cheapest version of AutoCAD?

Despite being a paid software like AutoCAD, BricsCAD is more affordable with three editions: Classic, Pro, and Platinum. The latter is feature-packed with tools that aren’t found in AutoCAD such as Sheet metal, 3D Compare, and BIM.2 nov. 2019

Is FreeCAD like AutoCAD?

AutoCAD vs FreeCAD Comparison Table. AUTOCAD is a 3D computer-aided design software from Autodesk. … FREECAD is a general-purpose 3D parametric modeler that ratify a modular software architecture. This Framework allows you to enhance the functionality by adding plugins.

Do software engineers use CAD?

Computer Aided Design is used in the engineering industry to produce designs, specifications and models for mechanical components or systems. Engineers can use this software throughout the entire engineering process—from the conceptual stages to strength analysis to the manufacturing methods for components.13 mai 2017

Is solidworks written in?

3D Mechanical CAD software such as CATIAv5, Pro/Engineer and Solidworks are mostly written in C++, sometimes with a thin COM interface for publishing basic API to customers.21 mar. 2010

What is the best programming language for AutoCAD?

C++

What is the easiest CAD software to learn?

So for a beginner, you can start working in AutoCAD. It is one of the first CAD software that was made available. It’s an easy software, easy to learn, easy to understand, user friendly, etc. So if you are a beginner and if you need to learn CAD, you can always start with AutoCAD.

Do I need to have computer skills to learn CAD?

Many have a steep learning curve, however, in an engineering society driven by computers, it is more important than ever to learn CAD skills. Many of the programs are incredibly expensive, but they do not have to be. There are a few programs which are excellent as a learning tool to begin exploring CAD.6 août 2018

How much does CAD software cost?

How much does AutoCAD cost?Subscription lengthTotal costMonthly costMonthly$195.00$195.001 year$1,575.00$131.252 years$2,992.50$124.693 years$4,252.50$118.131 autre ligne•6 juil. 2018

Skip to content

Home » Posts » Способы написания управляющих программ к станкам с ЧПУ

Способы написания управляющих программ к станкам с ЧПУ

Так как этот материал рассчитан на тех кто только знакомится с ЧПУ обработкой, объясним принципы работы и основные термины.

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

Управляющая программа пишется на языке G-кодов (ISO 7-bit). G-код – это набор стандартных команд, которые поддерживают станки с ЧПУ. Эти команды содержат информацию, где и с какой скоростью двигать режущий инструмент, чтобы обработать деталь.

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

Точки пересечения таких отрезков называются опорными точками. В тексте управляющей программы выводятся координаты опорных точек.

Пример программы в G-кодах

Текст программы Описание
G17 G54 G90 Задаем параметры: плоскость обработки, номер нулевой точки, абсолютные значения
T1 M6 Вызов инструмента с номером 1
M3 S8000 Включение шпинделя – 8000 об/мин
G0 X-19 Y-19 Ускоренное перемещение в точку X-19 Y-19
G0 Z3 Ускоренное перемещение на высоту
по Z 3 мм
G1 ХЗ Y3 F600 Линейное перемещение инструмента в точку ХЗ Y3 с подачей F = 600 мм/мин
G2 Х8 Y3 R8 Перемещение инструмента по дуге радиусом 8 мм в точку X8 Y3
М5 Выключение шпинделя
МЗ0 Завершение программы
В этом материале мы рассмотрим 3 способа написания УП:
  1. Написание УП вручную
  2. Написание УП на стойке
  3. Написание УП в CAD/CAM системе

Написание управляющей программы к станку ЧПУ вручную

Для ручного программирования вычисляют координаты опорных точек и описывают последовательность перемещения от одной точки к другой. Так можно описать обработку простой геометрии, в основном для токарной обработки: втулки, кольца, гладкие ступенчатые валы. Делают это в текстовых редакторах, например в Блокноте Виндовс.

Плюсы

  • Быстро
    Это гораздо быстрее, чем остальными способами, при написании очень простых программ.
  • Канонично :)
    Так писали УП 30 и 40 лет назад

Минусы

  • Занимает много времени
    Чем больше строк кода в программе, тем выше трудоемкость изготовления детали, тем выше себестоимость этой детали. Если в программе получается больше 70 строк кода, то лучше выбрать другой способ программирования.
  • Большой процент брака
    Так как отсутствуют инструменты для проверки перед запуском, легко забыть добавить команду, что приведет к поломке детали либо станка. Нужна лишняя заготовка на внедрение, чтобы отладить управляющую программу и проверить на зарезы или недорезы.
  • Поломка оборудования или инструмента
    Ошибки в тексте управляющей программы, помимо брака, также могут привести и к поломке шпинделя станка или инструмента.

Написание управляющей программы к станку ЧПУ на стойке ЧПУ

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

Плюсы

  • Наглядность
    Программа пишется прям на рабочем месте и, как правило, специалистом который и будет отслеживать ее выполнение на станке.
  • Быстрая модернизация УП
    Нет необходимости передавать программу на ПК. Можно отредактировать по месту и сразу запустить в работу.

Минусы

  • Простой станка и оператора
    Станок не работает, пока наладчик пишет программу для обработки детали. Простой станка – это потерянные деньги. Если в программе получается больше 130 строк кода, то лучше выбрать другой способ программирования. Хотя на стойке с ЧПУ, конечно, написать программу быстрее, чем вручную
  • Брак
    Стойка с ЧПУ не сравнивает результат обработки с 3D-моделью детали, поэтому симуляция на стойке с ЧПУ не показывает зарезы или положительный припуск. Для отладки программы нужно заложить лишнюю заготовку.
  • Не подходит для сложнопрофильных деталей
    На стойке с ЧПУ не запрограммировать обработку сложнопрофильных деталей. Иногда для конкретных деталей и типоразмеров производители стоек ЧПУ под заказ делают специальные операции.

Написание управляющей программы к станку ЧПУ в СAD/CAM системе

Написание УП в CAD/CAM системе начинается с загрузки 3D-модель детали или 2D-контура. Затем, выстраивается последовательность изготовления детали. Программа рассчитывает траекторию режущего инструмента и выводит ее в G-кодах для передачи на станок. Для вывода траектории в G-код используют постпроцессор. Постпроцессор переводит внутренние команды CAD/CAM на команды G-кода для станка с ЧПУ. Это похоже на перевод с иностранного языка.

Плюсы

Написание программ в CAD/CAM системе является самым прогрессивным и удобным способом.

  • Быстрое написание УП любой сложности
    Сокращает время на создание программ для станков с ЧПУ на 70 %.
  • Исключает брак.
    По отзывам наших пользователей, использование SprutCAM сокращает появление брака на 60 %.
  • Безопасно для инструмента и заготовки
    Продвинутые CAD/CAM системы содержат набор функций для проверки УП. Например, SprutCAM содержит функции контроль столкновений с заготовкой, контроль подачи при врезании и т. п.

Минусы

  • Стоимость
    СAD/CAM систему необходимо покупать.
    Нашу CAD/CAM систему вы можете попробовать перед покупкой. Скачайте 30 дневный полнофункциональный триал CAD/CAM системы SprutCAM →
  • Квалификация технолога
    Для того, что бы писать УП в определенной CAD/CAM системе необходимо пройти обучение.
    Научится работать в нашей CAD/CAM системе SprutCAM вы можете бесплатно пройдя небольшой , но содержательный онлайн курс →

🔥 🔥 🔥
Хотите начать работать в SprutCAM, но не знаете как начать?

Отправьте свои вопросы в форме и мы обязательно Вам ответим.

iV2021-12-30T10:02:47+03:0015 ноября, 2021|

Related Posts

Title

СПРУТ-Технология 1993 – 2023
Все права зарегистрированы

Page load link

Python, Работа с 3D-графикой


Рекомендация: подборка платных и бесплатных курсов Python — https://katalog-kursov.ru/

Та работа, которую я хочу представить вашему вниманию, есть попытка еще раз написать систему скриптового 3д моделирования. Написать так, как я её хотел бы видеть.

Рецепт системы ZenCad довольно прост. Концепт скриптового 3д моделирования OpenScad, геометрическое ядро OpenCascade, python3 в качестве клея, библиотека ленивых вычислений evalcache для агресивного кеширования вычислений. Добавить специй еще из пары-тройки инструментов, приправить gui под соусом PyQt, и подать к столу перемешав, но не взбалтывая.

машинка.пнг

Скриптовые CAD системы

CAD, или по нашему САПР, есть система автоматизированного проектирования. В отличии от интерактивных 3д редакторов скриптовые CAD системы трактуют слово «автоматизированое» в том значении, в котором обычно понимают его создатели програмного обеспечения. Тоесть не как набор вычислительных инструментов, но как кристально чистый алгоритм, требующий вмешательства человека лишь в момент его создания.

Работая в скриптовом CAD мы не рисуем модель непосредственно на экране, но выстраиваем программу, согласно которой генерируется модель. Для людей, знакомых только с интерактивными CAD, этот подход можно описать как возведенное в абсолют параметрическое моделирование. Строго говоря, скрипты часто применяются для дополнения интерактивной среды, для написания дополнительных инструментов, но работа в парадигмально чистом скриптовом CAD требует другой организации рабочего процесса, образа мысли и расчитана на несколько отличный круг задач.

Самым известным и чистым скриптовым CAD на текущий момент является OpenScad.

В начале был OpenScad

Есть определенный круг людей, кто предпочитает удобному Компасу, SolidWorks, FreeCad приземлённый и неприхотливый OpenScad. Довольно непросто ответить на вопрос в чем секрет его успеха, но точно можно сказать, что он лёгок, достаточно гибок в использовании, имеет минимум настроек. Части моделей, написанных на нем легко переиспользовать.

Однако, у openscad есть несколько обидных недостатков:

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

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

Язык и все-все-все

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

Сравнение графических интерфейсов ZenCad и OpenScad

Интерфейс ZenCad:
zencad.png

Интерфейс OpenScad:
openscad.png

Применение python позволяет упростить код openscad, сделав код модели прозрачнее в сравнении с OpenScad.

Пример: CSG

#!/usr/bin/env python
#coding: utf-8

from zencad import *
lazy.diag = True

c1 = 100
c2 = 130
c3 = c2/2 + 20

base = box(c1,c1,c1,center=True)

f1 = ngon(r = 35, n = 3)
f2 = ngon(r = 35, n = 5)
f3 = circle(35)

s1 = linear_extrude(f1, c2, center=True)
s2 = linear_extrude(f2, c2, center=True).rotateY(deg(90))
s3 = linear_extrude(f3, c2, center=True).rotateX(deg(90))

# Обратите внимание на применение операторов к булевым операциям над 3д телами.
m1 = base - s1 - s2 - s3
m2 = base ^ s1 ^ s2 ^ s3
m3 = s1 + s2 + s3

ystep = 240
xstep = 240

fontpath = os.path.join(zencad.moduledir, "examples/fonts/testfont.ttf")

# Надписи являются обычными объектами. К ним применимы все стандартные операции.
t1 = textshape("difference", fontpath, 40)
t1c = t1.center()
t1=t1.translate(-t1c.x, -t1c.y, 0).rotateZ(deg(45))

t2 = textshape("intersect", fontpath, 40)
t2c = t2.center()
t2=t2.translate(-t2c.x, -t2c.y, 0).rotateZ(deg(45))

t3 = textshape("union", fontpath, 40)
t3c = t3.center()
t3=t3.translate(-t3c.x, -t3c.y, 0).rotateZ(deg(45))

# И наконец, размечаем сцену.
disp(base.forw(ystep))

disp(s1)
disp(s2.left(xstep))
disp(s3.right(xstep))

disp(m1.back(ystep))
disp(m2.left(xstep).back(ystep))
disp(m3.right(xstep).back(ystep))

disp(t1.back(ystep).up(c3), Color(1,1,0))
disp(t2.left(xstep).back(ystep).up(c3), Color(1,1,0))
disp(t3.right(xstep).back(ystep).up(c3), Color(1,1,0))

disp(s1.left(xstep).back(ystep), Color(0.5,0,0,0.95))
disp(s2.left(xstep).back(ystep), Color(0.5,0,0,0.95))
disp(s3.left(xstep).back(ystep), Color(0.5,0,0,0.95))

disp(s1.back(ystep), Color(0.5,0,0,0.95))
disp(s2.back(ystep), Color(0.5,0,0,0.95))
disp(s3.back(ystep), Color(0.5,0,0,0.95))

show()

boolean.png

Очень удобно, например, фильтровать облако точек с применением синтаксиса генераторов.

Пример: Фильтрация массива точек.

#!/usr/bin/env python3
from zencad import *

# Строим шестиугольник.
ng = ngon(r = 10, n = 6)

# Получаем его вершины и фильтруем нужные.
vertices = ng.vertices()
filtered_vertices = [v for v in vertices if v.x < 0]

# Применяем операцию скругления в полученных вершинах.
m = ng.fillet(4, filtered_vertices)

disp(m)
show()

ngon

Благодаря python, неофициально занимающему в современной програмной экосистеме титул короля клея, zencad легко интегрируется с другими библиотеками и програмными комплексами. Мы можем в одном скрипте использовать sympy для генерации аналитической поверхности, numpy для обработки сгенерированного по этой поверхности облака точек и, конечно же, zencad для построения, визуализации и постобработки.

Пример: Простое построения поверхности по точкам

from zencad import *
import numpy

xcoords = numpy.linspace(-10,10,50)
ycoords = numpy.linspace(-10,15,50)

lines = [ interpolate([point(x, y, 0.01*(x**2 + y**3)) for x in xcoords]) for y in ycoords ]

wires = []

for l in lines:
    trans = translate(0,0,-30)
    sf = l.endpoints()
    w=sew([l, segment(sf[0], trans(sf[0])), trans(l), segment(sf[1], trans(sf[1]))])
    wires.append(w)

for l in lines:
    disp(l.left(30))

disp(loft(wires) - halfspace().down(10))

show()

chair.png

Прочный фундамент OpenCascade

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

Таким образом, второй точкой внедрения является использование полноценного геометрического ядра, использующего граничное представление вместо мешсетевой модели. Построенный вокруг хакерского геометрического ядра OpenCascade, ZenCad, конечно же, не ставит целью предоставить полноту его возможностей в среде python. Попытка в полной мере передать OpenCascade, привела бы к написанию второго pythonOCC. ZenCad берет по верхам, стараясь сохранить баланс между функциональностью и эргономичностью.

Пример: Програмная бутылка OpenCascade воспроизведенная в среде ZenCad

#!/usr/bin/env python3
#coding: utf-8

from zencad import *
import zencad.surface as surface
import zencad.curve2 as curve2
lazy.diag=True

height = 70
width = 50
thickness = 30

# BASE
pnt1 = point(-width/2,0,0);
pnt2 = point(-width/2,-thickness/4,0);
pnt3 = point(0,-thickness/2,0);
pnt4 = point(width/2,-thickness/4,0);
pnt5 = point(width/2,0,0);

edge1 = segment(pnt1, pnt2)
edge2 = circle_arc(pnt2, pnt3, pnt4)
edge3 = segment(pnt4, pnt5)

wire = sew([edge1, edge2, edge3])
profile = sew([wire, wire.mirrorX()])
body = profile.fill().extrude(height)
body = fillet(body, thickness/12)
hl(body.forw(140))

# NECK
neck_radius = thickness/4.;
neck_height = height/10;
neck = cylinder(r=neck_radius, h=neck_height).up(height)
body = body + neck
hl(body.forw(100))

# THICK
body = thicksolid(body, -thickness / 50, [point(0,0,height+height/10)])
hl(body.forw(60))

# THREAD (Поддержка 2д кривых на поверхностях сейчас в экспериментальном режиме.)
cylsurf1 = surface.cylinder(neck_radius * 0.99)
cylsurf2 = surface.cylinder(neck_radius * 1.05)

major = 2 * math.pi;
minor = neck_height / 10;
angle = math.atan2(neck_height / 4, 2 * math.pi)

ellipse1 =  curve2.ellipse(major, minor).rotate(angle)
arc1 =      cylsurf1.map(curve2.trimmed_curve2(ellipse1, 0, math.pi))
segment1 =  cylsurf1.map(curve2.segment(ellipse1.value(0), ellipse1.value(math.pi)))

ellipse2 =  curve2.ellipse(major, minor/4).rotate(angle)
arc2 =      cylsurf2.map(curve2.trimmed_curve2(ellipse2, 0, math.pi))
segment2 =  cylsurf2.map(curve2.segment(ellipse2.value(0), ellipse2.value(math.pi)))

m1 = sew([arc1, segment1])
m2 = sew([arc2, segment2])
thread = loft([m1, m2]).up(height + neck_height / 2)

hl(m1.up(height + neck_height / 2).right(80))
hl(m2.up(height + neck_height / 2).right(60))
hl(thread.right(40))

# FINAL
m = thread + body

display(m)
show()

bottle.png

Преемственность традиции. Начало координат как исток всего

Синтаксические решения zencad, по примеру его старшего брата и учителя OpenScad, минимизируют количество сущностей в библиотеке. Как и OpenScad, ZenCad принципиально не умеет создавать примитив в точке (x,y,z), несмотря на то, что OpenCascade это позволяет. ZenCad сначала создает примитив в начале координат, после чего задает необходимое ему положение, применяя преобразования. Преобразования в ZenCad существуют и как отдельные объекты и как методы тел.

# Синтаксис методов.
cube(40, center=True).rotateX(deg(45)).rotateZ(deg(45)).right(20)

# Синтаксис объектов.
(right(20) * rotateZ(deg(45)) * rotateX(deg(45)))(cube(40, center=True))

# Или так.
trans = right(20) * rotateZ(deg(45)) * rotateX(deg(45))
cube(40, center=True).transform(trans)

Набор преобразований стандартен и включает трансляцию, вращения, отражения и изменения масштаба.

Лень

С целью минимизации времени вычислений, математика в ZenCad ленифицирована, а все вычисления агрессивно закешированы. Управление алгоритмами ленификации берет на себя [del]блокчейн[/del] библиотека evalcache, о которой я рассказывал на страницах Хабрахабра некоторое время назад: Дисковое кеширование деревьев ленивых вычислений. Результаты расчетов zencad сохраняет в общем кеше, состояние которого можно отслеживать через интерфейс визуализатора. Используемый хеш-алгоритм sha512 с очешуенной избыточностью исключают возможность коллизий хешключей ленивых объектов (Пространство хэша в 10^74 раз больше количества атомов во вселенной).

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

bolt.png

Работа с резьбовыми поверхностями вычислительно накладна:

logo.png

Проблема рефлексии топологии. Метод ближней точки

У OpenScad нет операций взятия фаски или скругления. OpenCascade же их предоставляет. Это очень важные операции, и было бы обидно не взять их на вооружения для ZenCad. Есть и другие операции, требующие указания топологического объекта, например, операция взятия тонкостенной модели в примере с бутылкой OpenCascade. В графической CAD системе мы указываем топологический объект (ребро, грань, вершину) мышкой. При написании скрипта такой возможности у нас нет. Нативный OpenCascade решает задачу рефлексией и использует ее для работы с графическими CAD. Хотя ZenCad поддерживает рефлексию по модели, использование ее в качестве основного инструмента имеет ряд значительных недостатков. Во первых, резко увеличивается уровень знаний, необходимый для использования этих инструментов, ибо вы как минимум должны понимать внутреннее топологическое представление. Во вторых, как только в скрипте появляется if, сразу ломается стройность ленивых алгоритмов, а так же довольно существенно усложняется код модели. В процессе довольно длительного раздумья и экспериментов, я остановился на методе ближней точки. Если кратко, при выполнении топологически зависимых операций программа обходит объект и находит ближний к заданной точке топологический объект из числа входящих в тело. Этот объект считается выбранным. Такое решение более затратно вычислительно, но, благодаря кешированию, показывает себя неплохо. Такой подход применяется для всех операций, зависящих от элементов топологии.

Как уже сказано выше, возможность рефлексии модели, по здравому размышлению, также сохранена, как это уже показано в примере выше (Пример: Фильтрация массива точек).

Маркер Q и Маркер W

Габарит модели бывает бывает сложно прочесть с экрана из-за неочевидности масштаба. Отчасти эту проблему позволяют решить маркеры. Имея интуитивно понятный интерфейс (интуитивней некуда), маркеры сигнализируют о кординатах и показывают дистанцию, чем упрощают анализ правильности геометрии и выбор точек для операций типа фаски/скругления.

markers

Отслеживание обновлений источника

Как и старший брат (OpenScad), ZenCad способен обновлять генерируемую модель при модификации файла источника. В сочетании с системой кеширования, это позволяет довольно комфортно модифицировать скрипт, имея перед глазами практически в реальном времени изменяющееся состояние изделия.

Анимация

На этом достоинства zencad не заканчиваются.

ZenCad (спасибо шустрому ядру opencascade) умеет в реальном времени перерисовывать сцену, что позволяет анимировать 3д модель. Анимация реализуется обыкновенной функцией python и позволяет довольно вольно с собой обращаться. Учитывая, что мы находимся в среде python, zencad оказывается способен визуализировать в виде перемещений моделей данные из внешних источников (Например, с использованием multithreading + tcpsocket). Таким образом zencad может использоваться, например, для полунатурного тестирования робототехнических изделий. О, привет Gazebo!!! Привет ROS!!! Приятно видеть, что вы тоже в зрительном зале. Библиотека кинематики, которая существенно упростила бы построение кинематических цепей роботов манипуляторов, кстати говоря, в разработке.

Анимация на текущий момент всё еще в полуэкспериментальном варианте (особенно в части управления камерой) так что подробно останавливаться на ней не буду.

Экспорт — импорт

На текущий момент поддерживается экспорт и импорт в формате brep, что позволяет интегрироваться с freecad и экспорт в формате stl, что позволяет генерировать модели для 3д печати. Также поддерживается генерация скриншотов. В том числе автоматическая. В частности, скриншоты в онлайн мануале генерируются силами ZenCad в автоматическом режиме.

Текущее состояние

На текущий момент ZenCad еще очень далёк от завершения, и тем не менее вполне работоспособен в той части, в которой готов.

Библиотека доступна в pipy для Debian совместимых осей с версиями языка python3.5, python3.6, python3.7

(Возможно, понадобится установить qt5-default, из-за каких-то проблем с плагинами у PyQt5)

python3 -m pip install zencad 
apt install qt5-default

Запуск gui из командной строки:

python3 -m zencad 

Запуск gui из python скрипта:

#!/usr/bin/env python3

import zencad

m = zencad.cube(20)
zencad.disp(m)

zencad.show()

К сожалению, прогресс системы идет не так быстро, как хотелось бы. Еще не реализована большая часть апи двумерной геометрии и апи работы с поверхностями, поддержка экспорта и импорта стандартных форматов, не всегда прозрачна обработка ошибок, не проработано автоматическое тестирование, задуманы и пока не реализованы библиотеки для построения резьбовых соединений и шестереночных изделий. В качестве внешнего редактора, что совершенно ненормально, внезапно захардкожен!!! Sublime Text… Также очень хочется доработать систему с тем, чтобы можно было запустить её под Windows (это требует довольно объёмной экспертно-разведывательной работы).

Тем не менее, сейчас zencad позволяет проектировать довольно сложные 3д модели, создавать модели для 3д печати и даже визуализировать кинематику механизмов.

Ссылки на проект

github: https://github.com/mirmik/zencad, https://github.com/mirmik/servoce

pypi: https://pypi.org/project/zencad/, https://pypi.org/project/pyservoce/

manual

Спасибо за внимание.

olegipman
Ваш энтузиазм понятен, но послушайте совета — забудьте вы про КАД. Это главная ошибка новичка, вы ставите перед собой нереальные цели, потому что считаете, что если вы хорошо разбираетесь в предметной области (т.е. уверенно владеете КАД-системами как пользователь), то значит вы знаете, как работает эта программа, как её написать с нуля и какими компетенциями надо обладать, чтобы её написать. Это очень наивный взгляд на вещи.
Периодически восторженная молодежь загорается идеей написать игру. Самую лучшую. Потому что думает, что знает как сделать самую лучшую игру. Пару тысяч мудаков, которые сделали плохую игру не знают, а он один знает. Пример из жизни. Юноша атакует меня в почте настойчиво и долго. Юноша — большой ценитель Heroes of might and magic надумал делать форк третьих Героев с графоном, блэкджеком и шлюхами. Атакует меня вопросом, какой же графический движок по моему мнению следует для этого юзать. Из беседы ясное дело вытекает, что в программировании человек даже не новичок — он нуль. Задаю вопрос: ну, предположим, движок у нас есть — что ты будешь дальше делать то? Как что? Игру, конечно! Ну хорошо, в Героев я сам играл, представляю что это. Вот, говорю, есть у нас карта. На карте дороги, препятствия, ландшафт. Одна из первых задач, которую тебе надо будет решить — поиск пути на карте. Ты наводишь мышкой на место, и алгоритм определяет можно ли туда попасть и каким кратчайшим путем. Не понимает меня человек. Это же, говорит, видно безо всяких алгоритмов, куда можно попасть, а куда нет. В общем, не буду утомлять, долго мы беседовали. Даже карту с гексагональными ячейками рисовали. Ну вот где-то на этом моменте энтузиазм у него пропал, да и сам он куда-то делся.
Это я к чему? К тому, что если вы взрослый человек, то должны себе отдавать отчет в том, что нельзя написать сложную программу без знаний и опыта. Вы, простите, какие-то книжки читали по теории алгоритмов? Может быть знакомы с аппаратной частью? Знаете что-то про архитектуру компьютерных программ? “Я хочу чтоб эта программа работала под Linux в первую очередь.” Вы хорошо знаете ядро линукса? Системные вызовы? Особенности разных ДЕ и графических тулкитов? Судя по всему нет “Я лишь только начинаю знакомиться с программированием”. Сделайте хотя бы крестики-нолики для начала.

Понравилась статья? Поделить с друзьями:
  • Как написать свой язык программирования на ассемблере
  • Как написать свой язык программирования на python
  • Как написать свой сайт на питоне
  • Как написать свой электронный адрес
  • Как написать свой сайт на javascript