Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Formeln in Schleife erzeugen

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:  Formeln in Schleife erzeugen (1316 mal gelesen)
Tomacco
Mitglied


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

Beiträge: 2
Registriert: 11.01.2013

i7-3470, 4GB RAM
Win7 SP1
CATIA V5R19

erstellt am: 11. Jan. 2013 15:43    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,

bin ein CATIA Anfänger und habe ein Problem mit dem Formeln erzeugen in CATIAV5R19 mit CATVBA.
Hier ein kleines Beispiel das ich gerne über eine Schleife realisieren möchte.

Code:

Dim formel(4) As Formula
Set formel(1) = rel.CreateFormula("Formel.1", "", laenge_linie(1), "Kantenlaenge*laenge_linie(1)/100")
Set formel(2) = rel.CreateFormula("Formel.2", "", laenge_linie(2), "Kantenlaenge*laenge_linie(2)/100")
Set formel(3) = rel.CreateFormula("Formel.3", "", laenge_linie(3), "Kantenlaenge*laenge_linie(3)/100")
Set formel(4) = rel.CreateFormula("Formel.4", "", laenge_linie(4), "Kantenlaenge*laenge_linie(4)/100")

Wenn ich die Formeln so erzeuge, funktioniert mein restlicher Code ohne Probleme und ich kann den Parameter "Kantenlaenge" in CATIA ändern um die Größe des Objekts zu ändern.

Nun möchte ich das ganze in eine For-Schleife packen. Leider funktioniert dies nicht so richtig.
Hier der Code der Schleife:

Code:

For I = 1 To 4 Step 1
MsgBox ("Formel." & I)
Set formel(I) = rel.CreateFormula("Formel." & I, "", laenge_linie(I), "Kantenlaenge*laenge_linie(I)/100")
Next

Mache ich es über diese Schleife, ändert sich die Größe des Objekts nicht nach ändern des Parameters in CATIA. Meine Vermutung ist, dass der erste Eingabeparameter von "CreateFormula", in diesem Fall '"Formel." & I', nicht angenommen wird bzw. in jedem Schleifendurchgang dasselbe reinschreibt.
Die Message Box hatte ich gemacht, um zu testen ob der String für die Formel richtig zusammengesetzt wird. Ich bekomme auch die korrekte Ausgabe, also Formel.1, Formel.2 usw.

Kann mir da jemand weiterhelfen.

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Jan. 2013 16: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 Tomacco 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum. Bitte Systeminfo ausfüllen.
Hast du den Array "formel" richtig dimensioniert?
Im "Formelstring" wird der Wert von I nicht ausgewertet, wird als String interpretiert. Probiere es mal so:
Code:
Dim strFormel as String
For I = 1 To 4 Step 1
    strFormel = "Kantenlaenge*laenge_linie*(" & CStr(I) & "/100)"
    Set formel(I) = rel.CreateFormula("Formel." & I, "",  laenge_linie(I), strFormel)
Next

Gruß
Bernd


------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 11. Jan. 2013 16:26    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 Tomacco 10 Unities + Antwort hilfreich

Hallo,
Bau dir mal eine msgbox hinter die Formel ein
und lass dir "formel(I)" ausgeben.

kann es sein das das (I) im String mit drinne steht?
Somit wird ja das (I) nicht als Variable vom Code erkannt.

------------------
Sei Schlau bleib Dumm !!?!!

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

Tomacco
Mitglied


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

Beiträge: 2
Registriert: 11.01.2013

i7-3470, 4GB RAM
Win7 SP1
CATIA V5R19

erstellt am: 11. Jan. 2013 16:33    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 schonmal für die Hilfe.
Mein obiger Code scheint schon nicht richtig funktionieren. Hatte es grad nochmal getestet, hab bestimmt was wichtiges veändert und weiß nicht mehr genau was es war  

Hier mal mein kompletter Code bis jetzt:

Code:

Sub CATMain()

Dim myPart As Part
Set myPart = CATIA.ActiveDocument.Part

' Parameter "Kantenlaenge" mit initial 200 mm erzeugen --------------------
Dim params As Parameters
Set params = myPart.Parameters

Dim laenge_kante As Length
Set laenge_kante = params.CreateDimension("", "LENGTH", 0#)

laenge_kante.Rename "Kantenlaenge"
laenge_kante.Value = 200#

Dim hauptKoerper As Body
Set hauptKoerper = myPart.MainBody
' Listenobjekt Sketches erzeugen -----------------------------------
Dim Skizzen As Sketches
Set Skizzen = hauptKoerper.Sketches

' Referenzebene erzeugen -------------------------------------------
Dim UrsprungsElemente, Ebene
Set UrsprungsElemente = myPart.OriginElements
Set Ebene = UrsprungsElemente.PlaneXY

' Objekt Sketch erzeugen -------------------------------------------
Dim Skizze As Sketch
Set Skizze = Skizzen.Add(Ebene)
' 2D-Werkzeugkasten erzeugen und Skizze oeffnen ---------------------
Dim Wzk As Factory2D
Set Wzk = Skizze.OpenEdition

' Zwei Punkte und dazwischen Linie erzeugen -------------------------
Dim pt(4) As Point2D
Set pt(1) = Wzk.CreatePoint(0, 0)
Set pt(2) = Wzk.CreatePoint(laenge_kante.Value * 0.2, 0)
Set pt(3) = Wzk.CreatePoint(laenge_kante.Value * 0.15, laenge_kante.Value * 0.15)
Set pt(4) = Wzk.CreatePoint(0, laenge_kante.Value * 0.15)

Dim linie(4) As Line2D
Set linie(1) = Wzk.CreateLine(0, 0, laenge_kante.Value * 0.2, 0)
Set linie(2) = Wzk.CreateLine(laenge_kante.Value * 0.2, 0, laenge_kante.Value * 0.15, laenge_kante.Value * 0.15)
Set linie(3) = Wzk.CreateLine(0, laenge_kante.Value * 0.15, laenge_kante.Value * 0.15, laenge_kante.Value * 0.15)
linie(1).StartPoint = pt(1)
linie(1).EndPoint = pt(2)
linie(2).StartPoint = pt(2)
linie(2).EndPoint = pt(3)
linie(3).StartPoint = pt(3)
linie(3).EndPoint = pt(4)
Set linie(4) = Wzk.CreateLine(0, 0, 0, laenge_kante.Value * 0.15)
linie(4).StartPoint = pt(1)
linie(4).EndPoint = pt(4)
linie(4).Construction = True
Skizze.CenterLine = linie(4)


' Linienreferenz erstellen
Dim ref_linie(4) As Reference

For I = 1 To 4 Step 1
Set ref_linie(I) = myPart.CreateReferenceFromObject(linie(I))
Next


' Bemassungsbedingung für die Linie definieren
Dim Bedingungen(4) As Constraints
Dim Bedingung(4) As Constraint
For I = 1 To 4 Step 1
Set Bedingungen(I) = Skizze.Constraints
Set Bedingung(I) = Bedingungen(I).AddMonoEltCst(catCstTypeLength, ref_linie(I))
Next

' Formel fuer das Linienmass mit Parameter Kantenlaenge erzeugen
Dim laenge_linie(4) As Length
Dim rel As Relations
For I = 1 To 4 Step 1
Set laenge_linie(I) = Bedingung(I).Dimension
Next
Set rel = myPart.Relations


Dim arr(4) As String
'arr(1) = "Formel.1"
'arr(2) = "Formel.2"
'arr(3) = "Formel.3"
'arr(4) = "Formel.4"


Dim formel(4) As Formula
'Set formel(1) = rel.CreateFormula("Formel.1", "", laenge_linie(1), "Kantenlaenge*laenge_linie(1)/100")
'Set formel(2) = rel.CreateFormula("Formel.2", "", laenge_linie(2), "Kantenlaenge*laenge_linie(2)/100")
'Set formel(3) = rel.CreateFormula("Formel.3", "", laenge_linie(3), "Kantenlaenge*laenge_linie(3)/100")
'Set formel(4) = rel.CreateFormula("Formel.4", "", laenge_linie(4), "Kantenlaenge*laenge_linie(4)/100")
' Set formel = rel.CreateFormula(Formelname, Kommentar, Ausgabeparameter, Formeldefinition)
Dim strFormel As String
'For I = 1 To 4 Step 1
'MsgBox ("Formel." & I)
'Set formel(I) = rel.CreateFormula("Formel." & I, "", laenge_linie(I), "Kantenlaenge*laenge_linie(I)/100")
'strFormel = "Kantenlaenge*laenge_linie*(" & CStr(I) & "/100)"
'Set formel(I) = rel.CreateFormula("Formel." & I, "", laenge_linie(I), strFormel)
'Next
Skizze.CloseEdition

' 3D-Werkzeugkasten erzeugen  ---------------------
   Dim Wzk3D As ShapeFactory
   Set Wzk3D = myPart.ShapeFactory
   Dim RotKoerper As Shaft
   Set RotKoerper = Wzk3D.AddNewShaft(Skizze)

myPart.Update

End Sub


Viele Sachen sind auskommentiert, da ich gerade viel rumteste  
Mein Ziel ist später in CATIA den Parameter "Kantenlänge" ändern zu können um damit die Größe des Objekts zu ändern.
Bis auf die Formeln klappt auch alles soweit, Längen etc. stimmen alle. Habe bestimmt einen blöden Fehler im Code den ich nicht sehe oder irgendwas total verwechselt. Das der Code nicht perfekt weiß ich 

Dies ist mein erstes Makro in CATIA.

[Diese Nachricht wurde von Tomacco am 11. Jan. 2013 editiert.]

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Jan. 2013 16:41    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 Tomacco 10 Unities + Antwort hilfreich

Servus
Was läuft nicht? Welche Fehlermeldung bekommst du?
Erzeugst du so nicht einen ZirkelBezug? Du verwendest für die Berechnung von "laenge_linie(4)" sich selbst.
Was mir noch weiter auffällt: Hast du einen Parameter mit dem Namen "laenge_linie(1)"? dieser ist zumindest in der Formel aufgeführt aber scheint es nicht zu geben.
Erzeuge dir mal die Formeln von Hand und vergleiche diese mit dem strFormel.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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