920x
004409
2020-04-27

Criar um padrão através da interface COM

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:

  1. código.vb#

Sub test_section()
' get interface from the opened model and lock the licence/program

  1. Dim iModel As RFEM5.IModel3
  2. Set iModel = GetObject(, "RFEM5.Model")
  3. iModel.GetApplication.LockLicense

On Error GoTo E

  1. Dim iSecs As RFEM5.ISections
  2. Set iSecs = iModel.GetSections()
#/code#

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:

   '   first delete all sections
    iSecs.PrepareModification
    iSecs.DeleteObjects ("All")
    iSecs.FinishModification
    
    '   set section on solid
    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
    
    sec.no = 1
    sec.Name = "solid section"
    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
    
    sec.no = 2
    sec.Name = "surface section"
    sec.Plane = GlobalPlaneInPositiveX
    
    sec.ShowValuesInIsolines = True
    sec.Type = SectionViaSurfacePlane
    sec.ObjectList = "1"
    
    sec.Vector.X = 0
    sec.Vector.Y = 0
    sec.Vector.Z = 1
    
    iSecs.PrepareModification
    iSecs.SetSection sec
    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":

 '   get results
    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.


Autor

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

Downloads


;