FreeCAD Logo FreeCAD 1.0
  • angielski afrykanerski arabski białoruski kataloński czeski niemiecki grecki hiszpański hiszpański baskijski fiński filipiński francuski galicyjski chorwacki węgierski Indonezyjski włoski japoński kabylski koreański litewski duński Norweski Bokmal polski portugalski portugalski rumuński rosyjski słowacki słoweński serbski szwedzki turecki ukraiński walenciański wietnamski chiński chiński
  • Funkcjonalność programu
  • Pobierz
  • Blog
  • Dokumentacja
    Spis dokumentacji Jak zacząć Dokumentacja użytkowników Podręcznik do programu FreeCAD Dokumentacja środowisk pracy Dokumentacja skryptów środowiska Python Dokumentacja kodowania C++ Poradniki Najczęściej zadawane pytania Polityka prywatności O FreeCAD
  • Przyłącz się do projektu
    Jak pomóc Sponsor Zgłoś błąd Utwórz pull request Praca i finansowanie Zasady współpracy Podręcznik dla programistów Tłumaczenia
  • Społeczność
    Kodeks postępowania Forum The FPA GitHub GitLab Codeberg Mastodon Matrix IRC IRC via Webchat Gitter Discord Reddit Twitter Facebook LinkedIn Kalendarz
  • ♥ Donate

Donate

$
Informacje o SEPA
Skonfiguruj przelew bankowy SEPA do:
Beneficiary: The FreeCAD project association
IBAN: BE04 0019 2896 4531
BIC/SWIFT: GEBABEBBXXX
Bank: BNP Paribas Fortis
Adres: 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!

Tworzenie obiektów parametrycznych
Społeczność
Podręcznik:Słowo wstępne
  • Słowo wstępne
  • Odkrywamy FreeCAD
    • Czym jest FreeCAD?
    • Instalacja
      • Instalacja w systemie Windows
      • Instalacja w systemie Linux
      • Instalacja w systemie Mac OS
      • Dezinstalacja
      • Ustawienia główne
      • Instalacja dodatkowej zawartości
    • Interfejs programu FreeCAD
      • Środowiska pracy
      • Interfejs
      • Dostosowywanie interfejsu
    • Nawigacja myszką w oknie widoku 3D
      • Kilka słów o przestrzeni 3D
      • Widok przestrzenny w programie FreeCAD
      • Wybieranie obiektów
    • Struktura dokumentu FreeCAD
    • Obiekty parametryczne
    • Import i eksport do plików innych formatów
  • Praca z FreeCAD
    • Środowiska pracy - przegląd
    • Modelowanie tradycyjne, według CSG
    • Kreślenie tradycyjne - 2D
    • Modelowanie dla projektowania produktu
    • Przygotowywanie modeli na potrzeby druku 3D
      • Eksportowanie do krajalnic
      • Konwersja obiektów na siatki
      • Używanie programu Slic3r
      • Używanie dodatku Cura
      • Tworzenie G-code
    • Generowanie rysunków 2D
    • Modelowanie BIM
    • Zastosowanie arkuszy kalkulacyjnych
      • Odczytywanie właściwości
      • Zapisywanie właściwości
    • Tworzenie analiz FEM
    • Tworzenie renderingów
  • Skrypty środowiska Python
    • Łagodny wstęp
      • Tworzenie kodu Python
      • Zarządzanie obiektami FreeCAD
      • Wektory i rozmieszczenie
    • Tworzenie i obróbka geometrii
    • Tworzenie obiektów parametrycznych
    • Tworzenie narzędzi interfejsu
  • Społeczność

W ostatnich dwóch rozdziałach zobaczyliśmy, jak tworzyć geometrię części i tworzyć obiekty parametryczne. Brakuje jeszcze jednego elementu, aby uzyskać pełną kontrolę nad FreeCAD: Tworzenie narzędzi, które będą współdziałać z użytkownikiem.

W wielu sytuacjach nie jest bardzo przyjazne dla użytkownika konstruowanie obiektu z zerowymi wartościami, tak jak zrobiliśmy to z prostokątem w poprzednim rozdziale, a następnie prośba o wypełnienie wartości Wysokości i Szerokości w panelu Właściwości. To działa dla bardzo niewielkiej liczby obiektów, ale stanie się bardzo uciążliwe, jeśli trzeba będzie tworzyć wiele prostokątów. Lepszym sposobem byłoby już podanie Wysokości i Szerokości podczas tworzenia prostokąta.

Python oferuje podstawowe narzędzie do wprowadzania tekstu na ekranie:

text = raw_input("Height of the rectangle?")
print("The entered height is ",text)

Wymaga to jednak aktywnej konsoli Python, a kiedy uruchamiamy nasz kod z makrodefinicji, nie zawsze mamy pewność, że konsola Python będzie aktywna.

Graficzny interfejs użytkownika (GUI) - zawierający menu, widoku 3D i inne wizualne komponenty programu FreeCAD - jest zaprojektowany tak, aby uczynić program intuicyjnym i dostępnym. Stanowi pomost między użytkownikiem i wewnętrznymi funkcjami środowiska FreeCAD, pozwalając na efektywną interakcję z programem zarówno początkującym użytkownikom, jak i ekspertom.

GUI programu FreeCAD jest zbudowane przy pomocy Qt, potężnego i otwartego zestawu narzędzi GUI, które zapewnia szeroki zakres funkcji. Qt oferuje podstawowe bloki do projektowania interfejsu, takie jak oknia dialogowe, przyciski, etykiety, pola do wprowadzania tekstu i menu rozwijane, zbiorczo nazywane "widżetami". Te widżety tworzą podstawę doświadczenia użytkownika programu FreeCAD.

Jedną z kluczowych zalet Qt jest jego międzyplatformowa kompatybilność, umożliwiając bezproblemowe uruchamianie programu FreeCAD na różnych systemach operacyjnych, takich jak Windows, macOS i Linux. Ponadto, elastyczność Qt ułatwia deweloperom rozszerzanie i dostosowywanie interfejsu programu FreeCAD poprzez tworzenie nowych pasków narzędzi i menu lub budowanie całkowicie nowych modułów, które integrują się z programem. Ta adaptacyjność sprawia, że FreeCAD pozostaje przyjazny użytkownikom i znacząco rozszerzalny.

Dla użytkowników zainteresowanych tworzeniem skryptów lub opracowywaniem nowych narzędzi, API Pythona programu FreeCAD również daje dostęp do wielu funkcji Qt. Oznacza to, że możesz nie tylko automatyzować zadania, ale również tworzyć własne widżety lub okna dialogowe, które są integrowane bezpośrednio ze środowiskiem FreeCAD.

Narzędzia Qt są bardzo łatwe do użycia z poziomu Pythona dzięki modułowi Pythona o nazwie PySide. PySide to oficjalny moduł Pythona do biblioteki Qt, zapewniający bezpośredni sposób tworzenia i interakcji z widżetami poprzez programowanie. Pozwala deweloperom projektować interfejsy, zarządzać wprowadzaniem danych przez użytkowników (np. odczytywanie tekstu z pól wejściowych) i definiować akcje w oparciu o interakcje użytkowników, takie jak odpowiadanie na wciśnięcie przycisku. Używając PySide, możesz budować własne okna dialogowe, menu i paski narzędzi bezpośrednio z poziomu programu FreeCAD, rozszerzając jego funkcjonalność w sposób, który integruje się bezpośrednio z jego istniejącym interfejsem.

PySide ułatwia połączenie akcji użytkownika z określonymi funkcjami w kodzie. Przykładowo, możesz ustawić przycisk tak, że gdy jest on wciśnięty, uruchamia skrypt wykonujący polecenie lub modyfikujący obiekt w widoku 3D. Ta interaktywna funkcjonalność otwiera nieograniczone możliwości dostosowywania przepływów pracy i automatyzowania powtarzalnych czynności.

Qt udostępnia również inne interesujące narzędzie o nazwie Qt Designer, które jest obecnie wbudowane w większą aplikację o nazwie Qt Creator. Umożliwia ono graficzne projektowanie okien dialogowych i paneli interfejsu, zamiast konieczności ich ręcznego kodowania. W tym rozdziale użyjemy Qt Creator do zaprojektowania widżetu panelu, którego użyjemy w panelu Zadanie programu FreeCAD. Będziesz więc musiał pobrać i zainstalować Qt Creator z oficjalnej strony QT, jeśli korzystasz z systemu Windows lub Mac (w systemie Linux będzie on zwykle dostępny w aplikacji menedżera oprogramowania).

W poniższym ćwiczeniu najpierw utworzymy panel za pomocą Qt Creator, który poprosi o podanie wartości długości, szerokości i wysokości, a następnie utworzymy wokół niego klasę Python, która odczyta wartości wprowadzone przez użytkownika z panelu i utworzy pudełko o podanych wymiarach. Ta klasa Python będzie następnie używana przez FreeCAD do wyświetlania i sterowania panelem zadań:

Zacznijmy od stworzenia widżetu. Uruchom Qt Creator, a następnie menu File → New File or Project → Qt → Qt Designer Form → Dialog without buttons. Kliknij Dalej, nadaj mu nazwę pliku do zapisania, kliknij Dalej, pozostaw wszystkie pola projektu do wartości domyślnej ("<none>") i Utwórz. System zadań FreeCAD automatycznie doda przyciski OK / Anuluj, dlatego wybraliśmy tutaj okno dialogowe bez przycisków.

  • Znajdź Etykietę na liście w lewym panelu (pod sekcją Display Widgets) i przeciągnij ją na obszar roboczy naszego widżetu. Kliknij dwukrotnie ostatnio umieszczoną etykietę i zmień jej tekst na Długość.
  • Kliknij prawym przyciskiem myszy kanwę widżetu i wybierz Rozmieść → Rozmieść w siatce. Spowoduje to przekształcenie naszego widżetu w siatkę z obecnie tylko jedną komórką, zajmowaną przez naszą pierwszą etykietę. Możemy teraz dodać kolejne elementy po lewej, prawej, górnej lub dolnej stronie naszej pierwszej etykiety, a siatka rozszerzy się automatycznie.
  • Dodaj dwie kolejne etykiety poniżej pierwszej i zmień ich tekst na Width i Height:

  • Umieść teraz 3 widżety „Double Spin Box” (pod sekcją Input Widgets) obok naszych etykiet „Długość”, „Szerokość” i „Wysokość”. Dla każdego z nich, w dolnym prawym panelu, który pokazuje wszystkie dostępne ustawienia dla wybranego widżetu, zlokalizuj „Suffix” i ustaw ich przyrostek na „mm”. FreeCAD posiada bardziej zaawansowany widżet, który może obsługiwać różne jednostki, ale nie jest on dostępny w Kreatorze Qt domyślnie (choć może zostać skompilowany), więc na razie skorzystamy z standardowego „Double Spin Box” i dodamy przyrostek „mm”, aby upewnić się, że użytkownik wie, w jakich jednostkach pracują:

  • Teraz nasz widżet jest gotowy, musimy tylko upewnić się co do jednej ostatniej rzeczy. Ponieważ FreeCAD będzie musiał uzyskać dostęp do tego widżetu i odczytać wartości długości, szerokości i wysokości, musimy nadać tym widżetom odpowiednie nazwy, abyśmy mogli je łatwo odzyskać z poziomu FreeCAD. Kliknij każde z Double Spin Boxes, a następnie w prawym górnym oknie kliknij dwukrotnie ich Object Name i zmień je na coś łatwego do zapamiętania, na przykład: BoxLength, BoxWidth i BoxHeight:

  • Zapisz plik, możesz teraz zamknąć Qt Creator, reszta zostanie wykonana w Python.
  • Otwórz FreeCAD i utwórz nowe makro z menu Makrodefinicje → Makrodefinicje ... → Utwórz.
  • Wklej następujący kod. Upewnij się, że zmieniłeś ścieżkę pliku, aby pasowała do miejsca, w którym zapisałeś plik .ui utworzony w 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)

W powyższym kodzie użyliśmy wygodnej funkcji PySideUic.loadUi z modułu FreeCADGui. Funkcja ta ładuje plik .ui, tworzy z niego widżet Qt i mapuje nazwy, dzięki czemu możemy łatwo uzyskać dostęp do podwidżetu według ich nazw (np. self.form.BoxLength).

Funkcja "akceptuj" jest również udogodnieniem oferowanym przez Qt. Gdy w oknie dialogowym znajduje się przycisk "OK" (co ma miejsce domyślnie podczas korzystania z panelu zadań FreeCAD), każda funkcja o nazwie "akceptuj" zostanie automatycznie wykonana po naciśnięciu przycisku "OK". Podobnie, można również dodać funkcję "odrzuć", która zostanie wykonana po naciśnięciu przycisku "Anuluj". W naszym przypadku pominęliśmy tę funkcję, więc naciśnięcie przycisku "Anuluj" spowoduje domyślne zachowanie (nic nie robi i zamyka okno dialogowe).

Jeśli zaimplementujemy którąkolwiek z funkcji akceptacji lub odrzucenia, ich domyślne zachowanie (nic nie rób i zamknij) nie będzie już występować. Musimy więc sami zamknąć panel zadań. Odbywa się to za pomocą:

FreeCADGui.Control.closeDialog()

Gdy mamy już nasz BoxTaskPanel, który ma 1 - widżet o nazwie "self.form" i 2 - w razie potrzeby funkcje akceptacji i odrzucenia, możemy otworzyć panel zadań za jego pomocą, co odbywa się za pomocą tych dwóch ostatnich wierszy:

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

Należy pamiętać, że widżet utworzony przez PySideUic.loadUi nie jest specyficzny dla FreeCAD, jest to standardowy widżet Qt, który może być używany z innymi narzędziami Qt. Moglibyśmy na przykład wyświetlić za jego pomocą osobne okno dialogowe. Wypróbuj to w konsoli Python FreeCAD (oczywiście używając poprawnej ścieżki do pliku .ui):

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

Oczywiście nie dodaliśmy żadnego przycisku "OK" lub "Anuluj" do naszego okna dialogowego, ponieważ zostało ono stworzone do użycia z panelu zadań FreeCAD, który już zapewnia takie przyciski. Nie ma więc możliwości zamknięcia okna dialogowego (poza naciśnięciem przycisku zamykania okna). Ale funkcja show() tworzy niemodalne okno dialogowe, co oznacza, że nie blokuje reszty interfejsu. Tak więc, gdy nasze okno dialogowe jest nadal otwarte, możemy odczytać wartości pól:

w.BoxHeight.value()

Jest to bardzo przydatne do testowania.

Wreszcie, nie zapominaj, że istnieje znacznie więcej dokumentacji na temat korzystania z widżetów Qt na FreeCAD Wiki, na stronie Centrum Power użytkowników, która zawiera poradnik Tworzenie dialogu, specjalny 3-częściowy poradnik PySide, który obszernie omawia ten temat.

Powiązane odnośniki

  • Dokumentacja Qt Creator
  • Instalacja Qt Creator
  • Dokumentacja skryptów FreeCAD Python
  • Tutorial tworzenia dialogów FreeCAD
  • Tutoriale FreeCAD PySide
  • [Dokumentacja PySide]


Tworzenie obiektów parametrycznych
Społeczność
Podręcznik:Słowo wstępne

Ta strona pochodzi z https://wiki.freecad.org/Manual:Creating_interface_tools

Bądźmy w kontakcie!
Forum GitHub Mastodon Matrix IRC Gitter.im Discord Reddit Twitter Facebook LinkedIn

© Załoga FreeCAD. Autorami grafiki na stronie głównej (od góry do dołu) są: ppemawm, r-frank, epileftric, regis, rider_mortagnais, bejant.

Ten projekt jest wspierany przez: , KiCad Services Corp. oraz pozostałych sponsorów

GitHubUlepsz tę stronę na GitHub