867x
004409
2020-04-27

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
Set 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:

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