1793x
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.

Ajustado de acordo com s e com

, resulta 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, o qual foi configurado com o 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.

Sub selection_test2 ()
    
Dim line_no As Integer
Dim surface_no As Integer
Dim loadcase_no As Integer
Dim d_tol As Double
line_no = 11
surface_no = 1
loadcase_no = 1
d_tol = 0,001
    
' get interface from the opened model and lock the licence/program
Dim iModel As RFEM5.IModel2
Set iModel = GetObject(, "RFEM5.Model")
iModel.GetApplication.LockLicense
    
On Error GoTo e
    
Dim iModelData As RFEM5.IModelData2
Set iModelData = iModel.GetModelData

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.

' get line
Dim ILin As RFEM5.ILine
Set ILin = iModelData.GetLine(line_no, AtNo)
Dim lin As RFEM5.RfLine
lin = ILin.GetData
   
    
' get nodes from line
Dim n(0 To 1) As RFEM5.Node
    
Dim ints() As Integer
ints = strToIntArr(lin.NodeList)
    
Dim iNd As RFEM5.INode
Set iNd = iModelData.GetNode(ints(0), AtNo)
n(0) = iNd.GetData
Set iNd = iModelData.GetNode(ints(UBound(ints, 1)), AtNo)
n(1) = iNd.GetData
    
Set iNd = Nothing

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 fornecidos (ponto inicial) e (ponto final), pode definir os primeiros parâmetros da equação.

Dim v As RFEM5.Point3D
v.X = N(1).X - N(0).X
v.Y = N(1).Y - N(0).Y
v.Z = N(1).Z - N(0).Z
    
Dim A As RFEM5.Point3D
A.X = N(0).X
A.Y = N(0).Y
A.Z = N(0).Z
    
Dim v2 As Double
v2 = v.X ^ 2 + v.Y ^ 2 + v.Z ^ 2
    
Dim P_res As RFEM5.Point3D
Dim s As Double
Dim d As Double

O vetor de direção

(v), o vetor de apoio (A) e o produto de escala do vetor de direção (v2) são calculados ou preparados. 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).

' get results in fe-nodes
Dim iCalc As ICalculation2
Set iCalc = iModel.GetCalculation
    
Dim iRes As RFEM5.IResults
Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, loadcase_no)
    
Dim surfBaStr() As RFEM5.SurfaceBasicStresses
surfBaStr = iRes.GetSurfaceBasicStresses(surface_no, AtNo)
    
' loop through stresses and calculate distance to line
Dim i As Integer
For i = 0 To UBound(surfBaStr, 1)
P_res.X = surfBaStr(i).Coordinates.X
P_res.Y = surfBaStr(i).Coordinates.Y
P_res.Z = surfBaStr(i).Coordinates.Z
' calculate factor for line equation of intersection
s = ((P_res.X-A.X)*v.X + (P_res.Y-A.Y)*v.Y + (P_res.Z-A.Z)*v.Z) / v2
        
If s <= 1 + d_tol And s >= 0 - d_tol Then
' calculate distance of intersection point and fe-node
d = ((P_res.X-(A.X+s*v.X))^2
+(P_res.Y-(A.Y+s*v.Y))^2
+(P_res.Z-(A.Z+s*v.Z))^2)^0.5
            
If (d < d_tol) Then
' here you can process the found result point
End If
End If
        
Next i

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,900,0
17,280,1
12,790,2
8,430,3
4,170,4
-0,040,5
-4,250,6
-8,510,7
-12,870,8
-17,360,9
-21,981,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.

Resumo

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