Topological data scripting/pl

Wprowadzenie
Tutaj wyjaśnimy Ci jak kontrolować środowisko Część bezpośrednio z interpretera FreeCAD Python, lub z dowolnego zewnętrznego skryptu. Przejrzyj sekcję o skryptach oraz strony Podstawy tworzenia skryptów FreeCAD, jeśli potrzebujesz więcej informacji na temat działania skryptów Pythona w FreeCAD. Jeśli jesteś początkującym użytkownikiem środowiska Python, dobrze jest najpierw przeczytać Wprowadzenie do środowiska Python.



Zobacz również

 * Skrypty w środowisku Część
 * OpenCASCADE



Schemat klas
To jest Unified Modeling Language (UML) przegląd najważniejszych klas modułu Część:

Geometria
Obiekty geometryczne są elementami składowymi wszystkich obiektów topologicznych:
 * Geom Klasa bazowa obiektów geometrycznych.
 * Linia Linia prosta w przestrzeni 3D, zdefiniowana przez punkt początkowy i punkt końcowy.
 * Okrąg Okrąg lub odcinek okręgu zdefiniowany przez punkt środkowy oraz punkt początkowy i końcowy.
 * I tak dalej.

Topologia
Dostępne są następujące typy danych topologicznych:
 * Złożenie Grupa obiektów topologicznych dowolnego typu.
 * Bryła złożona Bryła złożona to zbiór brył połączonych ścianami. Rozszerza pojęcia WIRE i SHELL na bryły.
 * Bryła Część przestrzeni ograniczona powłokami. Jest trójwymiarowa.
 * Powłoka Zbiór ścian połączonych krawędziami. Powłoka może być otwarta lub zamknięta.
 * Ścina W 2D jest częścią płaszczyzny, w 3D jest częścią powierzchni. Jego geometria jest ograniczona (przycięta) przez kontury. Jest dwuwymiarowa.
 * Linia łamana (polilinia) Zbiór krawędzi połączonych wierzchołkami. Może to być kontur otwarty lub zamknięty, w zależności od tego, czy krawędzie są połączone, czy nie.
 * Krawędź Element topologiczny odpowiadający krzywej ograniczonej. Krawędź jest na ogół ograniczona wierzchołkami. Ma jeden wymiar.
 * Wierzchołek Element topologiczny odpowiadający punktowi. Ma zero wymiarów.
 * Kształt Termin ogólny obejmujący wszystkie powyższe.



Przykład: Utwórz prostą topologię


Stworzymy teraz topologię poprzez skonstruowanie jej z prostszej geometrii. Jako studium przypadku użyjemy części widocznej na rysunku, która składa się z czterech wierzchołków, dwóch łuków i dwóch linii.



Tworzenie geometrii
Najpierw tworzymy odrębne części geometryczne tej linii łamanej. Upewniamy się, że części, które mają być później połączone, mają wspólne wierzchołki.

Więc najpierw tworzymy punkty:

Łuk


Dla każdego łuku potrzebujemy punktu pomocniczego:

Linia


Odcinki linii można utworzyć z dwóch punktów:



Połącz wszystko w całość
Ostatnim krokiem jest zestawienie geometrycznych elementów bazowych razem i uzyskanie kształtu topologicznego:



Utwórz graniastosłup
Teraz wyciągnij linę łamaną w odpowiednim kierunku i stwórz rzeczywisty kształt 3D:



Pokaż to wszystko


Utwórz podstawowe kształty
Możesz łatwo tworzyć podstawowe obiekty topologiczne za pomocą metod z modułu Część:

Niektóre dostępne metody : Zobacz stronę skrypty środowiska Część lub dokumentacja API środowiska Część generowana automatycznie aby zobaczyć pełną listę dostępnych metod modułu Część.
 * Tworzy sześcian znajdujący się w punkcie p i skierowany w kierunku d o wymiarach (l,w,h).
 * Tworzy okrąg o zadanym promieniu.
 * . Tworzy stożek o podanych promieniach i wysokościach.
 * . Tworzy walec o zadanym promieniu i wysokości.
 * Tworzy prostą z dwóch punktów.
 * Tworzy płaszczyznę o określonej długości i szerokości.
 * Tworzy wielokąt z listy punktów.
 * Tworzy sferę o zadanym promieniu.
 * Tworzy torus o podanych promieniach.



Import modułów
Najpierw musimy zaimportować moduły FreeCAD i Część, aby móc korzystać z ich zawartości w Pythonie:



Utwórz wektor
Wektory są jedną z najważniejszych informacji przy tworzeniu kształtów. Zazwyczaj zawierają trzy liczby (ale niekoniecznie zawsze): współrzędne kartezjańskie X, Y i Z. Tworzysz wektor w ten sposób:

Właśnie utworzyliśmy wektor o współrzędnych X = 3, Y = 2, Z = 0. W module Part, wektory są używane wszędzie. Kształty części używają również innego rodzaju reprezentacji punktów zwanej Vertex, która jest po prostu kontenerem dla wektora. Dostęp do wektora wierzchołka uzyskujesz w następujący sposób:



Utwórz krawędź
Krawędź to nic innego jak linia z dwoma wierzchołkami:

Uwaga: Możesz również utworzyć krawędź poprzez przekazanie dwóch wektorów:

Możesz znaleźć długość i środek krawędzi w ten sposób:



Wyświetl kształt na ekranie
Do tej pory utworzyliśmy obiekt krawędziowy, ale nie pojawia się on nigdzie na ekranie. Dzieje się tak dlatego, że scena 3D FreeCAD wyświetla tylko to, co każesz jej wyświetlić. Aby to zrobić, użyjemy prostej metody:

Funkcja show tworzy obiekt w naszym dokumencie FreeCAD i przypisuje mu nasz kształt "krawędzi". Używaj jej zawsze wtedy, gdy chcesz wyświetlić swoje dzieło na ekranie.



Utwórz linie łamaną
Linia łamana jest linią o wielu krawędziach i może być utworzona z listy krawędzi lub nawet z listy linii łamanych:

wyświetli 4 krawędzie, z których składa się nasza linia łamana. Inne przydatne informacje mogą być łatwo pobrane:



Utwórz ścianę
Tylko ściany utworzone z linii łamanych będą poprawne. W tym przykładzie linia łamana3 jest zamknięta, ale linia łamana2 nie jest (patrz wyżej):

Tylko twarze będą posiadać obszar, linie łamane i krawędzie nie.



Utwórz okrąg
Okrąg może być utworzony w ten sposób:

Jeśli chcesz utworzyć go w określonej pozycji i z określonym kierunkiem:

okrąg zostanie utworzony w odległości 10 od początku X i będzie skierowany na zewnątrz wzdłuż osi X. Uwaga: akceptuje tylko  dla parametrów position i parametry jako wektory normalne, a nie krotki. Możesz również utworzyć część okręgu przez podanie kąta początkowego i końcowego:

Kąty powinny być podane w stopniach. Jeśli masz radiany, po prostu przekonwertuj je za pomocą wzoru: lub za pomocą modułu Pythona:



Utwórz łuk wzdłuż punktów
Niestety nie ma funkcji, ale mamy funkcję do tworzenia łuku przez trzy punkty. Tworzy ona obiekt łuku łączący punkt początkowy z punktem końcowym przez punkt środkowy. Funkcja obiektu arc musi zostać wywołana, aby otrzymać obiekt krawędzi, tak samo jak w przypadku użycia  zamiast.

Funkcja akceptuje tylko  dla punktów, a nie dla krotek. Możesz również uzyskać łuk używając części okręgu:

Łuki są poprawnymi krawędziami, tak jak linie, więc mogą być również używane w poliliniach.

<span id="Create_a_polygon">

Utwórz wielokąt
Wielokąt jest po prostu polilinią o wielu prostych krawędziach. Funkcja przyjmuje listę punktów i tworzy polilinię przechodzącą przez te punkty:

<span id="Create_a_Bézier_curve">

Utwórz krzywą Béziera
Krzywe Béziera są używane do modelowania gładkich krzywych przy użyciu serii biegunów (punktów) i opcjonalnych wag. Poniższa funkcja tworzy krzywą z serii punktów. Uwaga: przy "pobieraniu" i "ustawianiu" pojedynczego bieguna lub wagi, indeksy zaczynają się od 1, a nie od 0.

<span id="Create_a_plane">

Utwórz płaszczyznę
Płaszczyzna jest płaską prostokątną powierzchnią. Metoda używana do jej utworzenia to. Domyślnie start_pnt = Vector(0, 0, 0) i dir_normal = Vector(0, 0, 1). Użycie dir_normal = Vector(0, 0, 1) spowoduje utworzenie płaszczyzny zwróconej w dodatnim kierunku osi Z, natomiast dir_normal = Vector(1, 0, 0) utworzy płaszczyznę zwróconą w dodatnim kierunku osi X:

jest prostopadłościanem zamykającym płaszczyznę o przekątnej zaczynającej się w punkcie (3, 0, 0) i kończącej w punkcie (5, 0, 2). W tym przypadku grubość wzdłuż osi Y wynosi zero, ponieważ nasz kształt jest całkowicie płaski.

Uwaga: akceptuje tylko  dla start_pnt i dir_normal, a nie krotki.

<span id="Create_an_ellipse">

Utwórz elipsę
Istnieje kilka sposobów na utworzenie elipsy:

Tworzy elipsę o wartości promienia głównego 2 i promienia mniejszego 1, o środku w punkcie (0, 0, 0).

Tworzy kopię podanej elipsy.

Tworzy elipsę wyśrodkowaną w punkcie Center, gdzie płaszczyzna elipsy jest określona przez Center, S1 i S2, jej oś główna jest określona przez Center i S1, jej promień główny jest odległością pomiędzy Center i S1, a jej promień mniejszy jest odległością pomiędzy S2 i osią główną.

Tworzy elipsę o promieniach MajorRadius i MinorRadius, znajdującą się w płaszczyźnie zdefiniowanej przez środek i normalną (0, 0, 1).

W powyższym kodzie przekazaliśmy S1, S2 i środek. Podobnie jak, tworzy obiekt elipsy, a nie krawędzi, więc musimy go przekonwertować na krawędź używając  do wyświetlenia.

Uwaga: akceptuje tylko  dla punktów, a nie dla krotek.

Dla powyższego konstruktora elipsy przekazaliśmy center, MajorRadius oraz MinorRadius.

<span id="Create_a_torus">

Utwórz torusa
Używając. Domyślnie pnt = Vector(0, 0, 0), dir = Vector(0, 0, 1), angle1 = 0, angle2 = 360 i angle = 360. Rozważmy torus jako małe koło, które porusza się po dużym okręgu. Radius1 jest promieniem dużego okręgu, radius2 jest promieniem małego okręgu, pnt jest środkiem torusa, a dir jest kierunkiem normalnej. angle1 i angle2 są kątami w stopniach dla małego okręgu; ostatni parametr angle jest po to, by zrobić przekrój torusa:

Powyższy kod utworzy torus o średnicy (promień 10) i grubości  (promień małego okręgu 2)

Powyższy kod utworzy wycinek torusa.

Powyższy kod utworzy połowę torusa; tylko ostatni parametr jest zmieniony, tzn. pozostałe kąty są domyślne. Nadanie kąta 180 spowoduje utworzenie torusa od 0 do 180, czyli jego połowę.

<span id="Create_a_box_or_cuboid">

Utwórz sześcian lub prostopadłościan
Przy użyciu. Domyślnie pnt = Vector(0, 0, 0) i dir = Vector(0, 0, 1).

<span id="Create_a_sphere">

Utwórz sferę
Przy użyciu. Domyślnie pnt = Vector(0, 0, 0), dir = Vector(0, 0, 1), angle1 = -90, angle2 = 90 i angle3 = 360. Kąt1 i kąt2 to pionowe minimum i maksimum sfery, kąt3 to średnica sfery.

<span id="Create_a_cylinder">

Utwórz walec
Przy użyciu. Domyślnie pnt = Vector(0, 0, 0), dir = Vector(0, 0, 1) i angle = 360.

<span id="Create_a_cone">

Utwórz stożek
Przy użyciu. Domyślnie pnt = Vector(0, 0, 0), dir = Vector(0, 0, 1) i angle = 360.

<span id="Modify_shapes">

Modyfikuj kształty
Kształty można modyfikować na kilka sposobów. Niektóre z nich to proste operacje przekształcania, takie jak przesuwanie lub obracanie kształtów, inne są bardziej złożone, np. łączenie i odejmowanie jednego kształtu od drugiego.

<span id="Transform_operations">

Operacje przekształcenia
<span id="Translate_a_shape">

Przekształcanie kształtu
Przesunięcie to czynność polegająca na przeniesieniu kształtu z jednego miejsca w drugie. Każdy kształt (krawędź, ściana, sześcian, itd...) może być przesunięty w ten sam sposób:

Spowoduje to przesunięcie naszego kształtu "myShape" o 2 jednostki w kierunku X.

<span id="Rotate_a_shape">

Obrót kształtu
Aby obrócić kształt, należy określić środek obrotu, oś i kąt obrotu:

Powyższy kod obróci kształt o 180 stopni wokół osi Z.

<span id="Matrix_transformations">

Przekształcenia macierzowe
Macierz jest bardzo wygodnym sposobem przechowywania przekształceń w świecie 3D. W pojedynczej macierzy można ustawić wartości przesunięcia, obrotu i skalowania, które mają być zastosowane do obiektu. Na przykład:

Uwaga: Macierze FreeCAD działają w radianach. Ponadto, prawie wszystkie operacje na macierzach, które przyjmują wektor, mogą również przyjmować trzy liczby, więc te dwie linie robią to samo:

Kiedy nasza macierz jest już ustalona, możemy ją zastosować do naszego kształtu. FreeCAD udostępnia dwie metody, aby to zrobić: oraz. Różnica jest taka, że w przypadku pierwszej z nich mamy pewność, że nie wystąpią żadne deformacje (patrz poniżej Skalowanie kształtu). Naszą transformację możemy zastosować w ten sposób:

lub

<span id="Scale_a_shape">

Skalowanie kształtu
Skalowanie kształtu jest bardziej niebezpieczną operacją, ponieważ w przeciwieństwie do przesunięcia czy obrotu, skalowanie nierównomierne (z różnymi wartościami dla X, Y i Z) może zmienić strukturę kształtu. Na przykład, skalowanie koła z większą wartością w poziomie niż w pionie przekształci je w elipsę, która zachowuje się matematycznie zupełnie inaczej. Do skalowania nie możemy użyć metody, musimy użyć :

<span id="Boolean_operations">

Operacja odjęcia
Odejmowanie kształtu od innego nazywane jest w FreeCAD "cięciem" i odbywa się w następujący sposób:

Przecięcie
W ten sam sposób przecięcie dwóch kształtów nazywane jest "częścią wspólną" i jest wykonywane w ten sposób:

Połączenie
Połączenie nazywa się "scaleniem" i działa w ten sam sposób:

Przekrój
"Przekrój" jest punktem przecięcia bryły z płaszczyzną. Zwraca krzywą przecięcia, krzywą złożoną utworzoną z krawędzi.

Wyciąganie
Wyciąganie to czynność "wypychania" płaskiego kształtu w określonym kierunku, w wyniku czego powstaje pełna bryła. Pomyśl o kole, które staje się rurką poprzez "wypychanie" go na zewnątrz:

Jeśli twój okrąg jest pusty, otrzymasz pustą rurkę. Jeśli twój okrąg jest w rzeczywistości dyskiem z wypełnioną powierzchnią, otrzymasz pełny walec:

<span id="Explore_shapes">

Badanie kształtów
Możesz łatwo zbadać topologiczną strukturę danych:

Wpisując powyższe linie w interpreterze Python, uzyskasz dobre zrozumienie struktury obiektów Część. Tutaj, nasze polecenie utworzyło bryłę. Ta bryła, jak wszystkie bryły typu Część, zawiera ściany. Ściany zawsze zawierają linie łamane (polilinie), które są listą krawędzi ograniczających daną ścianę. Każda ściana ma co najmniej jedną zamkniętą linię łamaną (może mieć ich więcej, jeśli posiada otwór). W liniach łamanych możemy oglądać każdą krawędź z osobna, a wewnątrz każdej krawędzi możemy zobaczyć wierzchołki. Proste krawędzie mają oczywiście tylko dwa wierzchołki.

<span id="Edge_analysis">

Analiza krawędzi
W przypadku krawędzi, która jest arbitralną krzywą, najprawdopodobniej chcesz dokonać dyskretyzacji. W FreeCAD krawędzie są parametryzowane przez ich długości. Oznacza to, że możesz przejść po krawędzi/krzywej przez jej długość:

Teraz możesz uzyskać dostęp do wielu właściwości krawędzi, używając długości jako pozycji. Oznacza to, że jeśli krawędź ma długość 100mm, to pozycja początkowa wynosi 0, a końcowa 100.

<span id="Use_a_selection">

Użycie zaznaczenia
Tutaj widzimy teraz, jak możemy wykorzystać wybór, który użytkownik przeprowadził w przeglądarce. Najpierw tworzymy sześcian i pokazujemy go w przeglądarce.

Teraz wybierz kilka ścian lub krawędzi. Za pomocą tego skryptu możesz przejść po wszystkich zaznaczonych obiektach i ich elementach podrzędnych:

Wybierz kilka krawędzi, a ten skrypt obliczy ich długość:

<span id="Example:_The_OCC_bottle">

Przykład: Butelka OCC
Typowym przykładem, który można znaleźć na stronie OpenCasCade Technology jest sposób na zbudowanie butelki. Jest to dobre ćwiczenie również dla programu FreeCAD. W rzeczywistości, jeśli będziesz śledził nasz przykład poniżej i stronę OCC jednocześnie, zobaczysz jak dobrze struktury OCC są zaimplementowane w FreeCAD. Skrypt jest dołączony do instalacji FreeCAD (w folderze ) i może być wywołany z interpretera Python przez wpisanie:

<span id="The_script">

Skrypt
Na potrzeby tego poradnika rozważymy okrojoną wersję skryptu. W tej wersji butelka nie będzie wydrążona, a szyjka butelki nie będzie gwintowana.

<span id="Detailed_explanation">

Szczegółowe objaśnienia
Potrzebny nam będzie oczywiście moduł, ale także moduł.

Tutaj definiujemy naszą funkcję. Funkcja ta może być wywołana bez argumentów, tak jak zrobiliśmy to powyżej, w tym przypadku zostaną użyte domyślne wartości dla szerokości, wysokości i grubości. Następnie definiujemy kilka punktów, które zostaną użyte do budowy naszego profilu bazowego.

Tutaj definiujemy geometrię: łuk, złożony z trzech punktów, oraz dwa odcinki linii, złożone z dwóch punktów.

Pamiętasz różnicę między geometrią a kształtami? Tutaj budujemy kształty z naszej geometrii konstrukcyjnej. Trzy krawędzie (krawędzie mogą być proste lub zakrzywione), następnie linia łamana wykonana z tych trzech krawędzi.

Do tej pory zbudowaliśmy tylko połowę profilu. Zamiast budować cały profil w ten sam sposób, możemy po prostu zrobić lustrzane odbicie tego, co zrobiliśmy i skleić obie połówki. Najpierw utworzymy macierz. Macierz jest bardzo popularnym sposobem na zastosowanie transformacji do obiektów w świecie 3D, ponieważ może ona zawierać w jednej strukturze wszystkie podstawowe transformacje, jakim mogą podlegać obiekty 3D (przesuwanie, obracanie i skalowanie). Po utworzeniu macierzy odbijamy ją w lustrze, następnie tworzymy kopię naszej linii łamanej i nakładamy na nią macierz transformacji. Mamy teraz już dwie linie, z których możemy utworzyć trzecią, gdyż linie to tak naprawdę listy krawędzi.

Teraz, gdy mamy już zamkniętą linię łamaną, można ją przekształcić w ścianę. Gdy mamy już ścianę, możemy ją wyciągnąć. W ten sposób tworzymy bryłę. Następnie nakładamy na nasz obiekt małe, ładne zaokrąglenie, ponieważ zależy nam na dobrym projekcie, prawda?

W tym momencie korpus naszej butelki jest już gotowy, ale musimy jeszcze stworzyć szyjkę. Tworzymy więc nową bryłę, z walcem.

Obsługa operacji scalenia jest bardzo wydajna. Zajmie się sklejaniem tego, co trzeba skleić i usuwaniem części, które trzeba usunąć.

Następnie zwracamy naszą bryłę typu Część jako wynik naszej funkcji.

Na koniec wywołujemy funkcję, aby faktycznie utworzyć część, a następnie uczynić ją widoczną.

<span id="Example:_Pierced_box">

Przykład: Sześcian z otworami
Oto kompletny przykład budowy sześcianu z otworami.

Konstrukcja jest wykonywana po jednym boku na raz. Kiedy kostka jest gotowa, zostaje wydrążona przez wycięcie w niej walca.

<span id="Loading_and_saving">

Wczytywanie i zapisywanie
Jest kilka sposobów na zapisanie swojej pracy. Możesz oczywiście zapisać swój dokument FreeCAD, ale możesz również zapisać obiekty typu Część bezpośrednio do popularnych formatów CAD, takich jak BREP, IGS, STEP i STL.

Zapisywanie kształtu do pliku jest łatwe. Dla wszystkich obiektów kształtu dostępne są metody, , oraz. Tak więc, wykonując:

zapisze naszą kostkę do pliku STEP. Aby wczytać plik BREP, IGES lub STEP:

Aby przekonwertować plik STEP na plik IGS: