26 kwietnia 2024

 

 
Zgodnie z obietnicą, poczynioną w poprzedniej części naszego cyklu, chciałbym przedstawić teraz przykład zastosowania omówionych dotąd metod unikania dwuznaczności w modelowaniu.

Andrzej Wełyczko

Wiele cech konstrukcyjnych modeli 3D jest określonych na podstawie konturów, których geometria jest zdefiniowana jako obiekty typu Sketch. Z dwóch dostępnych poleceń (Sketch lub Positioned Sketch) większość użytkowników systemu CATIA V5 wybiera polecenie Sketch, bo jest ono domyślnie proponowane przez system. Tymczasem istotną cechą definicji konturu za pomocą polecenia Sketch jest to, że system oczekuje tylko na wskazanie płaszczyzny szkicowania. Użytkownik nie wskazuje żadnych elementów, które mogłyby posłużyć do ustalenia układu współrzędnych HV szkicownika na wskazanej płaszczyźnie, bo system ustala położenie i orientację tego układu domyślnie:
  • Jeśli wskazana jest płaszczyzna (obiekt typu Plane) lub płaska powierzchnia bryły (obiekt typu Face), to środek układu współrzędnych konturu jest rzutem punktu (0,0,0) modelu przestrzennego na płaszczyznę szkicowania, a orientacja lokalnego układu HV konturu jest zgodna z rzutem osi Z lub Y globalnego układu współrzędnych modelu 3D na płaszczyznę szkicowania.
  • Jeśli wskazana jest jedna z płaszczyzn głównych (xy plane, yz plane lub zx plane) lub dowolna płaszczyzna definiująca pomocniczy układ współrzędnych, to środek układu współrzędnych konturu jest zgodny z punktem (0,0,0) aktywnego układu współrzędnych (globalnego lub pomocniczego), a orientacja lokalnego układu HV konturu jest zgodna z osiami tego układu.
W obu przypadkach zmiana płaszczyzny podstawowej może spowodować drastyczne zmiany położenia i orientacji układu współrzędnych HV konturu. Dlaczego? Jeśli położenie konturu nie jest określone za pomocą relacji typu Constraint z obiektami zdefiniowanymi poza konturem (w przestrzeni 3D), to każda modyfikacja płaszczyzny podstawowej konturu niesie ryzyko „utraty” intencji konstrukcyjnej. Także zmiana orientacji układu HV ma wpływ na relacje typu Constraint zdefiniowane w środowisku Sketcher, bo mogą być poprawnie zdefiniowane, ale w przeciwnym kierunku! 
Jak w takim razie zapewnić stabilność i jednoznaczność definicji konturu oraz jego zgodność z intencją użytkownika systemu niezależnie od zmian konstrukcyjnych?
  • Wszystkie elementy konturu powinny być jednoznacznie określone, bo każdy nieokreślony element ma położenie zdefiniowane w relacji do lokalnego układu HV (a ten w wyniku zmian konstrukcyjnych może się zmienić!).
  • Położenie konturu na płaszczyźnie szkicowania powinno być zawsze zdefiniowane w relacji do elementów 3D, czyli tych zdefiniowanych poza konturem (Plane, Point, Line, itd.).
  • Należy rozważyć zastosowanie polecenia Positioned Sketch zamiast Sketch, bo w tym przypadku podstawą definicji konturu jest nie tylko płaszczyzna szkicowania, ale także punkt wskazany jako środek układu HV oraz linia określająca orientację jednej z osi układu HV. Jeśli tylko wskazane elementy (płaszczyzna, punkt i linia) są stabilne i jednoznacznie określone, to wszystkie relacje wymiarowe i geometryczne konturu mogą być zdefiniowane w odniesieniu do lokalnego układu HV.

Rys68
Rys. 68

Jeśli w modelu pokazanym na rysunku 68 kontur kanałka pod wpust będzie zdefiniowany za pomocą polecenia Sketch (kontur ślizgający się po płaszczyźnie szkicownika), to zmiana płaszczyzny szkicowania z Plane.1 na Plane.2 może spowodować taką właśnie „reakcję” systemu.
Jeśli konstruktor przewiduje lub zamierza zmienić płaszczyznę podstawową tego konturu, to najlepiej zmienić typ konturu na Positioned Sketch (Rys. 69).

Rys69
Rys. 69




W tym celu trzeba zmienić typ (Type = Positioned) oraz ustalić położenie lokalnego układu współrzędnych (na przykład Origin Reference = Point.1 i Orientation Type = X Axis), gdzie Line.1 jest dowolnie zdefiniowaną linią (na przykład od punktu (0,0,0) pod zadanym kątem do osi Z na płaszczyźnie YZ), a punkt Point.1 (leżący na linii Line.1) określa położenie dna wybrania w zadanej odległości od osi wałka. Płaszczyzna Plane.1 jest oczywiście prostopadła do linii Line.1 w punkcie Point.1.
Po takiej modyfikacji położenie płaszczyzny Plane.1 jest jednoznacznie określone wartościami parametrów określających linię Line.1 i punkt Point.1. Na przykład zmiana położenia płaszczyzny Plane.1 za pomocą modyfikacji linii Line.1 (zmiana kąta Angle=0deg na Angle=45deg) nie powoduje utraty intencji konstrukcyjnej, czyli dno rowka pozostaje w zadanej wcześniej odległości od osi wałka (Rys. 70).

Rys70
Rys. 70

Na zakończenie proponuję powrócić do tematu głównego, czyli do problemu niejednoznaczności definicji elementów modelu powierzchniowego. Rozważmy model (Rys. 71), w którym dla powierzchni OMLSurface zdefiniowano dwie powierzchnie równoległe: Offset.1 i Offset.2.

Rys71_s
Rys. 71

Cztery płaszczyzny zdefiniowane w zestawie Input posłużą do przycięcia tych powierzchni. Płaszczyzny wewnętrzne (Left Inner Plane i Right Inner Plane) pozwolą zdefiniować powierzchnię Split.1 (Rys. 72).

Rys72
Rys. 72

Płaszczyzny zewnętrzne (Left Outer Plane i Right Outer Plane) pozwolą zdefiniować odpowiednio – powierzchnię Split.2 (lewa część powierzchni Offset.1) i powierzchnię Split.3 (prawa część powierzchni Offset.2 na rysunku 73). W obu przypadkach istotne jest to, że konstruktor „ręcznie” wybiera tę część powierzchni, która ma pozostać po wykonaniu operacji Split.

Rys73
Rys. 73

W kolejnych krokach zdefiniowane zostały dwie powierzchnie typu Blend (Rys. 74) oraz sklejenie wszystkich płatów powierzchni w jeden obiekt za pomocą polecania Join (Rys. 75).

Rys74
Rys. 74

Rys75
Rys. 75

 
I tu dochodzimy do interesującego pytania: czy i w jaki sposób można zamienić elementy początkowe, czyli te zdefiniowane w zestawie Input w taki sposób, aby system automatycznie zrekonstruował nową powierzchnię Join.1? Zadanie wydaje się być proste: trzeba wskazać te elementy i zastosować polecenie Replace. Należy jednak pamiętać, że każda powierzchnia i płaszczyzna ma swój zwrot i dlatego, aby rezultat zamiany elementów podstawowych był zgodny z intencją konstrukcyjną, należy „dopasować” zwroty zamienianych elementów do zwrotów elementów pierwotnych – okno Replace Viewer (Rys. 76)


Rys76
Rys. 76



Niestety nawet wtedy, gdy zwroty zamienianych elementów są poprawne, to rezultat zamiany nie zawsze jest zgodny z intencją konstrukcyjną. Jeśli dla nowych elementów podstawowych otrzymamy inny niż oczekiwany rezultat, to nie ma się czemu dziwić, bo gdy stosujemy polecenie Split system nie zawsze dokona takiego samego wyboru powierzchni pozostawionej po odcięciu, jakiego w sposób „ręczny” dokonał wcześniej konstruktor (Rys. 77).

Rys77
Rys. 77

W tym przypadku dla powierzchni Split.3 system zachował lewą część powierzchni Offset.2 i odrzucił prawą.
Jeśli ponadto nie ustalimy zgodnych zwrotów płaszczyzn zastosowanych do przycięcia powierzchni (na rysunku 78 płaszczyzna New Right Outer Plane ma zwrot przeciwny do Right Outer Plane), to system nie może wykonać rekonstrukcji modelu – w oknie Update Diagnosis prezentowana jest diagnoza problemu.

Rys78
Rys. 78

Niezgodny zwrot płaszczyzny New Right Outer Plane powoduje, że krawędź powierzchni Split.3 (krzywa Intersect.4 zdefiniowana podczas wykonywania polecenia Split z aktywnym trybem Intersections computation) ma także zwrot przeciwny do krzywej pierwotnej. Na rysunku 79 krzywa oznaczona jako Second Curve ma zwrot przeciwny do krzywej First Curve, a to w rezultacie powoduje skręcenie powierzchni Blend.2 – taka powierzchnia nie może być zdefiniowana.

Rys79
Rys. 79

Mamy więc dwa problemy do rozwiązania: jak „wymusić” poprawny wybór powierzchni pozostawionej po odcięciu za pomocą polecenia Split oraz co zrobić z niezgodnością kierunków krzywych brzegowych zastosowanych w definicji powierzchni typu Blend?
Jeśli problem wyboru powierzchni po odcięciu ma być rozwiązany automatycznie i zgodnie z intencją konstrukcyjną, to potrzebne będą pomocnicze elementy geometryczne. Mogą nimi być płaszczyzny (Rys. 80) zdefiniowane w zestawie AuxGeo (LEFT Joggle Plane, MIDDLE Split Plane i RIGHT Joggle Plane), które zostaną zastosowane w czasie wykonywania polecenia Split dla określenia, którą część powierzchni po odcięciu należy pozostawić (Elements to keep) lub usunąć (Elements to remove). Płaszczyzny zestawu AuxGeo zostały zdefiniowane pomiędzy płaszczyznami zestawu Input. Na przykład płaszczyzna MIDDLE Split Plane znajduje się pomiędzy płaszczyznami New Left Inner Plane i New Right Inner Plane. Jeśli definicja powierzchni Split.1 ma być jednoznaczna, to trzeba ustalić, który z trzech płatów powierzchni NewOMLSurface powstałych po odcięciu płaszczyznami New Left Inner Plane i New Right Inner Plane system powinien pozostawić, a które odrzucić. W tym celu można zdefiniować punkt Point.1, który jest środkiem krzywej powstałej z przecięcia płaszczyzny MIDDLE Split Plane z powierzchnią NewOMLSurface. Tak zdefiniowany punkt może być zastosowany w polu Elements to keep w oknie Split Definition w celu wskazania tej części powierzchni NewOMLSurface, która ma pozostać po wykonaniu polecenia Split. Taka definicja jest jednoznaczna, bo system zawsze pozostawi tę część powierzchni, która znajduje się pomiędzy płaszczyznami New Left Inner Plane i New Right Inner Plane, niezależnie od położenia i zwrotu tych płaszczyzn.

Rys80
Rys. 80

Podobnie dla powierzchni Split.2 (Rys. 81) w polu Elements to remove okna Split Definition został zdefiniowany punkt Point.2, który jest środkiem krzywej Intersect.6, a ta z kolei jest rezultatem przecięcia płaszczyzny LEFT Joggle Plane z powierzchnią Offset.1. Punkt Point.2 wskazuje prawą część powierzchni Offset.1 jako tę, która ma zostać odrzucona po odcięciu – system pozostawił lewą, zgodną z intencją konstrukcyjną część powierzchni Offset.1. Analogicznie trzeba zdefiniować punkt Point.3, który pozwoli jednoznacznie zdefiniować powierzchnię Split.3.

Rys81
Rys. 81

Problem niejednoznaczności definicji powierzchni Split.1, Split.2 i Split.3 został rozwiązany. Zastosowanie pomocniczych elementów geometrycznych uniezależnia procedurę konstrukcyjną od orientacji płaszczyzn zastosowanych w poleceniu Split. Pozostaje jednak problem zwrotu krzywych, które są podstawą definicji powierzchni typu Blend. Jeśli zmieni się zwrot płaszczyzny tnącej (tu New Right Outer Plane), to zmieni się także zwrot krzywej Intersect.4 (generowanej automatycznie podczas definicji powierzchni Split.3). Nie znam procedury konstrukcyjnej, która mogłaby zmienić zwrot krzywej po analizie otoczenia geometrycznego, bo to jest możliwe tylko za pomocą makra w Visual Basic lub zasady konstrukcyjnej (Knowledge Advisor Rule). Jedyne racjonalne rozwiązanie (bez konieczności programowania) to „ręczna” zmiana zwrotu krzywej wewnątrz definicji powierzchni Blend.2 (Rys. 82).

Rys82
Rys. 82

Czy zawsze trzeba aż tak bardzo komplikować procedurę konstrukcyjną? Oczywiście nie zawsze, a tylko wtedy, gdy przewidujemy zamianę elementów konstrukcyjnych lub tworzymy szablon konstrukcyjny, który ze swojej natury będzie aplikowany dla różnych elementów początkowych.

Andrzej Wełyczko