Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Prompt bzw. Getstring in For Each - Schleife

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
  
NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
Autor Thema:  Prompt bzw. Getstring in For Each - Schleife (1311 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 16. Jun. 2010 12: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


NutSolid.jpg

 
Hallo zusammen!

Versuche gerade in einer For Each - Schleife ein Prompt bzw. ein Getstring einzubauen.
Das ganze im Modul.

Thema:
- Ich klick eine Polylinie an.
- Danach sollen allen Objekte mit dem Layernamen "FK"
  ermittelt werden.
- Ist eins erkannt worden möchte ich diesem per Getstring eine
  Tiefe mitgeben.
- usw.

Bei dem ersten Objekt funktioniert das auch.
Das 2 bzw. 3 usw. wird nicht weiter abgefragt?

Code:

For Each Nut In SSet
    NutName = Nut.Layer
        Select Case Left(NutName, 2)
        Case "FK"

            Set NutObj(0) = Nut
            NutRegion = ThisDrawing.ModelSpace.AddRegion(NutObj)
            OldLayer = NutRegion(0).Layer
            NutRegion(0).Layer = "Highlight"
            NutRegion(0).Highlight (True)
            NutHo = ThisDrawing.Utility.GetString(False, "Nuttiefe: ")
            NutRegion(0).Highlight (False)
            NutRegion(0).Layer = OldLayer
            Set NutSolid = ThisDrawing.ModelSpace.AddExtrudedSolid _
                          (NutRegion(0), NutHo, NutAn)
            NutRegion(0).Delete
                If NutHo < PlSt Then
                    MoHo = PlSt - NutHo
                    MoPkt3(0) = PickedPoint(0): MoPkt3(1) = _
                                PickedPoint(1): MoPkt3(2) = _
                                PickedPoint(2) + MoHo
                    NutSolid.Move PickedPoint, MoPkt3
                            End If
            GrundSolid.Boolean acSubtraction, NutSolid

            End Select
            GrundSolid.Layer = "3DSolid"
            GrundSolid.Update
Next Nut


Kann mir da jemand auf die Sprünge helfen?

Ferner möchte ich noch per Befehlseingabe die Abfrage einbauen, ob
das neue Nutsolid von der Oberseite oder Unterseite berechnet werden soll?

Vielen Dank im voraus.

Gruß

Dirk


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


Ex-Mitglied

erstellt am: 16. Jun. 2010 12:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wenn ich diesen Code ausführe:

Code:
  On Error Resume Next
  Do While Err.Number = 0
      Dim tStr As String
      tStr = ThisDrawing.Utility.GetString(False, "STR: ")
      If Len(tStr) = 0 Then Exit Do
  Loop

...dann werde ich so oft nach einem String gefragt, wie ich Durchläufe zulasse. Also schliesse ich mal darauf, dass es an einem anderen Fleck in Deiner Schleife liegt.

Anfangen würde ich mal damit, dass Du nicht getString sondern getReal verwendest. Sonst gibt Dir der Anwender statt einer Zahl einen Buchstaben ein (oder auch eine Zahl mit Beistrich als Dezimaltrennzeichen, was im AutoCAD ja nicht so gut ankommt) und nachfolgende Zeilen fliegen ab.

Weiters sehe ich nicht, ob Du On Error Resume Next gesetzt hast, wenn ja, dann geh mal die Schritte einzeln im Debug-Modus durch und achte darauf, wann sich Err.Number geändert hat.

Viel Erfolg, - alfred -

------------------
www.hollaus.at

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

erstellt am: 16. Jun. 2010 15:53    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 Alfred!

Danke für die Info's.

Das wäre der Code, bis auf die benannten Variablen:

Code:

Set SSet = ThisDrawing.SelectionSets.Add("Auswahl")

On Local Error Resume Next
ThisDrawing.Utility.GetEntity Objekt, PickedPoint, Prompt

If TypeName(Objekt) = "IAcadPolyline" Or "IAcadLWPolyline" Then
    Set Grundplatte(0) = Objekt
    ObjName = Grundplatte(0).Layer
        Select Case Left$(ObjName, 2)
            Case "S_"
                PlSt = Right(ObjName, Len(ObjName) - 2)
                PlSt = Replace(PlSt, "_", ",")
                regionObj1 = ThisDrawing.ModelSpace.AddRegion(Grundplatte)
                Set GrundSolid = ThisDrawing.ModelSpace.AddExtrudedSolid(regionObj1(0), PlSt, angle)
                regionObj1(0).Delete
                Objekt.GetBoundingBox MinPoint, MaxPoint
                minp(0) = MinPoint(0) + 10
                minp(1) = MinPoint(1) + 10
                maxp(0) = MaxPoint(0) + 10
                maxp(1) = MaxPoint(1) + 10
                SSet.Clear
                SSet.Select acSelectionSetCrossing, minp, maxp, Codes, Values
                Objekt.Delete
        End Select
               
    For Each Nut In SSet
        NutName = Nut.Layer
            Select Case Left$(NutName, 2)
                Case "FK"
                Set NutObj(0) = Nut
                NutRegion = ThisDrawing.ModelSpace.AddRegion(NutObj)
                OldLayer = NutRegion(0).Layer
                NutRegion(0).Layer = "Highlight"
                NutRegion(0).Highlight (True)
                NutHo = ThisDrawing.Utility.GetString(False, "Nuttiefe: ")
                NutRegion(0).Highlight (False)
                NutRegion(0).Layer = OldLayer
                Set NutSolid = ThisDrawing.ModelSpace.AddExtrudedSolid(NutRegion(0), NutHo, NutAn)
                NutRegion(0).Delete
                  If NutHo < PlSt Then
                      MoHo = PlSt - NutHo
                      MoPkt3(0) = PickedPoint(0): MoPkt3(1) = PickedPoint(1): MoPkt3(2) = PickedPoint(2) + MoHo
                      NutSolid.Move PickedPoint, MoPkt3
                  End If
                GrundSolid.Boolean acSubtraction, NutSolid

                End Select
                GrundSolid.Layer = "3DSolid"
                GrundSolid.Update
        Next Nut
       
        For Each LoObj In SSet
            LoObj.Delete
        Next LoObj

        SSet.Delete
       
End If


Vielen Dank im voraus für Deine/Eure Bemühungen mir zu helfen.

Gruß

Dirk

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


Ex-Mitglied

erstellt am: 16. Jun. 2010 16:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

und hast Du meine Tips von oben mal probiert?
Zumindest wird noch immer mit getString und nicht mit getReal abgefragt. 
Das Durchlaufen im Debug-Mode und dabei das Err.Number-Statement zu überwachen, hast Du gemacht? Wenn ja und da wäre kein Fehler, dann könnte ich auch nicht verstehen, wieso die Abfrage nicht nochmals kommen würde.

Was hat die Selektion mit minp/maxp für einen Sinn? Die Variable werden ja jeweils mit +10 erweitert (was eigentlich eine Fensterverschiebung aber keine Vergrößerung bedeutet, müsste bei minp nicht MINUS 10 stehen?

Wenn Du einen BreakPoint auf die Zeile mit .getString setzt, wie oft bleibt diese denn da stehen? Denn soweit ich es sehe, selektierst Du die Elemente mit Crossing ==> werden da jemals mehr als ein Element ins SSet übergeben?

- alfred -

------------------
www.hollaus.at

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