Eigentlich wollte ich hiermit meinen Doktor in Catia machen, aber das Problem stellte sich dann doch als weniger kniffelig heraus, als es schien.
Ich habe ein Batch-Skript geschrieben, das es ermöglicht, Step-Dateien im Explorer zu konvertieren.
Voraussetzung sind eine funktionierende Catia-Installation und eine verfügbare Step-Lizenz.
Das Batch-Skript erzeugt eine XML-Datei im Aufbau wie bei Tools/Utilities/Batch-DXF-IGES-STEP, wenn statt Run auf Save gedrückt wird.
Mit dieser XML wird über den CATBatchStarter der Prozess Tools/Utilities/Batch-DXF-IGES-STEP autark ansprochen.
Der Prozess wird in einem DOS-Fenster ausgeführt, zieht eine Catia-Lizenz und die Step-Lizenz für den Zeitraum der Konvertierung an und gibt sie nach Abschluss direkt wieder frei.
Wenn bereits eine Catia-Instanz läuft, wird keine zusätzliche Lizenz verwendet (wenn dieselbe Lizenzkonfiguration verwendet wird).
Somit ist es möglich, Step-Daten umzuwandeln ohne manuelles Anziehen der Step-Lizenz.
Da ein paar Informationen über die Catia-Installation gesammelt werden müssen, beauftrage ich ein Makro damit, die Batchdatei zu erzeugen.
Features
Die neuen Dateien werden am selben Speicherort abgelegt.
Drag'n'Drop ist implementiert.
Verknüpfung von Step-Dateien über "Öffnen mit" ist möglich (für Doppelklick)
Multifile-Unterstützung ist implementiert bei Drag'n'Drop (bei Multifile/"Öffnen mit" wird allerdings für jede Datei ein eigener Prozess angestoßen).
Catia-Dateien zu Step ist implementiert.
Wenn keine Step-Lizenz verfügbar ist, wartet das Skript 30 Sekunden und startet den Prozess erneut (3 Versuche).
Schwächen des Programms:
"Öffnen mit" von mehreren Dateien startet für jede Datei einen eigenen Prozess. (Bei Multi-Drag'n'Drop wird EIN Prozess gestartet, der alle Dateien nacheinander abarbeitet.)
Fehlerbehandlung bei nicht-unterstützten Formaten ist nicht implementiert, da zur Zeit zwei Schleifen durchlaufen werden, die nicht miteinander kommunizieren. Dafür braucht es einen separaten String, um die Output-Section innerhalb der Schleife der Input-Section zu erstellen und dabei ungültige Dateitypen zu verwerfen.
Es sind nicht alle unterstützten Formate implementiert, da die Abfrage der Dateitypen in Groß- und Kleinschreibung eine ekelhafte Litanei im Quelltext ergibt. Eine elegante Case-Abfrage und ein einfaches UCASE im Batch sind mir nicht bekannt.
Das Skript wird bei jedem Fehler, der auftritt, drei mal neu gestartet. Das kann auch eine falsche Input-Datei sein. Die Meldung ist immer "Step-Lizenz nicht verfügbar".
Die eigentliche Vorgehensweise ist echt simpel, weshalb ich davon ausgehe, dass in den nächsten Tagen/Wochen eine Vielzahl von Neuimplementierungen in den Lieblingssprachen der jeweiligen Programmierer entstehen werden.
Und da eine Programmidee nicht mit einer Software-Lizenz schützbar ist, spare ich mir die Nennung einer Lizenz. Ich freue mich trotzdem über einen Vermerk "Inspired by Lionel Hutz at cad.de" oder ähnlich.
Hier der Inhalt der Batchdatei:
Code:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
REM Don't modify the order of the next 6 lines.
REM ------------Local CATIA Settings---------------
SET sLicPack=MD2.slt
SET env_dir=C:\Users\username\AppData\Local\Temp
SET env_file=env_CATIAV5_R32.txt
SET sCATTEMP=C:\Temp\CATIAV5\username\CATTemp
SET install_path=C:\Program Files\Dassault Systemes\B32\win_b64REM -------------File Properties----------------
SET /A count = 0
SET sTimestamp=%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%
SET sTimestamp=%sTimestamp: =0%
REM Add a random number to filename to avoid overwriting of xml when using File-open-dialog on multiple files.
SET sBatchfile=Batch_stp_%sTimestamp%_%Random%.xml
SET BatchFileFull=%sCATTEMP%\%sBatchfile%
ECHO.^<?xml version="1.0" encoding="UTF-8"?^>> %BatchFileFull%
ECHO.^<^^!DOCTYPE root SYSTEM "Parameters.dtd"^>>> %BatchFileFull%
ECHO.^<root batch_name="BatchDataExchange" user="" password="" env="" version="" licfile="" ^>>> %BatchFileFull%
ECHO.^<inputParameters^>>> %BatchFileFull%
REM Create input section of xml-file
FOR %%A IN (%*) DO (
SET sFilePath=%%~A
ECHO.^<file id="FileToProcess" destination="" filePath="!sFilePath!" type="bin" upLoadable="RightNow" automatic="1"/^>>> !BatchFileFull!
)
ECHO.^</inputParameters^>>> %BatchFileFull%
ECHO.^<outputParameters^>>> %BatchFileFull%
REM Create output section of xml-file
FOR %%A IN (%*) DO (
SET sInputFiletype=%%~xA
SET sfolderPath=%%~dpA
SET sfolderPath=!sfolderPath:~0,-1!
ECHO %%A
ECHO %%~xA
REM ECHO sInputFiletype !sInputFiletype!
IF "!sInputFiletype!" == ".stp" (
SET sOutputFiletype=CATPart/CATProduct
) ELSE (
IF "!sInputFiletype!" == ".step" (
SET sOutputFiletype=CATPart/CATProduct
) ELSE (
IF "!sInputFiletype!" == ".STP" (
SET sOutputFiletype=CATPart/CATProduct
) ELSE (
IF "!sInputFiletype!" == ".STEP" (
SET sOutputFiletype=CATPart/CATProduct
) ELSE (
IF "!sInputFiletype!" == ".CATProduct" (
SET sOutputFiletype=stp
) ELSE (
IF "!sInputFiletype!" == ".CATPart" (
SET sOutputFiletype=stp
) ELSE (
SET sOutputFiletype=unsupported
))))))
ECHO OutputFiletype !sOutputFiletype!
SET /A count += 1
ECHO.^<folder id="OutputFolder" destination="!sfolderPath!" folderPath="!sfolderPath!" type="bin" upLoadable="RightNow" extension="*" automatic="1"/^>>> !BatchFileFull!
ECHO.^<simple_arg id="OutputExtension!count!" value="!sOutputFiletype!"/^>>> !BatchFileFull!
)
ECHO.^</outputParameters^>>> %BatchFileFull%
ECHO.^<PCList^>>> %BatchFileFull%
ECHO.^<PC name="%sLicPack%" /^>>> %BatchFileFull%
ECHO.^<PC name="ST1.prd" /^>>> %BatchFileFull%
ECHO.^</PCList^>>> %BatchFileFull%
ECHO ^</root^>>> %BatchFileFull%
ECHO xml %BatchFileFull% erstellt.
REM ----------Execute Catia batch-------------
SET CounterAttempts=3
SET ERRORLEVEL = 0
REM ECHO ERRORLEVEL=%ERRORLEVEL%
ECHO Conversion will be started.
:loop
%install_path%\code\bin\CATSTART.exe -run "CATBatchStarter -input %BatchFileFull%" -env %env_file% -direnv %env_dir%
IF %ERRORLEVEL% NEQ 0 (
SET /a CounterAttempts=%CounterAttempts%-1
IF %CounterAttempts% GTR 0 (
ECHO No Step License available at this moment.
timeout /T 30
goto loop
) ELSE (
ECHO.
ECHO ------No Step License available at this moment. Please try again later.-----
ECHO.
goto exitloop
)
) ELSE (
DEL %BatchFileFull%
ECHO.
ECHO ----------BATCH SUCCHESSFULL FINISHED-----------
)
:exitloop
endlocal
REM pause
goto :end
Der Aufbauf der XML-Datei sieht so aus.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "Parameters.dtd">
<root batch_name="BatchDataExchange" user="" password="" env="" version="Catia Version and Build Date deleted]" licfile="" >
<inputParameters>
<file id="FileToProcess" destination="" filePath="C:\Temp\SomeStep.STP" type="bin" upLoadable="RightNow" automatic="1"/>
<file id="FileToProcess" destination="" filePath="C:\Temp\SomePart.CATPart" type="bin" upLoadable="RightNow" automatic="1"/>
<file id="FileToProcess" destination="" filePath="C:\Temp\SomeDrawing.CATDrawing" type="bin" upLoadable="RightNow" automatic="1"/>
</inputParameters>
<outputParameters>
<folder id="OutputFolder" destination="C:\Temp\" folderPath="C:\Temp\" type="bin" upLoadable="RightNow" extension="*" automatic="1"/>
<simple_arg id="OutputExtension1" value="CATPart/CATProduct"/>
<folder id="OutputFolder" destination="C:\Temp\" folderPath="C:\Temp\" type="bin" upLoadable="RightNow" extension="*" automatic="1"/>
<simple_arg id="OutputExtension2" value="stp"/>
<folder id="OutputFolder" destination="C:\Temp\" folderPath="C:\Temp\" type="bin" upLoadable="RightNow" extension="*" automatic="1"/>
<simple_arg id="OutputExtension3" value="dwg"/>
</outputParameters>
<PCList>
<PC name="MD2.slt" />
<PC name="ST1.prd" />
</PCList>
</root>
[Diese Nachricht wurde von Lionel Hutz am 22. Dez. 2024 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP