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

Artigo técnico

Este artigo foi traduzido pelo Google Tradutor Ver texto original

Se você ler os resultados de uma superfície através da interface COM, obtém um campo unidimensional com todos os resultados nos nós de FE ou pontos de grelha. Para obter os resultados na aresta de uma superfície ou ao longo de uma linha dentro das superfícies, é necessário filtrar os resultados na área da linha. O seguinte descreve uma função que pode executar esta tarefa.

Base teórica para o cálculo da distância

Para encontrar os nós FE que estão próximos ou na linha, a distância do nó à linha deve ser calculada. Dada a linha com o ponto inicial e final (N 0 e N 1 ) e o ponto P cuja distância da linha deve ser determinada. Uma maneira comum de calcular essa distância é abranger um plano que atravessa o ponto P e é perpendicular à linha reta. Para este fim, é necessário primeiro definir uma equação linear adequada. Neste caso, recomenda-se a utilização do formulário de parâmetros, que contém um vetor de direção v. Isto pode então ser usado para definir a equação do plano.

$\mathrm{Gerade}\;\mathrm G:\;\overset\rightharpoonup{\mathrm X}\;=\;\overset\rightharpoonup{\mathrm A}\;+\;\mathrm s\;\cdot\;\overset\rightharpoonup{\mathrm v}\;(1)\\\mathrm{mit}\\\mathrm A\;=\;{\mathrm N}_0\\\mathrm v\;=\;{\mathrm N}_1\;-\;{\mathrm N}_0$

Para o vetor de apoio A, é utilizado o ponto inicial (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 a equação do plano pelo motivo já mencionado.

$\mathrm{Ebene}\;\mathrm E:\;0\;=\;(\overset\rightharpoonup{\mathrm X}\;-\;\overset\rightharpoonup{\mathrm P})\;\cdot\;\overset\rightharpoonup{\mathrm n}\;(2)\\\mathrm{mit}\\\overset\rightharpoonup{\mathrm n}\;=\;\overset\rightharpoonup{\mathrm v}\\\overset\rightharpoonup{\mathrm P}\;=\;\overset\rightharpoonup{{\mathrm P}_{\mathrm{res}}}$

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

$(1)\;\mathrm{in}\;(2):\;0\;=\;((\overset\rightharpoonup{\mathrm A}\;+\;\mathrm s\;\cdot\;\overset\rightharpoonup{\mathrm v})\;-\;\overset\rightharpoonup{\mathrm P})\;\cdot\;\overset\rightharpoonup{\mathrm n}\;(3)$

Convertido para s e $ \ overset \ rightharpoonup {\ mathrm n} \; = \; \ overset \ rightharpoonup {\ mathrm v} $ resulta na seguinte equação.

$\mathrm s\;=\;\frac{(\overset\rightharpoonup{\mathrm P}\;-\;\overset\rightharpoonup{\mathrm A})\;\cdot\;\overset\rightharpoonup{\mathrm v}}{(\overset\rightharpoonup{\mathrm v}\;\cdot\;\overset\rightharpoonup{\mathrm v})}\;(4)$

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

$\overset\rightharpoonup{\mathrm S}\;=\;\overset\rightharpoonup{\mathrm A}\;+\;\mathrm s\;\cdot\;\overset\rightharpoonup{\mathrm v}\;(5)$

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

$\mathrm d\;=\;\left|\overset\rightharpoonup{{\mathrm P}_{\mathrm{res}}}\;-\;\overset\rightharpoonup{\mathrm S}\right|\;(6)$

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 foi configurado com o ponto P res e o vetor de direção $ \ overset \ rightharpoonup {\ mathrm v} $. O fator s é apenas 0,5 na figura, de modo que a interseção do plano e da linha está exatamente no centro da linha.

Figura 01 - Representação esquemática dos componentes para o cálculo da distância

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.

Figura 02 - Modelo para cálculo de exemplo

Primeiro, a ligação ao RFEM deve ser estabelecida. Em seguida, a interface é buscada nos dados do modelo. Uma vez que este procedimento já foi descrito em vários outros artigos (ver ligações), não será descrito em detalhe aqui. Abaixo está o código fonte para o início do programa.

Sub seleção_teste2 ()
    
Dim line_no As Inteiro
Dim superfície_no como inteiro
Dim loadcase_no As Inteiro
Dim d_tol As Double
line_no = 11
surface_no = 1
loadcase_no = 1
d_tol = 0,001
    
'obtenha a interface do modelo aberto e bloqueie a licença/programa
Dim iModel As RFEM5.IModel2
Defina iModel = GetObject (, "RFEM5.Model")
iModel.GetApplication.LockLicense
    
No erro Ir para e
    
Dim iModelData As RFEM5.IModelData2
Definir iModelData = iModel.GetModelData

Antes de iniciar o programa, primeiro definimos os parâmetros variáveis. Estes incluem o número da linha line_no da linha onde pretende procurar resultados e, obviamente, 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 loadcase loadcase_no ao qual os resultados pertencem. Como 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ó. No exemplo, foi utilizada uma tolerância de um milímetro.

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

'obter linha
Dim ILin As RFEM5.ILine
Definir ILin = iModelData.GetLine (line_no, AtNo)
Dim lin As RFEM5.RfLine
lin = ILin.GetData
   
    
'obter nós da linha
Dim n (0 a 1) como RFEM5.Node
    
Dim ints () Como Inteiro
ints = strToIntArr (lin.NodeList)
    
Dim Dim como RFEM5.INode
Defina iNd = iModelData.GetNode (ints (0), AtNo)
n (0) = iNd.GetData
Defina iNd = iModelData.GetNode (ints (UBound (ints, 1)), AtNo)
n (1) = iNd.GetData
    
Definir ID = Nada

Os nós e a linha são recuperados individualmente diretamente através da sua interface (INode ou ILine). Para extrair os números dos nós da string (RfLine.NodeList), use a função strToIntArr descrita em outra entrada (consulte Links). Ele converte a string em um campo inteiro.

Com os agora dados pontos da linha $ \ overset \ rightharpoonup {{\ mathrm N} _0} $ (ponto inicial) e $ \ overset \ rightharpoonup {{\ mathrm N} _1} $ (ponto final), pode configurar os primeiros parâmetros da equação.

Dim v Como RFEM5.Point3D
vX = N (1) .X - N (0) .X
vY = N (1) .Y - N (0) .Y
vZ = N (1) .Z - N (0) .Z
    
Dim A como RFEM5.Point3D
AX = N (0) .X
AY = N (0) .Y
AZ = N (0) .Z
    
Dim v2 como dobro
v2 = vX ^ 2 + vY ^ 2 + vZ ^ 2
    
Dim P_res Como RFEM5.Point3D
Dim s As Double
Dim d As Double

O vetor de direção $ \ overset \ rightharpoonup {\ mathrm v} $ (v), o vetor de suporte $ \ overset \ rightharpoonup {\ mathrm A} $ (A) e o produto em escala do vetor de direção $ \ overset \ rightharpoonup { \ mathrm v} \ cdot \; \ overset \ rightharpoonup {\ mathrm v} $ (v2). Além disso, também são definidas as variáveis P res (P_res) para o ponto do resultado es para o fator da equação linear (1).

Calcular a distância em um loop

Neste exemplo, o processamento dos resultados com base nos nós de EF foi selecionado. A verificação da distância ocorre em um loop sobre o campo desses resultados. Anteriormente, estes resultados devem ser obtidos através da interface ICalculation2 e, em seguida, IResults. Dentro do loop, o ponto P res é descrito primeiro com as coordenadas do valor do resultado (para maior clareza). Então, o cálculo direto da Equação (4) pode ser realizado. Após o cálculo de s, é possível verificar se o valor é inferior a zero ou superior a um porque estes valores se encontram fora ou antes e depois da linha recta. Se um valor estiver dentro do intervalo, a distância é calculada com a Equação (6).

'obtém resultados em fe-nós
Dim iCalc As ICalculation2
Definir iCalc = iModel.GetCalculation
    
Dim iRes como RFEM5.IResults
Definir iRes = iCalc.GetResultsInFeNodes (LoadCaseType, loadcase_no)
    
Dim surfBaStr () As RFEM5.SurfaceBasicStresses
surfBaStr = iRes.GetSurfaceBasicStresses (surface_no, AtNo)
    
percorre tensões e calcula a distância da linha
Dim i Como Inteiro
Para i = 0 Para UBound (surfBaStr, 1)
P_res.X = surfBaStr (i) .Coordenadas.X
P_res.Y = surfBaStr (i) .Coordenadas.Y
P_res.Z = surfBaStr (i) .Coordenadas.Z
'calcular o fator para a equação de linha da interseção
s = ((P_res.XA.X) * vX + (P_res.YA.Y) * vY + (P_res.ZA.Z) * vZ)/v2
        
Se s <= 1 + d_tol E s> = 0 - d_tol Então
'calcular a distância do ponto de intersecção e do nó fe
d = ((P_res.X- (AX + s * vX)) ^ 2
+ (P_res.Y- (AY + s * vY)) ^ 2
+ (P_res.Z- (AZ + s * vZ)) ^ 2) ^ 0,5
            
Se (d <d_tol) Então
'Aqui pode processar o ponto de resultado encontrado
Terminar se
Terminar se
        
Próximo 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

Por outro lado, os valores do diagrama de resultados na linha correspondente são exibidos na Figura 03.

Figura 03 - Diagrama de resultados na linha examinada

É 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 a ajuda do cálculo vetorial, 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 maneira. Especialmente para programas executados completamente em segundo plano, é possível realizar uma avaliação automática de resultados.

Palavras-chave

Interface COM Ler resultados de uma superfície Ler resultados ao longo de uma linha Encontrar nós ao longo de uma linha Avaliação automática de resultados Seleção via interface COM

Downloads

Ligações

Contacto

Contacto da Dlubal

Tem alguma questão ou necessita de ajuda? Então entre em contacto com a nossa equipa de apoio técnico gratuita por e-mail, chat ou no fórum, ou então consulte as perguntas mais frequentes (FAQ).

+49 9673 9203 0

(falamos português)

info@dlubal.com

RFEM Programa principal
RFEM 5.xx

Programa principal

Software de engenharia estrutural para análises de elementos finitos (AEF) de estruturas planas e espaciais constituídas por lajes, paredes, vigas, sólidos e elementos de contacto

Preço de primeira licença
3.540,00 USD
RFEM Outros
RF-COM 5.xx

Módulo adicional

Interface programável (API) com base na tecnologia COM

Preço de primeira licença
580,00 USD
RSTAB Programa principal
RSTAB 8.xx

Programa principal

Software de engenharia para o dimensionamento de estruturas reticuladas de pórticos, barras e treliças, com cálculos lineares e não-lineares de esforços internos, deformações e reações de apoio

Preço de primeira licença
2.550,00 USD
RSTAB Others
RS-COM 8.xx

Módulo adicional

Interface programável (API) com base na tecnologia COM

Preço de primeira licença
580,00 USD