Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Verständnisfrage betreff Variableübergabe

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  Verständnisfrage betreff Variableübergabe (916 mal gelesen)
tomww
Mitglied



Sehen Sie sich das Profil von tomww an!   Senden Sie eine Private Message an tomww  Schreiben Sie einen Gästebucheintrag für tomww

Beiträge: 37
Registriert: 27.10.2006

erstellt am: 21. Nov. 2006 13:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
mir ist das jetzt schon peinlich. Bin ja hier ständig euch am "nerven".
Wie ist es denn eigentlich, wenn man nachträglich Werte von Ojekten ermittelt.
Es sind zb mehrere Objekte (Rechtecke mit Polylinien gezeichnet) vorhanden.
Der User selektiert einige von denen.
Nun soll von den selektierten Werte übergeben werden (Fläche und Umfang).
Aus dem bisherigen Code, was ich von Stelli und aus dem Forum gefunden habe, habe ich volgendes verbrochen:
Die Probleme:
1. kein sauberer Abbruch. Das Selektieren mit Getentity ist wohl nicht so gut?
2. Die Variableübergabe der Funktion ist wohl auch nicht so geschickt gewählt worden.
Kann mich jemand auf den "sauberen Weg"  wieder bringen? 
Danke
T

Code:

Sub test1()
    Dim testi As Variant
    Dim fl As Double, uf As Double
    Dim i As Integer
   
    Do
        i = i + 1
        testi = objektwerte

        Debug.Print "t0= " & testi(0)
        Debug.Print "t1= " & testi(1)
        Debug.Print testi(1)
        fl = fl + testi(0)
      ' uf = uf + testi(1)  'Umfang
        ThisDrawing.Utility.Prompt Chr$(10) & "Gesamtfläche= " & (Format(fl, "##,##0.00")) & _
        " m²" & " mit " & i & " Objekten // "

        Debug.Print "i= " & i
        'If testi(0) = -1 Then Exit Do
        'If testi(0) = 0 Then Exit Do
    Loop
    Debug.Print fl & " : " & i
End Sub


Function objektwerte() As Variant
' Ermittelt Flaechen und Längen Werte des selektierten Objektes
    Dim pl As AcadLWPolyline
    Dim Entity As AcadEntity
    Dim oWert(2) As Double
    Dim i, ij
    Dim point

  On Error GoTo objektwerte_Error

    ThisDrawing.Utility.GetEntity Entity, point, "Stütze selektieren: "
    If UCase(Entity.ObjectName) = UCase("AcDbPolyline") Then
        Set pl = Entity
        oWert(0) = pl.Area  'Fläche
        oWert(1) = pl.Length 'Umfang
       
    End If

    objektwerte = oWert
   

objektwerte_exit:
  Exit Function

objektwerte_Error:
    If Err.Number = -2147352567 Then       
        Resume objektwerte_exit
    End If
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure objektwerte of Modul Allgemein"
   


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 21. Nov. 2006 21:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tomww 10 Unities + Antwort hilfreich

Hallo Tom,
  
Zitat:
Original erstellt von tomww:
...
Aus dem bisherigen Code, was ich von Stelli und aus dem Forum gefunden habe, habe ich volgendes verbrochen:...

Das war dein Code, nur ein wenig geändert.

Um mögliche Fehler auszuschliessen solltest du vielleicht als Rückgabewert für deine Funktion nicht die Eigenschaft eines Objektes abfragen.

Code:
Function Objektwerte(Länge as double, Breite as Double, Fläche as Double, Umfang as Double) as Boolean

Wenn ein Rechteck erzeugt wurde gibt die Funktion TRUE zurück, sonst FALSE. Wenn zusätzlich noch die Fläche mit zurückkommen soll, füllst du die Variable einfach in der Funktion ab.

Was du jetzt willst versteh ich nicht ganz. Vielleicht so:
Du bildest ein Selektionset
Mit SeleSet.Selectonscreen fragst du mehrere Objekte ab
Mit For Each Entity in SelSet durchläufst du eine Schleife und liest deine Werte aus.

Oder wie du es machst jedes Objekt einzeln aber dann nach obigen Schema.

Stelli


------------------
Warum lisp'eln wenn's auch anders geht.  
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomww
Mitglied



Sehen Sie sich das Profil von tomww an!   Senden Sie eine Private Message an tomww  Schreiben Sie einen Gästebucheintrag für tomww

Beiträge: 37
Registriert: 27.10.2006

erstellt am: 21. Nov. 2006 22:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Servus,
ok, hast mich auf neue Wege gebracht :-)

nun mit deinem Hinweis habe ich nun dieses verwurschtelt:
an dieser Stelle haben ich noch einen Typenfehler:
Set Entity = ThisDrawing.SelectionSets("sstest") . wahrscheinlich weise ich dieses Entity noch falsch zu?

Code:

Sub testauswahl()
Dim dummy
Dim fl As Double
Dim Entity As AcadEntity
Dim pl As AcadLWPolyline

dummy = Auswahl("sstest")


    fl = 0
    Set Entity = ThisDrawing.SelectionSets("sstest")
    For Each Entity In ThisDrawing.SelectionSets("sstest")
        If UCase(Entity).ObjectName = UCase("AcDbPolyline") Then
            Set pl = Entity
            fl = fl + pl.Area  'Fläche
            Debug.Print "Fl= " & fl

        End If
    Next

End Sub

Function Auswahl(Auswahlname As String) As String
'Funktion für Objektauswahl
    Dim objSS As AcadSelectionSet
    Dim varPnt1 As Variant
    Dim varPnt2 As Variant
    Dim strOpt As String
    Dim lngMode As Long
    Dim anzi
   
    'Löscht Auswahlsatz fals bereits vorhanden
    For Each objSS In ThisDrawing.SelectionSets
        If Auswahlname = objSS.Name Then
            ThisDrawing.SelectionSets.Item(anzi).Delete
            Exit For
        End If
    Next
   
    With ThisDrawing.Utility
        'Selektions Modus
        .InitializeUserInput 1, "Fenster Schneiden Vorheriges Letztes Alles"
        strOpt = .GetKeyword(vbCr & "Wählen [Fenster/Schneiden/Vorheriges/Letztes/Alles]:")
        'in Modus konvertieren
        Select Case strOpt
            Case "Fenster"
                lngMode = acSelectionSetWindow
            Case "Schneiden"
                lngMode = acSelectionSetCrossing
            Case "Vorheriges"
                lngMode = acSelectionSetPrevious
            Case "Letztes"
                lngMode = acSelectionSetLast
            Case "Alles"
                lngMode = acSelectionSetAll
        End Select
       
        'Auswahlset
        Set objSS = ThisDrawing.SelectionSets.Add(Auswahlname)
        ' Fesnter oder Schneiden
        If "Fenster" = strOpt Or "Schneiden" = strOpt Then
            'den ersten Pkt
            .InitializeUserInput 1
            varPnt1 = .GetPoint(, vbCr & "erste Fensterecke: ")
           
            .InitializeUserInput 1 + IIf("Schneiden" = strOpt, 32, 0)
            varPnt2 = .GetCorner(varPnt1, vbCr & "zweite Ecke: ")
           
           
            'anhand der Pnkt selektieren
            objSS.Select lngMode, varPnt1, varPnt2
          Else
            'oder Auswaohl per Modus
            objSS.Select lngMode
        End If
       
        'Auswahl highlight
        objSS.Highlight True
       
        ''Pause
        .GetString False, vbCr & "Weiter mit Eingabe... "
        'Dehighlight
        objSS.Highlight False
       
    End With


  '  If Not objSS Is Nothing Then
  '      objSS.Delete
  '  End If
 

End Function


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 22. Nov. 2006 07:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tomww 10 Unities + Antwort hilfreich

Hallo Tom,

Zu deinem Typfehler:

    Set Entity = ThisDrawing.SelectionSets("sstest")
    For Each Entity In ThisDrawing.SelectionSets("sstest")

Warum willst du den Auswahlsatz der Variable Entity zuweisen? Du durchläufst doch in der Zeile darunter jedes einzelne Entity im Auswahlsatz. Daher ist die Zeile falsch und kann raus.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomww
Mitglied



Sehen Sie sich das Profil von tomww an!   Senden Sie eine Private Message an tomww  Schreiben Sie einen Gästebucheintrag für tomww

Beiträge: 37
Registriert: 27.10.2006

erstellt am: 22. Nov. 2006 09:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Morgen,
danke Carsten. Habe noch einen Fehler gefunden, nun scheint es zu laufen.
hier war noch eine Klammerfehler:
If UCase(Entity).ObjectName = UCase("AcDbPolyline") Then

Korrekt:
If UCase(Entity.ObjectName) = UCase("AcDbPolyline") Then

bis sicherlich bald wieder   
T

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz