| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: Variable Eigenschaft abfragen (1763 mal gelesen)
|
fred_tomke Mitglied Applikationsingenieur
 
 Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 17. Okt. 2005 20:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo, noch eine Frage: da gibt es ein Objekt, z.B. Layerobjekt. Von dem will ich eine bestimmte Eigenschaft abfragen, die ich zum Zeitpunkt der Entwicklung noch nicht kenne. Nach meinem jetzigen Kenntnisstand würde ich für jede Eigenschaft eine eigene Funktion (nach dem folgenden Schema) erzeugen. Wie kann ich aber eine Variable Eigenschaft abfragen? Function CivilGetTINStatProperty() Dim strName, strProp As String Dim uValue As Variant Dim oSurfaces As AeccSurfaces Dim oVolTIN As AeccTinVolumeSurface Dim oStat As AeccTinVolumeSurfaceStatistics 'hier hole ich mir den Namen des gewünschten TIN strName = CivilGetDicProperty("VolTinName") 'hier hole ich mir den Namen der gewünschten Eigenschaft strProp = CivilGetDicProperty("StatProp") If IsNull(uXRec) Then uValue = Nothing Else On Error GoTo errGetProp Set oSurfaces = oCivilDb.Surfaces Set oVolTIN = oSurfaces.Item(strName) Set oStat = oVolTIN.Statistics 'hier will ich die variable Eigenschaft haben uValue = oStat.>>strProp<< GoTo exitGetProp End If errGetProp: uValue = Nothing exitGetProp: uValue = uValue CivilGetTINStatProperty = uValue End Function Wie müsste ich das umsetzen, dass die gewünschte Eigenschaft variabel ist? VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 17. Okt. 2005 20:30 <-- editieren / zitieren --> Unities abgeben:          Nur für fred_tomke
Hallo Fred, Ich hab's nicht ganz verstanden, weil ich zur Zeit kein Civil habe. aber könnte die Funktion vielleicht so aussehen:
Code:
Function CivilGetProperty(PropName as String) Dim strName, strProp As String 'Übrigens: so ist strName Variant Dim uValue As Variant Dim oSurfaces As AeccSurfaces Dim oVolTIN As AeccTinVolumeSurface Dim oStat As AeccTinVolumeSurfaceStatistics 'hier hole ich mir den Namen des gewünschten TIN strName = CivilGetDicProperty(PropName) 'hier hole ich mir den Namen der gewünschten Eigenschaft strProp = CivilGetDicProperty("StatProp")...
Stelli------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 17. Okt. 2005 20:52 <-- editieren / zitieren --> Unities abgeben:          Nur für fred_tomke
Hallo Fred, ich glaube die erste Antwort kannst du vergessen. Mir fällt da nur die abenteuerliche Variante mit Eval ein:
Code:
Option Explicit public Wert as VariantSub test() Dim Prop As String Dim strEval As String Prop = "color" ' Speichern der Layerfarbe auf Uservariable UserR1 (real) strEval = "ThisDrawing.SetVariable ""USERR1"", thisdrawing.Layers(""0"")." & Prop ThisDrawing.Application.Eval strEval Debug.Print ThisDrawing.GetVariable("UserR1") ' Speichern der Layerfarbe in Variable Wert strEval = "Wert = thisdrawing.Layers(""0"")." & Prop ThisDrawing.Application.Eval strEval Debug.Print Wert End Sub
Stelli ------------------ Warum lisp'eln wenn's auch anders geht. [Diese Nachricht wurde von Stelli1 am 17. Okt. 2005 editiert.] [Diese Nachricht wurde von Stelli1 am 17. Okt. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
 
 Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 18. Okt. 2005 00:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo, abenteuerlich wohl war. ;-) Ich nutze mal Deine Signatur, um mein Ziel zuverdeutlichen (Warum lisp'eln wenn's auch anders geht.). Im Prinzip will ich sowas: (setq lstProps (mapcar '(lambda (x) (cons x (vlax-get-property vlaLayer x))) '("Name" "Color" "LineType" ...))) Ich habe eine Vielzahl von Eigenschaften und will irgendeine davon abfragen = variabel. Ziel soll es später sein, eine Funktion für alle möglichen Eigenschaftsabfragen zu haben. VG, Fred
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 18. Okt. 2005 09:22 <-- editieren / zitieren --> Unities abgeben:          Nur für fred_tomke
Hallo Fred, meinst du es so.
Code:
Option Explicit ' Hilfsvariable Public vgva_Wert As VariantSub test() Dim vlcl_PropNames As New Collection Dim vlcl_PropValue As New Collection Dim vlin_i As Integer vlcl_PropNames.Add "Name" vlcl_PropNames.Add "Color" vlcl_PropNames.Add "Linetype" vlcl_PropNames.Add "Freeze" If fgbo_GetLayerProperties("0", vlcl_PropNames, vlcl_PropValue) Then For vlin_i = 1 To vlcl_PropNames.Count Debug.Print vlcl_PropNames.Item(vlin_i) & ": " & vlcl_PropValue.Item(vlin_i) Next vlin_i Else MsgBox "Fehler in Funktion 'fgbo_GetLayerProperties'", vbCritical End If End Sub Function fgbo_GetLayerProperties(vlst_Layer As String, vlcl_PropNames As Collection, vlcl_PropValues As Collection) As Boolean Dim vlst_Eval As String Dim vlva_Property As Variant On Error GoTo Error_GetLayerProperties For Each vlva_Property In vlcl_PropNames vlst_Eval = "vgva_Wert = ThisDrawing.Layers(""" & vlst_Layer & """)." & vlva_Property Eval vlst_Eval vlcl_PropValues.Add vgva_Wert Next vlva_Property fgbo_GetLayerProperties = True Exit Function Error_GetLayerProperties: fgbo_GetLayerProperties = False End Function
Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
 
 Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 18. Okt. 2005 09:34 <-- editieren / zitieren --> Unities abgeben:         
Na, holla, die Waldfee! Sieht sehr gut aus. Aber was mich nun auch noch interssiert: nach welcher Konvention bezeichnest Du Deine Präfices in deinen Funktionen? Eine konnte ich schon entschlüsseln. fgbo_ function als get mit dem Ergebnis bolean. Ist das eine eigene Konvention? VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 18. Okt. 2005 09:39 <-- editieren / zitieren --> Unities abgeben:          Nur für fred_tomke
Hallo Fred, ne keine eigene sondern eine "Pflichtübung" für den Auftraggeber. Hat sich aber bei grössern Sachen als sehr Vorteilhaft erwiesen. Muss mich auch wieder daran gewöhnen, da von der schnellen tipperei hier versaut. v___ = Variable o___ = Objekt f___ = Funktion _l__ = lokal _g__ = global __in = integer __bo = boolean __st = string __ln = long __va = Variant usw. also vgva_Wert = Variable Global Variant Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |