Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Pfad eines gestarteten Makros finden

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:  Pfad eines gestarteten Makros finden (2215 mal gelesen)
triumvirn
Mitglied



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

Beiträge: 15
Registriert: 09.01.2008

erstellt am: 09. Jan. 2008 23:11    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!

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


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

Beiträge: 1055
Registriert: 05.08.2000

Win7
CATIA V5 R19
VB.Net
C#

erstellt am: 09. Jan. 2008 23:49    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 triumvirn 10 Unities + Antwort hilfreich

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



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

Beiträge: 15
Registriert: 09.01.2008

erstellt am: 10. Jan. 2008 01:06    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

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


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

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 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 triumvirn 10 Unities + Antwort hilfreich

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.


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

Beiträge: 46
Registriert: 19.01.2001

erstellt am: 10. Jan. 2008 17: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 triumvirn 10 Unities + Antwort hilfreich

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



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

Beiträge: 15
Registriert: 09.01.2008

erstellt am: 10. Jan. 2008 20:20    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 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



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

Beiträge: 21
Registriert: 09.11.2005

erstellt am: 11. Jan. 2008 06:56    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 triumvirn 10 Unities + Antwort hilfreich

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



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

Beiträge: 15
Registriert: 09.01.2008

erstellt am: 14. Jan. 2008 13: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

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 Next

Dim 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


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

Beiträge: 1055
Registriert: 05.08.2000

Win7
CATIA V5 R19
VB.Net
C#

erstellt am: 15. Jan. 2008 22: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 Nur für triumvirn 10 Unities + Antwort hilfreich

Hallo triumvirn,
seh ich das richtig dass du versuchst, das ganze Part/Product als Referenz zu deklarieren?
Ich fürchte, dass dies nicht gehen wird, da die CreateReference*** -Methode sich auf Objekte beschränkt. Du kannst also höchstens Objekte aus den jeweiligen Parts für die Messung benutzen.

SG

Jens Hansen

------------------
Inoffizielle CATIA-Hilfeseite
Private Seite
Xing

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