Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Formula; auf bestehenden Parameter zugreifen und in Formel verwenden

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:  Formula; auf bestehenden Parameter zugreifen und in Formel verwenden (1645 mal gelesen)
neopheus
Mitglied


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

Beiträge: 6
Registriert: 04.02.2009

erstellt am: 04. Feb. 2009 21: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


Unbenannt-1.jpg

 
Hallo

ich programmiere jetzt schon einige Tag und bin bisher ganz gut allein zu recht gekommen, und wenn nicht, dann konnten mir bisher die vielen Beiträge im Forum irgendwie weiterhelfen.
Doch gegenwärtig bin ich an ein Problem gestoßen, wo ich nicht mehr voran komme.
Das Buch von Meister Ziethen konnt mir auch nicht weiterhelfen. Es behandelt auch Formula und Relations, meiner Meinung nach, nicht in der Tiefe, wie ich es bräuchte. Und so stehe ich jetzt hier.

Mein Script soll folgendes machen:

Kugel1 erstellen - grieg ich hin
Kugel2 erstellen - grieg ich auch hin

nun kommt aber der Clou.
Kugel2 soll als Radius die Formel besitzen:
'Radius der Kugel1' + 1mm

das ist händisch ganz einfach gemacht. Aber als Makro tu ich mich schwer.

Mit besten Dank im voraus
Ron

[Diese Nachricht wurde von neopheus am 05. Feb. 2009 editiert.]

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

denyo_1
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 05. Feb. 2009 07:47    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 neopheus 10 Unities + Antwort hilfreich

Hallo Ron,

schau dir mal folgenden Code an. Dieser erzeugt eine Formel. Der Wert der Formel ist die Radius der 1. Kugel (Kugel.1) + 1mm. Dieser wird an die Kugel.2 weitergegeben.

Das ist aber nur eine ganz pauschale Vorgehensweise. Da gehören noch ein paar abfragen rein...


Code:

Sub CATMain()

    Dim oDoc As Document
    Dim oPart As Part
    Dim oRel As Relations
    Dim oPara As Parameters
    Dim oLen As Parameter
    Dim oForm As Formula

    Set oDoc = CATIA.ActiveDocument
    On Error Resume Next
    Set oPart = oDoc.Part
    If Err.Number <> 0 Then
        Box = MsgBox("Es ist kein Part geladen!" + Chr(10) + "Das Makro wird beendet!", vbCritical + vbOKOnly, "Falscher Dateityp geladen")
        Exit Sub
    End If
    On Error GoTo 0

    Set oRel = oPart.Relations
    Set oPara = oPart.Parameters

'Hier hol ich mit den Radius den ich mit der Formel verknüpfen will
    Set oLen = oPara.Item("Kugel\Geometrisches Set.1\Kugel.2\Radius")
'Hier erstelle ich die Formel
    Set oForm = oRel.CreateFormula("Formel.1", "", oLen, "`Geometrisches Set.1\Kugel.1\Radius` +1mm")
'Hier benenne ich die Formel um
    oForm.Rename "Kugelradius"
    oPart.Update

End Sub


------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

neopheus
Mitglied


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

Beiträge: 6
Registriert: 04.02.2009

erstellt am: 05. Feb. 2009 10:09    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

Das bedeutet für mich im Klartext:

Ich muss immer diesen Parameterpfad
`Geometrisches Set.1\Kugel.1\Radius`
selbst zusammenfriemeln

...oder gibt es auch eine Möglichkeit diesen Pfad irgendwie auszulesen.

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

denyo_1
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 05. Feb. 2009 10:23    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 neopheus 10 Unities + Antwort hilfreich

Hallo,

ja was heißt irgendwie auszulesen? Woher soll CATIA den wissen wie die Formel deines Parameters lauten soll. Es gibt schon Möglichkeiten aber alle beinhalten noch zusätzliche Klicks. Hier mal ein paar Vorschläge wie du den Radius noch rausbekommst und an die Formel übergeben kannst:

1. Wenn sich nur zwei Kugeln im geo-Set befinden und diese einen festen Namen haben (z.B. Kugel_Sender und Kugel_Empfänger) kannst du dir die beiden über ein FindObjektbyName holen und verwenden

2. Du kannst du beiden Kugeln vom User vorher selektieren lassen und dann die Radien auslesen und übergeben

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

neopheus
Mitglied


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

Beiträge: 6
Registriert: 04.02.2009

erstellt am: 05. Feb. 2009 12:09    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 Daniel

erstmal noch mal vorweg, vielen Dank für deine schnellen Antworten.

Wieder zurück zum Problem.

Es geht darum, das geometrische Set, in dem die Kugel1 erzeugt wird, soll sich später
je nach Fall ändern.
D.h. Kugel1 befindet sich gelegentlich in einem anderen Ordner.

Muss ich dann bei meinem Schleifendurchgang(GeoSet und Kugel1 wird nach je Fall erstellt)
jedes mal den String des Pfades für die Formel so modifizieren das es passt.
zB. Fall A: Geometrisches SetA\Kugel.1\Radius
    Fall B: Geometrisches SetB\Kugel.1\Radius

oder gibt es die Möglichkeit diesen Pfad oder einen Link zu diesem Radius automatisch zu erstellen.

ich meine, ich kenne ja indirekt den Ort der Kugel1 und auch den Namen,
dadurch das ich ja angeben muss wo die Kugel1 erstellt werden soll

Dim GeoSetVK As HybridBody
Set GeoSetVK = GeoEbene1.Item("VIP-Kontrolle")

Dim hybridShapeSphere1 As HybridShapeSphere
Set hybridShapeSphere1 = hybridShapeFactory1.AddNewSphere(reference1, Nothing, Radius, -45.000000, 45.000000, 0.000000, 180.000000)
hybridShapeSphere1.Limitation = 1

GeoSetVK.AppendHybridShape hybridShapeSphere1
PartAktuell.InWorkObject = hybridShapeSphere1
PartAktuell.Update


vielleicht könntest du noch mal deinen 2.Punkt erläutern, wie du dir das denkst


Grüße
Ron


[Diese Nachricht wurde von neopheus am 05. Feb. 2009 editiert.]

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

ggielen
Mitglied
Student Luft- und Raumfahrt


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

Beiträge: 25
Registriert: 25.06.2008

Core2 @2.4Ghz
Geforce 7600 GS
2Gb RAM
Catia V5R17 SP4

erstellt am: 05. Feb. 2009 17: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 neopheus 10 Unities + Antwort hilfreich

Hi Ron, ich habe es auch versucht mit ein gleiches situation. In mein fahl habe ich 10 punkten mit namen die eine logischen serien machen (point.1 ; point.2; point.3 und so weiter). Das sollte einfach sein damit ein loop zu konstruiren.. dachte ich. In die code herunter kannst du in die commented teilen einigen lösungen finden die ich probiert hatte, keine klappt.

Ich glaube Denyo hat recht das es ist nicht möglich is die path interaktives zu komplettieren (wann deine kegeln-namen keine logischen struktur haben dan geht das mit die 'loop' uberhaupt nicht naturlich)

Einigen comands kann man mit ein string 'füttern' , aber nicht die .item (glaube ich, ich mag mich irren)


Code:

for i=1 to 10
    Dim lengthx As Length
    Dim formula1 As Formula
   
    'Dim punktpath As String
    'punktpath = "Part1\Geometrical Set.1\Point.56" & Z
    Set lengthx = params.Item("Part1\Geometrical Set.1\Point.1\X")
    'Set lengthx = params.Item(punktpath)
    'Set lengthx = params.Item("Part1\Geometrical Set.1\Point."&i&"\X")
    'Set lengthx = params.Item("hybridShapePointCoord1\X")
    Set formula1 = relations1.CreateFormula("point1xcoord", "der x coordinat von punkt", lengthx, "x11")
next i

------------------

Entschuldigungen für mein Deutsch. Ich kann verstehen, aber schreiben ist ein wenig härter 

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 05. Feb. 2009 19:35    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 neopheus 10 Unities + Antwort hilfreich

Hallo Zusammen,

anbei die Ergänzung der Code von denyo_1 so, dass die Parameter mit Hilfe der Kugelobjekte bestimmt werden.
Im Modell ist nur ein GeoSet mit 2 Kugel vorhanden, getestet nur für ein Part geöffnet.

Code:
Sub Catmain()
    Dim oDoc As Document
    Dim oPart As Part
    Dim oRel As Relations
    Dim oPara As Parameters
    Dim oForm As Formula

    Dim Box

    Set oDoc = CATIA.ActiveDocument
    On Error Resume Next
    Set oPart = oDoc.Part
    If Err.Number <> 0 Then
        Box = MsgBox("Es ist kein Part geladen!" + Chr(10) + "Das Makro wird beendet!", vbCritical + vbOKOnly, "Falscher Dateityp geladen")
        Exit Sub
    End If
    On Error GoTo 0

    Set oRel = oPart.Relations
    Set oPara = oPart.Parameters

    Dim oGeomSet As HybridBody
    Set oGeomSet = oPart.HybridBodies.Item(1)

    'Hier die beiden Kugel als Objekte
    Dim oSphere1 As HybridShapeSphere
    Set oSphere1 = oGeomSet.HybridShapes.Item(1)
    Dim oSphere2 As HybridShapeSphere
    Set oSphere2 = oGeomSet.HybridShapes.Item(2)

    'Hier die Radien als Parameter, geholt aus der Liste der Kugelparameter
    Dim oRadius1 As Parameter
    Set oRadius1 = oPara.SubList(oSphere1, False).Item("Radius")
    Dim oRadius2 As Parameter
    Set oRadius2 = oPara.SubList(oSphere2, False).Item("Radius")
    'Hier erstelle ich die Formel
    'Getestet für einen Part ohne Struktur geladen.
    'CATIA gibt die Partnumber noch mit in die Name der Parameter, es wird aber so nicht verstanden
    'deswegen muss man da die Name kürzen
    Dim sTempFormula As String
    sTempFormula = "`" & Mid(oRadius1.Name, Len(oPart.Name) + 2) & "`" & " +1mm"
    Set oForm = oRel.CreateFormula("Kugelradius", "Kommentar", oRadius2, sTempFormula)
    'Hier benenne ich die Formel um
    'ist nicht unbedingt notwendig
'    oForm.Rename "Kugelradius"
    oPart.Update

End Sub


Gruß,
Zoltán

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

neopheus
Mitglied


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

Beiträge: 6
Registriert: 04.02.2009

erstellt am: 05. Feb. 2009 20: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

SUPI !!! So funktioniert es.

DANKE

Es zwar zugegebener Maßen nicht gerade leicht diese Zeile zu lesen.

sTempFormula = "`" & Mid(oRadius1.Name, Len(oPart.Name) + 2) & "`" & " +1mm"

aber nach partieller Interpretierung - gelang auch dies.


Beste Grüße
Ron

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

ggielen
Mitglied
Student Luft- und Raumfahrt


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

Beiträge: 25
Registriert: 25.06.2008

Core2 @2.4Ghz
Geforce 7600 GS
2Gb RAM
Catia V5R17 SP4

erstellt am: 09. Feb. 2009 13:34    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 neopheus 10 Unities + Antwort hilfreich

Funktioniert hier auch!! SubList war die lösung!
Nun lesst mein code immer die X-coordinat von letst erstellte punkte und kan ich sie in formel vermitlen.

Code:
 
W = hybridShapes1.Count
Set opoint1 = hybridShapes1.Item(W)
Set lengthxx = params.SubList(opoint1, True).Item("X")

------------------

Entschuldigungen für mein Deutsch. Ich kann verstehen, aber schreiben ist ein wenig härter 

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 19. Mrz. 2009 18:30    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 neopheus 10 Unities + Antwort hilfreich

Hallo Ron,

so im Nachhinein habe ich eine schönere Lösung für die bemängelte Zeile gefunden:

Code:
    sTempFormula = oPara.GetNameToUseInRelation(oRadius1) & " +1mm"

Gruß,
Zoltan

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