Autor
|
Thema: Formula; auf bestehenden Parameter zugreifen und in Formel verwenden (1645 mal gelesen)
|
neopheus Mitglied
Beiträge: 6 Registriert: 04.02.2009
|
erstellt am: 04. Feb. 2009 21:53 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für neopheus
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
Beiträge: 6 Registriert: 04.02.2009
|
erstellt am: 05. Feb. 2009 10:09 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für neopheus
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
Beiträge: 6 Registriert: 04.02.2009
|
erstellt am: 05. Feb. 2009 12:09 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für neopheus
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
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 / zitieren --> Unities abgeben: Nur für neopheus
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
Beiträge: 6 Registriert: 04.02.2009
|
erstellt am: 05. Feb. 2009 20:45 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für neopheus
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
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 / zitieren --> Unities abgeben: Nur für neopheus
|