Bemaßung durch Script

Bitte benutzen Sie dieses Forum für Fragen, Kommentare und Probleme im Zusammenhang mit QCAD Professional

Moderators: andrew, Husky

Forum rules

Immer Betriebssystem und QCAD Version angeben.

Zeichnungsdateien und Bildschirmfotos beifügen.

Eine Frage pro Topic.

Post Reply
thhz
Active Member
Posts: 42
Joined: Thu Aug 04, 2022 12:04 pm

Bemaßung durch Script

Post by thhz » Fri Jan 24, 2025 2:38 pm

Version: 3.30.1.0 (3.30.1)
Erstellungsdatum: Jun 18 2024
Revision: 5067327
Qt Version: 5.13.2
Architektur: x86_64
Compiler: MSVC++ 14.0 (2015)

Windows 10 pro

Hallo,

ich hatte schon mal einen Post zu diesem Thema, mich danach aber nicht weiter damit beschäftigt.
Nun möchte ich mich nochmal dem Thema widmen bzw. mich mehr mit Scripten beschäftigen, um bestimmte immer gleiche Vorgänge zu vereinfachen.
Ich bin kein Programmierer, die Thematik Scripting in QCAD ist für mich sehr schwer zu verstehen und umzusetzen, ich bediene mich dabei hauptsächlich aus Posts in den Foren, soweit wie ich sie verstehe. So habe ich mir ein Script gebastelt, welches auch funktioniert, fast.
Die Screenshots zeigen vorher/nachher, die fehlenden Einstellungen werden gesetzt/geändert, nur leider nicht auf die Zeichnung angewendet.
Erst nachdem man die Zeichnungseinstellungen öffnet und ok anklickt wird die Bemaßung in der Zeichnung richtig angezeigt.

Was muss ich in das Script einbauen damit das übernommen und angezeigt wird?
Ich habe schon vieles probiert, aber ich komme nicht dahinter.

Dann noch ein Problem bei dem ich nicht weiterkomme,
wenn das Script funktioniert soll es über einen Button aktiviert werden,
Selbst einen Button erstellen und ein Script zuweisen, möglichst noch auf einem eigenen Menüband.
Ist das möglich, und wenn ja, wie?
Beispiele mit Code wären toll

danke

Gruß
Thomas
Attachments
fixDimension.js
(461 Bytes) Downloaded 511 times
Zeichnungseinheit_original.bmp
Zeichnungseinheit_original.bmp (226.46 KiB) Viewed 42788 times
Zeichnungseinheit_nachScript.bmp
Zeichnungseinheit_nachScript.bmp (150.99 KiB) Viewed 42788 times
K20389-005.dxf
(84.55 KiB) Downloaded 398 times
dxfDatei_original.bmp
dxfDatei_original.bmp (1.44 MiB) Viewed 42788 times
Beschriftungsformat_original.bmp
Beschriftungsformat_original.bmp (205.97 KiB) Viewed 42788 times
Beschriftungsformat_nachScript.bmp
Beschriftungsformat_nachScript.bmp (93.71 KiB) Viewed 42788 times

CVH
Premier Member
Posts: 4879
Joined: Wed Sep 27, 2017 4:17 pm

Re: Bemaßung durch Script

Post by CVH » Sat Jan 25, 2025 1:52 am

Ein Skript als Lösung für ein Problem, das mir bisher noch nicht begegnet ist ...

:!: Falls dies bei jeder neuen mit QCAD erstellten Zeichnung auftritt ...
... Passen Sie die entsprechenden Einstellungen für neue Zeichnungen unter den Anwendungseinstellungen an.
thhz wrote:
Fri Jan 24, 2025 2:38 pm
Erst nachdem man die Zeichnungseinstellungen öffnet und ok anklickt wird die Bemaßung in der Zeichnung richtig angezeigt.
Beim Schließen der Zeichnungseinstellungen werden diese Codezeilen ausgeführt:

Code: Select all

    // regenerate scenes (various drawing settings affect the
    // rendering):
    var di = EAction.getDocumentInterface();
    if (!isNull(di)) {
        di.updateAllEntities();
        di.regenerateScenes();
        di.regenerateViews(true);
    }
Das Hinzufügen der 3 Zeilen zu Ihrem Code erledigt den Trick.
thhz wrote:
Fri Jan 24, 2025 2:38 pm
wenn das Script funktioniert soll es über einen Button aktiviert werden,
Fast alle Werkzeuge werden per Knopfdruck aktiviert ... :wink:
Die meisten Tools sind in ECMAScript geschrieben.
>>> Tutorial: Interaktive Skript Actions
In Ihrem Fall muss es nicht interactif sein, nur die Abschnitte beginEvent und init sind erforderlich.
Geben Sie ihm einen eindeutigen Namen und ersetzen Sie EAction.handleUserMessage("Hello World!"); durch Ihren Code.

Beachten Sie, dass keine Bedingungen geprüft werden.
Wenn Sie dieses Skript für eine beliebige Zeichnung in einer beliebigen Einheit aktivieren, werden die Zeichnungseinstellungen blind erzwungen.

Grüße,
CVH

thhz
Active Member
Posts: 42
Joined: Thu Aug 04, 2022 12:04 pm

Re: Bemaßung durch Script

Post by thhz » Sun Jan 26, 2025 7:46 pm

Hallo CVH,

vielen Dank, Teil 1 hat funktioniert, die Anzeige wird nach Durchlauf aktualisiert, Teil 2, der Einbau in das Menü, leider noch nicht,
da benötige ich Hilfe, kannst du mir da helfen?
Ich bekomme hier und da von Kunden Zeichnungen mit diesen Bemaßungseinstellungen, hatte das Problem schon mal gepostet

https://qcad.org/rsforum/viewtopic.php?f=89&t=9556

hatte mich nur nicht mehr weiter damit beschäftigt, wenn man das Teil in eine neue Zeichnung kopiert ist das Problem auch gelöst.
Ich wollte mich aber generell mal mit Scripting beschäftigen, ist halt sehr schwer für jemanden der nicht programmieren kann, es dauert halt
bis man dahinter kommt.

Nochmals vielen Dank

Gruß
Thomas
regrads
Thomas

CVH
Premier Member
Posts: 4879
Joined: Wed Sep 27, 2017 4:17 pm

Re: Bemaßung durch Script

Post by CVH » Mon Jan 27, 2025 6:18 am

Programmieren unter QCAD ist eine Sache, aber die Implementierung eines neuen Tools auf Basis Ihres Funktionscodes sollte unkompliziert sein.
Der minimale Code basierend auf dem Tutorial: Interaktive Skript Actions

Code: Select all

include("scripts/EAction.js");

function ExMinimal(guiAction) {
    EAction.call(this, guiAction);
}

ExMinimal.prototype = new EAction();

ExMinimal.prototype.beginEvent = function() {
    EAction.prototype.beginEvent.call(this);

    EAction.handleUserMessage("Hello World!");

    this.terminate();
};

ExMinimal.init = function(basePath) {
    var action = new RGuiAction(qsTr("&Minimal Example"), RMainWindowQt.getMainWindow());
    action.setRequiresDocument(true);
    action.setScriptFile(basePath + "/ExMinimal.js");
    action.setGroupSortOrder(100000);
    action.setSortOrder(0);
    action.setWidgetNames(["ExamplesMenu"]);
};
Wir müssen ihm einen eindeutigen Klassennamen geben, zum Beispiel „FixUnitAndFormat“.
-> Ersetzen Sie alle 'ExMinimal' durch 'FixUnitAndFormat'.

Wir möchten, dass es im Menü „Bearbeiten“ direkt unter „Zeichnungseinheit konvertieren“ (CU) zu finden ist.
CU = GroupSortOrder(2650); SortOrder(100); WidgetNames(["EditMenu"]);
-> Verwenden wir die Sortierreihenfolge = 2650 & 110
-> Ändern Sie den Aktionsnamen von '&Minimal Example' in '&Fix unit and format'.

-> Ersetzen der Nachricht „Hallo Welt“ durch Ihren Code

Das Ergebnis wäre:

Code: Select all

include("scripts/EAction.js");

function FixUnitAndFormat(guiAction) {
    EAction.call(this, guiAction);
}

FixUnitAndFormat.prototype = new EAction();

FixUnitAndFormat.prototype.beginEvent = function() {
    EAction.prototype.beginEvent.call(this);

    var di = this.getDocumentInterface();
    var doc = di.getDocument();

    // Apply new units and measurement:
    doc.setUnit(RS.Millimeter);
    doc.setMeasurement(RS.Metric);

    // Get dimStyle and adapt:
    var dimStyle = doc.queryDimStyle();
    dimStyle.setInt(RS.DIMLUNIT, 2);    // Decimal format
    dimStyle.setInt(RS.DIMDEC, 2);      // 2 decimals

    // Apply new dimStyle:
    var op = new RAddObjectsOperation();
    op.addObject(dimStyle, true, true);
    di.applyOperation(op);

    // Regenerate scenes:
    di.updateAllEntities();
    di.regenerateScenes();
    di.regenerateViews(true);

    this.terminate();
};

FixUnitAndFormat.init = function(basePath) {
    var action = new RGuiAction(qsTr("&Fix unit and format"), RMainWindowQt.getMainWindow());
    action.setRequiresDocument(true);
    action.setScriptFile(basePath + "/FixUnitAndFormat.js");
    action.setGroupSortOrder(2650);
    action.setSortOrder(110);
    action.setWidgetNames(["EditMenu"]);
};
Dieses JS-Skript wird dann in der QCAD-Ordnerstruktur abgelegt: ...QCAD/scripts/Edit/FixUnitAndFormat/FixUnitAndFormat.js
Wobei die 3 Punkte für Ihren QCAD(CAM)-Installationsordner stehen.
Es kann erforderlich sein, einen neuen Unterordner 'Edit' unter 'scripts' zu erstellen.
Außerdem wird ein neuer Unterordner 'FixUnitAndFormat' benötigt.
Unter Windows benötigen Sie möglicherweise Administratorrechte.

Beachten Sie, dass die automatische Übersetzung (qsTr) ohne einen Eintrag in den entsprechenden Dateien nichts bewirkt.
Sie können den Aktionsnamen auf Deutsch definieren.
Ersetzen Sie qsTr("&Fix unit and format") durch eine beliebige Zeichenfolge in doppelten Anführungszeichen.

Vielleicht ist es eine gute Idee, zuerst die falschen Parameter zu testen und das beginEvent zu beenden, wenn keine Korrektur erforderlich ist.

Grüße,
CVH

thhz
Active Member
Posts: 42
Joined: Thu Aug 04, 2022 12:04 pm

Re: Bemaßung durch Script

Post by thhz » Mon Jan 27, 2025 11:33 am

Hallo CVH,

das hat geklappt, vielen Dank

Gruß
Thomas
regrads
Thomas

Post Reply

Return to “QCAD Professional”