Hallo,
ich nutze seit vielen Jahren QCAD Pro und bin jetzt auf QCAD/CAM umgestiegen.
Aktuell erstelle ich einen entsprechenden Postprozessor nach meinen Bedürfnissen.
Allerdings fehlen mir ein paar Informationen bzw. finde ich keine entsprechende Dokumentation / Quellcode für die nötigen Script-Funktionen.
In der "QCAD Application Framework API Documentation" sind scheinbar keinerlei CAM-Funktionen dokumentiert (was ja auch nachvollziehbar ist, weil der Teil meinem Verständnis nach ja nicht Open-Source ist).
Zum Beispiel fand ich im Forum bzw. in den vorhandenen Postprozessor-Scripts folgendes:
- this.registerVariable(...)
- this.toolChangeMode = CamExporterV2.FirstMoveMode.BeforeFirstZMove / BeforeFirstXYMove / AfterFirstXYMove
- var toolNames = Cam.getToolNames(this.cadDocument);
- var toolDiameter = Cam.getToolDiameter(this.cadDocument, toolName, 0.0);
Sind diese Funktionen irgendwo dokumentiert?
Oder entsprechend einsehbarer Quellcode würde mir auch schon deutlich weiterhelfen, z.B. "scripts/Cam/CamExportV2/CamExporterV2.js" wäre hilfreich. Ich möchte ungern für jede auftauchende Frage ein neues Topic erstellen und Euch damit nerven...
Was ich z.B. noch gerne an Änderungen / Anpassungen in meinem Script hätte:
- Ich habe den Postprozessor so weit, dass er mir am Anfang des G-Codes als Kommentare alle Tools mit Nummer, Durchmesser / Radius auflistet. Hier wünsche ich mir jedoch auch noch den Typ und die Beschreibung des Tools (die Daten sind ja im Werkzeug-Bearbeiten-Dialog vorhanden). Ich weiß nur nicht wie ich das im Script abrufen kann. Gibt es ein Cam.getToolDescriptions(...) oder sowas?
Nachtrag: Wenn ich mich an ".prototype.initToolpath = function(toolpathBlock)" hänge, kann ich die benötigten Beschreibungen via this.toolBlock.getCustomProperty("QCAD", "CamDescription", "") ermitteln. Somit kann ich am Ende der G-Code-Datei alles wie gewünscht auflisten. Allerdings kriege ich es am Anfang der Datei nicht hin, weil initToolpath erst während des Schreibens der Datei aufgerufen wird und die Daten zu Beginn nicht vorliegen. Also bisher nur ein Workaround, der mich nicht ganz zufriedenstellt :-/
- Beim Export würde ich gerne die Werkzeugpfade für die verschiedenen Werkzeuge in verschiedene G-Code-Dateien schreiben. Ich habe leider keinen Werkzeugwechsler und setze aktuell nach jedem manuellen Wechsel die Höhe (Antasten der Werkstückoberfläche). Außerdem finde ich einzelne Dateien pro Werkzeug sinnvoll, wenn man ggf. etwas nacharbeiten möchte (weil z.B. die Höhe nicht gestimmt hat, da möchte ich ungern den gesamten G-Code erneut durchlaufen, sondern nur für dieses Werkzeug). Wie ließe sich das realisieren?
Ich verwende QCAD/CAM 3.31.2 Pro unter Linux (64 bit). Mein Postprozessor basiert auf GCodeBase.js.
Vielen Dank!
Gruß,
Deejay
Postprozessor anpassen, Dokumentation
Forum rules
Immer Betriebssystem und QCAD/CAM Version angeben.
Verwendeten Postprozessor angeben.
Zeichnungsdateien und Bildschirmfotos beifügen.
Eine Frage pro Topic.
Immer Betriebssystem und QCAD/CAM Version angeben.
Verwendeten Postprozessor angeben.
Zeichnungsdateien und Bildschirmfotos beifügen.
Eine Frage pro Topic.
-
- Junior Member
- Posts: 15
- Joined: Mon Dec 30, 2024 10:25 am
-
- Premier Member
- Posts: 4872
- Joined: Wed Sep 27, 2017 4:17 pm
Re: Postprozessor anpassen, Dokumentation
this.registerVariable(...) ist ziemlich unkompliziert.
Mit ein paar Versuchen können wir auch herausfinden, was die speziellen Präfixe oder Suffixe sind. (zB [F!])
Außerdem ist mir nicht bekannt, welcher G-Code von QCAD fur einer neuen Werkzeugnummer enthalten ist.
Ohne Werkzeugwechsler natürlich.
Dies kann für die Reihenfolge der Dinge hilfreich sein.
Man könnte alle benötigten Werkzeugpfade mit unterschiedlichen Werkzeugen erstellen.
Im CAM-Werkzeugpfaddialog können wir diese anordnen.
Ich vermute dann, dass der Augen-Button vor jedem Werkzeugpfad den betreffenden Pfad für den Export aktiviert/deaktiviert.
toolNames = Cam.getToolNames(doc);
toolBlock = Cam.getToolBlock(doc, toolName);
Ein solcher Block hätte eine benutzerdefinierte Eigenschaft namens „QCAD“, „CamDescription“.
Ich weiß, das sind nicht viele Informationen für viele Fragen.
Grüße,
CVH
Mit ein paar Versuchen können wir auch herausfinden, was die speziellen Präfixe oder Suffixe sind. (zB [F!])
Ich weiß nicht, wie Ihr Setup mit einem Werkzeugwechsel umgeht. Meins ruft ein spezielles CNC-Makro auf, das den Fräser in eine Standardposition zurückbringt und dann anhält, bis ich das Werkzeug gewechselt habe.
Außerdem ist mir nicht bekannt, welcher G-Code von QCAD fur einer neuen Werkzeugnummer enthalten ist.
Ohne Werkzeugwechsler natürlich.
Dies kann für die Reihenfolge der Dinge hilfreich sein.
Man könnte alle benötigten Werkzeugpfade mit unterschiedlichen Werkzeugen erstellen.
Im CAM-Werkzeugpfaddialog können wir diese anordnen.
Ich vermute dann, dass der Augen-Button vor jedem Werkzeugpfad den betreffenden Pfad für den Export aktiviert/deaktiviert.
Eng verwandt:
toolNames = Cam.getToolNames(doc);
toolBlock = Cam.getToolBlock(doc, toolName);
Ein solcher Block hätte eine benutzerdefinierte Eigenschaft namens „QCAD“, „CamDescription“.
Ich weiß, das sind nicht viele Informationen für viele Fragen.
Grüße,
CVH
-
- Junior Member
- Posts: 15
- Joined: Mon Dec 30, 2024 10:25 am
Re: Postprozessor anpassen, Dokumentation
Hallo CVH,
danke für die Hilfe.
Ich spanne vor dem Programmstart mein Werkzeug und stelle manuell die Höhe ein, dann lasse ich das Programm komplett ablaufen. Ggf. spanne ich danach ein weiteres Werkzeug und starte ein weiteres Programm... Ja, hört sich umständlich an, aber vielleicht finde ich da auch noch einen Weg das zu verbessern.
Deswegen: Danke für die Hilfe!
Gruß,
Deejay
danke für die Hilfe.
Das ist nicht notwendig bzw. habe ich selbst schon geschafft. Ich hatte bei dieser Frage eher gehofft, dass es vielleicht eine Stelle gibt, wo dies dokumentiert und nachlesbar ist. Aber so wie ich das verstanden habe, gibt es sowas wohl nicht. Durch Versuchen konnte ich jedenfalls das richtige Prefix für mich ermitteln.Mit ein paar Versuchen können wir auch herausfinden, was die speziellen Präfixe sind.
Bei mir ist es bisher so, dass ich nach dem manuellen Werkzeugwechsel manuell die Werkstückhöhe einstelle. Ich verwende LinuxCNC und dort geht das meines Wissens nur, wenn das Programm beendet ist. Daher ist für mich bisher ein Werkzeugwechsel während des Programmablaufs ein Problem.Ich weiß nicht, wie Ihr Setup mit einem Werkzeugwechsel umgeht. Meins ruft ein spezielles CNC-Makro auf, das den Fräser in eine Standardposition zurückbringt und dann anhält, bis ich das Werkzeug gewechselt habe.
Ich spanne vor dem Programmstart mein Werkzeug und stelle manuell die Höhe ein, dann lasse ich das Programm komplett ablaufen. Ggf. spanne ich danach ein weiteres Werkzeug und starte ein weiteres Programm... Ja, hört sich umständlich an, aber vielleicht finde ich da auch noch einen Weg das zu verbessern.
Danke, das hilft mir schon weiter. Das funktioniert tatsächlich. Ausgeblende Pfade werden nicht exportiert. So kann ich dann die Pfade für jedes Werkzeug separat exportieren (in verschiedene Dateien). Eventuell versuche ich noch, dass beim Export jedes Mal nach dem Dateinamen gefragt wird (damit ich nicht vorher jedes Mal den Dateinamen im CAM-Konfigurationsdialog ändern muss.Man könnte alle benötigten Werkzeugpfade mit unterschiedlichen Werkzeugen erstellen.
Im CAM-Werkzeugpfaddialog können wir diese anordnen.
Ich vermute dann, dass der Augen-Button vor jedem Werkzeugpfad den betreffenden Pfad für den Export aktiviert/deaktiviert.
Ja, die beiden Möglichkeiten habe ich auch schon gefunden. Cam.getToolNames(doc) liefert jedoch nur die Werkzeugnummern, nicht die Beschreibung. Die Abfrage der Eigenschaft CamDescription vom Toolblock nutze ich aktuell, um die Beschreibungen der Tools in einer eigenen Variablen zwischenzuspeichern und dann alle zusammen am Ende der CAM-Datei zu schreiben. Mir fehlt leider noch die Möglichkeit, alle Toolblöcke am Anfang des Scripts zu ermitteln... dann könnte ich diese alle zu Beginn abfragen und auch an den Anfang der Datei ausgeben. Aber mal sehen, das sehe ich aktuell eher als "nice to have".toolNames = Cam.getToolNames(doc);
toolBlock = Cam.getToolBlock(doc, toolName);
Ein solcher Block hätte eine benutzerdefinierte Eigenschaft namens „QCAD“, „CamDescription“.
Naja, jede einzelne Information hilft weiter. Manchmal reicht ja, wenn man die richtige Stelle findet und kann sich von dort weiterhangeln...Ich weiß, das sind nicht viele Informationen für viele Fragen.
Deswegen: Danke für die Hilfe!
Gruß,
Deejay
-
- Junior Member
- Posts: 15
- Joined: Mon Dec 30, 2024 10:25 am
Re: Postprozessor anpassen, Dokumentation
Nachtrag:
Manchmal sieht man den Wald vor Bäumen nicht.
Über var toolNames = Cam.getToolNames(doc); kann man natürlich alle Werkzeuge (Werkzeugnummern) holen.
In einer Schleife kann man dann über var toolBlock = Cam.getToolBlock(doc, toolNames[index]); den dazugehörigen ToolBlock abfragen und dann mittels toolBlock.getCustomProperty("QCAD", "CamDescription", ""); die Beschreibung des Werkzeugs ermitteln...
Gruß,
Deejay
Manchmal sieht man den Wald vor Bäumen nicht.
Über var toolNames = Cam.getToolNames(doc); kann man natürlich alle Werkzeuge (Werkzeugnummern) holen.
In einer Schleife kann man dann über var toolBlock = Cam.getToolBlock(doc, toolNames[index]); den dazugehörigen ToolBlock abfragen und dann mittels toolBlock.getCustomProperty("QCAD", "CamDescription", ""); die Beschreibung des Werkzeugs ermitteln...
Gruß,
Deejay
-
- Premier Member
- Posts: 4872
- Joined: Wed Sep 27, 2017 4:17 pm
Re: Postprozessor anpassen, Dokumentation
Das waren die bereitgestellten Informationen ... in Kürze.
Ich war gerade dabei, eine ausführlichere Antwort zu verfassen, aber Sie haben es bereits herausgefunden.
Der betreffende Block ist ein Standard-CAD-Block, der alle Informationen als benutzerdefinierte Eigenschaften enthält.
Eine von RObject geerbte Funktion ist:
RBlock.getCustomProperties() ... Alles in einem Array
oder
RBlock.getCustomPropertyKeys() ... Alle vorhandenen Schlüssel in einem Array
Grüße,
CVH
Ich war gerade dabei, eine ausführlichere Antwort zu verfassen, aber Sie haben es bereits herausgefunden.

Der betreffende Block ist ein Standard-CAD-Block, der alle Informationen als benutzerdefinierte Eigenschaften enthält.
Eine von RObject geerbte Funktion ist:
RBlock.getCustomProperties() ... Alles in einem Array
oder
RBlock.getCustomPropertyKeys() ... Alle vorhandenen Schlüssel in einem Array
Grüße,
CVH