507x
001352
2020-04-27

[PT] FAQ 004409 | Como é que posso criar um corte através da interface COM?

Pergunta:
Como é que posso criar um corte através da interface COM?

Resposta:
Geralmente, um corte é um elemento, como uma barra, e também é criado da mesma forma. Primeiro, é necessária a interface para os objetos. Para uma barra, será IModelData e, para os cortes, será ISections. Esta interface pode ser encontrada em IModel3:

Sub test_section()
' get interface from the opened model and lock the licence/program
    Dim iModel As RFEM5.IModel3
    Set iModel = GetObject(, "RFEM5.Model")
    iModel.GetApplication.LockLicense

On Error GoTo E

    Dim iSecs As RFEM5.ISections
    Defina iSecs = iModel.GetSections ()

Todas os cortes criados anteriormente são eliminados primeiro e depois são criados dois cortes novos. 
O primeiro corte deve ser um corte de sólido com uma superfície de corte visível (ver Figura 01). Os dados são introduzidos da mesma forma como no RFEM. Como tipo, é selecionado "SectionOnSectionalArea", os cantos do corte são definidos através de "EdgePoint" e "Vector" define a direção do corte:

   ' primeiro elimine todas as secções
    iSecs.PrepareModification
    iSecs.DeleteObjects ("All")
    iSecs.FinishModification

    ' definir secção no sólido
    Dim sec As RFEM5.Section
    sec.EdgePointA.X = 2
    sec.EdgePointA.Y = 5
    sec.EdgePointA.Z = 0
    sec.EdgePointB.X = 2
    sec.EdgePointB.Y = 8
    sec.EdgePointB.Z = 0

    seg.no = 1
    sec.Name = "secção sólida"
    sec.Plane = GlobalPlaneInPositiveX
    sec.ShowValuesInIsolines = False
    sec.Type = SectionOnSolidSectionLine
    sec.ObjectList = "1"

    iSecs.PrepareModification
    iSecs.SetSection sec
    iSecs.FinishModification

Como já se sabe de outros elementos, o novo corte é finalmente transferido num bloco Prepare-/FinishModifikation. Como segundo corte, deve ser criado um corte de superfície (ver Figura 02). Para isso, é necessário utilizar o tipo "SectionViaSurfacePlane". Além da especificação do vetor da direção do corte, é necessário selecionar o plano de representação dos resultados para o corte de superfície. No exemplo a seguir, o plano xy é selecionado através da configuração de "GlobalPlaneInPositiveX".

' set section on surface
    sec.EdgePointA.X = 2
    sec.EdgePointA.Y = 0
    sec.EdgePointA.Z = 0
    sec.EdgePointB.X = 2
    sec.EdgePointB.Y = 3
    sec.EdgePointB.Z = 0

    seg.no = 2
    sec.Nome = "secção de superfície"
    sec.Plano = GlobalPlaneInPositiveX

    sec.ShowValuesInIsolines = Verdadeiro
    s.Tipo = SectionViaSurfacePlane
    sec.ListadeObjetos = "1"

    s.Vector.X = 0
    s.Vector.Y = 0
    s.Vector.Z = 1

    iSecs.PrepareModificação
    iSecs.SetSecção s
    iSecs.FinishModification

Também é possível obter os resultados de um corte utilizando o método separado "GetResultsInSection" da interface "IResults2". A seguir, são obtidas as forças de corte do corte de superfície. A distribuição das forças internas é configurada através de "ContinuousDistributionWithinObjects" como "Contínuo nas superfícies":

 ' obtém resultados
    Dim iCalc As ICalculation2
    Set iCalc = iModel.GetCalculation

    Dim iRes As IResults2
    Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, 1)

    Dim secRes() As RFEM5.SectionResult
    secRes = iRes.GetResultsInSection(2, AtNo,
      ShearForceVy,ContinuousDistributionWithinObjects, False)

Em Downloads, pode encontrar a macro do Excel e o ficheiro de teste para compreender o programa.