Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Endlosschleife?

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
Autor Thema:  Endlosschleife? (1307 mal gelesen)
Hezarfen
Mitglied
Konstrukteur


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

Beiträge: 42
Registriert: 30.11.2005

Catia V5 R16 SP5

erstellt am: 03. Jun. 2009 16:00    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 liebe CAD.de community,

ich habe folgendes Problem bei dem unten stehenden Makro. Ich möchte Punkte auf einer Kurve erzeugen, jedoch wird bei der Schleife (siehe unten), die mir durch die Angabe der Anzahl der Punkte kein Ende gesetzt. Der Loop läuft weiter, trotz das die Bedingung zur Beendigung erfüllt wird. Ich weiss leider nicht mehr weiter.  


'-------------------------------------------------------------------------------
'  Makro zum Erzeugen von Punkten auf einer Linie/Kurve
' Voraussetzung ist, das ein Part geöffnet ist und ein offener Körper mit dem Namen "Punkte" existiert.


Sub CATMain ()

  Dim partDocument1 As Document
  Set partDocument1 = CATIA.ActiveDocument

  Dim part1 As Part
  Set part1 = partDocument1.Part

  Dim hybridShapeFactory1 As Factory
  Set hybridShapeFactory1 = part1.HybridShapeFactory

  Dim HB as HybridBody
  Set HB = part1.HybridBodies.Item ("Punkte")

' Auswahl festlegen -----------------------------------------------
  Dim Was(0)
  Was(0) = "HybridShape"

' Selektion definieren und leeren ---------------------------------
  Dim UserSel As Selection
  Set UserSel= CATIA.ActiveDocument.Selection
  UserSel.Clear

' Selektion vornehmen lassen --------------------------------------
  Dim E As CATBSTR
  E = UserSel.SelectElement2(Was, "Bitte Linie auswählen!", true)

  If E = "Normal" Then
      MsgBox(UserSel.Item(1).Value.Name & " wurde ausgewählt!")
  Else
      MsgBox ("Abbruch")
  End If

  Dim Ref as Reference
  Set Ref = part1.CreateReferenceFromObject(UserSel.Item(1).Value) 

'Messen der Kurvenlaenge ------------------------------------------
  Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")  '--- SPAWorkbench anziehen
  Set TheMeasurable = TheSPAWorkbench.GetMeasurable(Ref)

  On Error Resume Next
  Err.Number = 0

  dLength = TheMeasurable.Length

If Err.Number = 0 Then
  msgbox " The Length of " & UserSel.Item(1).Value.Name & " is " & dLength & " mm !    " , 64, "Measurement"
Else
  msgbox "The Selected Element is not a Curve !    " & VbLf & "No Output !", 48, "Error in Selection"
End If

' Selektion freigeben --------------------------------------------
'  UserSel.EndSelectElement
  UserSel.Clear

' Eingabe -----------------------------------------------------------
  Dim Anzahl
  Anzahl = inputbox("Bitte Anzahl Punkte auf Kurve angeben!")
  Dim Abstand
  Abstand = dlength/(Anzahl+1)

' Schleife fuer Elemente: Punkt, Ebene, Kreis und Flaeche---------------------------
  Dim i
  i=1
  AbstandAnzahl=Abstand
  MsgBox ("Anzahl ist" & Anzahl)
  MsgBox ("Abstand ist" & AbstandAnzahl)

' Fehler ab hier ?!
Do  'While (i<=Anzahl)
  Dim PunktaufLinie
  Set PunktaufLinie = hybridShapeFactory1.AddNewPointOnCurveFromDistance(Ref,AbstandAnzahl,true)
  HB.AppendHybridShape PunktaufLinie
  i = i+1
  MsgBox ("Zahl i ist" & i)
  MsgBox ("Anzahl ist" & Anzahl)
  AbstandAnzahl=Abstand*i
  'if i>Anzahl Then Exit Do
  'if i>10 Then Exit Do
Loop Until (i>Anzahl) 'Anzahl wird hier nicht erkannt, die Schleife geht weiter?!
 
  part1.Update
 
End Sub


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

Bertel
Mitglied



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

Beiträge: 300
Registriert: 03.04.2002

CATIA V5 R26SP3HF21
Win10
Lenovo P52
Intel Xenon 16GB Ram
NVIDIA Quadro P2000
EUKLID V14
ViCADo 2015

erstellt am: 03. Jun. 2009 16:12    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 Hezarfen 10 Unities + Antwort hilfreich

Hallo Hezarfen,

du hast da zwei Schleifenarten gemischt!

Do-While benutzt ein Eingangs-Prüfkriterium
Do-Until benutzt ein Ausgangs-Prüfkriterium

also entweder

Do While Eingangs-Prüfkriterium
  Anweisung
Loop

oder

Do
  Anweisung
Loop Until Ausgangs-Prüfkriterium

Gruß
Bertel

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

Tstone
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 163
Registriert: 04.06.2003

Dell Precision 470
Intel Xeon CPU 3,00GHz
2GB Ram
Microsoft Windows XP
Catia V5 R18 SP6
VB2005

erstellt am: 05. Jun. 2009 13:01    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 Hezarfen 10 Unities + Antwort hilfreich

Hallo Bertel,
deine Antwort ist leider nicht ganz richtig:
Ein Do While Schleife läuft solange eine Bedingung erfüllt ist;
Do Until bis eine Bedingung erfüllt ist. Ob die Schleife dann ein letztes Mal durchlaufen wird, hängt von der Position des Schlüsselwortes ab:
Do While I>10
...
Loop
die Schleife wird bei Nicht-Erfüllung der Bedingung noch einmal durchlaufen.
Do
...
Loop While I>10
die Schleife wird nicht nochmals bei Nicht-Erfüllung der Bedingung durchlaufen.
Desweiteren hat hezarfen den While -Teil seiner Schleife auskommentiert.

@Hezarfen
Ich kann im Moment so keinen Fehler finden, du solltest aber deine Variablen sauber Deklarieren
Dim i As Integer
Ansonsten kann es zu Berechnungsungenauigkeiten kommen, die dafür sorgen das deine Schleifenbedingung nicht erfüllt ist(9.99998 ist NICHT 10)

------------------
Grüße TStone
   "Respektiere die Macht der Worte, wähle sie mit Bedacht!"

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

Bertel
Mitglied



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

Beiträge: 300
Registriert: 03.04.2002

CATIA V5 R26SP3HF21
Win10
Lenovo P52
Intel Xenon 16GB Ram
NVIDIA Quadro P2000
EUKLID V14
ViCADo 2015

erstellt am: 05. Jun. 2009 16:50    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 Hezarfen 10 Unities + Antwort hilfreich

Hallo TStone,

du hast recht, das Hochkomma hatte ich übersehen.

Zitat:
Do  'While (i<=Anzahl)

Gruß
Bertel

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

Hezarfen
Mitglied
Konstrukteur


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

Beiträge: 42
Registriert: 30.11.2005

Catia V5 R16 SP5

erstellt am: 05. Jun. 2009 17:45    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

Danke an euch beide, ich habe den Fehler entdeckt. Die Variable Anzahl wurde bei der Schleife nicht erkannt. Ich musste die Variable umdeklarieren, dann hats geklappt.

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)2023 CAD.de | Impressum | Datenschutz