Autor
|
Thema: Pfad eines gestarteten Makros finden (2215 mal gelesen)
|
triumvirn Mitglied
Beiträge: 15 Registriert: 09.01.2008
|
erstellt am: 09. Jan. 2008 23:11 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich hab in der letzten Woche hier vieles mitgeommen und es gibt hier schon einige, die sich wohl echt lange mit Catia rumgeärgert haben müssen. Aber ich habe leider nicht zu allen Fragen eine Antwort gefunden. Ich weiß wie ich den Pfad eines Projekts herausbekomme, aber wie finde ich den Pfad/Ordner des von mir (bzw einem anderen Programm) gestarteten Makros? ich habe viele Versuche/Ratschläge gelesen, aber keiner hat bei mir funktioniert, deswegen: kann ich an die CATMain() Parameter übergeben, indem ich statt: C:\Makro.Catskript z.B. C:\Makro.Catskript -"dasisteinText" oder ähnlich schreibe? Und mit welchem Kommando bekomme ich dann jene geliefert? Wenn ich nämlich CATMain(text as String) schreibe, kommt immer bei Makrostart ein Menü, wo man es per Hand eingeben muss, was einer Automatisierung natürlich nicht sehr dienlich ist.
So vielen Dank im Voraus! Christoph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 09. Jan. 2008 23:49 <-- editieren / zitieren --> Unities abgeben: Nur für triumvirn
Hallo Christoph, willkommen im Forum Mit den V5-Bordmitteln wirst du das Problem nicht lösen können. Es muss schon vbs (vb-script) gelöst werden. Allerdings weiß ich auf die Schnelle nicht, ob es da im Standard-Enviroment von vbs einen Befehl gibt, wo man die Application.Path abrufen kann. Soweit ich allerdings die V5-Hilfe verstanden habe, befindet sich ein gestartetes makro im V5-Umfeld und hat somit quasie keine eigenen Startpfad mehr. CATIA muss je gestartet sein um das Makro überhaupt auszuführen. Somit muss, um den Pfad des Makro heraus zu bekommen, ein eigenes vbs vorgeschaltet sein, das den Pfad ausließt und dann erst das eigentliche Makro startet. Die Angabe von Parameter in CATMain ist eher als Typendeklaration gedacht und der Dialog ist wohl gewollt. Ich hoffe mal, das stimmt alles Jens Hansen ------------------ Inoffizielle CATIA-Hilfeseite Private Seite Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
triumvirn Mitglied
Beiträge: 15 Registriert: 09.01.2008
|
erstellt am: 10. Jan. 2008 01:06 <-- editieren / zitieren --> Unities abgeben:
Erstmal Danke, auch wenns keine "guten" Nachrichten sind Bei mir muss Catia nicht gestartet werden, damit das Makro startet. Catia wird automatisch ausgeführt, wenn ich das Makro ausführe, weil wohl die Dateiendung Windowsintern auf Catia verweist. Deine Vorschlag ein anderes Makro vorzuschalten, scheint mir schlüssig zu sein, aber es löst meine Aufgabenstellung nicht. In einem größerem Kontext, soll Programm x in C++ ausgeführt werden, wenn das dann fertig ist, soll es CatiaMakro_xyz auf eine Datei xyz_2 anwenden. xyz_2 sollte dann übergeben werden. Nachdem ich gemerkt habe, dass es schwierig wird Parameter direkt zu übergeben, wollte ich sie über eine Textdatei übergeben, die im selben Verzeichnis wie die anderen Programme liegt. Aber im Rahmen einer Forschungsarbeit kann ich ja schlecht "C:\Christoph\makrodings\temp.dat" ins Makro schreiben, sondern wollte es relativ "%hier%/temp.dat" ansprechen, aber dafür brauch ich ja den Ausführungsordner. Außer es fällt jemanden noch was ein, wie ich Parameter "indirekt" übergeben kann. Gruß und Gute Nacht! Christoph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 10. Jan. 2008 06:22 <-- editieren / zitieren --> Unities abgeben: Nur für triumvirn
Moin triumvirn, du kannst sehr wohl Parameter an die CATMain() in einem Script übergeben, ohne das der Dialog auftaucht. Dazu müssen die Parameter im Aufruf als Array übergeben und im CATScript einzeln abgefangen werden. Also z.B. so: Sub CATMain(sTest1, sTest2, sTest3) Msgbox sTest1 & sTest2 & sTest3 End Sub Der Aufruf aus einem anderen VB6.Script sieht dann z.B. so aus: Catia.SystemService.ExecuteScript App.Path, catScriptLibraryTypeDirectory, "Test.CATScript", "CATMain", aTestParams Das Array aTestParams setzt sich dann so zusammen: aTestParams(0) = "geht " aTestParams(1) = "doch " aTestParams(2) = "alles" Es sollte eine entsprechende Methode zum .ExecuteScript in C++ geben. Den Pfad des Scriptes selbst kannst du in VB6 mit App.Path auslesen, auch hier müsste es ein Pendant in C++ geben. In einem .CATScript geht das auslesen des App.Path nicht. Hoffe das hilft dir weiter. Gruß TomTom ------------------ tomtom1972 [Diese Nachricht wurde von tomtom1972 am 10. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SU Mitglied Dipl.-Ing.
Beiträge: 46 Registriert: 19.01.2001
|
erstellt am: 10. Jan. 2008 17:34 <-- editieren / zitieren --> Unities abgeben: Nur für triumvirn
Hallo, evtl. hilft Dir folgendes: Ich habe die Parameterübergabe an CATIA Batch-Programme wie folgt gemacht: Im aufrufenden Skript/Batch-Programm habe ich Umgebungsvariablen mit den gewünschten Werten belegt. z.B. (unter DOS): set CATIA_ENV01="gewuenschter Inhalt" (unter UNIX ksh) : export CATIA_ENV01="gewuenschter Wert" Aus diesem Prozess muss dann CATIA im Batch gestartet werden (mit Start des CATScriptes) z.B. ... CNEXT -batch -macro .../TEST.CATScript Diese zuvor gesetzen Variablen kannst Du im CATScript wie folgt auswerten: Sub CATMain() Dim Inhalt_CATIA_ENV01 Inhalt_CATIA_ENV01 = CATIA.SystemService.Environ("CATIA_ENV01") ... Ich hoffe, das hilft.
Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
triumvirn Mitglied
Beiträge: 15 Registriert: 09.01.2008
|
erstellt am: 10. Jan. 2008 20:20 <-- editieren / zitieren --> Unities abgeben:
danke ihr beiden! ich werde mir das heute Abend mal durch den Kopf bzw. die Finger gehen lassen. Ich hoffe das mit C++ geht auch. Das wäre etwas hübscher als c++.net -> VB -> CATScript Ich mach mich mal an die Arbeit! Gruß Christoph
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steefle Mitglied
Beiträge: 21 Registriert: 09.11.2005
|
erstellt am: 11. Jan. 2008 06:56 <-- editieren / zitieren --> Unities abgeben: Nur für triumvirn
Moin! Falls Du den Weg über die Textdatei gehen möchtest und es sich nur um die lokale Übergabe an einem Rechner handelt, kannst Du auch einfach in das temporäre Verzeichnis des Filesystems speichern. zum Beispiel: Dim myFileSys 'As FileSystem Set myFileSys = CATIA.FileSystem Dim FileSep As String FileSep = myFileSys.FileSeparator Dim FileOutPath As String Dim f As Folder Set f = myFileSys.TemporaryDirectory 'Datei wird im temporären Verzeichnis gespeichert FileOutPath = f.Path & FileSep & "Testfile.txt" '<== Name der Datei Dim OutputFile As File 'Ausgabedatei Set OutputFile = myFileSys.CreateFile(FileOutPath, True) 'True=>vorhandenes File wird überschrieben Schönen Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
triumvirn Mitglied
Beiträge: 15 Registriert: 09.01.2008
|
erstellt am: 14. Jan. 2008 13:53 <-- editieren / zitieren --> Unities abgeben:
Danke. Ich habe es jetzt so wie von SU gemacht, aber ohne Batch, sondern in C++ .NET Aber ich hätte dann noch ein kleines Problem für euch, aber ein großes für mich Ich gebe zu, ich hab zu wenige Kenntnisse von den Catia-Funktionen, aber auch ewiges herumprobieren hat mich nicht weiterkommen lassen, aber ich denke mal, so schwierig kann es gar nicht sein: Ich möchte ganz simpel den Abstand zwischen 2 Parts bzw. Products in einem großem Product messen. Ich habe eine Suchroutine geschrieben/modifiziert. Wenn ich richtig verstanden habe, geht das so?: Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(Ref2) MinDist = TheMeasurable.GetMinimumDistance(Ref1) Also wenn das oben so stimmt, brauche ich dann 2 Referenzen, auf die von mir gefundenen Parts/Product?! Meine (kläglichen) Versuche sind in der innersten if Bedingung zu sehen. Ich möchte die dort gefundene "ByRef ref1b" Referenz "zurückgeben" lassen und später vergleichen. Kann ich eine Referenz auf die "child" machen und die Referenz über das ByRef ref1b "zurückgeben"? Code:
'das ist nur eine Suchfunktion, der Abstand soll in der Hauptfunktion gemessen werden 'das Kursive ist für diese Frage nicht relevant, es stellt nur fest ob es das gesuchte Part mit der Endung ' "_ab000" bzw "_ab003" ist Sub visitProduct(prod, nummer, ByRef string1, ByRef bool, ByRef ref1b) On Error Resume NextDim children Set children = prod.Products Dim i Dim child Dim laenge Dim label Dim Pos If nummer < 1000 Then nummer_str = "" & nummer End If If nummer < 100 Then nummer_str = "0" & nummer End If If nummer < 10 Then nummer_str = "00" & nummer End If nummer_str = "_ab" & nummer_str For i = 1 To children.Count Set child = children.Item(i) If bool <> 1 Then laenge = Len(child.Name) Pos = InStr(laenge - 7, child.Name, nummer_str) If Pos <> 0 Then bool = 1 string1 = child.Name 'Set CATProt = child 'CATIA.ActiveDocument.Selection.Clear 'CATIA.ActiveDocument.Selection.Add CATProt 'Set ref1b = CATIA.ActiveDocument.Selection.Item(1).Reference 'Set ref1b = children.Item(i).Reference End If If bool = 1 Then Exit For End If visitProduct child, nummer, string1, bool, ref1b Next End Sub
[Diese Nachricht wurde von triumvirn am 14. Jan. 2008 editiert.] [Diese Nachricht wurde von triumvirn am 14. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 15. Jan. 2008 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für triumvirn
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|