Autor
|
Thema: Abfragen bei Formeleintrag (2253 mal gelesen)
|
MakroNovize Mitglied Konstrukteur, CAD-Admin
Beiträge: 60 Registriert: 20.07.2009 Windows XP SP3 CATIA V5 R18 Xeon 2x 3Ghz 3Gb RAM NVIDIA Quadro FX 3450
|
erstellt am: 23. Jun. 2010 09:31 <-- editieren / zitieren --> Unities abgeben:
Hi Gemeinde ;-) mein aktuelles Problem ist, dass ich eine Formel nicht per Makro erstellen und mit einem Parameter verknüpfen kann. Es soll ein benutzerdefinierter Parameter in den Properties mit dem Gewicht des Bauteils ausgestattet werden. Diese soll sich automatisch anpassen wenn das BAuteil geändert wird. Mit der verwendeten Formel haben wir gute erfahrungen gemacht. ich mache das mit dem Befehl relations.CreateFormula("Benennung", "Kommentar", Parameter, "ToString(round((smartVolume(PartBody ) *`BAUTEIL\Steel\Steel.1.1\Density`)/0.5kg)*0.5)"). Wie ihr seht ist die Formel sehr schön ;-). Allerdings verlangt die bei manuellem Eintrag eine Abfrage (siehe Bild). Diese Abfrage verhindert, dass ich es automatisch ausführen kann. Jetzt die Frage an euch: wie kann ich eine solche Abfrage mit einem Makro erschlagen? Alternativlösungen, die die Anforderungen erfüllen sind auch gerne gesehen. freu mich auf eure Hilfe!!! ------------------ Grüße Christoph ************************************************* Die Katia am Morgen, bringt dir reichlich Sorgen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 24. Jun. 2010 00:38 <-- editieren / zitieren --> Unities abgeben: Nur für MakroNovize
Hallo MakroNovize, das funktioniert auch automatisiert so wie manuell. Die "Info" kommt dann einfach nicht! Mein Beispiel funktionierte im solo geladenen CATPart so: Code: Option ExplicitSub CATMain() Dim iParam As Parameter Dim iRel As Relation Set iParam = CATIA.ActiveDocument.Part.Parameters.CreateString("Masse", "") Set iRel = CATIA.ActiveDocument.Part.Relations.CreateFormula("Benennung", _ "Kommentar", iParam, _ "ToString(round((smartVolume(PartBody) * BAUTEIL\Steel\Steel.1.1\Density) / 0.5kg) * 0.5)") CATIA.ActiveDocument.Part.Update MsgBox iParam.ValueAsString End Sub
mfg, Lusilnie
------------------ Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MakroNovize Mitglied Konstrukteur, CAD-Admin
Beiträge: 60 Registriert: 20.07.2009 Windows XP SP3 CATIA V5 R18 Xeon 2x 3Ghz 3Gb RAM NVIDIA Quadro FX 3450
|
erstellt am: 24. Jun. 2010 09:42 <-- editieren / zitieren --> Unities abgeben:
Hi Lusilnie, danke für die Antwort. Ich bin erschrocken als ich das gelesen habe. Voller entsetzen hab ich mich daran gemacht deine Aussage zu wiederlegen. Nur um am Ende dir recht geben zu können. Ich muss meinen Code nochmal genauer analysieren wo das Problem liegt, denn im Prinzip hab ich genau das gleiche gemacht wie du, außer dass ich die Formel einem Benutzerdefinierten Parameter in den Properties zugewiesen habe. Auch das funktioniert nur ich bin wohl zu blöd dazu. Wahrscheinlich is nur mal wieder ne Variable falsch deklariert. Danke nochmal für deine aufopferungsvolle Hingabe ------------------ Grüße Christoph ************************************************* Die Katia am Morgen, bringt dir reichlich Sorgen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MakroNovize Mitglied Konstrukteur, CAD-Admin
Beiträge: 60 Registriert: 20.07.2009 Windows XP SP3 CATIA V5 R18 Xeon 2x 3Ghz 3Gb RAM NVIDIA Quadro FX 3450
|
erstellt am: 24. Jun. 2010 14:56 <-- editieren / zitieren --> Unities abgeben:
LoL Is CATIA launisch. Der Vorschlag von dir Lusilnie funktioniert nur begrenzt!!! In dem Projekt, in dem das Makro eingesetzt werden soll, haben die Teile einen "-" Bindestrich im Namen. Dieser blöde Strich verhindert es, dass die Formel eingetragen wird! Option Explicit Sub CATMain() Dim iParam 'As Parameter Dim iRel 'As Relation Dim sPartName 'Set iParam = CATIA.ActiveDocument.Part.Parameters.CreateString("Masse", "") sPartName = CATIA.ActiveDocument.Part.Name Set iParam = CATIA.ActiveDocument.Part.Parameters.Item("MASS") Set iRel = CATIA.ActiveDocument.Part.Relations.CreateFormula("Benennung", _ "Kommentar", iParam, _ "ToString(round((smartVolume(PartBody) * " & sPartName & "\Steel\Steel.1.1\Density) / 0.5kg) * 0.5)") CATIA.ActiveDocument.Part.Update MsgBox iParam.ValueAsString End Sub Mit dem Code kann manns ganz leicht Versuchen. Einmal dem aktiven part nen Namen ohne und einmal mit - geben. Ihr werdet den UNterschied bemerken. Achja es muss ein benutzerdefinierter Parameter mit dem Namen "MASS" in den Properties hinterlegt sein.
Hier noccmal ein Dankeschön an Lusilnie, ohne dich wäre ich nie auf das wahre Problem gestoßen. ------------------ Grüße Christoph ************************************************* Die Katia am Morgen, bringt dir reichlich Sorgen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Jun. 2010 19:06 <-- editieren / zitieren --> Unities abgeben: Nur für MakroNovize
Servus Und wenn du den Namen immer in Hochkomma setzt? (ungetestet) "ToString(round((smartVolume(PartBody) * " & chr(39) & sPartName & chr(39) & "\Steel\Steel.1.1\Density) / 0.5kg) * 0.5)") Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 24. Jun. 2010 20:03 <-- editieren / zitieren --> Unities abgeben: Nur für MakroNovize
|
MakroNovize Mitglied Konstrukteur, CAD-Admin
Beiträge: 60 Registriert: 20.07.2009 Windows XP SP3 CATIA V5 R18 Xeon 2x 3Ghz 3Gb RAM NVIDIA Quadro FX 3450
|
erstellt am: 25. Jun. 2010 08:54 <-- editieren / zitieren --> Unities abgeben:
@ Bernd: deine Variante geht bei mir gar nicht @ Zoltan: deine Variante geht, aber auch nur wenn kein BIndestrich (-) im Partnamen ist. Es scheint verflucht zu sein Gruß und Danke für eure Bemühungen ------------------ Grüße Christoph ************************************************* Die Katia am Morgen, bringt dir reichlich Sorgen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Jun. 2010 18:13 <-- editieren / zitieren --> Unities abgeben: Nur für MakroNovize
Servus Versuch es mal mit dieser Formel: "ToString( (smartVolume(`PartBody` )* `" & sPartName & "\Steel\Steel.1.1\Density` /1kg))"Was machst du wenn ein anderes Material zugewiesen ist? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 26. Jun. 2010 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für MakroNovize
|
MakroNovize Mitglied Konstrukteur, CAD-Admin
Beiträge: 60 Registriert: 20.07.2009 Windows XP SP3 CATIA V5 R18 Xeon 2x 3Ghz 3Gb RAM NVIDIA Quadro FX 3450
|
erstellt am: 28. Jun. 2010 10:13 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, dein Beispiel hat fast zum Ziel geführt!!! Mit deiner Zeile hat es Funktioniert. Ich habe schonmal daran gedacht was passiert wenn es kein Stahl ist, allerdings hab ich es nicht weiter verfolgt. Ich wollte ersteinmal, dass es mit Stahl funzt. Nu hab ich aber mit deinem Hinweis zu Dichte das ganze Problem noch besser lösen können. Sub CATMain() Dim iParam 'As Parameter Dim iRel 'As Relation Dim sPartName Dim iRelName Dim pMat sPartName = CATIA.ActiveDocument.Part.Name Set pMat = CATIA.ActiveDocument.Part.Parameters.Item("Density") Set iParam = CATIA.ActiveDocument.Part.Parameters.Item("MASS") Set iRel = CATIA.ActiveDocument.Part.Relations.CreateFormula("Benennung", _ "Kommentar", iParam, _ "ToString(round(smartVolume(`PartBody` )* " & pMat.Value & _ " /0.01kg*0.01)") CATIA.ActiveDocument.Part.Update MsgBox iParam.ValueAsString End Sub Jetzt passt sich das Gewicht an wenn die Geometrie geändert wird und die Dichte wird automatisch ausgelesen. Noch geiler wäre es natürlich wenn die Dichte sich automatisch anpassen würde. Das versuch ich bei Gelegenheit noch zu lösen. In diesem Zug ist mir aber noch ein weiteres Problem aufgefallen. Hinter dem Gewicht sollte noch "kg" stehen. Kann ich das in eine Formel integrieren? Bei mir hat es bisher noch nicht funktioniert. ------------------ Grüße Christoph ************************************************* Die Katia am Morgen, bringt dir reichlich Sorgen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |