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!

Podręcznik: Łagodny wstęp
Podręcznik: Tworzenie obiektów parametrycznych
Podręcznik - start
  • 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 poprzednich rozdziałach omówiliśmy różne środowiska pracy we FreeCAD i sposób, w jaki każde z nich wprowadza swoje własne narzędzia i typy geometrii. Te same zasady odnoszą się do pracy z FreeCAD za pomocą skryptów Pythona.

Zauważyliśmy również, że większość środowisk pracy w FreeCAD opiera się na jednym podstawowym module: 16px środowisku pracy Część. Wiele innych środowisk pracy, takich jak 16px Rysunek Roboczy, wykorzystuje narzędzia i geometrię środowiska Część, co jest dokładnie tym, co zrobimy w tym rozdziale - użyjemy Pythona do tworzenia i manipulowania geometrią środowiska pracy Część.

Aby rozpocząć pracę z geometrią środowiska pracy Część w Pythonie, musimy wykonać skryptowy odpowiednik przełączenia się na środowisko pracy Część: zaimportować moduł Część.

import Part

Poświęć chwilę na eksplorację modułu Część, wpisując Part. w konsoli Pythona i przeglądając dostępne metody oraz atrybuty w oknie autouzupełniania. To świetny sposób na zapoznanie się z funkcjonalnością, jaką oferuje ten moduł. Znajdziesz wiele przydatnych funkcji, takich jak makeBox i makeCircle, które pozwalają szybko tworzyć figury geometryczne i obiekty za pomocą jednego polecenia. Wiele z tych funkcji oferuje również opcjonalne parametry, dając Ci precyzyjną kontrolę nad wymiarami i umiejscowieniem.


Spędzenie czasu na przeglądaniu zawartości modułu nie tylko pomoże Ci zrozumieć, jakie narzędzia są dostępne, ale także da Ci wgląd w to, jak działa środowisko pracy Część "od środka". Ta podstawowa wiedza okaże się nieoceniona, gdy przejdziemy do tworzenia i manipulowania geometrią za pomocą skryptów. Wpisz następujące polecenie

Part.makeBox(3,5,7)

Ta komenda tworzy prostopadłoscian 3D, znany również jako prostokątny graniastosłup, o określonych wymiarach. Pierwszy parametr, 3, definiuje długość prostopadłościanu wzdłuż osi X. Drugi parametr, 5, ustawia szerokość wzdłuż osi Y, a trzeci parametr, 7, określa wysokość wzdłuż osi Z. Chociaż ta funkcja generuje geometrię prostopadłościanu, nie dodaje go automatycznie do aktywnego dokumentu FreeCAD. W konsoli Pythona zobaczysz:

<Solid object at 0x5f43600>

Wynik <Solid object at 0x5f43600> wskazuje, że obiekt typu Część: Kształt został utworzony w pamięci. Jest to obiekt geometryczny przechowywany pod określonym adresem pamięci, który jest pokazany przez wartość szesnastkową (0x5f43600). Ważne jest jednak, aby zrozumieć, że to, co stworzyliśmy, nie jest jeszcze obiektem dokumentu FreeCAD - istnieje tylko jako surowy kształt geometryczny w pamięci.

To rozróżnienie podkreśla fundamentalną koncepcję w FreeCAD: obiekty i ich geometria są niezależne. Obiekt dokumentu FreeCAD działa jako kontener, który przechowuje kształt. Te obiekty dokumentu mogą mieć dodatkowe właściwości, takie jak Długość, Szerokość i Wysokość, i mogą być parametryczne. Obiekty parametryczne dynamicznie przeliczają swoją geometrię (lub kształt) za każdym razem, gdy jedna z ich właściwości ulega zmianie. Na przykład, zmiana długości parametrycznego pudełka spowoduje automatyczne odtworzenie jego kształtu z zaktualizowaną wartością.

W tym przypadku ręcznie stworzyliśmy kształt za pomocą funkcji Part.makeBox(). Ten kształt jest obiektem nieparametrycznym, co oznacza, że nie będzie się automatycznie aktualizować w zależności od żadnych właściwości - jest statyczny, chyba że będziemy nim manipulować programowo. Aby uczynić ten kształt częścią aktywnego dokumentu FreeCAD, należałoby przypisać go do obiektu dokumentu (takiego jak Part::Feature), co połączyłoby go z interfejsem graficznym i umożliwiło wyświetlanie oraz zarządzanie nim w środowisku FreeCAD.

Ta rozdzielność między kształtami a obiektami dokumentu to cecha, która sprawia, że FreeCAD jest bardzo wszechstronny, umożliwiając użytkownikom manipulowanie kształtami programowo i integrowanie ich w razie potrzeby w przepływie pracy modelowania parametrycznego.

Teraz możemy łatwo utworzyć "ogólny" obiekt dokumentu w bieżącym dokumencie (upewnij się, że masz otwarty przynajmniej jeden nowy dokument) i nadać mu kształt prostopadłościanu, jak to zrobiliśmy wcześniej:

boxShape = Part.makeBox(3,5,7)
myObj = FreeCAD.ActiveDocument.addObject("Part::Feature","MyNewBox")
myObj.Shape = boxShape
FreeCAD.ActiveDocument.recompute()

Oto szczegółowe wyjaśnienie poprzednich poleceń:

  • boxShape = Part.makeBox(3,5,7): Tworzy trójwymiarowy prostopadłościan o wymiarach 3x5x7 (długość, szerokość i wysokość) i przechowuje go jako kształt środowiska pracy Część w zmiennej boxShape. Ten kształt istnieje tylko w pamięci i nie jest jeszcze częścią dokumentu FreeCAD.
  • myObj = FreeCAD.ActiveDocument.addObject("Part::Feature", "MyNewBox"): Dodaje nowy obiekt typu Part::Feature o nazwie "MyNewBox" do aktywnego dokumentu FreeCAD i przypisuje go do zmiennej myObj. Nowy obiekt pojawi się w drzewie dokumentów FreeCAD.
  • myObj.Shape = boxShape: Łączy geometrię boxShape z właściwością Shape obiektu myObj, integrując geometrię z dokumentem FreeCAD.
  • FreeCAD.ActiveDocument.recompute(): Aktualizuje dokument, aby odzwierciedlić zmiany, zapewniając, że nowy obiekt i jego geometria pojawią się w interfejsie graficznym.

Zauważ, jak obsłużyliśmy myObj.Shape. Zrobiliśmy to w sposób podobny do poprzedniego rozdziału, gdzie zmienialiśmy inne właściwości obiektu, takie jak box.Height = 5. W rzeczywistości Shape jest również właściwością, podobnie jak Height. Jednak zamiast liczby, Shape wymaga obiektu typu Część: Kształt. W następnym rozdziale przyjrzymy się bliżej, jak te obiekty parametryczne są tworzone.

Na razie przyjrzyjmy się szczegółowo obiektom typu Part Shape. W rozdziale poświęconym tradycyjnemu modelowaniu w środowisku pracy Część wprowadziliśmy tabelę wyjaśniającą, jak tworzona jest geometria Część: Kształty i jakie składają się na nią komponenty, takie jak wierzchołki, krawędzie i powierzchnie. Te same komponenty są dostępne podczas pracy z obiektami typu Część: Kształty w Pythonie, co umożliwia szczegółowe badanie i manipulowanie geometrią. Obiekty Część: Kształty w FreeCAD zawsze posiadają następujące atrybuty:

  • Wierzchołki: Punkty w przestrzeni 3D, które definiują narożniki lub końce geometrii.
  • Krawędzie: Proste lub zakrzywione linie łączące dwa wierzchołki.
  • Linie: Zamknięte lub otwarte pętle utworzone przez jedną lub więcej połączonych krawędzi.
  • Powierzchnie: Powierzchnie zamknięte przez jedną lub więcej linii.
  • Powłoki: Grupy połączonych powierzchni, tworzące ciągłą powierzchnię.
  • Bryły: Objętości 3D zamknięte przez jedną lub więcej powłok.

Wszystkie te atrybuty są reprezentowane jako listy w Pythonie. Każda lista może zawierać dowolną liczbę elementów lub być pusta, w zależności od badanej geometrii. Na przykład, sześcian będzie miał osiem wierzchołków, dwanaście krawędzi, sześć powierzchni, jedną powłokę i jedną bryłę, podczas gdy linia będzie miała tylko dwa wierzchołki i jedną krawędź, a wszystkie inne atrybuty będą puste. Te komponenty są podstawowymi elementami geometrii środowiska pracy Część i mogą być dostępne oraz manipulowane programistycznie. Zrozumienie, jak one współdziałają, daje potężną kontrolę nad tworzeniem i modyfikowaniem modeli 3D. Możemy uzyskać dostęp do tych list w następujący sposób:

print(boxShape.Vertexes)
print(boxShape.Edges)
print(boxShape.Wires)
print(boxShape.Faces)
print(boxShape.Shells)
print(boxShape.Solids)

Znajdźmy pole każdej powierzchni naszej bryły w kształcie prostopadłościanu: (Upewnij się, że druga linia jest odpowiednio wcięta, tak jak poniżej. Naciśnij Enter dwa razy po ostatniej linii, aby uruchomić polecenie Pythona.)

for f in boxShape.Faces:
   print(f.Area)

Albo, dla każdej krawędzi, jej punkt początkowy i końcowy:

for e in boxShape.Edges:
   print("New edge")
   print("Start point:")
   print(e.Vertexes[0].Point)
   print("End point:")
   print(e.Vertexes[1].Point)

Jak widzisz, jeśli nasz boxShape posiada atrybut Vertexes, każdy z brzegów boxShape posiada również atrybut Vertexes. Jak możemy się spodziewać, boxShape będzie posiadał 8 wierzchołków, podczas gdy krawędź będzie miała tylko 2, obie będące częścią listy tych 8.

Zawsze możemy sprawdzić, jaki jest rodzaj kształtu:

print(boxShape.ShapeType)
print(boxShape.Faces[0].ShapeType)
print(boxShape.Vertexes[2].ShapeType)

Oto krótkie wyjaśnienie powyższych poleceń:

  • print(boxShape.ShapeType): Wyświetla typ najwyższego poziomu kształtu reprezentowanego przez boxShape. W tym przypadku, ponieważ boxShape został utworzony jako pudełko za pomocą Part.makeBox, wynik będzie "Solid", co wskazuje, że kształt jest obiektem 3D typu bryła.
  • print(boxShape.Faces[0].ShapeType): Uzyskuje dostęp do pierwszej powierzchni w liście Faces obiektu boxShape (indeks 0) i wypisuje jej typ. Dla prostopadłościanu każda ściana to płaska powierzchnia, więc wynikiem będzie "Face".
  • print(boxShape.Vertexes[2].ShapeType): Uzyskuje dostęp do trzeciego wierzchołka w liście Vertexes obiektu boxShape (indeks 2) i wypisuje jego typ. Ponieważ jest to konkretny punkt w przestrzeni 3D, wynikiem będzie "Vertex".

Aby podsumować koncepcję Part Shapes: Wszystko zaczyna się od Vertexes, najbardziej podstawowych elementów geometrii. Używając jednego lub dwóch Vertexes, można stworzyć Edge (zauważ, że pełne okręgi wymagają tylko jednego Vertex). Jeden lub więcej Edges może utworzyć Wire, który może być otwarty lub zamknięty. Gdy masz jeden lub więcej zamkniętych Wires, możesz stworzyć Face. Dodatkowe Wires wewnątrz głównego Wire będą działać jako "otwory" w Face. Łącząc jedną lub więcej Faces, można stworzyć Shell, który jest zasadniczo zbiorem połączonych powierzchni. Jeśli Shell jest całkowicie zamknięty i szczelny, można go użyć do utworzenia Solid—obiektu 3D o objętości. Wreszcie, dowolna liczba kształtów dowolnego typu, w tym Vertexes, Edges, Wires, Faces, Shells lub Solids, może być grupowana w Compound, który działa jako pojemnik dla wielu kształtów.

Możemy teraz próbować tworzyć złożone kształty od podstaw, konstruując wszystkie ich elementy jeden po drugim. Na przykład, spróbujmy stworzyć taką objętość:

Zaczniemy od stworzenia takiego planarnego kształtu:

Po pierwsze, stwórzmy cztery punkty bazowe:

V1 = FreeCAD.Vector(0,10,0)
V2 = FreeCAD.Vector(30,10,0)
V3 = FreeCAD.Vector(30,-10,0)
V4 = FreeCAD.Vector(0,-10,0)

Następnie możemy utworzyć dwa segmenty liniowe:

L1 = Part.LineSegment(V1,V2)
L2 = Part.LineSegment(V4,V3)

Zauważ, że nie musieliśmy tworzyć Vertexes w sposób jawny. Zamiast tego mogliśmy bezpośrednio tworzyć Part.LineSegments przy użyciu FreeCAD Vectors. Dzieje się tak, ponieważ na tym etapie pracujemy z geometrią podstawową, a nie rzeczywistymi Edges. Part.LineSegment, jak również Part.Circle, Part.Arc, Part.Ellipse czy Part.BSpline, definiują podstawową geometrię, ale same w sobie nie generują krawędzi. W FreeCAD krawędzie są zawsze tworzone z takiej geometrii podstawowej, która jest przechowywana w atrybucie Curve krawędzi. Oznacza to, że krawędź jest zasadniczo opakowaniem wokół geometrii podstawowej, dziedziczącym jej właściwości. Jeśli masz krawędź, możesz uzyskać dostęp do jej podstawowej geometrii, odnosząc się do atrybutu Curve. Następujące polecenie:

print(Edge.Curve)

pozwala zrozumieć podstawową strukturę krawędzi i sposób jej konstrukcji. Teraz wróćmy do naszego ćwiczenia i kontynuujmy budowanie segmentów łuków. Aby stworzyć łuk, potrzebujemy trzech punktów: punktu początkowego, punktu końcowego oraz punktu środkowego, który określa krzywiznę. W tym celu możemy użyć funkcji Part.Arc, która przyjmuje te trzy punkty jako dane wejściowe i generuje geometrię podstawową dla łuku.

VC1 = FreeCAD.Vector(-10,0,0)
C1 = Part.Arc(V1,VC1,V4)
VC2 = FreeCAD.Vector(40,0,0)
C2 = Part.Arc(V2,VC2,V3)

Teraz mamy dwie linie (L1 i L2) i dwa łuki (C1 i C2). Musimy zamienić je na krawędzie:

E1 = Part.Edge(L1)
E2 = Part.Edge(L2)
E3 = Part.Edge(C1)
E4 = Part.Edge(C2)

Alternatywnie, geometrie bazowe mają również funkcję toShape(), która robi dokładnie to samo:

E1 = L1.toShape()
E2 = L2.toShape()
 ...

Kiedy już będziemy mieli serię krawędzi, możemy teraz stworzyć Wire, podając listę krawędzi. Musimy jednak zwrócić uwagę na kolejność. Zwróćcie też uwagę na nawiasy.

W = Part.Wire([E1,E4,E2,E3])

I możemy sprawdzić, czy nasza polilinia została prawidłowo wykonana, i czy jest prawidłowo zamknięta:

print( W.isClosed() )

Instrukcja wydrukuje True lub False. Aby utworzyć Face, potrzebujemy zamkniętej polilinii, więc zawsze warto to sprawdzić przed wykonaniem powierzchni. Teraz możemy stworzyć taką powierzchnię, nadając jej pojedynczą polilinię (lub listę polilinii, jeśli chcemy uzyskać otwory):

F = Part.Face(W)

Potem go wyciągamy:

P = F.extrude(FreeCAD.Vector(0,0,10))

Należy pamiętać, że P to już Solid:

print(P.ShapeType)

To dlatego, że kiedy wyciągamy pojedynczą powierzchnię, zawsze otrzymujemy bryłę. Nie miałoby to miejsca, na przykład, gdybyśmy zamiast tego wyciągnęli polilinię:

S = W.extrude(FreeCAD.Vector(0,0,10))
print(S.ShapeType)

Co oczywiście da nam pustą powłokę, z brakującą górną i dolną powierzchnią.

Teraz, gdy mamy nasz ostateczny kształt, chcemy go zobaczyć na ekranie! Stwórzmy więc ogólny obiekt, i przypiszmy do niego naszą nową bryłę:

myObj2 = FreeCAD.ActiveDocument.addObject("Part::Feature","My_Strange_Solid")
myObj2.Shape = P
FreeCAD.ActiveDocument.recompute()

Alternatywnie, Środowisko pracy Part dostarcza również skrót, który przyspiesza powyższą operację (ale nie możesz wybrać nazwy obiektu):

Part.show(P)

Wszystko to, oraz wiele więcej, zostało szczegółowo wyjaśnione na stronie Skrypty danych topologicznych, wraz z przykładami.

Więcej informacji:

  • Środowisko pracy Part
  • Skrypty danych topologicznych


Podręcznik: Łagodny wstęp
Podręcznik: Tworzenie obiektów parametrycznych
Podręcznik - start

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

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