Пользователь
0,0
рейтинг
18 июня 2012 в 01:36

Разработка → Знакомьтесь: FreeCAD

FreeCAD — параметрический трехмерный редактор, позволяющий создавать объемные модели и чертежи их проекций.
Текущая версия FreeCAD — 0.12, но можно также скачать бета-версию 0.13 и попытаться ее скомпилировать.

FreeCAD поддерживает несколько различных форматов документов как на импорт, так и на экспорт, а также позволяет сохранять «снимки экрана» (в т.ч. в формате pdf).

Документация к FreeCAD довольно обильная, но все-таки не настолько полная, насколько бы хотелось. Вопросы по использованию этого продукта можно обсудить на форуме FreeCAD.




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

Но для начала поясню, как заставить FreeCAD «видеть» свои скрипты. Перед каждым запуском FreeCAD просматривает содержимое системных директорий, а также директории ~/.FreeCAD/Mod/. Находящиеся там скрипты он и будет использовать в дальнейшем.

Скрипты во FreeCAD делятся на две категории: скрипты, вызываемые из командной строки (для их запуска необходимо сначала подгрузить командой питона import содержащий их модуль), а также скрипты, запускающиеся из GUI. Первые вы всегда можете перезагрузить командой reload, а вот для перезагрузки вторых (если вы внесли какие-то изменения в исходники), необходимо будет перезапустить FreeCAD. Сначала рассмотрим работу с первыми.

Рисуем «колесо»


Создадим эскиз (sketch) в XY-плоскости, на нем нарисуем профиль «половинки» нашего колеса.



Для этого сначала «на глаз» нарисуем основные формы в виде ломаной линии.
Далее в нужных местах срежем фаски (инструмент «fillet»). А после этого — расставим привязки точек. Начальные точки привяжем абсолютно. Параллельные объекты ограничим параллельностью, зададим расстояния между частями профиля и радиусы скруглений.



Затем завершим редактирование эскиза, выберем его в списке объектов (слева) и нажмем кнопку «вращать выбранный эскиз». Получим такое колесо:



Теперь создадим в «диске» выемки. Для этого сделаем еще один эскиз в плоскости XZ. В нем из отрезков и дуг сделаем вырез. Чтобы наше отверстие было точно симметрично относительно центра, сделаем привязку к двум невидимым линиям.



Вытянем наш эскиз на 100 единиц (чтобы он уж наверняка пересекал колесо) и переместим его (Plasement.Position) на 50 единиц по оси Y:



Теперь нам нужно «размножить» полученную фигуру по окружности, чтобы затем сделать вырезы в «колесе». Для «размножения» напишем скрипт NCopy.py:

import FreeCAD, FreeCADGui, Part
from FreeCAD import Base

def CopyObj(obj):
	name = obj.Name
	shape = obj.Shape
	newshape = shape.copy()
	newobject = FreeCAD.ActiveDocument.addObject("Part::Feature",name)
	newobject.Shape = newshape
	return newobject

def copyCirc(C=Base.Vector(0,0,0), A=Base.Vector(0,0,1), Ang=90, N=4, rot=True, moveOriToGrp=False):
	Ang %= 360
	if (N > 360/Ang or N == 0):
		N = int(360/Ang)
	sel = FreeCADGui.Selection.getSelection()
	if (not sel):
		FreeCAD.Console.PrintError("Error: you should select some objects")
		return None
	doc = FreeCAD.activeDocument()
	grp = doc.addObject("App::DocumentObjectGroup", "CircularCopy")
	for Obj in sel:
			A0 = Ang
			for i in range (1, N):
				newobject = CopyObj(Obj)
				S = newobject.Shape
				S.rotate(C, A, A0)
				if (not rot):
					S.rotate(S.Placement.Base, A, -A0)
				grp.addObject(newobject)
				A0 += Ang
			if (moveOriToGrp):
				grp.addObject(Obj)
	return grp


Сохраним его в какой-нибудь поддиректории из ~/.FreeCAD/Mod/.

Функция CopyObj имеет вспомогательное значение (она нам пригодится в дальнейшем): эта функция просто создает копию данного объекта.

Функция copyCirc имеет шесть аргументов, для всех них назначены значения по умолчанию, поэтому вызывать его можно только указывая аргументы, имеющие другие значения. Ее аргументы:
  • C — координаты центра окружности, по которой происходит копирование;
  • A — нормаль к плоскости окружности;
  • Ang — угол между копиями;
  • N — количество копий (0 — если надо разместить объекты по всей окружности);
  • rot — вращать ли сам объект при копировании: если этот параметр равен False, объект будет распределен по окружности параллельным переносом, а не вращением;
  • moveOriToGrp — помещать ли копируемый оригинал в общую группу созданных объектов.

Радиус окружности нам не нужен — им мы считаем расстояние от объекта до центра окружности. Объект[ы] для копирования бер[е|у]тся из выделения. Если ничего не выделено, просто выдаем текст ошибки и завершаем функцию. Далее мы создаем в функции группу «CircularCopy» и начинаем перебирать все объекты из выделения. Каждый из них (N-1) раз копируется по окружности, а затем помещается в группу.

Теперь прикинем: нормаль к окружности, вдоль которой надо «размножать» объекты, имеет значение (0,1,0), угол между копиями сделаем равным 30 градусам, центр расположен по умолчанию (в начале координат), заполнить надо всю окружность. Таким образом, нам надо дать команды

import NCopy
NCopy.copyCirc(A=App.Vector(0,1,0), N=0, Ang=30, moveOriToGrp=True)


Раскрываем появившуюся группу «CircularCopy», выделяем все объекты в ней и выполняем их объединение, появится объект «Fusion». Теперь выделим наше «колесо» («Revolution») и это объединение, нажав клавишу Ctrl, и выберем операцию «пересечение». В итоге в нашем «колесе» появятся вырезы:



И вот так будет выглядеть «колесо», экспортированное в pdf:


Разное


Добавлю еще несколько функций для копирования объектов.

Копирование объекта в заданное расположение (mv — вектор сдвига, axe — ось поворота, rot — угол поворота):

def CopyObjAt(obj, mv=Base.Vector(0,0,0), axe=Base.Vector(0,0,0), rot=0):
	obj = CopyObj(obj)
	obj.Placement =  FreeCAD.Placement(mv, axe, rot)
	return obj


Копирование N раз на вектор V:

def copyVec(N=2, V=Base.Vector(0,0,1), moveOriToGrp=False):
	sel = FreeCADGui.Selection.getSelection()
	if sel:
		doc = FreeCAD.activeDocument()
		grp = doc.addObject("App::DocumentObjectGroup", "VectorCopy")
		for Obj in sel:
				R0 = V
				for i in range (1, N):
					newobject = CopyObj(Obj)
					newobject.Shape.translate(R0)
					grp.addObject(newobject)
					R0 += V
				if (moveOriToGrp):
					grp.addObject(Obj)
	else:
		FreeCAD.Console.PrintError("Error: you should select some objects")
	return grp


Копирование N раз по траектории — B-сплайну:

def copyByTrajectory(N=4):
	sel = FreeCADGui.Selection.getSelection()
	def prErr():
		FreeCAD.Console.PrintError("Error: you should select a traectory and one object\n")
	if (not sel):
		prErr(); return None
	L = len(sel)
	if(L != 2):
		prErr(); return None
	if(N < 2):
		FreeCAD.Console.PrintError("Error: N shold be more than 1\n"); return None
	Traj = sel[0].Shape
	#(a, b) = Traj.ParameterRange
	Obj = sel[1]
	TLen = Traj.Length / (N - 1)
	curPos = 0
	doc = FreeCAD.activeDocument()
	grp = doc.addObject("App::DocumentObjectGroup", "BSplineCopy")
	try:
		for i in range(0, N):
			v = Traj.valueAt(curPos); curPos += TLen
			newobj = CopyObjAt(Obj, v)
			grp.addObject(newobj)
	except:
		FreeCAD.Console.PrintError("Error: bad selection\n")
		return None


Рисуем подшипник


Теперь аналогично «колесу» мы можем нарисовать простой подшипник без сепаратора.

Для начала нарисуем обечайки. Опять-таки, «на глаз» нарисуем сначала контуры из ломаных линий, затем между ними нарисуем окружность, которую сразу же сделаем неактивной. Далее — наложим на наши фигуры ограничения: положения точек, вертикальность и горизонтальность участков, равенство одинаковых линий, тангенциальное ограничение одной точки борозды в обечайках и поверхности шарика, внесем кое-какие размеры. В итоге получим такой эскиз:



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



Теперь нам надо добавить шарики. Для этого активируем значок «Нарисовать сферу», чтобы получить сферу по умолчанию. Выделим ее и исправим параметры: радиус сделаем равным 15 единицам, а в положении (Placement.Position) координату X сделаем равной 58 единиц. Для того, чтобы «размножить» шарики, нам еще надо бы вычислить угловой диаметр одного шарика. Проще всего это сделать, опять открыв наш эскиз (теперь он принадлежит объекту «Revolution»). Чтобы обечайка не мешалась, выделим ее и нажмем пробел — она станет невидимой. Теперь нарисуем отрезок из начала координат к нашему шарику. Сделаем ограничения: один конец отрезка строго привяжем к началу координат, а второй сделаем касательной к шарику. Выделив этот отрезок, активируем ограничение по углу (конечно, FreeCAD будет ругаться на чрезмерное количество ограничений, но нам надо только посмотреть). Итак, этот угол равен 14.9882 градуса, грубо говоря — 15 градусов. Сразу же удалим это ограничение, чтобы FreeCAD не ругался и вернемся к нашим баранам общему виду. Выделим шарик и распределим его копии по окружности через каждые 30 градусов. По счастливой случайности нам нужно будет ввести аналогичные предыдущему пункту команды:

import NCopy
NCopy.copyCirc(A=App.Vector(0,1,0), N=0, Ang=30, moveOriToGrp=True)


Теперь немного раскрасим наши объекты. Чтобы было проще раскрашивать шарики, объединим их в один объект. Для «красоты» сменим стиль отображения объектов с «Flat Lines» на «Shaded». Цвет шариков я сделал «золотым» (255, 214, 0), а цвет обечайки — «серебряным» (192, 192, 192). Можно цвет изменять не через GUI, а в командной строке (только RGB компоненты надо нормализовать на единицу). Если документ называется «bearing», то это будет выглядеть так:

FreeCADGui.getDocument("bearing").getObject("Fusion").ShapeColor = (1.00,0.84,0.00)
FreeCADGui.getDocument("bearing").getObject("Revolution").ShapeColor = (0.75,0.75,0.75)


Точно так же можно и изменить тип их отображения:

FreeCADGui.getDocument("bearing").getObject("Revolution").DisplayMode = "Shaded"
FreeCADGui.getDocument("bearing").getObject("Fusion").DisplayMode = "Shaded"




И можно сделать чертеж и экспортировать его в SVG:



Еще о скриптописании


Как я уже говорил, для того, чтобы сделать возможным запуск своих команд из консоли FreeCAD, достаточно лишь файлы (модули питона) с этими командами разместить в директории ~/.FreeCAD/Mod/ или ее поддиректориях. Однако, чтобы сделать возможным запуск команд из GUI («кнопочки», «меню» и т.п.), необходимо сделать немного больше.

Во-первых, необходимо создать инициализирующий скрипт InitGui.py и поместить его в скриптовую поддиректорию. Этот скрипт FreeCAD запустит при просмотре содержимого нашей скриптовой директории.

Минимальное содержимое этого файла таково:

class MyWorkbench ( Workbench ):
	 import список файлов
	 Icon = путь к миниатюре инструментария (модуля)
	 MenuText = "Название модуля"
	 ToolTip = "Пояснения во всплывающей подсказке"
	 def Initialize(self):
		# ToolBar
		list = [Список предоставляемых пунктов для панели инструментов]
		self.appendToolbar("Название панели инструментов",list)
		# Menu
		list = [Список предоставляемых пунктов для панели меню]
		self.appendMenu("Название меню",list)
Gui.addWorkbench(MyWorkbench())


«Списки пунктов» list содержат строковые переменные — названия предоставляемых нашим инструментарием классов. Соответственно, для каждой строки из этих списков мы должны создать соответствующую команду или класс. При активации миниатюры на панели задач или пункта меню будет запущен конструктор этого класса, выполняющий какое-то действие. Минимальное содержимое этого класса таково:

class OneAction:

	def Activated(self): #Initialize
		import список файлов
		функции, выполняемые при активации пункта меню или миниатюры

	def GetResources(self):
		import список файлов
		IconPath = путь к миниатюре действия (для панели задач)
		MenuText = "Текст пункта в меню"
		ToolTip = "Подсказка"
		return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}

FreeCADGui.addCommand('Название пункта', OneAction())


Последняя строка говорит FreeCAD'у, что нашему классу OneAction будет соответствовать строка «Название пункта» (соответственно, эту строку мы поместим в списки класса-инициализатора нашего инструментария).

Для того, чтобы создавать новые объекты, мы должны для этих объектов создать отдельный класс. Минимальное содержимое этого класса таково:

class MyObject:
	def __init__(self, obj, значения):
		''' Add new properties to partfeature '''
		obj.addProperty("Тип свойства","Название свойства","Объект","Комментарий").свойство=значение
		obj.Proxy = self
		obj.Shape = функция построения объекта
		Класс-провайдер(obj.ViewObject)

	def onChanged(self, obj, prop):
		действия, выполняемые при изменении свойства prop, obj - наш объект
		Класс-провайдер(obj.ViewObject)

	def execute(self, obj):
		действия, выполняемые при "выполнении" объекта
		Класс-провайдер(obj.ViewObject)


Класс-провайдер обеспечивает GUI ресурсами (значками и т.п.).

Примеры скриптов можно посмотреть в директориях ресурсов FreeCAD и в официальной документации.

Напоследок приведу примеры. Первый пример нарисован без использования командной консоли:



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

import Lens
a=[[8,6,1,6,3], [10,-15,2.5,8,5], [-16,10,0.5,6,7], [-8,-6,0.5,4,3], [3,3,0.2,2,1], [0,0,0.1,1,0.1], [0,3,.3,1]]
Lens.makeLensBench(a)
b=[[-10,8,0.1,6], [8,16,0.5,6], [16,-9,1,6]]
Lens.makeLensBench(b,App.Vector(0,10,0))


позволяет получить такое:



На видео можно посмотреть, как выглядит эта модель.

Заинтересовавшимся советую зайти еще сюда и посмотреть еще множество всяких разных примеров.

UPD: вот пример реальной работы, выполненной во фрикаде (криостат).
@Eddy_Em
карма
–58,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (88)

  • +14
    Писать скрипт для создания кругового массива — это жесть.
    • 0
      В версии 0.13 это есть уже «из коробки». Правда, установить ее из исходников — задача отнюдь не тривиальная (зависимостей очень много).
      • 0
        Самые смелые уже давно могли бы поделится готовыми пакетами 0.13, если б оно было очень нужно. А так есть draftsight еще, но он не GPL, хоть и бесплатный.
      • 0
        В ArchLinux есть 2 пакета. Судя по всему второй это как раз 0.13, в archlinux соберется также просто как и 0.12.
        [root@bupyc-netbook bupyc]# yaourt -Ss freecad
        aur/freecad 0.12.5284-8 (104)
        A general purpose 3D CAD modeler
        aur/freecad-git 20120514-1 (37)
        A general purpose 3D CAD modeler
        • 0
          У меня проблема с прокси: ни git, ни svn не работают. А вручную собрать не получилось.
          • 0
            VPN беслатный приклейте. Я недавно писал статью про настройку посмотрите.
            Может через прокси заведется. Да и без прокси у вас не работает? А еще где нибудь скачать?
            • 0
              Вручную я собрать не смог.
              • 0
                А какой у вас дистрибутив? Если deb наверняка есть ppa. Если тот же арч то найдите интернет и возможность использования git svn и соберется все.
                • 0
                  archlinux
    • 0
      Кстати, вот пример копирования по траектории:


      Правда, пока есть странный баг: длины отрезков между опорными точками явно получаются неравными.
      • +4
        Такое впечатление, что копии объектов расставлены в местах сочленения дуг и отрезков.
    • 0
      Пользователи автокада смотрят на этот пост с недоумением и вспоминают лисп!
      • +1
        Я пользователь Автокада и смотрю с недоумением на FreeCAD ;) Одно дело плагины писать, другое дело базовые операции скриптовать. Да и LISP это язык на любителя, потому сейчас расширения к Автокаду можно писать различными средствами кроме лиспа.
  • +5
    А кто целевая аудитория?
    Программисты интересующиеся моделированием или модельеры, которые вынужденны будут вынужденны постоянно писать скрипты на питоне?
    Я, конечно, понимать что цель благая — свободное ПО. Но любой, относительно, профессиональный инженер проектировщик вряд ли будет писать скрипты на питоне, ровно как и наоборот. Ну или я что-то не понимаю в смысле разделения труда.
    • +1
      За ранее извиняюсь за очепятки.
    • +2
      Посмотрите на номер версии — это еще 0.12. Я думаю, к релизу версии 1.0 FreeCAD будет полноценной программой, не требующей для простых действий писать скрипты.
      Ну, а сам я ни инженером, ни программистом не являюсь. А FreeCAD выбрал для построения красивых 3D-моделей всяких железяк, чтобы вставлять в презентации/отчеты/статьи.
      • –2
        blender?
        • 0
          Не очень-то он для этого подходит. Да и не знаю, как у него с импортом dxf…
          • –1
            Google sketchup! Вот истинный рулез для технического иллюстратора.
            • 0
              Эм?
              • 0
                Нечто вроде гибрида солида, автокада и паинта. Осваивается за пол часа, позволяет рисовать 3д по быстрому. Рулез полный.
                • 0
                  Пруф?! Платный?
                  • 0
                    Бесплатный. Правда только под винду. Есть и платная про версия, разница только в наличии нескольких доп инструментов и встроенных конверторах в другие форматы.

                    Да, лучше качать седьмую версию. Разницы с восьмой я не заметил, зато в семерке проще с рядом плагинов для конверсии форматов.
                    • 0
                      А он импорт dxf умеет? А скрипты поддерживает?
                      • 0
                        Про версия умеет нативно. Восьмая через жопу или сторонними тулзами. Для седьмой есть плагин.

                        Там можно самому плагины на руби писать. Фактичесски плагин это просто текстовик с текстом проги на руби.

                        Плагинов под него уже легион. Включая всякие продвинутые рендерилки, кривые безье, твердотелку, физический и динамический движки, аниматоры по ключевым кадрам и много чего еще. Он только на вид и в голом виде прост как паинт.
                        • 0
                          > на руби

                          Ну и ну…

                          Я пока лучше во FreeCAD'е буду все чертить. А там — поживем — увидим. Если «вдруг» гугл решит выпустить полную нативную линуксовую свободную версию своей «чертилки», то можно будет и ее попробовать.
                          • 0
                            Чертить можно и клеточками экселя. Встречал я таких чудаков. Вопрос лишь эффективности. За какое время вы с нуля родите сцену с клешней из первой картинки? В кетчупе я уложусь, думаю, за час. Может меньше. А вы в фри каде?
                            • 0
                              Это демо. «Рожается» одним щелчком мыши.
                              Ну, а т.к. я пока что плоховато фрикад знаю, рисовать такое, наверное, буду долго.
                              Но «в кетчупе» я, пожалуй, провожусь еще дольше.
                              • 0
                                Попробуйте. На освоение кетчупа с нуля у меня ушло около сорока минут. Двадцать из которых я потратил на чтение статей обучалок и просмотров видеороликов.
                                • 0
                                  Не вижу смысла. По крайней мере, пока.
                                  Да и то, что нет нативной версии, добавляет лишней водички в огонь…
                          • 0
                            Гугл теперь уже не решит. SketchUp был продан сторонней компании. Плохо это или хорошо пока не известно.
                            • 0
                              Да ну? Гугл же купил кетчуп не так давно и кетчуп основной инстрпумент для создания трехмерных зданий для гуглокарт. Под это даже сервис гугля специальный есть.
                • 0
                  Загуглил, апупительно. А главное бесплатно.
                  • 0
                    На моем ютуб канале позырь еще как с ним работать. Я в нем компоненты для игла рисую. Чтобы тридэ платы генерить
      • –7
        Когда будет версия 1.0 тогда и говорить можно о чем-то!!!

        Не хотел бы я поселиться в здании, спроектированном с помощью версии 0.13 beta да и любой другой до версии 2.0

        И тут вопрос не в спо или не спо… вопрос в качестве и корректности. autocad прошел долгий путь за время которого он доказал что стоит своих денег
        • +6
          > стоит своих денег

          А я предпочитаю работать с OSS.
          Мат. модели делаю в Octave, чертежи рисую в QCad, контроллеры программирую с sdcc, в качестве IDE использую Geany, схемы рисую в KiCAD. Когда понадобилось сделать объемный рисунок — использовал FreeCAD.

          И знаете, как-то мне тратить деньги на эту вашу проприетарщину ну совсем не хочется.
          • +1
            Я так понимаю, дело не в деньгах, у вас дело принципа :)
            • 0
              Дело принципа, но и деньги тоже замешаны здесь.
    • 0
      Пожалуй в данный момент эта программа полезна для тех, кто учится создавать САПР, код ведь открыт. Студент может взять в качестве курсовой работы написание какого-нибудь полезного инструмента, благо поле не паханное в этой программе.
    • +2
      Целевая аудитория? Ну доводим его до 1.0 с крупным функционалом и возможно он сможет заменить AutoCAD. Тогда переход на свободное ПО будет еще более простым. Сделать стандартом по ГОСТу думаю будет проще чем следующую версию AutoCAD. Тем более тут и доступ к коду простой, да и если что можно будет сильно расширять функционал, дописывая код.
    • +4
      Я, конечно, понимать что цель благая — свободное ПО. Но любой, относительно, профессиональный инженер проектировщик вряд ли будет писать скрипты на питоне, ровно как и наоборот.

      На лиспе в автокаде пишут не один десяток лет. На самом деле очень часто не хватает возможности описывать детали текстом.
      • 0
        Ну так даже в KiCAD начали «пилить» питоновскую консоль. Жаль, конечно, что питон — но лучше он, чем ничего.
        • +2
          Почему жаль? Есть предложения получше? PHP? lua?
          ИМХО, python оптимален.
          • –1
            Мне бы больше понравилось что-нибудь С-подобное.
            • +1
              Питон как бы скриптовый язык. интерпритируемый. А С++ это компилируемый. Скрипты на С++ в командном интерфейсе… ну не создан он для этого.
              • –1
                Ну, хотя бы как в Octave… Но не питон же!
                • 0
                  Я даже не знаю что такое Octave, питон как то популярнее думаю будет.
                  • 0
                    Octave — свободный аналог Matlab.
                • 0
                  Матлаб заточен под массивы даблов, гетерогенные структуры в него добавили достаточно поздно и синтаксис там не очень хороший. Для скриптования лучше что-то более спискоориентированное. Питон, наверное, лучшее, что есть.
    • +2
      У меня возник ровно тот же самый вопрос, но несколько в другом ключе: когда эти скрипты будут в поставке, как готовые инструменты, при том в форме команд, а не скриптов?

      Скриптовые языки активно используются во многих пакетах моделирования. Тот же Python — в Houdini, в AutoCAD пишут на Lisp, а в Rhino3D — свои расширения VBA. Скриптовый язык нужен, но элементарные действия (как то создание массивов объектов, например) не должны выполняться многострочными конструкциями.

      Скажем, в том же Rhino я могу создать массив объектов, пользуясь одновременно графическим интерфейсом (например, выбирая объект и задавая какие-то размеры) и командной строкой (вводя численные параметры операции в консоль). При том возможностей встроенных инструментов хватает «почти на все случаи жизни», а скриптование остается для случаев, когда нужно действительно расширить возможности нестандартным функционалом (например, расположить объекты по какому-то сложному математическому принципу или автоматизировать последовательное выполнение многих операций без необходимости вводить каждый раз множество параметров).
      • 0
        > когда эти скрипты будут в поставке, как готовые инструменты, при том в форме команд, а не скриптов?

        Часть уже есть в v0.13. Открываете консоль питона — и вуаля!
        Можно, конечно, и через GUI делать (но дольше).

    • +1
      ну AutoCAD, например, тоже поддерживает скриптовый язык (Perl вроде?), и его тоже можно программировать. Так-что это вполне нормальная фишка. Просто во FreeCAD готовых скриптов малова-то и не все они вынесены в интерфейс.

      Вот вспомните: в автокаде многим коммандам, можно с клавиатуры писать 2-3 аргумента, есть default values. Иногда есть еще несколько вариантов «набора» аргументов — это всё вполне можно загнать в функцию на Perl
      • 0
        Нашел что за язык: LISP, ну и в комментарии выше тоже уже написани про это
  • 0
    Картинку первую стоило бы поменьше сделать (не под катом всетаки) и не с таким ядреным фоном, глаза чуть не выпали.
    • +1
      Поместил ее под кат.
  • 0
    Планируете ли вы портировать ее на Android?
    • 0
      Я не являюсь разработчиком FreeCAD, а только сделал небольшую «презентацию» этого ПО.

      А если на андроиде есть полноценный OpenGL, то FreeCAD там будет нормально работать.
      • 0
        Абсолютно полноценный. Вот только вопрос кто портирует. И надо еще вместить в интерфейс планшета хотя бы кнопочки.
        • 0
          А как вы без командной строки собираетесь этим пользоваться? Для работы в любом CAD'е нужна хорошая полноценная клавиатура. И мышь тоже неплохо иметь.
          • 0
            А в чем проблема то? Нажал панельку выехала клавиатура и все. Да и сенсор можно использовать + мультитачем улучшать точность и т.д. + к планшетам и мышь можно подключать.
            • +3
              Ходить, как известно, можно и задом наперед. Только почему-то медленно получается, и небезопасно.

              Расскажите про «нажал, выехала» тем, кто действительно постоянно работает в CAD, а не запускает их раз в год «пощупать».
              Когда нужно вводить множество числовых значений (а точность, к слову, улучшается именно ими, а не тыканьем всеми пальцами в экран), каждое «нажал, выехала» — абсолютно лишнее действие, крадущее время.
              Чтобы эффективно работать, нужна клавиатура, хороший манипулятор (мышь, планшет, либо что-то специально для CAD) и большой экран. А не виртуальная клавиатура, воюющая за место под солнцем с собственно данными на экране и сенсорный экран, ориентированный на работу пальцами (даже со специальным стилусом его точность позиционирования будет значительно хуже, чем у захудалой мыши).

              Так что наверное можно подключить к планшету мышь, клавиатуру, поставить его на подставку, потом еще внешний монитор приделать… И получится настольный ПК, только медленный.
        • +1
          OpenGL !=OpenGL ES
          Так что с ходу не взлетит скорее всего.
          • 0
            Я тоже что-то не нашел ничего насечет поддержки андроидом OpenGL'я. А OpenGL ES — кастрат какой-то.
  • 0
    круто, даже для MacOS X есть
  • +2
    Когда я поступал на специальность, связанную с САПР (моделирование и исследование операций в организацинно-технических системах) FreeCAD не был так крут.

    Помню, что как заядлый линуксоид, везде пытался лезть со своим СПО. Но, юный характер не хотел принимать, что инженерный мир давно уже построен на коммерческом ПО, а сама сфера порой настолько инертна, что никто не будет просто так переучиваться на новый продукт.

    Поэтому, топик про FreeCAD приятно удивил, автору — респект.
    • +1
      Ничего: я уже давно обмениваюсь с конструкторами dxf'ами, которые могу открыть в QCad'е. Теперь вот еще объемные модели могу делать. FreeCad понимает не только трехмерные dxf, но и всякие «инвенторы».

      Еще бы пересадить конструкторов на СПО и отучить народ пользоваться «вордом» или LO/OO для составления технической документации — совсем хорошо бы было!
      • –1
        зачем?
        • +1
          Чтобы не было проблем при обмене информацией.
        • +1
          Понимаете, для того чтобы открыть файл Microsoft Office в нормальном виде (LO открывает местами не так как в MSO) надо установить MSO. А его либо купить либо взломать и даже чтобы взломать надо выкачивать эдак гигабайт данных. Причем работать он будет только под Windows, ну и под мак есть версия конечно. Но Windows платный, а Mac требует соответствующий компьютер. Итого имея голое железо тупо открыть документацию не выйдет без денег. А тут убунту поставил, офис в компекте и все хорошо и бесплатно открылось. Иначе винду гигов 1-3, офис 1-2 гига и ставить это все в течении пары часов + купить по хорошему надо бы.
          А тот же LO можно установить на любую OS бесплатно с официального сайта 200 мбайт максимум. Это намного проще и быстрее согласитесь?
          • 0
            LO — тоже дрянь, которая дальше служебок не годится. Латех — наше все.

            Кстати, оффтоп по поводу латеха
            Вот такой вот код в латехе
            Пусть гипотенузы треугольника равны a=\Ins{a}{2.5}, b=\Ins{b}{3}, тогда
            \FPeval{\reslt}{round(root(2, (a^2 + b^2)):2)}
            катет будет равен $c=\sqrt{a^2+b^2}={\reslt}$
            

            Позволяет получить на печати вот что:

            Довольно удобно при составлении всяких тех. заданий с простыми расчетами внутри текста. (В режиме печати красные рамки не рисуются)
  • 0
    А оно может:

    — import\export DWG?
    — печать с точными размерами?
    • 0
      > import\export DWG
      DWG — до мозга костей проприетарный формат, однако, теоретически частичный импорт могут прикрутить.

      > печать с точными размерами?
      Не пробовал: все-таки объемная деталь рисуется уже после подготовки точного эскиза с проекциями в dxf. Там же наносятся размеры.
      • 0
        Без работы с dwg он не нужен, только энтузиастам или студентам, да и то не всегда.
        • +1
          DWG используется только автокадом. И стандартом не является.
          Основной упор надо делать на dxf.
          • 0
            Почему только автокадом — практически все сапр этот формат поддерживают. Плюс ко всему есть стандарты, а есть реалии — и в реалиях, во всяком случае в моей практике, 90% всех чертежей идет в формате dwg, причем я работаю не только с российскими проектными компаниями.
            • +1
              Для обмена данным между софтом разнообразного происхождения Autodesk предусмотрел именно формат DXF (потому открыты его спецификации), а DWG — формат только для продуктов Autodesk и разработчиков-партнеров, т.е. закрыт и лицензируется отдельно.

              Реализация DWG консорциума Open Design Alliance как бы не совсем легальна, а главное что не всегда корректна.
              • 0
                На практике ODA работает отлично, тот же IntelliCAD. И нарушением закона не является.

                Многие разработчики имеют прямые договоры с AutoDesk.
                • 0
                  > Многие разработчики имеют прямые договоры с AutoDesk.

                  Продажные сволочи!
                • 0
                  Не соглашусь. Лично видел ошибки отображения в программах с неофициальной реализацией DWG.
                  • 0
                    Ошибок с DWG не мало и в официальной реализации :) (вот это вот мною лично не раз на практике проверено). В общем в каде это распространенная проблема во всех продуктах.

                    В реальности библиотека ODA позволяет отдельно обрабатывать файлы почти всех версий AutoCAD, чего не делает сам AutoCAD.

                    Да и работает оно весьма стабильно. Тот же IntelliCAD сейчас очень хороший продукт. Так что в общем можно смело брать продукты на ODA, главное чтобы сам продукт был удачным.
                    • 0
                      >>>обрабатывать файлы почти всех версий AutoCAD, чего не делает сам AutoCAD.

                      Не страшно. Ставите самый свежий официальный DWG TrueView, в него встроен конвертер, и понижаете версию файлов до нужной, поддерживаемой вашим Автокадом.

                      Я бы не стал покупать посторонние продукты, а вот от бесплатных базовых чертилок вроде DraftSight и NanoCAD не откажусь — неплохие вещи.
            • 0
              В любом случае: чтобы что-то сделать с dwg-файлом, надо «нарушать закон», а с родным FreeCAD'овским форматом вы будете работать совершенно легально.
  • 0
    Как благодарный читатель Хабра я могу вам написать, что желаю успехов, дальнейшего развития и всего такого, и это действительно будет чистой правдой.

    Как человек, который проводит за автокадом иногда до 9 часов в сутки, могу сказать, что никому из знакомых мне людей (и мне в том числе) не надо ничего другого, кроме dwg и самого автокада. Единственный шанс снискать себе какую-то нишу — это сделать понятный и удобный интерфейс, но глядя на кладбище иконок и безумный зелёный цвет, от которого глаза на лоб полезут уже через 5 минут, понимаю, что дождусь этого нескоро.
    • 0
      > безумный зелёный цвет

      Фон настраивается. Иконки — пока нет.
  • 0
    К сожалению FreeCAD далек от состояния реальной работы в нем. Но, как тут уже упоминалось, для разработчиков САПР он является очень полезным. Например, существует форк под названием HeeksCAD. В этом проекте разрабатывается даже CAM модуль для станков с ЧПУ.
    heeks.net

    Еще когда-то нашел интересный блог с уроками по FreeCAD
    freecad-tutorial.blogspot.com

    PS: Сравнивать FreeCAD и AutoCAD некорректно. Т.к. AutoCAD в основном это 2D «чертилка». FreeCAD — заявка на твердотельный трехмерный CAD.
  • 0
    Кто нибудь знает как во Freecad разрезать готовый объект, на несколько отдельных по произвольному сечению? т.е. вот спроектировал я ящичек, целиком изготовить не могу нужно с кусочков строю произвольную плоскость по которой буду резать, а дальше -ерунда получается сечение создается, но разрезать объект на отдельные части я им почему то не могу.
    • 0
      Я для сечений рисовал большой куб, одна грань которого проходила через нужное сечение. Объем куба должен быть достаточен для вмещения всего ненужного. Ну, а затем просто «вычитаем» из объекта этот куб.
      • 0
        Это вариант в лоб, придется копировать объект и по очереди резать на 4 части. Но тоже вариант, спасибо.

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