1839x
001617
2020-01-10

Seleção de nós ao longo de uma linha através da interface COM

Ao ler os resultados de uma superfície através da interface COM, obtém-se um campo unidimensional com todos os resultados nos nós de EF ou nos pontos da grelha. Para obter os resultados na borda de uma superfície ou ao longo de uma linha dentro das superfícies, é necessário filtrar os resultados na área da linha. O artigo seguinte descreve uma função para este passo.

Fundamentação teórica para o cálculo da distância

Para encontrar os nós de EF que estão perto ou na linha, a distância do nó à linha deve ser calculada. É dado o ponto inicial e final da linha (N0 e N1) e o ponto P cuja distância à linha deve ser determinada. Uma maneira comum de calcular esta distância é estabelecer um plano que atravessa o ponto P e é perpendicular à linha reta. Para este efeito, primeiro tem de ser definida uma equação linear que se adeqúe. Neste caso, recomenda-se a utilização da forma de parâmetro, que contém um vetor de direção v. Pode utiliza-la para configurar a equação do plano.

Para o vetor de apoio A, é utilizado o ponto de partida (vetor de localização) da linha e para o vetor de direção v, é utilizada a diferença dos dois vetores de localização. A forma normal é utilizada como equação do plano pelo motivo já mencionado.

O vetor de apoio P é o ponto de resultado Pres a ser analisado. O vetor normal é o vetor de direção da linha reta porque o plano é ortogonal à linha reta. Antes de a distância ser calculada, é necessário determinar o fator s da linha onde o plano interseta a linha. Para este efeito, o vetor de localização X na equação do plano é substituído pela equação de linha reta.

Convertido para s e começando com

obtemos a seguinte equação.

Assim, é possível determinar o ponto de interseção S utilizando a Equação 1.


A distância d entre S e Pres é determinada através da quantidade vetorial da diferença entre os dois.

A Figura 01 mostra a representação esquemática de todos os elementos listados. A superfície azul é a superfície a ser analisada e a superfície vermelha representa o plano de corte, que é definido pelo ponto Pres e o vetor de direção

. O fator s é de apenas 0,5 na figura, de modo que a interseção do plano com a linha é exatamente no centro da linha.

Implementação do cálculo da distância num programa

Quando as fórmulas estiverem disponíveis, pode criar o programa correspondente. O EXCEL VBA é utilizado para a conversão. A Figura 02 mostra a numeração dos elementos.

Primeiro, é necessária uma ligação ao RFEM. Em seguida, obtém-se a interface para os dados do modelo. Uma vez que este procedimento já foi descrito em vários artigos (ver ligações), não será descrito em detalhe aqui. Abaixo está o código fonte para iniciar o programa.

  1. código.vb#

Sub selection_test2 ()

  1. Dim linear_no As inteiro
  2. Dim superfícies_no como inteiro
  3. Dim loadcase_no As inteiro
  4. Dim d_tol As duplo
  5. line_no = 11
  6. superfícies_nº = 1
  7. loadcase_no = 1
  8. d_tol = 0,001
  9. ' get interface from the opened model and lock the licence/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
#/code#

Antes de iniciar o programa, define-se primeiro os parâmetros variáveis. Isso inclui o número da linha line_no da linha onde pretende procurar resultados e, claro, o número da superfície surface_no da superfície onde a linha está localizada. Além disso, é necessário o número do caso de carga loadcase_no ao qual os resultados pertencem. Uma vez que este é um cálculo numérico com precisão limitada, é necessária uma tolerância d_tol que especifique a distância máxima entre a linha e o nó. Neste exemplo, é utilizada uma tolerância de um milímetro.

Uma que a interface para os dados do modelo (IModelData) está agora disponível, pode procurar primeiro pela linha e, assim, também pelo seu ponto de inicial e final.

  1. código.vb#
  2. ' obter linha
  3. Dim ILin como RFEM5.ILine
  4. Definir ILin = iModelData.GetLine (line_no, AtNo)
  5. Dim lin As RFEM5.RfLine
  6. lin = ILin.GetData
  7. ' obter nós da linha
  8. Dim n(0 a 1) como RFEM5.Node
  9. Dim ints() As inteiro
  10. ints = strToIntArr(lin.NodeList)
  11. Dim iNd as RFEM5.INode
  12. Definir iNd = iModelData.GetNode(ints(0), AtNo)
  13. n(0) = iNd.GetData
  14. Definir iNd = iModelData.GetNode(ints(UBound(ints, 1)), AtNo)
  15. n(1) = iNd.GetData
  16. Definir iNd = nada
#/code#

O utilizador obtém os nós e a linha individualmente, diretamente através da interface (INode ou ILine). Para extrair os números dos nós da string (RfLine.NodeList), utilize a função strToIntArr descrita noutro artigo (ver ligações). Converte a string em um campo de tipo inteiro.

Com os pontos da linha agora dados

(ponto inicial) e (Ponto final), pode configurar os primeiros parâmetros da equação.

  1. código.vb#
  2. Dim v As RFEM5.Ponto3D
  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 como RFEM5.Ponto3D
  7. AX = N(0).X
  8. AY = N(0).Y
  9. AZ = N(0).Z
  10. Dim v2 As duplo
  11. v2 = vX ^ 2 + vY ^ 2 + vZ ^ 2
  12. Dim P_res como RFEM5.Point3D
  13. Dim s As duplo
  14. Dim d As duplo
#/code#

Torna-se o vetor de direção

(v), o vetor de apoio (A) e o produto de escala do vetor de direção (v2) é calculado ou preparado. Além disso, as variáveis Pres (P_res) para o ponto do resultado e s para o fator da Equação linear (1) também são definidas.

Cálculo da distância num ciclo

Neste exemplo, foi selecionado o processamento dos resultados com base nos nós de EF. A verificação da distância realiza-se num ciclo sobre o campo desses resultados. Primeiro, tem de se obter estes resultados através da interface ICalculation2 e depois IResults. Dentro do ciclo, o ponto Pres é primeiro descrito com as coordenadas do valor resultante (por questões de clareza). Depois, pode ser realizado o cálculo direto da Equação (4). Após o cálculo de s, é possível verificar se o valor é inferior a zero ou superior a um porque esses valores se encontram fora ou antes e depois da linha reta. Se um valor estiver dentro deste intervalo, a distância é calculada com a Equação (6).

  1. código.vb#
  2. ' obter resultados nos nós fe
  3. Dim iCalc como ICalculation2
  4. Set iCalc = iModel.GetCalculation
  5. Dim iRes como RFEM5.IResults
  6. Definir iRes = iCalc.GetResultsInFeNodes(LoadCaseType, loadcase_no)
  7. Dim superfíciesBaStr() As RFEM5.SurfaceBasicStresses
  8. superfíciesBaStr = iRes.GetSurfaceBasicStresses(surface_no, AtNo)
  9. ' percorrer as tensões e calcular a distância à linha
  10. Dim i As Integer
  11. Para i = 0 Até UBound(surfBaStr, 1)
  12. P_res.X = superfícieBaStr(i).Coordenadas.X
  13. P_res.Y = superfícieBaStr(i).Coordenadas.Y
  14. P_res.Z = superfícieBaStr(i).Coordenadas.Z
  15. ' calcular fator para equação de linha da interseção
  16. s = ((P_res.XA.X)*vX + (P_res.YA.Y)*vY + (P_res.ZA.Z)*vZ)/v2
  17. Se s <= 1 + d_tol E s >= 0 - d_tol Então
  18. ' calcular distância do ponto de interseção e do nó 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. Se (d < d_tol) Então
  23. ' aqui pode processar o ponto de resultado encontrado
  24. End If
  25. End If
  26. I seguinte
#/code#

A tolerância é aplicada tanto à verificação do fator s como à distância d, para que pequenas imprecisões não levem à exclusão de um resultado.

Resultados do programa

Os valores encontrados pelo programa são apresentados na tabela, com os valores arredondados para duas casas decimais.

σy + [N/mm²] Fator 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

A título de comparação, os valores do diagrama de resultados na linha correspondente são apresentados na Figura 03.


É claramente evidente que os valores são os mesmos e existe uma correspondência de 100% ou que todos os valores foram encontrados na linha.

Conclusão

Com o auxílio do cálculo de vetores, foi criado um programa capaz de encontrar nós ao longo de uma linha. Com este algoritmo, também é possível pesquisar não apenas os resultados, mas também todos os outros elementos geométricos. Isto é especialmente útil porque, obviamente, a seleção visual não é possível através da interface COM, mas é possível através de uma função de outra forma. Especialmente para os programas executados completamente em segundo plano, é possível realizar uma avaliação automática dos resultados.


Autor

O Eng. Günthel opera na área do apoio técnico para clientes.

Ligações
Downloads


;