FreeCAD Logo FreeCAD 1.0
  • Английский Африкаанс Арабский Белорусский Каталанский Чешский Немецкий Греческий Испанский Испанский Баскский Финский Филиппинский Французский Галисийский Хорватский Венгерский Индонезийский Итальянский Японский Кабильский Корейский Литовский Нидерландский Норвежская букмол Польский Португальский Португальский Румынский Русский Словацкий Словенский Сербский Шведский Турецкий Украинский Валенсианский Вьетнамский Китайский Китайский
  • Возможности
  • Скачать
  • Блог
  • Документация
    Индекс документации Приступая к работе Пользовательская документация Руководство по FreeCAD Документация верстаков Документация по кодированию на Python Документация по коду C++ Уроки Часто задаваемые вопросы Политика конфиденциальности О программе FreeCAD
  • Внести вклад
    Как помочь Sponsor Сообщить об ошибке Сделать запрос Задачи и финансирование Руководство по участию в разработке Руководство для разработчиков Переводы
  • Сообщество
    Кодекс поведения Форум The FPA GitHub GitLab Codeberg Mastodon Matrix IRC IRC via Webchat Gitter Discord Reddit Twitter Facebook LinkedIn Календарь
  • ♥ Donate

Donate

$
Информация о SEPA
Пожалуйста, настройте банковский перевод SEPA:
Beneficiary: The FreeCAD project association
IBAN: BE04 0019 2896 4531
BIC/SWIFT: GEBABEBBXXX
Банковское агентство: BNP Paribas Fortis
Адрес: Rue de la Station 64, 1360 Perwez, Belgium

While Stripe doesn't support monthly donations, you can still become a sponsor! Simply make a one-time donation equivalent to 12 months of support, and you'll gain access to the corresponding sponsoring tier. It's an easy and flexible way to contribute.

If you are not sure or not able to commit to a regular donation, but still want to help the project, you can do a one-time donation, of any amount.

Choose freely the amount you wish to donate one time only.

You can support FreeCAD by sponsoring it as an individual or organization through various platforms. Sponsorship provides a steady income for developers, allowing the FPA to plan ahead and enabling greater investment in FreeCAD. To encourage sponsorship, we offer different tiers, and unless you choose to remain anonymous, your name or company logo will be featured on our website accordingly.

from 1 USD / 1 EUR per month. You will not have your name displayed here, but you will have helped the project a lot anyway. Together, normal sponsors maintain the project on its feet as much as the bigger sponsors.

from 25 USD / 25 EUR per month. Your name or company name is displayed on this page.

from 100 USD / 100 EUR per month. Your name or company name is displayed on this page, with a link to your website, and a one-line description text.

from 200 USD / 200 EUR per month. Your name or company name and logo displayed on this page, with a link to your website and a custom description text. Companies that have helped FreeCAD early on also appear under Gold sponsors.

Instead of donating each month, you might find it more comfortable to make a one-time donation that, when divided by twelve, would give you right to enter a sponsoring tier. Don't hesitate to do so!

Choose freely the amount you wish to donate each month.

Please inform your forum name or twitter handle as a notein your transfer, or reach to us, so we can give you proper credits!

Создание параметрических объектов
Сообщество
Руководство: Начало
  • Введение
  • Открываем для себя FreeCAD
    • Что такое FreeCAD?
    • Установка
      • Установка в Windows
      • Установка в Linux
      • Установка в Mac OS
      • Деинсталляция
      • Установка базовых параметров
      • Установка дополнительного содержимого
    • Интерфейс FreeCAD
      • Верстаки
      • Интерфейс
      • Настройка интерфейса
    • Навигация в окне 3D вида
      • Несколько слов о трёхмерном пространстве
      • Окно трёхмерного вида FreeCAD
      • Выбор объектов
    • Документ FreeCAD
    • Параметрические объекты
    • Импорт и экспорт в другие типы файлов
  • Работа с FreeCAD
    • Первый взгляд на все верстаки
    • Традиционное моделирование методом CSG (КБГ)
    • Традиционное двумерное черчение
    • Моделирование для проектирования продукта
    • Подготовка для 3D печати
      • Экспорт в слайсеры
      • Преобразование объектов в сетки
      • Использование Slic3r
      • Использование плагина Cura
      • Генерация G-кода
    • Создание двумерных чертежей
    • Моделирование BIM
    • Использование электронных таблиц
      • Чтение свойств
      • Запись свойств
    • Создание анализа методом конечных элементов
    • Создание визуализаций (рендеринга)
  • Написание скриптов на Python
    • Простое введение
      • Написание кода на Python
      • Манипуляция объектами FreeCAD
      • Векторы и места размещения
    • Создание и манипуляция геометрией
    • Создание параметрических объектов
    • Создание инструментов интерфейса
  • Сообщество

В последних двух главах мы рассмотрели, как создать геометрию Детали - Part и создать параметрические объекты. Для получения полного контроля над FreeCAD не хватает последней детали: Создать инструменты, которые будут взаимодействовать с пользователем.

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

Python предлагает базовый инструмент, позволяющий пользователю вводить текст на экране:

text = raw_input("Высота прямоугольника?")
print("Введённая высота равна ",text)

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

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

Графический интерфейс FreeCAD построен с использованием Qt, мощного набора инструментов графического интерфейса с открытым исходным кодом, который предоставляет широкий спектр возможностей. Qt предлагает основные строительные блоки для проектирования интерфейса, такие как диалоговые окна, кнопки, ярлыки, поля ввода текста и выпадающие меню, известные под общим названием "виджеты". Эти виджеты составляют основу пользовательского интерфейса FreeCAD.

Одним из ключевых преимуществ Qt является его кроссплатформенная совместимость, позволяющая FreeCAD без проблем работать на различных операционных системах, таких как Windows, macOS и Linux. Кроме того, гибкость Qt позволяет разработчикам легко расширять и настраивать интерфейс FreeCAD, создавая новые панели инструментов и меню или создавая совершенно новые модули, интегрируемые в программу. Благодаря такой адаптивности FreeCAD остаётся удобным для пользователя и легко расширяемым.

Для пользователей, заинтересованных в написании скриптов или разработке новых инструментов, Python API FreeCAD также предоставляет доступ ко многим функциям Qt. Это означает, что вы можете не только автоматизировать задачи, но и создавать пользовательские виджеты или диалоговые окна, которые интегрируются непосредственно в среду FreeCAD.

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

PySide позволяет легко связать действия пользователя с конкретными функциями в вашем коде. Например, вы можете настроить кнопку так, чтобы при её нажатии запускался скрипт, выполняющий команду или изменяющий объект в 3D-виде. Эта интерактивная возможность открывает безграничные возможности для настройки рабочих процессов и автоматизации повторяющихся задач.

Qt также предоставляет ещё один интересный инструмент под названием Qt Designer, который сегодня встроен в более крупное приложение под названием Qt Creator. Он позволяет создавать диалоговые окна и панели интерфейса в графическом виде, вместо того чтобы писать код вручную. В этой главе мы будем использовать Qt Creator для разработки виджета панели, который мы будем использовать в панели Task - Задача FreeCAD. Итак, вам нужно скачать и установить Qt Creator с его официальной страницы, если вы работаете под Windows или Mac (под Linux он обычно доступен из приложения "Менеджер приложений").

В следующем упражнении мы сначала создадим панель с помощью Qt Creator, которая будет запрашивать значения длины, ширины и высоты, а затем создадим вокруг неё класс Python, который будет считывать значения, введённые пользователем с панели, и создавать куб с заданными размерами. Этот класс Python будет затем использоваться FreeCAD для отображения и управления панелью задач:

Начнём с создания виджета. Запусти Qt Creator, а затем выбери меню Файл → Создать файл или проект → Qt → Форма Qt Designer (затем нажать "Choose...") → Dialog without buttons. Нажми Далее (Next), укажи имя файла для сохранения, щёлкни Далее (Next), оставь все поля проекта в значениях по умолчанию ("<none>") и Создать (Create). Система задач FreeCAD автоматически добавляет кнопки OK/Отмена, поэтому здесь мы выбрали диалог без кнопок.

  • Найди Label в списке на левой панели (в разделе Display Widgets) и перетащи его на холст нашего виджета. Дважды щёлкни на недавно размещённом Label и измени его текст на Длина.
  • Щёлкни правой кнопкой мыши по свободному месту холста виджета и выбери Компоновка → Скомпоновать по сетке. Это превратит наш виджет в сетку с одной ячейкой, занятой нашей первой меткой. Теперь мы можем добавить следующие элементы слева, справа, сверху или снизу от нашей первой метки, и сетка автоматически расширится.
  • Добавь ещё две метки под первой и измени их текст на Ширина и Высота:

  • Теперь поместите 3 виджета Double Spin Box (в разделе Input Widgets) рядом с нашими метками Length, Width и Height. Для каждого из них в правой нижней панели, которая показывает все доступные настройки для выбранного виджета, найдите Suffix и установите для них суффикс мм. В FreeCAD есть более продвинутый виджет, который может работать с разными единицами измерения, но он недоступен в Qt Creator по умолчанию (но может быть скомпилирован), поэтому пока мы будем использовать стандартный Double Spin Box, и добавим суффикс "мм", чтобы пользователь знал, в каких единицах он работает:

  • Теперь наш виджет готов, осталось убедиться в последней вещи. Так как FreeCAD должен будет обращаться к этому виджету и считывать значения длины, ширины и высоты, нам нужно дать соответствующие имена этим виджетам, чтобы мы могли легко получить их из FreeCAD. Выдели каждый из виджетов Double Spin Boxes и в правом верхнем окне дважды щёлкни по их Object Name, изменив их на что-нибудь легко запоминающееся, например: BoxLength, BoxWidth и BoxHeight:

  • Сохрани файл, теперь ты можешь закрыть Qt Creator, остальное будет сделано в Python.
  • Открой FreeCAD и создай новый макрос из меню „“'Макросы → Макрос... → Создать
  • Вставь следующий код. Убедитесь, что путь к файлу совпадает с тем, куда ты сохранил .ui файл, созданный в QtCreator:
import FreeCAD,FreeCADGui,Part
 
# CHANGE THE LINE BELOW
path_to_ui = "C:\Users\yorik\Documents\dialog.ui"
 
class BoxTaskPanel:
   def __init__(self):
       # this will create a Qt widget from our ui file
       self.form = FreeCADGui.PySideUic.loadUi(path_to_ui)
 
   def accept(self):
       length = self.form.BoxLength.value()
       width = self.form.BoxWidth.value()
       height = self.form.BoxHeight.value()
       if (length == 0) or (width == 0) or (height == 0):
           print("Error! None of the values can be 0!")
           # we bail out without doing anything
           return
       box = Part.makeBox(length,width,height)
       Part.show(box)
       FreeCADGui.Control.closeDialog()
        
panel = BoxTaskPanel()
FreeCADGui.Control.showDialog(panel)

В приведённом выше коде мы использовали удобную функцию „“'PySideUic.loadUi'„“ из модуля FreeCADGui. Эта функция загружает файл .ui, создаёт из него виджет Qt и сопоставляет имена, чтобы мы могли легко получить доступ к подвиджетам по их именам (например: self.form.BoxLength)

Функция "accept - принять" также является удобством, предлагаемым Qt. Если в диалоге есть кнопка "OK" (что происходит по умолчанию при использовании панели задач FreeCAD), любая функция с именем "accept - принять" будет автоматически выполняться при нажатии кнопки "OK". Аналогично можно добавить функцию "reject - отклонить", которая будет выполняться при нажатии кнопки "Отмена". В нашем случае мы не добавили эту функцию, поэтому нажатие кнопки "Отмена" приведёт к поведению по умолчанию (ничего не делать и закрыть диалог).

Если мы реализуем любую из функций accept или reject (принять или отклонить), их поведение по умолчанию (ничего не делать и закрыть) больше не будет выполняться. Поэтому нам нужно самим закрыть панель задач. Это делается с помощью:

FreeCADGui.Control.closeDialog()

После того как мы получили нашу панель BoxTaskPanel, которая имеет 1-е виджет под названием «self.form» и 2-е, если необходимо, функции принятия и отклонения, мы можем открыть панель задач с её помощью, что и делается с помощью этих двух последних строк:

panel = BoxTaskPanel()
 FreeCADGui.Control.showDialog(panel)

Обратите внимание, что виджет, созданный с помощью PySideUic.loadUi, не является специфическим для FreeCAD, это стандартный виджет Qt, который можно использовать с другими инструментами Qt. Например, мы могли бы показать с его помощью отдельное диалоговое окно. Попробуйте сделать это в Python-консоли FreeCAD (конечно, используя правильный путь к вашему .ui файлу):

from PySide import QtGui
 w = FreeCADGui.PySideUic.loadUi("C:\Users\yorik\Documents\dialog.ui")
 w.show()

Конечно, мы не стали добавлять в диалог кнопки "ОК" или "Отмена", поскольку он был создан для использования из панели задач FreeCAD, где уже есть такие кнопки. Поэтому нет никакого способа закрыть диалог (кроме нажатия кнопки "Закрыть окно"). Но функция show() создаёт немодальный диалог, то есть не блокирует остальную часть интерфейса. Поэтому, пока наш диалог открыт, мы можем читать значения полей:

w.BoxHeight.value()

Это очень полезно для тестирования.

Наконец, не забудьте, что на FreeCAD Wiki, в разделе Написание сценариев Python, есть много другой документации по использованию виджетов Qt, которая содержит Руководство по созданию диалогов, специальный учебник по PySide из 3-х частей, который подробно освещает эту тему.

Связанные ссылки

  • Документация Qt Creator
  • Установка Qt Creator
  • Документация по скриптам на Python в FreeCAD
  • Учебник создания диалогов FreeCAD
  • Учебник PySide для FreeCAD
  • Документация PySide


Создание параметрических объектов
Сообщество
Руководство: Начало

Эта страница получена от https://wiki.freecad.org/Manual:Creating_interface_tools

Свяжитесь с нами!
Forum GitHub Mastodon Matrix IRC Gitter.im Discord Reddit Twitter Facebook LinkedIn

©Команда FreeCAD. Авторы изображений (сверху вниз): ppemawm, r-frank, epileftric, regis, regis, rider_mortagnais, bejant.

Этот проект поддерживается: , KiCad Services Corp. и другие спонсоры

GitHubУлучшить эту страницу на GitHub