Ребят, я конструктор, технолог, электронщик и в том числе и программист, который реально шарит в 3D графики и DirectX 11.
Вот сам, работая раньше в основном в SolidWorks частенько задумывался над тем, что данный кад становится всё хуже и хуже, много чего не хватает и присутствует куча багов, исправление которых ждёшь от версии к версии, от сервис пака к сервис паку, а их кол-во только увеличивается
Появилась у меня тут создать так сказать глобальный онлайн эксперимент по созданию собственного 3D CAD, который не надо будет подгонять под ЕСКД и ругать матом, что там что — то не так работает или чего — то не хватает.
Что я предлагаю: скорее всего в ближайший месяц, там посмотрю как по времени будет, я начну написание кода новейшего 3D CADa , а вы все будете по мере возможности участвовать в его создание в плане оставления тут комментариев с пожеланиями и предложениями по всем аспектам создания — какие нужны функции, какие нет, что добавить, что убрать, периодический проверяя работоспособность очередной бета версии …
Конечно же я не маньяк, чтоб чисто ради интереса заниматься огромной работой и в последующем я планирую его продавать, причём буду устанавливать цену, доступную простому Российскому конструктору, тоесть в 10…30 раз дешевле того же SolidWorks. Все же участники данного эксперимента получат свои копии данного продукта абсолютно бесплатно и в большом кол-ве.
Хотел спросить, будет ли интерес у Вас, конструкторов, к подобному эксперименту? Нужен ли Вам CAD, который реально бы создавался по всем Вашим потребностям ?
P.S.: Да кстате, потом можно и CAE-шников подключить и тд и тп. Да и ваще набрать хорошую команду и дать жару всем десаулт системсам? (или они меня застрелят из — за конкуренции ? )
Изменено 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
Способы написания управляющих программ к станкам с ЧПУ
Так как этот материал рассчитан на тех кто только знакомится с ЧПУ обработкой, объясним принципы работы и основные термины.
Для того, что бы ЧПУ станок обработал заготовку, ему необходим алгоритм, по которому он будет это делать. Такой алгоритм называется Управляющая Программа (УП).
Управляющая программа пишется на языке 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 способа написания УП:
- Написание УП вручную
- Написание УП на стойке
- Написание УП в 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, но не знаете как начать?
Отправьте свои вопросы в форме и мы обязательно Вам ответим.
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:
Интерфейс OpenScad:
Применение 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()
Очень удобно, например, фильтровать облако точек с применением синтаксиса генераторов.
Пример: Фильтрация массива точек.
#!/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()
Благодаря 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()
Прочный фундамент 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()
Преемственность традиции. Начало координат как исток всего
Синтаксические решения 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 раз больше количества атомов во вселенной).
Данная модель при создании генерирует четыре мегабайта геометрии и при первом проходе может вычисляться довольно продолжительное время:
Работа с резьбовыми поверхностями вычислительно накладна:
Проблема рефлексии топологии. Метод ближней точки
У OpenScad нет операций взятия фаски или скругления. OpenCascade же их предоставляет. Это очень важные операции, и было бы обидно не взять их на вооружения для ZenCad. Есть и другие операции, требующие указания топологического объекта, например, операция взятия тонкостенной модели в примере с бутылкой OpenCascade. В графической CAD системе мы указываем топологический объект (ребро, грань, вершину) мышкой. При написании скрипта такой возможности у нас нет. Нативный OpenCascade решает задачу рефлексией и использует ее для работы с графическими CAD. Хотя ZenCad поддерживает рефлексию по модели, использование ее в качестве основного инструмента имеет ряд значительных недостатков. Во первых, резко увеличивается уровень знаний, необходимый для использования этих инструментов, ибо вы как минимум должны понимать внутреннее топологическое представление. Во вторых, как только в скрипте появляется if, сразу ломается стройность ленивых алгоритмов, а так же довольно существенно усложняется код модели. В процессе довольно длительного раздумья и экспериментов, я остановился на методе ближней точки. Если кратко, при выполнении топологически зависимых операций программа обходит объект и находит ближний к заданной точке топологический объект из числа входящих в тело. Этот объект считается выбранным. Такое решение более затратно вычислительно, но, благодаря кешированию, показывает себя неплохо. Такой подход применяется для всех операций, зависящих от элементов топологии.
Как уже сказано выше, возможность рефлексии модели, по здравому размышлению, также сохранена, как это уже показано в примере выше (Пример: Фильтрация массива точек).
Маркер Q и Маркер W
Габарит модели бывает бывает сложно прочесть с экрана из-за неочевидности масштаба. Отчасти эту проблему позволяют решить маркеры. Имея интуитивно понятный интерфейс (интуитивней некуда), маркеры сигнализируют о кординатах и показывают дистанцию, чем упрощают анализ правильности геометрии и выбор точек для операций типа фаски/скругления.
Отслеживание обновлений источника
Как и старший брат (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 в первую очередь.” Вы хорошо знаете ядро линукса? Системные вызовы? Особенности разных ДЕ и графических тулкитов? Судя по всему нет “Я лишь только начинаю знакомиться с программированием”. Сделайте хотя бы крестики-нолики для начала.