26 kwietnia 2024

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