1839x
001617
2020-01-10

Wybór węzłów wzdłuż linii za pomocą interfejsu COM

Odczytując wyniki powierzchni za pomocą interfejsu COM, otrzymujemy jednowymiarowe pole ze wszystkimi wynikami w węzłach ES lub punktach rastra. Aby uzyskać wyniki na krawędzi powierzchni lub wzdłuż linii wewnątrz powierzchni, należy odfiltrować wyniki w obszarze linii. Poniższy artykuł opisuje funkcję, jakiej można użyć w tym celu.

Teoretyczne podstawy obliczania odległości

Aby znaleźć węzły ES znajdujące się w sąsiedztwie linii lub na niej, należy obliczyć odległość węzła od tej linii. Dana jest linia z punktem początkowym i końcowym (N0 i N1 ) oraz punkt P, którego odległość od linii ma zostać określona. Często stosowaną metodą obliczania tej odległości jest konstruowanie płaszczyzny przebiegającej przez punkt P i prostopadłej do analizowanej linii. W tym celu należy najpierw utworzyć odpowiednie równanie liniowe. W takim przypadku zaleca się stosowanie formy parametrycznej, który zawiera wektor kierunku v. Można go użyć, aby rozpisać równanie płaszczyzny.

W przypadku wektora podporowego A używany jest punkt początkowy (wektor lokalizacji) linii, a w przypadku wektora kierunku v - różnica między dwoma wektorami lokalizacji. Z powodu wspomnianego wcześniej, jako równanie płaszczyzny została zastosowana postać normalna.

Wektor podporowy P jest analizowanym punktem wyników Pres. Wektor normalny jest wektorem kierunku linii prostej, ponieważ płaszczyzna jest prostopadła do tej linii. Przed obliczeniem odległości należy określić współczynnik s linii, w której płaszczyzna ją przecina. W tym celu wektor lokalizacji X w równaniu płaszczyzny zostaje zastąpiony równaniem linii prostej.

Przeliczone na s i zaczynające się od

otrzymujemy następujące równanie.

Umożliwia to wyznaczenie punktu przecięcia S za pomocą równania 1.


Odległość d pomiędzy S i Pres jest określana za pomocą długości wektorowej różnicy między nimi.

Rysunek 01 przedstawia schematycznie wszystkie wyszczególnione elementy. Niebieska powierzchnia jest powierzchnią do analizy, a czerwona powierzchnia przedstawia płaszczyznę przekroju, która jest zdefiniowana przez punktPres i wektor kierunku

. Współczynnik s wynosi na rysunku zaledwie 0,5, więc przecięcie płaszczyzny i linii znajduje się dokładnie w środku linii.

Wprowadzenie obliczeń odległości do programu

Gdy formuły są już określone, można utworzyć odpowiedni program. Do konwersji wykorzystuje się EXCEL VBA. Rysunek 02 przedstawia numerację elementów.

Najpierw, konieczne jest połączenie z RFEM. Następnie należy pobrać interfejs dla danych modelu. Ponieważ procedura ta została już opisana w wielu innych artykułach (patrz linki), nie zostanie tu szczegółowo opisana. Poniżej znajduje się kod źródłowy do uruchomienia programu.

  1. kod.vb#

Sub selection_test2 ()

  1. Dim nr_linii As Integer
  2. Dim powierzchnia_nr As Integer
  3. Dim nr przypadku_obciążenia As Integer
  4. Dim d_tol As Double
  5. linia nr = 11
  6. powierzchnia_nr = 1
  7. nr_przypadku_obciążeń = 1
  8. d_tol = 0,001
  9. ' pobierz interfejs z otwartego modelu i zablokuj licencję/program
  10. Dim iModel As RFEM5.IModel2
  11. Set iModel = GetObject(, "RFEM5.Model")
  12. iModel.GetApplication.LockLicense

On Error GoTo e

  1. Dim iModelData As RFEM5.IModelData2
  2. Set iModelData = iModel.GetModelData
  3. /kod#

Przed uruchomieniem programu należy najpierw zdefiniować parametry zmienne. Należą do nich line_no, w której mają być wyszukiwane wyniki, oraz oczywiście numer powierzchni surface_no, na której znajduje się linia. Ponadto potrzebny jest numer przypadku obciążenia (loadcase_no), do którego należą wyniki. Ponieważ jest to obliczenie numeryczne z ograniczoną dokładnością, wymagana jest tolerancja d_tol, określająca maksymalną odległość między linią a węzłem. W tym przykładzie wykorzystana jest tolerancja jednego milimetra.

Ponieważ interfejs dla danych modelu (IModelData) jest już dostępny, najpierw można wyszukać linię, a tym samym jej punkt początkowy i końcowy.

  1. kod.vb#
  2. ' pobierz linię
  3. Dim ILin As RFEM5.ILine
  4. Ustaw ILin = iModelData.GetLine(line_no, AtNo)
  5. Dim lin As RFEM5.RfLine
  6. lin = IIn.GetData
  7. ' pobierz węzły z linii
  8. Dim n (0 do 1) As RFEM5.Node
  9. Dim ints () As Integer
  10. ints = strToIntArr(lin.NodeList)
  11. Dim iNd As RFEM5.INode
  12. Set iNd = iModelData.GetNode(ints (0), AtNo)
  13. n (0) = iNd.GetData
  14. Set iNd = iModelData.GetNode(ints(UBound(ints, 1)), AtNo)
  15. n(1) = iNd.GetData
  16. Zbiór iNd = Nic
  17. /kod#

Otrzymujemy osobno zarówno węzły, jak i linię, bezpośrednio przez ich interfejs (INode lub ILine). Aby pobrać numery węzłów z ciągu (RfLine.NodeList), należy użyć funkcji strToIntArr opisanej w innym artykule (patrz linki). Ciąg znaków jest przekształcany w pole liczby całkowitej.

Z podanych teraz punktów linii

(punkt początkowy) i (Punkt końcowy) można ustawić pierwsze parametry równania.

  1. kod.vb#
  2. Dim v As RFEM5.Point3D
  3. vX = N(1) .X - N (0) .X
  4. vY = N(1) .Y - N(0) .Y
  5. vZ = N(1) .Z - N (0) .Z
  6. Dim A As RFEM5.Point3D
  7. AX = N(0).X
  8. AY = N (0) .Y
  9. AZ = N (0) .Z
  10. Dim v2 As Double
  11. v2 = vX^2 + vY^2 + vZ^2
  12. Dim P_res As RFEM5.Point3D
  13. Dim s As Double
  14. Dim d As Double
  15. /kod#

Staje się on wektorem kierunku

(v), wektor podporowy (A) oraz iloczynu skali wektora kierunku (v2) został obliczony lub przygotowany. Ponadto, z równania liniowego (1) definiowane są również zmienne Pres (P_res) dla punktu wyniku oraz współczynnik s.

Obliczanie odległości w pętli

W tym przykładzie wybrano przetwarzanie wyników na podstawie węzłów ES. Kontrola odległości odbywa się w pętli operującej na przestrzeni tych wyników. Wyniki należy najpierw uzyskać poprzez interfejs ICalculation2, a następnie IResults. W ramach pętli najpierw zostaje opisany punkt Pres wraz ze współrzędnymi wartości wyniku (dla zachowania przejrzystości). Następnie można przeprowadzić bezpośrednie obliczenia równania (4). Po obliczeniu s można sprawdzić, czy wartość jest mniejsza niż zero lub większa niż jeden, ponieważ wartości te leżą na zewnątrz lub przed i za linią prostą. Jeżeli wartość znajduje się w tym zakresie, odległość jest obliczana za pomocą równania (6).

  1. kod.vb#
  2. ' uzyskaj wyniki w węzłach fe
  3. Dim iCalc As ICalculation2
  4. Set iCalc = iModel.GetCalculation
  5. Dim iRes As RFEM5.IResults
  6. Ustaw iRes = iCalc.GetResultsInFeNodes(LoadCaseType, loadcase_no)
  7. Dim surfBaStr () As RFEM5.SurfaceBasicNaprężenia
  8. surfBaStr = iRes.GetSurfaceBasicStresses(surface_no, AtNo)
  9. ' wykonaj pętlę przez naprężenia i oblicz odległość od linii
  10. Dim i As Integer
  11. For i = 0 To UBound(surfBaStr, 1)
  12. P_res.X = surfBaStr(i).Współrzędne.X
  13. P_res.Y = surfBaStr(i).Coordinates.Y
  14. P_res.Z = surfBaStr(i).Coordinates.Z
  15. ' współczynnik obliczania dla równania przecięcia linii
  16. s = ((P_res.XA.X)*vX + (P_res.YA.Y)*vY + (P_res.ZA.Z)*vZ)/v2
  17. Jeżeli s <= 1 + d_tol And s >= 0 - d_tol Wtedy
  18. ' oblicz odległość punktu przecięcia i węzła fe
  19. d = ((P_res.X-(A.X+s*vX))^2
  20. +(P_res.Y-(A.Y+s*vY))^2
  21. +(P_res.Z-(A.Z+s*vZ))^2)^0.5
  22. Jeżeli (d < d_tol) To
  23. 'tutaj można przetworzyć znaleziony punkt result
  24. End If
  25. End If
  26. Następny i
  27. /kod#

Tolerancja jest stosowana zarówno do sprawdzenia współczynnika s, jak i odległości d, dzięki czemu niewielkie niedokładności nie prowadzą do wykluczenia wyniku.

Wyniki programu

Wartości znalezione przez program są wyświetlane w tabeli i są zaokrąglane do dwóch miejsc po przecinku.

σy + [N/mm²] Współczynnik s [-]
21,90 0,0
17,28 0,1
12,79 0,2
8,43 0,3
4,17 0,4
-0,04 0,5
-4,25 0.6
-8,51 0,7
-12,87 0,8
-17,36 0,9
-21,98 1,0

Dla porównania wartości z wykresu wyników w odpowiedniej linii są wyświetlane na rysunku 03.


Jak widać, wartości są takie same i istnieje 100% zbieżność wyników lub że wszystkie wartości zostały znalezione w obrębie linii.

Uwagi końcowe

Za pomocą obliczeń wektorowych został utworzony program do znajdowania węzłów wzdłuż linii. Dzięki temu algorytmowi można wyszukiwać nie tylko wyniki, ale również wszystkie inne elementy geometryczne. Jest to szczególnie pomocne, ponieważ wybór graficzny nie jest oczywiście możliwy za pomocą interfejsu COM, ale jest możliwy w inny sposób, za pomocą funkcji. Automatyczne obliczanie wyników jest możliwe, szczególnie w przypadku programów działających całkowicie w tle.


Autor

Pan Günthel zapewnia wsparcie techniczne klientom firmy Dlubal Software i zajmuje się ich zapytaniami.

Odnośniki
Pobrane


;