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:

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ęść 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ł Część, abyśmy mogli korzystać z jego zawartości w środowisku Python. Zaimportujemy również moduł Base z wnętrza modułu FreeCAD:

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.

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:

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.

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.

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.

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ę.

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

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.

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

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

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.

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.

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.

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:

Once our matrix is set, we can apply it to our shape. FreeCAD provides two methods for doing that: and. The difference is that with the first one, you are sure that no deformations will occur (see Scaling a shape below). We can apply our transformation like this:

or

Scale a shape
Scaling a shape is a more dangerous operation because, unlike translation or rotation, scaling non-uniformly (with different values for X, Y and Z) can modify the structure of the shape. For example, scaling a circle with a higher value horizontally than vertically will transform it into an ellipse, which behaves mathematically very differently. For scaling, we cannot use the, we must use :

Subtraction
Subtracting a shape from another one is called "cut" in FreeCAD and is done like this:

Intersection
The same way, the intersection between two shapes is called "common" and is done this way:

Union
Union is called "fuse" and works the same way:

Section
A "section" is the intersection between a solid shape and a plane shape. It will return an intersection curve, a compound curve composed of edges.

Extrusion
Extrusion is the act of "pushing" a flat shape in a certain direction, resulting in a solid body. Think of a circle becoming a tube by "pushing it out":

If your circle is hollow, you will obtain a hollow tube. If your circle is actually a disc with a filled face, you will obtain a solid cylinder:

Explore shapes
You can easily explore the topological data structure:

By typing the lines above in the Python interpreter, you will gain a good understanding of the structure of Part objects. Here, our command created a solid shape. This solid, like all Part solids, contains faces. Faces always contain wires, which are lists of edges that border the face. Each face has at least one closed wire (it can have more if the face has a hole). In the wire, we can look at each edge separately, and inside each edge, we can see the vertices. Straight edges have only two vertices, obviously.

Edge analysis
In case of an edge, which is an arbitrary curve, it's most likely you want to do a discretization. In FreeCAD the edges are parametrized by their lengths. That means you can walk an edge/curve by its length:

Now you can access a lot of properties of the edge by using the length as a position. That means if the edge is 100mm long the start position is 0 and the end position 100.

Use a selection
Here we see now how we can use a selection the user did in the viewer. First of all we create a box and show it in the viewer.

Now select some faces or edges. With this script you can iterate over all selected objects and their sub elements:

Select some edges and this script will calculate the length:

Example: The OCC bottle
A typical example found on the OpenCasCade Technology website is how to build a bottle. This is a good exercise for FreeCAD too. In fact, if you follow our example below and the OCC page simultaneously, you will see how well OCC structures are implemented in FreeCAD. The script is included in the FreeCAD installation (inside the folder) and can be called from the Python interpreter by typing:

The script
For the purpose of this tutorial we will consider a reduced version of the script. In this version the bottle will not be hollowed out, and the neck of the bottle will not be threaded.

Detailed explanation
We will need, of course, the module, but also the  module, which contains basic FreeCAD structures like vectors and matrices.

Here we define our function. This function can be called without arguments, like we did above, in which case default values for width, height, and thickness will be used. Then, we define a couple of points that will be used for building our base profile.

Here we define the geometry: an arc, made of three points, and two line segments, made of two points.

Remember the difference between geometry and shapes? Here we build shapes out of our construction geometry. Three edges (edges can be straight or curved), then a wire made of those three edges.

So far we have built only a half profile. Instead of building the whole profile the same way, we can just mirror what we did and glue both halves together. We first create a matrix. A matrix is a very common way to apply transformations to objects in the 3D world, since it can contain in one structure all basic transformations that 3D objects can undergo (move, rotate and scale). After we create the matrix we mirror it, then we create a copy of our wire and apply the transformation matrix to it. We now have two wires, and we can make a third wire out of them, since wires are actually lists of edges.

Now that we have a closed wire, it can be turned into a face. Once we have a face, we can extrude it. In doing so, we make a solid. Then we apply a nice little fillet to our object because we care about good design, don't we?

At this point, the body of our bottle is made, but we still need to create a neck. So we make a new solid, with a cylinder.

The fuse operation is very powerful. It will take care of gluing what needs to be glued and remove parts that need to be removed.

Then, we return our Part solid as the result of our function.

Finally, we call the function to actually create the part, then make it visible.

Example: Pierced box
Here is a complete example of building a pierced box.

The construction is done one side at a time. When the cube is finished, it is hollowed out by cutting a cylinder through it.

Loading and saving
There are several ways to save your work. You can of course save your FreeCAD document, but you can also save Part objects directly to common CAD formats, such as BREP, IGS, STEP and STL.

Saving a shape to a file is easy. There are, , and  methods available for all shape objects. So, doing:

will save our box into a STEP file. To load a BREP, IGES or STEP file:

To convert a STEP file to an IGS file: