20 kwietnia 2024


Spotkania z użytkownikami systemu CATIA, a także dyskusje prowadzone na forach internetowych są dla mnie zawsze inspirujące. Cykl artykułów, który niniejsza publikacja rozpoczyna, powstał niejako w odpowiedzi na pytanie zadane właśnie na forum użytkowników i jest „reakcją” na temat definiowania ewolwentowej powierzchni śrubowej.

Andrzej Wełyczko

Powierzchnia takiego typu (Rys.1) może być zastosowana jako model powierzchni bocznej zęba ślimaka ewolwentowego, który jest śrubowym kołem zębatym o zarysie ewolwentowym i bardzo małej liczbie zębów.

ewolwentowa
Rys. 1

Ewolwentowa powierzchnia śrubowa jest szczególnym przypadkiem prostoliniowej powierzchni śrubowej, który zachodzi wtedy, gdy tworząca powierzchni bocznej zęba jest styczna do linii śrubowej na walcu zasadniczym. Kąt nachylenia ß prostej tworzącej powierzchnię ewolwentową do płaszczyzny prostopadłej do osi ślimaka jest taki sam jak kąt wzniosu linii śrubowej na walcu zasadniczym.
Prostoliniowy przekrój takiej powierzchni występuje tylko w przekrojach stycznych do walca zasadniczego. I tu pojawia się problem, bo polecenia definiujące powierzchnie w systemie CATIA V5 za pomocą przekrojów i krzywych prowadzących (Sweep, Multi-Section Surface, Blend) bazują na definicji przekrojów zdefiniowanych na płaszczyźnie prostopadłej do krzywej kręgosłupowej (Spine). Jak w takim razie zdefiniować w systemie CATIA V5 ewolwentową powierzchnię śrubową wtedy, gdy zadane przekroje leżą na płaszczyznach stycznych, a nie prostopadłych do zadanej krzywej?

Rys02 ewolwentowa
Rys. 2

Odpowiedź wydaje się oczywista: trzeba znaleźć taką krzywą, dla której proste tworzące znajdują się na płaszczyznach prostopadłych do tej krzywej. Poszukiwanie rozwiązania najlepiej rozpocząć od analizy geometrycznej zadania. Na przykład (Rys.2), jeśli na krzywej śrubowej (Helix.1) zdefiniujemy dowolny punkt (AnyPoint), a następnie linię styczną do krzywej śrubowej w tym punkcie (TangentLine) i ustalimy długość tej linii za pomocą formuły obliczeniowej (Formula.2), to otrzymamy wymagany przekrój poszukiwanej powierzchni.
Długość przekroju szukanej powierzchni musi być równa odległości punktu styczności od początku krzywej śrubowej mierzonej wzdłuż tej krzywej. Łatwo to sprawdzić za pomocą formuł obliczających wartości parametrów AnyPoint Distance from StartPoint i TangentLine Length (Rys. 3).

Rys03 ewolwentowa
Rys. 3

Ponadto, niezależnie od położenia punktu styczności, kąt pomiędzy zadanym przekrojem powierzchni (TangentLine), a jego rzutem (Project.1) na płaszczyznę (tu: xy plane) prostopadłą do osi krzywej śrubowej, jest zawsze stały (tu, dla zadanych parametrów krzywej Helix.1, jest 17,657 deg). Punkt końcowy linii TangentLine leży na płaszczyźnie prostopadłej do osi krzywej śrubowej Helix.1 wyznaczonej przez punkt początkowy (StartPoint) tej krzywej – patrz: MeasureBetween.1/Length = 0mm.
Definicja poszukiwanej ewolwentowej powierzchni ślimakowej musi więc być oparta na krzywej, która jest zbiorem punktów przecięcia linii stycznych do krzywej śrubowej z płaszczyzną wyznaczoną przez punkt początkowy tej krzywej (tu: StartPoint) oraz prostopadłą do osi tej krzywej. W systemie CATIA V5 nie ma polecenia, które automatycznie definiuje taką krzywą, ale to nie znaczy, że taka definicja nie jest możliwa.
Każda krzywa (i nie tylko krzywa) może być zdefiniowana za pomocą polecenia Knowledge Pattern (środowisko Product Knowledge Template). Knowledge Pattern to obiekt, który umożliwia automatyczne generowanie elementów geometrycznych typu Datum (punkty, linie, okręgi, krzywe, powierzchnie lub płaszczyzny) albo wstawianie szablonów konstrukcyjnych typu User Feature, których liczba jest kontrolowana przez parametr użytkownika. Takie możliwości są moim zdaniem idealne do rozwiązania tego problemu. Proponuję pominąć nieistotne dla tego przykładu szczegóły teoretyczne i przystąpić do realizacji kolejnych kroków procedury konstrukcyjnej:
1. Parametr NbOfPoints (Rys. 4) określa deklarowaną przez konstruktora liczbę punktów, które posłużą do wyznaczenia szukanej krzywej.

Rys04 ewolwentowa
Rys. 4

2. Idea działania Knowledge Pattern jest bardzo podobna do Reaction – zmiana, którą może być zmiana wartości parametru NbOfPoints uruchamia (zazwyczaj w pętli) procedurę generowania obiektów typu Datum (tu: zestaw nowych punktów krzywej).
3. W polu Knowledge Pattern Lists zdefiniowane zostały dwie listy:

  • EndPoints – zbiór (lista) punktów szukanej krzywej,
  • Splines – zbiór krzywych (tu przechowana zostanie definicja szukanej krzywej).

4. W głównym oknie edycji obiektu Knowledge Pattern.1 zdefiniowany został program generujący wymagane elementy geometryczne. Kod takiego programu można podzielić na cztery zasadnicze segmenty:

  • Deklaracja zmiennych,
  • Ustalenie wartości początkowych,
  • Pętla generowania punktów krzywej,
  • Definicja krzywej.

Rys05 ewolwentowa
Rys. 5

5. W polu Execution wybrać tryb wykonania: ręczny (Manual execution) lub automatyczny (Automatic execution (before root update)).
Jeśli wybrany zostanie tryb automatyczny, to po każdej zmianie wartości parametru NbOfPoints lub modyfikacji dowolnego elementu geometrycznego, do którego nawiązuje program generujący, zdefiniowany wewnątrz Knowledge Pattern, system automatycznie odświeży definicje wszystkich punktów (patrz zawartość zestawu Output/MyPoints) i dla tych punktów zbuduje nową krzywą SurfaceBoundary.


Jeśli trzeba, to po niewielkiej modyfikacji programu (Rys. 6) można wygenerować inne obiekty geometryczne, na przykład kolejne przekroje szukanej powierzchni – tu: linie oznaczone jako MyLine.X.

Rys06 ewolwentowa
Rys. 6

Jeśli te linie mają być obiektami geometrycznymi, a nie tylko pomocniczymi w wykonaniu procedury realizowanej przez Knowledge Pattern, to trzeba zdefiniować listę, w której przechowywana będzie ich definicja (tu Relations\Knowledge Pattern.1\Lines). Linie zestawu MyLines nie są konieczne do definicji krzywej SurfaceBoundary, ale przydadzą się w kolejnych etapach budowania modelu ewolwentowej powierzchni śrubowej.
Liczba punktów generowanych za pomocą Knowledge Pattern powinna być na tyle duża, żeby uzyskać odpowiednią dokładność krzywej SurfaceBoundary. Wartość parametru NbOfPoints nie może być jednak zbyt duża (Rys. 7), zwłaszcza wtedy, gdy procedura generowania punktów nie analizuje odległości pomiędzy kolejnymi punktami.

Rys07 ewolwentowa
Rys. 7

Jeśli dwa kolejne punkty są identyczne, czyli mieszczą się w zakresie tolerancji geometrycznej systemu CATIA V5 (0,001mm), to nie jest możliwa konstrukcja krzywej typu Spline wyznaczonej przez takie punkty. W rezultacie dla zadanej krzywej śrubowej trzeba ustalić taką liczbę punktów (tu: 250), która zapewnia dobrą jakość krzywej SurfaceBoundary lub zmodyfikować procedurę generowania punktów w taki sposób, aby odrzucić punkty leżące w odległości mniejszej niż 0,001mm.
Jeśli uznamy, że krzywa SurfaceBoundary jest gotowa, to można rozpocząć definiowanie powierzchni. W tym celu zastosujemy polecenie Sweep dla profilu liniowego w trybie Two Limits (Rys. 8).

Rys08 ewolwentowa
Rys. 8

W jaki sposób jest definiowana taka powierzchnia? Dla każdego punktu krzywej Spine system generuje płaszczyznę prostopadłą do tej krzywej w tym punkcie, wyznacza punkty przecięcia tej płaszczyzny z krzywymi Guide curve1 i Guide curve2, a następnie pomiędzy tymi punktami tworzy linię, która jest przekrojem definiowanej powierzchni.
Niestety opisana wyżej procedura definiowania powierzchni typu Sweep nie jest możliwa do wykonania dla Guide curve1 = SurfaceBoundary, Guide curve2 = Helix.1 i Spine = SurfaceBoundary. Dlaczego? Tu po raz kolejny proponuję analizę geometryczną problemu (Rys. 9):

  • MyPoint – dowolny punkt na krzywej SurfaceBoundary,
  • NormalPlane – płaszczyzna prostopadła do krzywej SurfaceBoundary w punkcie MyPoint,
  • Intersect.1 – punkt przecięcia płaszczyzny NormalPlane z krzywą śrubową Helix.1.

 

Rys09 ewolwentowa
Rys. 9

Dla parametru Ratio=0,25 punktu MyPoint system wyznaczył punkt Intersect.1. Niestety dla skrajnych fragmentów krzywej SurfaceBoundary (w tym przykładzie dla Ratio ≤ 0,02 i Ratio ≥ 0,89) wyznaczenie punktu Intersect.1 nie jest możliwe. System nie może znaleźć punktu przecięcia płaszczyzny NormalPlane z krzywą Helix.1, bo ta płaszczyzna jest teoretycznie styczna do tej krzywej. Podkreślam słowo teoretycznie, bo praktycznie płaszczyzna NormalPlane może mieć dwa punkty przecięcia z krzywą Helix.1 lub jeśli minimalna odległość płaszczyzny NormalPlane od krzywej Helix.1 jest większa niż 0,001mm, to punkt przecięcia nie istnieje i to są przyczyny błędu wykonania polecenia Sweep.
Problem może wynikać z niskiej jakości krzywej SurfaceBoundary i w takim przypadku rozwiązaniem może być zwiększenie wartości parametru NbOfPoints. Jeśli i to nie pomaga, to trzeba zauważyć, że ewolwentowa powierzchnia śrubowa (powierzchnia boczna zęba ślimaka ewolwentowego) powinna być zdefiniowana nie od walca zasadniczego, ale od walca den wrębów. W rozważanym przykładzie oznacza to, że wystarczy wyznaczyć krzywą brzegową ewolwentowej powierzchni śrubowej leżącą na powierzchni Offset.1 (Rys. 10).

Rys10 ewolwentowa
Rys. 10

Offset.1 czyli model cylindra den wrębów jest powierzchnią równoległą do Cylinder.1, a wartość odległości tych powierzchni (Offset = 5mm) została tu wybrana zupełnie dowolnie, czyli bez związku z teorią projektowania ślimaków. Gdybyśmy na krzywej SurfaceBoundary zdefiniowali kilka punktów (tu: Point.1, Point.2 i Point.3), potem płaszczyzny prostopadłe do krzywej SurfaceBoundary w tych punktach (tu: Plane.1, Plane.2 i Plane.3) oraz linie (tu: Line.1, Line.2 i Line.3) leżące na tych płaszczyznach zaczepione na krzywej SurfaceBoundary i tworzące kąt 17,657deg z płaszczyzną XY, to punkty przecięcia (XPoint.1, Xpoint.2 i XPoint.3) tych linii z powierzchnią Offset.1 wyznaczyłyby szukaną krzywą brzegową (tu: Spline.1). Punkt początkowy krzywej Spline.1 jest punktem przecięcia krzywej SurfaceBoundary z powierzchnią Offset.1. Kąt 17,657deg jest kątem wzniosu ß linii śrubowej (czyli krzywej Helix.1) i może być zmierzony, jako kąt pomiędzy liniami TangentLine i Project.1 (patrz: Rys. 3). Ponadto odległość punktu przecięcia każdej linii z powierzchnią Offset.1 od punktu styczności tej linii z krzywą Helix.1 jest stała i dla parametrów krzywej Helix.1 zastosowanych w tym przykładzie wynosi 24,045mm.
Czas „przełożyć” opisaną wyżej analizę geometryczną na kod generujący drugą krzywą brzegową (leżącą na powierzchni Offset.1) za pomocą funkcji Knowledge Pattern (Rys. 11).

Rys11 ewolwentowa
Rys. 11

Zdefiniowana wcześniej procedura generowania krzywej SurfaceBoundary może być zmodyfikowana przez dodanie kolejnej listy (Relations\Knowledge Pattern.1\XPoints), nowych warunków początkowych oraz kolejnej pętli konstrukcyjnej. Nowe warunki początkowe to ustalenie wartości parametru mindist (mindist = distance(P1, intersect(L, Input\Offset.1))), czyli pomiar odległości pomiędzy punktem końcowym krzywej Helix.1 (tu: P1) a punktem przecięcia linii stycznej (tu: L) do krzywej Helix.1 w tym punkcie z powierzchnią Offset.1 (patrz: wymiar 24,045mm opisany wyżej). Zdefiniowany został także punkt początkowy nowej krzywej brzegowej P2 (P2 = intersect(spline, Input\Offset.1)), czyli punkt przecięcia krzywej spline z powierzchnią Input\Offset.1.
W pętli konstrukcyjnej generowane są tylko takie punkty przecięcia linii L z powierzchnią Offset.1, dla których długość linii L jest większa od obliczonej wcześniej wartości parametru mindist, czyli wtedy, gdy spełniony jest warunek if length(L) >= mindist. Dzięki takiemu warunkowi system generuje tylko takie punkty, które znajdują się powyżej płaszczyzny podstawowej (tu: xy plane).
Po wykonaniu procedury konstrukcyjnej zdefiniowanej w Knowledge Pattern.1 otrzymujemy dwie krzywe brzegowe ewolwentowej powierzchni śrubowej: SurfaceBoundary i CurveOnOffset. Definicja powierzchni typu Sweep dla tych krzywych nie wymaga chyba komentarza (Rys. 12), chociaż trzeba podkreślić, że krzywą wskazaną w polu Spine musi być SurfaceBoundary.

Rys12 ewolwentowa
Rys. 12

Wskazanie innej krzywej oznacza inny rozkład płaszczyzn generujących i w konsekwencji – inny niż wymagany kształt powierzchni Sweep.1.
Pozostaje jedynie sprawdzenie, czy przekrój powierzchni Sweep.1 jest rzeczywiście liniowy. W tym celu zastosowano analizę rozkładu krzywizny krzywej przecięcia (Intersect.1) płaszczyzny prostopadłej (NormalPlane) do krzywej SurfaceBoundary w jej dowolnym punkcie (AnyPointOnSurfaceBoundary) z powierzchnią Sweep.1. Wynik jest jednoznaczny: promień analizowanej krzywej jest nieskończony, czyli Intersect.1 jest odcinkiem linii prostej.

Rys13 ewolwentowa
Rys. 13

I tu mógłbym zakończyć, gdybym nie miał wrażenia, że taka „zwykła” powierzchnia powinna być możliwa do zdefiniowania w łatwiejszy sposób. Analiza geometryczna problemu (patrz:  Rys. 2 i Rys. 3) ograniczyła mój tok rozumowania, a tymczasem znacznie lepsze rozwiązanie sugeruje już sama nazwa powierzchni: ewolwentowa! Ale o tym w kolejnym odcinku.

Andrzej Wełyczko

 

artykuł pochodzi z wydania 1/2 (88/89) styczeń-luty 2015