| |  | 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
  
 Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 16. Jun. 2010 12:10 <-- editieren / zitieren --> Unities abgeben:         
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 / zitieren -->
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
  
 Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 16. Jun. 2010 15:53 <-- editieren / zitieren --> Unities abgeben:         
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 / zitieren -->
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 >>)
 |