24 kwietnia 2024

Wybor redakcji 2013


Określenia konstruktor i projektant są często stosowane zamiennie, co moim zdaniem nie zawsze jest poprawne. Jeśli projektant jest takim konstruktorem-artystą, to jako twórca ma on większą swobodę w definiowaniu kształtu nowego dzieła (projektu) niż konstruktor-rzemieślnik. Dzieło artysty powinno przecież być tajemnicze, niedopowiedziane, intrygujące czy zachęcające odbiorcę do własnej interpretacji. W przypadku konstruktora (nie projektanta-artysty) rezultat pracy nie może być dwuznaczny, czyli model przestrzenny konstruowanego wyrobu musi być precyzyjnie zdefiniowany, a jego rysunek zwymiarowany, zgodnie ze sztuką inżynierską. I nie chodzi tu o to, żeby konstruktor tworzył brzydkie wyroby, a projektant nierealne dzieła, bo każdy z nich ma nieco inne zadanie.

Andrzej Wełyczko

Problem, z którym zamierzam się zmierzyć, dotyczy głównie tych (konstruktorów-rzemieślników), którzy próbują zdefiniować uniwersalne szablony konstrukcyjne (design templates), aby móc stosować je dla dowolnych elementów początkowych lub modyfikować model przestrzenny, nie przez zmianę wartości parametrów modelu przestrzennego, ale dzięki zamianie (polecenie Replace) elementów geometrycznych zdefiniowanych w początkowej fazie projektowania. Niestety, rezultat zastosowania szablonu konstrukcyjnego lub zamiany elementów początkowych nie zawsze generuje oczekiwany (i akceptowany!) przez konstruktora rezultat. Inaczej mówiąc, po z(a)mianie elementów wejściowych, sprawdzonej w pewnych warunkach procedury konstrukcyjnej, system CAD nie zawsze poprawnie „reaguje” na nowe otoczenie geometryczne.
Dlaczego tak się dzieje i jak definiować model przestrzenny, aby zawsze, czyli dla dowolnych elementów początkowych procedury konstrukcyjnej, otrzymać rezultat zgodny z intencją konstruktora? Odpowiedź na to pytanie, zilustrowana kilkoma przykładami, jest tematem tego artykułu. Niestety, poza systemem CATIA nie znam innych systemów CAD, ale jestem pewien, że pewne metody można z powodzeniem zastosować niezależnie od CADa, w którym się pracuje.

Rys01_b
Rys. 1

Problemy, omówione wstępnie powyżej, mogą wynikać z niejednoznaczności lub dwuznaczności definicji niektórych elementów geometrycznych. Niejednoznaczność jest zwykle spowodowana wskazaniem elementów typu BREP (Boundary REPresentation), które nie zawsze są stabilne (Rys. 1). Dlaczego? Punkt skrajny linii lub krzywej, wierzchołek lub krawędź powierzchni albo powierzchnia funkcjonalna bryły, nie jest obiektem stabilnym, bo w wyniku zmian konstrukcyjnych taki element może po prostu „zniknąć” lub zmienić orientację w przestrzeni. I nie chodzi tu o taką sytuację, w której konstruktor definiuje punkt skrajny krzywej za pomocą polecenia Point lub krzywą krawędzi powierzchni za pomocą polecenia Boundary, bo takie obiekty są stabilne wtedy, gdy ich „rodzice” (obiekty nadrzędne) są stabilne. Jeśli model przestrzenny ma być stabilny, to należy unikać wskazywania tego elementów typu BREP (patrz: PiKI Nr 9 (60) 2012, „Elementy typu B-Rep w modelowaniu bryłowym”). W skrócie można powiedzieć, że zamiast bezpośredniego wskazywania wierzchołka (Vertex) powierzchni lub punktu skrajnego krzywej lepiej zastosować polecenia Point On Curve (dla stabilnej krzywej!), Extremum (w zadanym kierunku określonym za pomocą stabilnego obiektu typu Line lub Plane) lub Intersection (punkt przecięcia dwóch krzywych lub krzywej z powierzchnią).
Zamiast bezpośredniego wskazywania krawędzi powierzchni (Edge) lepiej zastosować polecenia Boundary Curve, Intersection lub Projection.
Niejednoznaczność jest także związana z definicją płaszczyzny (także tej zdefiniowanej za pomocą polecenia Plane), na której zdefiniowany został kontur (Sketch) typu Sliding („pływający”), bo położenie i orientacja tego typu konturu (w odróżnieniu od Positioned Sketch) są określone przez tę płaszczyznę, rzut środka globalnego układu współrzędnych oraz orientację rzutów globalnych osi Y lub Z (zależne od wybranej płaszczyzny). Taki kontur nie jest powiązany z żadnym innym elementem modelu przestrzennego i dlatego, jeśli zmieni się którykolwiek z wyżej wymienionych elementów, to położenie i/lub orientacja konturu także mogą się zmienić. Taka zmiana położenia lub orientacji konturu z oczywistych powodów zmienia finalny kształt projektowanego wyrobu, a więc jest niejednoznaczna.
Dwuznaczność wynika ze specyfiki niektórych elementów definiowanych w parametrycznym systemie CAD. Na przykład: każda linia lub krzywa ma swój początek i koniec (podobnie jak wektor ma nie tylko kierunek, ale dwa możliwe zwroty), powierzchnia ma swoją orientację (wskazanie jednej z dwóch przestrzeni: nad i pod powierzchnią), dla zadanej krzywej na wskazanej powierzchni można zdefiniować dwie krzywe równoległe (po lewej i prawej stronie krzywej zadanej), w przypadku odcinania „zbędnej” części powierzchni trzeba zdefiniować, którą z dwóch części system ma pozostawić, itd.

Przykład 1 – Polecenie Split
Jeśli polecenie Split jest realizowane automatycznie (wstawienie szablonu konstrukcyjnego lub zamiana elementów początkowych i Update modelu) lub elementy geometryczne są wskazywane w drzewie strukturalnym modelu (nie w obszarze graficznym), to algorytm tego polecenia działa według następujących reguł:
• Przypadek Surface-Surface (odcinanie powierzchni za pomocą innej powierzchni): system pozostawia po odcięciu tę część powierzchni odcinanej, którą wskazuje orientacja powierzchni tnącej (Rys. 2).

Rys02_b
Rys. 2

• Przypadek Surface-Curve (odcinanie powierzchni za pomocą krzywej): system pozostawia po odcięciu tę część powierzchni odcinanej, którą określa reguła prawej dłoni (Rys. 3).

Rys03_b
Rys. 3




• Przypadki Curve-Point, Curve-Curve, Curve-Plane i Curve-Surface (odcinanie krzywej za pomocą punktu, innej krzywej, płaszczyzny lub powierzchni): system pozostawia po odcięciu tę część krzywej, na której leży jej punkt początkowy.
Dwuznaczność definicji polecenia Split polega na tym, że w przypadku odcinania „zbędnego” fragmentu powierzchni (także linii lub krzywej) konstruktor musi zdecydować, którą część pozostawić. Na przykład w sytuacji pokazanej na rysunku 4, czyli odcinanie powierzchni Surface to Split za pomocą płaszczyzny Cutting_Plane, rezultat zastosowania tego polecenia zależy od tego, którą stronę powierzchni konstruktor wskaże.

Rys04_b
Rys. 4

Podkreślam: wskaże! W przypadku stosowania szablonu konstrukcyjnego lub zamiany elementów początkowych modelu nie ma mowy o wskazywaniu, bo procedura konstrukcyjna jest wykonywana automatycznie, a nie interaktywnie.
Jak w takim razie w sposób automatyczny określić, która część powierzchni ma pozostać po wykonaniu polecenia Split? Jednym z rozwiązań może być zdefiniowanie pomocniczych obiektów, które zdecydują o „inteligentnej” reakcji systemu CATIA. To wcale nie oznacza, że bez dodatkowych obiektów system nie jest „inteligentny”, ale tylko tyle, że nie zawsze wybrana zostanie ta część powierzchni, o której myśli konstruktor. Nie każdy pewnie wie, że w systemie CATIA V5 można zdefiniować parametr typu Point, Line, Curve, Plane czy Surface. A więc coś, co jest obiektem geometrycznym, ale w momencie tworzenia nie ma reprezentacji geometrycznej. Zdefiniujmy w takim razie parametr SplitResult typu Surface (Rys. 5).

Rys05_b
Rys. 5

Jak zdefiniować wartość parametru SplitResult, czyli jak przyporządkować temu parametrowi płat powierzchni Surface To Split odcięty płaszczyzną Cutting_Plane? Obiekt geometryczny nie może być obliczony na podstawie formuły, bo system, zgodnie z kryterium wybranym przez konstruktora, musi zdecydować, która część powierzchni Surface To Split ma być „przypisana” do parametru Split Result.

Rys06_b
Rys. 6

Dlatego trzeba zastosować regułę konstrukcyjną (tu Split Rule na rysunku 6), która na przykład (to jest kryterium zdefiniowane przez konstruktora) obliczy pola powierzchni obu możliwych rezultatów polecenia Split i wybierze tę powierzchnię, która ma większe pole. Czy konstruktor może zdefiniować inne kryterium wyboru (inną zasadę konstrukcyjną)? Oczywiście TAK. Wszystko zależy od intencji i... umiejętności. Na przykład: wybierz ten płat powierzchni, który ma mniejszy obwód lub wybierz ten płat, który jest bliżej zadanego elementu geometrycznego (punkt lub płaszczyzna), itd.
Konstruktor nie zastosował polecenia Split w tradycyjny sposób, ale „wewnątrz” zasady konstrukcyjnej.

Rys07_b
Rys. 7

Rezultat jest natychmiast widoczny w obszarze graficznym modelu (Rys. 7) – każda zmiana położenia płaszczyzny Cutting_Plane jest automatycznie sprawdzana przez zasadę Split Rule i jeśli trzeba system wybiera odpowiedni płat powierzchni przyciętej zgodnie z zastosowanym kryterium wyboru:
if (area(Surf1)>area(Surf2)) then Split Result=Surf1 else Split Result=Surf2




Tu jednak pojawia się kolejne pytanie: czy koniecznie trzeba zdefiniować zasadę konstrukcyjną, aby model przestrzenny był „inteligentny”? Nie, ale rozwiązanie przedstawione powyżej jest najbardziej eleganckie. Jeśli konstruktor nie ma licencji na CATIA Knowledge Advisor (ta jest konieczna do definicji obiektu typu Rule), to pozostaje zdefiniowanie takiej procedury konstrukcyjnej, która zagwarantuje rezultat zgodny z intencją konstruktora.
Spośród wielu możliwych do zdefiniowania procedur konstrukcyjnych wybrałem taką, która „zachowuje” płat powierzchni na podstawie wskazanego punktu. Nie chcę jednak wskazywać dowolnego punktu, na przykład wierzchołka powierzchni, bo ten, jako element typu BREP, nie zawsze jest stabilny. W związku z tym zamierzam zdefiniować punkt wyboru za pomocą polecenia Point.

Rys08_b
Rys. 8

Zanim jednak to będzie możliwe muszę zdefiniować pomocnicze elementy geometryczne (Rys. 8), na przykład linię Line.1 prostopadłą do płaszczyzny Cutting_Plane, która przechodzi przez punkt Point.1. Ten punkt jest umownym środkiem powierzchni Surface To Split.

Rys09_b
Rys. 9

Następnie tworzę krzywą izoparametryczną powierzchni Surface To Split (Isoparameter.1 na rysunku 9), która przechodzi przez punkt Point.1 i ma kierunek zgodny z linią Line.1.
W kolejnym kroku definiuję punkty skrajne krzywej Isoparameter.1 (Point On The Right i Point On The Left na rysunku 10).

Rys10_b
Rys. 10

Każdy z tych punktów leży na powierzchni Surface To Split i może być zastosowany do wyboru powierzchni odciętej podczas wykonywania polecenia Split. Na rysunku 10 w polu Elements to keep wskazałem punkt Point On The Left i dlatego system zachował po odcięciu lewy płat powierzchni Surface To Split.
Punkty Point On The Right i Point On The Left nie muszą być punktami skrajnymi krzywej izoparametrycznej i nie muszą leżeć na krawędzi powierzchni Surface To Split. Jedyne wymaganie algorytmu, który realizuje polecenie Split, jest takie, aby to były punkty leżące na tej powierzchni.

Rys11_b
Rys. 11

Czy to oznacza, że jest to recepta uniwersalna na poprawne zastosowanie polecenia Split? Nie, bo intencją konstruktora może być na przykład wybór tej części powierzchni Surface To Split, dla której odległość od pewnych elementów referencyjnych jest mniejsza. Jakie to mogą być elementy? Na przykład punkty, linie czy płaszczyzny (Rys. 12) zdefiniowane w modelu szkieletowym lub w modelu innej części tego samego zespołu.

Rys12_b
Rys. 12




Jeśli elementem tnącym powierzchnię Surface To Split jest Cutting_Plane, to jest chyba oczywiste, że płaszczyzny Left i Right powinny być zastosowane do ustalenia, którą część powierzchni system powinien pozostawić po odcięciu (zamiast płaszczyzn można zdefiniować punkty, na przykład MaxX, MinX, MaxY, MinY, MaxZ i MinZ). Metoda wyboru polega na zastosowaniu operacji Near (blisko, bliski) do obiektu, który jest co najmniej dwuznaczny, czyli jest zbudowany z więcej niż jednego komponentu (na przykład dwa punkty). Jaki obiekt geometryczny może być zbudowany z dwóch punktów?

Rys13_b
Rys. 13

Po spełnieniu pewnych warunków w wyniku przecięcia dwóch krzywych, z których przynajmniej jedna jest zamknięta, otrzymamy dwa punkty. Pierwszą z tych krzywych może być rzut Project.1 linii Line.1 na powierzchnię Surface To Split (Rys. 13).
Drugą krzywą może być krzywa graniczna Boundary.1 (Rys. 14) powierzchni Surface To Split zdefiniowana w trybie Propagation type = Point continuity.

Rys14_b
Rys. 14

Krzywa Boundary.1 jest oczywiście krzywą zamkniętą, bo jest to krzywa graniczna powierzchni. Polecenie Intersection (Rys. 15) zastosowane do krzywych Project.1 i Boundary.1 generuje dwa punkty przecięcia (“The resulting geometry of this element is made of 2 sub-elements that are not connected”), z których w tym przykładzie wybieram bliższy płaszczyźnie Right.

Rys15_b
Rys. 15

W rezultacie, niezależnie od kształtu i orientacji powierzchni Surface To Split, mamy punkt Near.1 (Rys. 16), który leży na tej powierzchni i w przestrzeni modelu znajduje się bliżej płaszczyzny Right niż Left.

Rys16
Rys. 16

Definicja polecenia Split z punktem Near.1 jako Element to keep generuje oczekiwany rezultat: system zachował po odcięciu płat powierzchni bliższy płaszczyźnie Right (Rys. 17).

Rys17_b
Rys. 17

Czy taka procedura jest uniwersalna, to znaczy niezależna od kształtu i orientacji powierzchni odcinanej? Moim zdaniem tak. Wystarczy zdefiniować nową powierzchnię (tu New Surface To Split), upewnić się, że ta powierzchnia ma zwrot przeciwny do zwrotu powierzchni Surface To Split i wykonać polecenie Replace (Rys. 18). Rezultat procedury konstrukcyjnej, czyli powierzchni Split.1, jest zgodny z oczekiwaniami – system pozostawił po odcięciu ten płat powierzchni New Surface To Split, na którym leży punkt Near.1, czyli bliższy płaszczyźnie Right.

Rys18_s
Rys. 18


Rys19
Rys. 19

Procedura wyboru może być oczywiście inna, bo może uwzględniać punkty przecięcia jakichś krzywych z powierzchnią lub rzuty jakichś punktów na powierzchnię. Użyłem określenia „jakichś”, bo WSZYSTKO zależy od otoczenia geometrycznego i intencji konstruktora. Tu powrócę do pytania, które zadałem na początku: jak w takim razie w sposób automatyczny określić, która część powierzchni ma pozostać po wykonaniu polecenia Split?
Odpowiedź #1: Zachowaj tę część, która ma punkt przecięcia z zadaną krzywą.
Odpowiedź #2: Zachowaj tę część, na której leży rzut zadanego punktu.
Odpowiedź #3: Zachowaj tę część, która ma krzywą przecięcia z zadaną powierzchnią.
Odpowiedź #4: …
Zastanów się nad procedurą konstrukcyjną, która zrealizuje Twój zamiar w taki sposób, żeby kontrolować rezultat polecenia Split, niezależnie od orientacji elementów pomocniczych (krzywych, płaszczyzn lub powierzchni), bo tylko wtedy Twój model przestrzenny będzie zawsze przewidywalny.

Andrzej Wełyczko


artykuł pochodzi z wydania Grudzień 12 (63) 2012