Definiowanie krzywych konstrukcyjnych w CATIA
Krzywe konstrukcyjne to takie krzywe, których definicja nie zawsze jest możliwa za pomocą pojedynczych poleceń środowiska Generative Shape Design. Definiowanie krzywych elementarnych nie zawsze spełnia wszystkie wymagania konstrukcyjne, bo konstruktor musi czasami przyci zbyt długie krzywe, podzielić krzywą na kilka części lub wykona jakąś transformację geometryczną. Polecenia wspomagające konstruktora w tego typu zadaniach znajdują się w pasku narzędziowym Operations (rysunek 2.269). Niektóre z tych narzędzi omówiono już wcześniej (grupa Extracts: polecenia Boundary i Extract), a część z nich (polecenie Extrapolate oraz grupę Transformations) pozostawię bez komentarza, bo moim zdaniem transformacje geometryczne typu obrót lub symetria, lub ekstrapolacja krzywej są po prostu trywialne.
Rysunek 2.269. Zestawienie poleceń grupy Operations środowiska Generative Shape Design
Polecenie Join
Polecenie Join służy do łączenia kilku krzywych lub powierzchni w jeden obiekt geometryczny. Po co łączy krzywe? Połączenie wielu drobnych krzywych jest często jedynym możliwym rozwiązaniem, zwłaszcza wtedy, gdy krzywe podstawowe modelu powierzchniowego (zadane przekroje powierzchni, krzywe prowadzące lub krzywa typu Spine) nie mogą by zdefiniowane za pomocą jednego polecenia. Na pierwszy rzut oka działanie tego polecenia jest bardzo intuicyjne. Wystarczy zaznaczy wszystkie krzywe, które mają by połączone (rysunek 2.270 i 2.271), czyli wskaza każdą krzywą lub zastosowa dowolny tryb wyboru wielokrotnego (Multi-Select lub Search) i zaakceptowa definicję krzywej typu Join (rysunek 2.272).
Rysunek 2.270. Zastosowanie polecenia Join - krok 1.
Rysunek 2.271. Zastosowanie polecenia Join - krok 2.
Rysunek 2.272. Zastosowanie polecenia Join - krok 3.
Krzywe elementarne definiowane przez konstruktora są zawsze topologicznie poprawne. Nieco trudniej zapewni taką jakość krzywych, które powstały na przykład w wyniku przecięcia dwóch powierzchni lub rzutowania krzywej na powierzchnię. W takich przypadkach po uruchomieniu polecenia Join dobrze jest włączyć opcję Check manifold. Jeśli łączymy kilka krzywych, to zazwyczaj nieświadomie zakładamy, że wszystkie te krzywe s wzajemnie ciągłe, przynajmniej według kryterium G0. Łczenie krzywych, które się wzajemnie przecinają, lub takich, których punkty skrajne nie są wspólne (w zakresie pewnej tolerancji), nie ma przecież praktycznego uzasadnienia w projektowaniu powierzchniowym. W tym sensie wybór krzywych do połączenia może wspomaga polecenie Distance Propagation, dostępne po wskazaniu przynajmniej jednej krzywej w menu kontekstowym obszaru Elements To Join okna Join Definition (rysunek 2.273).
Rysunek 2.273. Wybór krzywych za pomocą polecenia Distance Propagation
W rezultacie zastosowania polecenia Distance Propagation zostaną wybrane wszystkie krzywe, które są wzajemnie ciągłe. Wartość parametru Merging distance określa w tym przypadku lokalną tolerancję identyczności punktów stosowaną przez algorytm polecenia Join:
- Jeśli odległość dwóch punktów skrajnych kolejnych (sąsiadujących) krzywych jest mniejsza od Merging distance, to system traktuje te dwa punkty jako identyczne. Nie jest możliwe zdefiniowanie odcinka linii prostej, którego punkty skrajne są odległe o mniej niż Merging distance.
- Jeśli odległość dwóch punktów skrajnych kolejnych (sąsiadujących) krzywych jest większa od Merging distance, to system traktuje te dwa punkty jako różne i dlatego można zdefiniować odcinek linii prostej lub dowolną krzywą łączącą te punkty. Automatyczny wybór krzywych (Distance Propagation) jest w takim przypadku zatrzymany. Na przykład jeśli krzywe Curve.2 i Curve.3 nie są ciągłe, a odległość ich punktów skrajnych jest większa od standardowej wartości Merging distance : 0,001 mm, to po wskazaniu krzywej Curve.1 i uruchomieniu polecenia Distance Propagation propagacja wyboru zatrzyma się na krzywej Curve.2 (rysunek 2.274).
Rysunek 2.274. Rezultat zastosowania polecenia Distance Propagation
Możliwe jest „ręczne” wskazanie krzywej Curve.3 i zatwierdzenie wykonania polecenia Join, ale przy włączonej opcji Check connexity pojawią się błąd wykonania, bo wynikowa krzywa Join.1 składa się z dwóch nieciągłych części (rysunek 2.275).
Rysunek 2.275. Przykład błędu wykonania polecenia Join dla krzywych bez ciągłości geometrycznej
Wydaje się, że najprostszym rozwiązaniem jest wyłączenie opcji Check connexily, czyli trybu sprawdzania ciągłości łączonych krzywych. Nie wpływa to jednak w żaden sposób na jakość krzywej Jam.], bo mimo że jej definicją jest możliwa dla krzywych nieciągłych, to brak ciągłości krzywej wynikowej jest sygnalizowany znakami X. Topologicznie krzywa Join.1 jest więc jednym obiektem (rysunek 2.276), ale z powodu nieciągłości jej krzywych składowych, także ich „suma” nie ma ciągłości geometrycznej.
Rysunek 2.276. Przykład krzywej typu Join z nieciągłością geometryczną
Brak ciągłości geometrycznej krzywej Join.1 oraz wielkość tej nieciągłości można łatwo sprawdzić za pomocą polecenia Curve Connect Checker (rysunek 2.277). Rezultat tej analizy wyrażnie dowodzi, że polecenie Join nie naprawia geometrii (nie modyfikuje krzywych wejściowych), a jedynie łączy te krzywe w jeden logicznie spójny obiekt geometryczny. Punkty P1 i P2 są topologicznie identyczne, chociaż geometrycznie są to dwa różne punkty.
Gdybyśmy zwiększyli tolerancję do wartości większej od zmierzonej nieciągłości krzywych Curve.2 i Curve.3, na przykład Merging distance : 0,025 mm, to polecenie Distance Propagation zakończy się wyborem wszystkich trzech krzywych, a krzywą Join.1 wygląda na ciągłą według kryterium G0 (rysunek 2.278). Wygląda na ciągłą, ale taką nie jest, bo wartość parametru Merging distance nie ma żadnego wpływu na ciągłość krzywej Join.1.
Rysunek 2.277. Analiza ciągłości geometrycznej krzywej Join. 1
Rysunek 2.278. Definicja krzywej Join.1 z tolerancją ciągłości Merging distance = 0,025 mm
Wartość parametru Merging distance powinna być większa od zmierzonej nieciągłości krzywych. Nie zaleca się stosowania wartości Merging distance = Measure Between.
Wartość parametru Merging distance nie może być większa od 0,1 mm. Nie można przecież oczekiwać, że system będzie poprawiał każdą niedoróbkę lub wyręczął leniwego konstruktora. Mimo że teoretycznie możliwa jest zmiana zakresu wartości tego parametru (rysunek 2.279), to algorytm polecenia Join nie akceptuje wartości większych niż 0,1 mm i próba wykonania tego polecenia z wartością Merging distance > 0,1 mm kończy się błędem wykonania.
Krzywą Join.1 zdefiniowaną z maksymalną wartością parametru Merging distance mimo swej niedoskonałości może być w ograniczonym zakresie zastosowaną do budowy modelu powierzchniowego. Na przykład powierzchnią Sweep.1 (rysunek 2.280), zdefiniowaną jako przeciągnięcie segmentu liniowego o długości Length1 = 20 mm wzdłuż krzywej Join.1 z zachowaniem kąta Angle = 0 deg z powierzchnią bazową Reference surface = xy plane, jest całkowicie poprawną. Jeśli jednak krzywa typu Spine tej powierzchni zostanie zmieniona na Join.1 (rysunek 2.281), to system wyświetli komunikat z ostrzeżeniem o braku ciągłości stycznych (typ G1) tej krzywej. Definicja powierzchni Sweep.1, pomimo problematycznej definicji krzywej Join.1, jest możliwa, ale model geometryczny nie jest stabilny - niewielkie zmiany geometrii lub wartości parametrów mogą być powodem błędu wykonania polecenia Sweep.
Rysunek 2.279. Maksymalna wartość parametru Merging distance = 0,1 mm nie może być zmieniona
Rysunek 2.280. Przykład powierzchni typu Sweep z Join. 1 jako krzywą prowadzącą i X Axis jako Spine
Powyższy przykład krzywej złożonej z kilku innych krzywych elementarnych powinien przypomnieć Czytelnikowi, że ciągłość krzywej to nie tylko ciągłość geometryczną (G0), bo w większości przypadków konstrukcyjnych wymagania stawiane krzywym to przynajmniej ciągłość stycznych (G1). Dlatego polecenie Join umożliwią analizę ciągłości stycznych krzywych wejściowych (aktywną opcją Check tangency). Na przykład jeśli dla krzywych Curve.1 i Curve.2 (rysunek 2.282) kąt pomiędzy stycznymi do obu krzywych w ich punkcie wspólnym ma wartość 14,884 deg, to próba połączenia tych krzywych z aktywną opcją Check tangency generuje błąd wykonania.
Gdyby dla bardzo podobnych krzywych kąt pomiędzy stycznymi w ich punkcie wspólnym był mniejszy od 0,5 deg, na przykład 0,349 deg, to zastosowanie polecenia Join do takich krzywych nie generuje żądnego błędu wykonania (rysunek 2.283), bo 0,5 deg jest standardową tolerancją styczności krzywych w systemie CATIA V5. Jeśli kąt stycznych do dwóch krzywych w ich punkcie wspólnym jest mniejszy od tolerancji styczności, to system traktuje te krzywe jako ciągłe według kryterium Gl. Zwracam uwagę, że określenie „kąt pomiędzy stycznymi do dwóch krzywych w ich punkcie wspólnym” oznacza ciągłość
krzywych przynajmniej według kryterium G0 i dlatego aktywna opcja Check tangency wymusza aktywność opcji Check connexity.
Rysunek 2.281. Przykład powierzchni typu Sweep z Join.1 jako krzywą prowadzącą i jednocześnie jako Spine
Rysunek 2.282. Przykład błędu wykonania polecenia Join dla krzywych bez ciągłości stycznych
Gdyby dla bardzo podobnych krzywych kąt pomiędzy stycznymi w ich punkcie wspólnym był większy od 0,5 deg, na przykład 0,999 deg, to zastosowanie polecenia Join do takich krzywych generuje błąd wykonania (rysunek 2.284). Większa wartość tolerancji styczności krzywych Curva.1 i Curve.2 w ich punkcie wspólnym, na przykład Angular Threshold = 1,5 deg, generuje topologicznie ciągłą krzywą Join.1. (rysunek 2.285). Krzywa Join.1 wygląda na ciągłą według kryterium G1, ale taką nie jest,
bo nadmierne zwiększanie wartości parametru Angular Threshold nie rozwiązuje problemu nieciągłości geometrycznej tej krzywej.
Rysunek 2.283. Przykład krzywej typu Join z nieciągłością styczności
Rysunek 2.284. Przykład błędu wykonania polecenia Join dla krzywych bez ciągłości stycznych dla wartości parametru Angular Threshold mniejszej od kąta stycznych do krzywych Curve.1 i Curve.2
Rysunek 2.285. Przykład krzywej typu Join z nieciągłością styczności
Rysunek 2.286. Analiza ciągłości stycznych krzywej Join.1
Brak ciągłości stycznych krzywej Jam.] oraz wielkość tej nieciągłości można łatwo sprawdzić za pomocą polecenia Curve Connect Checker (rysunek 2.286). W rezultacie poraz kolejny widać, że polecenie Join nie naprawia geometrii (nie modyfikuje krzywych wejściowych), a jedynie łączy te krzywe w jeden logicznie spójny obiekt geometryczny - krzywa Join.1. ma w punkcie wspólnym krzywych Curve.1 i Curve.2 nieciągłość stycznych o wartości 1 deg.
Zakładka Parameters okna Join Definition zwykle wystarcza do definicji krzywej typu Join. Jednak czasami konstruktor potrzebuje trochę więcej niż tylko klasyczną definicję krzywej sklejanej i stosuje nieco inną definicję krzywej sklejanej dostępną w zakładce Federation. Co to jest F ederation? Tu pozwolę sobie na pewną analogię geopolityczną. Federacja (ang. federation) to grupa państw posiadających pewną autonomię, ale bez granic wewnętrznych. Konfederacja (ang. confederation) jako pojęcie przeciwne federacji to także grupa państw, ale z wyraźnie wytyczonymi granicami wewnętrznymi. Klasyczna
definicja krzywej typu Join jest odpowiednikiem konfederacji kilku krzywych. Pomimo „sklejenia” w jeden obiekt (rysunek 2.287) system ciągle rozpoznaje krzywe cząstkowe oraz ich punkty skrajne (rysunek 2.288). Wskazanie krzywej lub jej punktu granicznego generuje komunikat systemowy w lewym dolnym rogu ekranu (EdgeJoin.1Geometrical Set.1 lub VertexJoin.1Geometrical Set.1). Tu chciałbym zauważyć, że krzywa sklejona może mieć swoją historię (listę krzywych cząstkowych) lub nie, ale nawet jeśli Join.1 zdefiniowano jako element typu Datum, to taka krzywa też może „pamiętać”, z jakich segmentów została sklejona (EdgeCurve.6Geometrical Set.1 lub VertexCurve.6Geometrical Set.1). O tym, czy zachowany jest dostęp do wewnętrznych krzywych cząstkowych, decyduje aktywność trybu Federation podczas definicji krzywej typu Join.
Rysunek 2.287. Klasyczna definicja krzywej typu Join w trybie Federation = No federation
Jaki wpływ może mieć taka definicja krzywej sklejanej na kolejne etapy procesu projektowego? Załóżmy, że konstruktor potrzebuje krzywej równoległej do jednego z segmentów krzywej Join.1. Taką krzywą można zdefiniować bezpośrednio, odwołując się do odpowiedniej krzywej cząstkowej (Curve.1 = Curve.5) lub pośrednio przez segment krzywej Join.1. Jeśli tylko definicja krzywej Join.1 zapewnia dostęp do jej „wewnętrznych”. Jeśli ta sama krzywa Join.1 zostałaby zdefiniowana w trybie Federation = Tangent segmentów (Federation = No federation), to można wskazać taki segment jako Element(s) to extract polecenia Extract (rysunek 2.289), a następnie zdefiniować krzywą równoległą (rysunek 2.290). continuity (także Point continuity lub All), to segmenty krzywej sklejonej nie będą rozpoznawane - wskazanie dowolnego z nich oznacza wskazanie całej krzywej Join.1 (rysunek 2.291). Wynik wskazania krzywej kursorem jest więc taki sam jak wskazanie tej
krzywej w drzewie strukturalnym modelu.
Rysunek 2.288. Segmenty i granice pomiędzy tymi segmentami dostępne w definicji krzywej Join w trybie Federation = No federation
Rysunek 2.289. Polecenie Extract zastosowane do segmentu krzywej Join.1
Rysunek 2.290. Definicja krzywej równoległej Parallel.1
Rysunek 2.291. Definicja krzywej typu Join w trybie Federation = Tangent continuity
Gdybyśmy dla krzywej typu Join, która jest elementem nadrzędnym innych elementów geometrycznych (na przykład dla krzywej Join.1 z rysunku 2.290), zmodyfikowali jej definicję przez włączenie trybu F ederation, to w konsekwencji pojawi się błąd wykonania operacji Update - krzywa Join.1 zdefiniowana w trybie Federation = Tangent continuity nie ma przecież segmentów i dlatego nie jest możliwa definicja krzywych Extract.1 oraz Parallel.1 (rysunek 2.292).
Rysunek 2.292. Błąd wykonania operacji Update po zmianie trybu z Federation = No federation na Federation = Tangent continuity
Kolejny przykład zastosowania krzywej sklejanej może być związany z definiowaniem konturów w środowisku Sketcher. Gdyby fragmentem konturu Sketch.1 miał być rzut (Projection.1 ) wskazanego segmentu krzywej Join.1 na płaszczyznę konturu (Plane.1 ), to w zależności od rodzaju definicji krzywej Join.1 otrzymamy inny rezultat (rysunek 2.293):
Klasyczna definicja krzywej Join.1 - tylko wskazany segment krzywej jest rzutowany,
Definicja krzywej Join.1 z aktywnym trybem F ederation:
Dla Federation = All - wszystkie segmenty krzywej Join.1 niezależnie od rodzaju ciągłości ze wskazaniem segmentem (także nieciągłe!) będą rzutowane,
Dla Federation = Point continuily - rzutowane będą tylko te segmenty krzywej Join.1 , które są ciągłe według kryterium G0 ze wskazanym segmentem,
Dla Federation = Tangent continuity - rzutowane będą tylko te segmenty krzywej Join.1, które są ciągłe według kryterium G1 ze wskazanym segmentem.
Rysunek 2.293. Przykłady rzutowania na płaszczyznę konturu segmentu przestrzennej krzywej Join.1 zdefiniowanej z wyłączonym i włączonym trybem Federation
Ostatnia z zakładek okna Join Definition, czyli Sub-Elements To Remove, umożliwia zdefiniowanie podzbioru krzywych wskazanych w polu Elements To Join. Gdybyśmy dla tych samych krzywych Curve.1, Curve.2 - Curve.5 zdefiniowali krzywą Join.1 i w polu Sub-Elements To Remove wskazali do usunięcia z definicji krzywej sklejanej krzywe Curve.4 i Curve.5 , to w rezultacie krzywa Join.1 byłaby sklejona tylko z krzywych Curve.1, Curve.2 i Curve.3 (rysunek 2.294). Taki sam rezultat można uzyskać bez definiowania listy elementów do usunięcia (Sub-Elements To Remove) przez ograniczenie listy Elements
To Join. Jedyne praktyczne zastosowanie tej zakładki to możliwość definiowania dwóch krzywych sklejanych jednocześnie.
Przy okazji omawiania tematu krzywych sklejanych nie sposób pominąć zagadnień związanych z naprawą nieciągłości krzywych cząstkowych. Niestety, w środowisku GSD nie ma odpowiednika polecenia Match Curve, które jest dostępne w środowisku FreeStyle. Kształt krzywej Curve.1 jest na rysunku 2.295 modyfikowany automatycznie w taki sposób, aby z krzywą Curve.2 uzyskać wymagany rodzaj ciągłości (Point, Tangency lub Curvature). Inaczej mówiąc, kształt krzywej Curve] wynika ze stopnia tej krzywej oraz warunków ciągłości zdefiniowanych w jej punktach skrajnych.
Brak polecenia typu Match Curve w środowisku GSD nie oznacza jednak, że konstruktor nie może naprawić nieciągłości krzywych. Musi to jednak zrobić „ręcznie”, stosując na przykład sekwencję poleceń: Split, potem Connect Curve lub Spline i na zakończenie Join.
Rysunek 2.294. Zastosowanie listy elementów do usunięcia (Sub-Elements To Remove) w definicji krzywej typu Join
Rysunek 2.295. Automatyczna modyfikacja kształtu krzywej w środowisku FreeStyle wymuszona przez warunki ciągłości i stopień krzywej
CATIA V5. Sztuka modelowania powierzchniowego, autor: Andrzej Wełyczko Wydawnictwo: Helion