808x
004771
14. Oktober 2020

Frage

Kann man mit Hilfe der COM-Schnittstelle Sichtbarkeiten anlegen?


Antwort:

Es ist möglich, Sichtbarkeiten über die COM-Schnittstelle (RF-COM3 / RS-COM6) anzulegen. Im folgenden Code werden zunächst Elemente für die eine Sichtbarkeit ausgewählt. Dies geschieht über die Selections. Zuerst werden diese mit "rfEnableSelections" aktiviert, danach können über "rfSelectObjects" Objekte selektiert werden:

Sub set_visibility()
    
'   get interface from the opened model and lock the licence/program
Dim iModel As RFEM3.IrfStructure3
Set iModel = GetObject(, "RFEM3.Structure")
iModel.rfGetApplication.rfLockLicence
    
On Error GoTo e
    
'   get interface for modeldata
Dim iModData As RFEM3.IrfStructuralData4
Set iModData = iModel.rfGetStructuralData

'   get interface for view
Dim iView As RFEM3.IrfView2
Set iView = iModel.rfGetActiveView
'   remove old views
iView.rfDeletePartialView "test|view"
iView.rfDeletePartialView "test|view2"
iView.rfDeletePartialView "test|view_add"
iView.rfDeletePartialView "test|view_rev"
iView.rfDeletePartialView "test|view_diff"

'   create first view
iModData.rfSelectObjects STR_MEMBER, "3-4"
iView.rfSetPartialView "test|view"
'    iView.rfSelectPartialView "test|view", PVM_SHOW, True, True

'   create second view
iModData.rfSelectObjects STR_SURFACE, "1"
iModData.rfSelectObjects STR_MEMBER, "3"
iView.rfSetPartialView "test|view2"
'    iView.rfSelectPartialView "test|view2", PVM_SHOW, True, True

'   create sum from view from 1 and 2
iView.rfSelectPartialView "test|view", PVM_SELECT, True, True
iView.rfSelectPartialView "test|view2", PVM_SELECT, False, True
iView.rfSelectPartialView "", PVM_SHOW_SELECTION_ONLY, True, True
iView.rfSetPartialView "test|view_add"


'   create differential view 2 minus 1
'       first created reversed view
iView.rfSelectPartialView "test|view", PVM_SHOW, True, True
iView.rfSelectPartialView "test|view2", PVM_SHOW, False, True
iView.rfSelectPartialView "", PVM_SHOW_REVERSE, True, True
iView.rfSelectPartialView "", PVM_SELECT, True, True
iView.rfSetPartialView "test|view_rev"
iView.rfSelectPartialView "", PVM_SHOW_REVERSE, True, True

'       select view to substract and reverse view
iView.rfSelectPartialView "test|view_rev", PVM_SELECT, True, True
iView.rfSelectPartialView "test|view", PVM_SELECT, False, True
iView.rfSelectPartialView "", PVM_SHOW_SELECTION_ONLY, True, True
iView.rfSelectPartialView "", PVM_SHOW_REVERSE, True, True
iView.rfSelectPartialView "", PVM_SELECT, True, True
iView.rfSetPartialView "test|view_diff"
iView.rfSelectPartialView "", PVM_SHOW_SELECTION_ONLY, True, True

iView.rfSelectPartialView "", PVM_SHOW_REVERSE, True, True
iView.rfCancelPartialView

    
e:  If Err.Number <> 0 Then MsgBox Err.description, , Err.Source
    
iModel.rfGetApplication.rfUnlockLicence
Set iModel = Nothing

End Sub

Über die Schnittstelle "iView" und den Befehl "rfSetPartialView" ist es möglich, eine Sichtbarkeit anzulegen. Wichtig ist hier vor allem die Bezeichnung. Das Trennzeichen "|" sorgt dabei dafür, dass eine Sichtbarkeit mit Namen "view" in der Gruppe "test" angelegt wird.

Der Befehl rfSelectPartialView wird verwendet, um eine Sichtbarkeit darzustellen. Das erste Argument ist der Name der Sichtbarkeit. Für das zweite Argument können verschiedene Befehle ausgewählt werden. Je nach Befehl ist ein Name der Sichtbarkeit erforderlich oder nicht.

Das dritte Argument fragt ab, ob alles bisher dargestellte deaktiviert werden soll oder nicht. Wenn also eine additive Darstellung zweier Sichtbarkeiten gewünscht wird, muss mindestens bei der Auswahl der zweiten Sichtbarkeit hier "False" übergeben werden.

Das vierte Argument steuer, ob alles Ausgeblendete noch im Hintergrund dargestellt werden soll oder nicht.

Hier noch eine Liste wichtiger Befehle des zweiten Arguments:

PVM_SELECT - selektiert die Elemente in der angegebenen Sichtbarkeit

PVM_SHOW - zeigt die angegebenen Sichtbarkeit

PVM_SHOW_SELECTION_ONLY - nachdem Elemente aus den Sichtbarkeiten selektiert wurden können Sie nun so allein dargestellt werden

PVM_SHOW_REVERSE - alle bisher dargestellten Elemente gehen in den Hintergrund und alle Elemente aus dem Hintergrund werden dargestellt (Darstellung wird invertiert)