Bemaßung in Script einbauen

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 in Script einbauen

Post by thhz » Mon Feb 03, 2025 6:28 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 bin dabei Makros für Standardteile zu erstellen, z.B. das im Anhang
nach anfänglichen Schwierigkeiten hat es geklappt, das Teil wird erstellt,
wie bekomme ich das jetzt automatisch durch das Script bemaßt?
daran scheitere ich, komme nicht weiter
bemaßen möchte ich dh, dv, dd

danke

Gruß
Thomas
Attachments
Remit4Loechern1.ui
(4.49 KiB) Downloaded 716 times
Remit4Loechern1.js
(4.6 KiB) Downloaded 702 times
Remit4Loechern.bmp
Remit4Loechern.bmp (447.03 KiB) Viewed 80155 times
regrads
Thomas

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

Re: Bemaßung in Script einbauen

Post by CVH » Tue Feb 04, 2025 6:45 am

Hallo,
Aus Ihrem Skript entnehme ich, dass Sie die Simple API verwenden.
(Als 8 einzelne Aktionen oder Transaktionen, 8 Aktualisierungen, 8 erneute Renderings)
Die Simple API... ist äußerst einfach gehalten, hat aber auch ihre Grenzen.
Irgendwann werden Sie beginnen, die QCAD API in vollem Umfang zu nutzen.

Das Hinzufügen einer Dimensionsentität ist nicht in der Simple API enthalten.
Das ist etwas anspruchsvoller ... :wink:


Die meisten Standarddimensionen sind Open Source und lassen sich am besten durch die Untersuchung eines solchen Beispiels erklären.
Beispiel: DimAligned.js

Zeile 30: Es wird ein neues, aber noch ungültiges Objekt erstellt.

Code: Select all

var dimData = new RDimAlignedData();
Zeile 56: Vorab werden 3 Definitionspunkte auf ungültig gesetzt.
Diese werden definiert, wenn wir diese Punkte in DimAligned.prototype.pickCoordinate angeben und auswählen
Zeile 110: Erster Erweiterungspunkt

Code: Select all

dimData.setExtensionPoint1(pos);
Zeile 118: Zweiter Erweiterungspunkt

Code: Select all

dimData.setExtensionPoint2(pos);
Zeile 120-131: Etwas Sinnvolles als dritter Punkt, aber schließlich der letzte angegebene Punkt in Zeile 143

Code: Select all

dimData.setDefinitionPoint(pos);
Im letzten Schritt wird getOperation(false) aufgerufen (148), es ermöglicht die Erstellung einer Entität (168-187),
erstellt eine Operation (165) und fügt die Entität hinzu. Diese Operation wird dann angewendet (150).

Code: Select all

dimData.setLinearFactor(factor); // Typically 1.0

// Create entity:
var doc = this.getDocument();
var entity = new RDimAlignedEntity(doc, dimData);

// Create operation and apply:
var op = new RAddObjectOperation(entity, this.getToolTitle());
var di = this.getDocumentInterface();
di.applyOperation(op);
In der RDimAlignedData-Klassenreferenz erfahren Sie, was für das Datenobjekt angegeben werden kann.
Bevor es in eine Entität umgewandelt wird.
Nachher, Informationen zu RDimAlignedEntity finden Sie in der entsprechenden Klasse.
Geerbte Methoden von RDimLinearEntity
Geerbte Methoden von RDimensionEntity
Geerbte Methoden von REntity (zum Beispiel: Ebene, Farbe, ...)


Auf leicht abgewandelte Weise können wir alle Formen als Entitäten zu einer Operation hinzufügen.
Das Ergebnis ist eine Transaktion.

Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by thhz » Mon Feb 10, 2025 8:03 pm

Guten Abend CVH,

es tut mir leid, ich bekomme das nicht hin, verstehe auch nicht wirklich was ich tun muss.
Ich habe auch eine neue Version des Scripts, in diesem Fall möchte ich ein Teil über die Bibliothek einfügen,
das funktioniert anders als über das Menü, noch komplizierter
ich habe das Beispielscript CubeCuttingOut solange abgeändert bis es funktioniert hat, learning by trial and error, bin halt kein Programmierer,
es funktioniert aber, ich habe folgende Bitten

- schau dir bitte das script an ob das in programmiertechnischer Hinsicht so ok ist
- bau bitte eine Horizontal- und Vertikalbemaßung und eine Durchmesserbemaßung ein, auf einem eigenen Layer für Bemaßungen,
ich versuche dann alle anderen Bemaßungen selbst hinzubekommen
- wie bekomme ich den Zugriff auf das eingefügte Teil bzw. das Dokument? vor allem beim script Schildbruecke
um z.B. autozoom oder selectall auszuführen

ich möchte nicht Vermessen erscheinen, aber könntest du das für Schildbruecke und Remit4Loechern machen?
dann komme ich schon mal weiter bzw. kann daraus lernen für alles was noch kommt :-)

Vielen Dank

Gruß
Thomas
Attachments
Schildbruecke.ui
(1.86 KiB) Downloaded 671 times
Schildbruecke.js
(8.13 KiB) Downloaded 677 times

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

Re: Bemaßung in Script einbauen

Post by CVH » Tue Feb 11, 2025 6:54 am

Hallo,

Es ist ODER.
Entweder als GUI-Aktion oder als Bibliothekselement.

Der Unterschied ist grundlegend.
Zunächst einmal: Die Lagerung erfolgt an ganz unterschiedlichen Orten.

Eine GUI-Aktion wird durch den Aufruf des beginEvents gestartet.
Eine Aktion wirkt sich in der Regel auf die aktuelle Zeichnung aus.

Ein Bibliothekselement wird abhängig von den Parametern generiert, die „generate“ aufrufen.
Es wird normalerweise vom Bibliotheksbrowser in einem Offscreen-Dokument erstellt und im Endzustand in die aktuelle Zeichnung eingefügt.

Das von „generate“ weitergegebene documentInterface ist somit der Man-in-the-Middle.
Unsicher, ob ein Bibliothekselementcode die aktuelle Zeichnung direkt beeinflussen kann.
Nichts ist wirklich unmöglich.


So wie ich die Anfragen verstehe … Eine als Add-on, eine als Bibliothekselement.
Ich werde Sie später per privater Nachricht kontaktieren.

Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by thhz » Thu Feb 13, 2025 10:21 am

Hallo CVH,

vielen Dank, ich freue mich und bin gespannt auf die PN.

Ich habe noch eine Frage zu dem Widget/der ui
wenn ich das Script über die Bibliothek auf die Zeichnung ziehe erscheint das widget unten rechts in der Ecke,
läßt sich die Position über das script/die ui individuell anpassen?

danke

Gruß
Thomas
Attachments
Widget.jpg
Widget.jpg (12.75 KiB) Viewed 78802 times

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

Re: Bemaßung in Script einbauen

Post by CVH » Thu Feb 13, 2025 10:56 am

Das Prüfen Ihrer Skripte nimmt mehr Zeit in Anspruch als erwartet.
Weil es so untypische gibt ....
Versprochen und nicht vergessen, aber nicht wirklich ganz oben auf der ToDo-Liste. :wink:


Das Optionswidget wird zwar automatisch unten rechts angedockt.
:arrow: Großes Problem: Für die QCAD Pro-Trial version fast nicht erreichbar.

Sie können es an der Titelleiste ziehen und schweben lassen.
Nur für die aktuelle Aktion.

Der Bibliotheksbrowser wurde zu einem reinen Pro-Add-on 'hochgestuft' (3.28.0).
Der Code ist nicht mehr Teil der Open Source.
In der älteren Implementierung kann ich feststellen, dass es nur angedockt war.
Im Detail wird dies von InsertScriptItem.js erledigt. (Open Source)

Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by CVH » Sat Feb 15, 2025 1:04 pm

Schildbruecke.js .ui überarbeitet als Library Script-Element ... Siehe PM
Wenn Sie weitere Informationen benötigen, antworten Sie auf die PM.

Ich denke, dass Sie es selbst schaffen, den Dimensionscode in ein Addon-Tool-Skript einzufügen. :wink:

Grüße,
CVH


Schildbruecke.js .ui revised as Library Script item ... See PM
If you need more info then reply to the PM.
I think that you can manage to merge the Dimension code into an Addon tool script yourself.

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

Re: Bemaßung in Script einbauen

Post by thhz » Sat Feb 15, 2025 1:35 pm

Hallo CVH,

alles gut, dafür habe ich Verständnis

Jetzt tritt ein anderes Problem auf, wie verarbeite ich Kommazahlen bzw. wie gehe ich mit dem Dezimaltrennzeichen um?
Wir geben diese Zahlen mit Komma ein, z.B. 18,5
Ich habe schon herausgefunden das es parseFloat gibt, und in Verbindung mit der Eingabe 18.5 funktioniert das auch,
gut man kann im Widget .5 statt ,5 eingeben, aber was mich wundert ist das wenn man das Script "Remit4Loechern1" über das Menü
ausführt dann wird eine 18,5 im Eigenschaftseditor automatisch zu 18.5,
ziehe ich das Script "Re4Loecher" über die Bibliothek in eine Zeichnung muss ich zwingend einen Punkt nehmen,
ich habe schon versucht mit replace zu arbeiten, funktioniert aber nicht, gibt es eine Lösung?

Noch eine Frage, das Script "Re2LL" über die Bibliothek soll ein Rechteck mit 2 Langlöchern zeichnen,
ich bekomme das Rechteck mit jeweils 2 Geraden in y-Richtung hin, diese Geraden sollen oben und unten einen Radius bekommen,
in meinem Fall ist der Radius 9,25 (18,5 / 2)
auch das will mir nicht klappen

vielen Dank

Gruß
Thomas
Attachments
Remit4Loechern1.ui
(4.49 KiB) Downloaded 758 times
Remit4Loechern1.js
(4.6 KiB) Downloaded 725 times
Re4Loecher.ui
(2.25 KiB) Downloaded 652 times
Re4Loecher.js
(5.42 KiB) Downloaded 735 times
Re2LL.ui
(2.55 KiB) Downloaded 727 times
Re2LL.js
(4.9 KiB) Downloaded 793 times

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

Re: Bemaßung in Script einbauen

Post by CVH » Sat Feb 15, 2025 1:54 pm

Zahlen sind in fast allen QCAD-Eingabefeldern mit einem Punkt gekennzeichnet.
Wenn es sich um ein QLineEdit handelt, akzeptiert es Kommas ... Dann müssen Sie das Komma vor parseFloat(...) stringweise ersetzen.
Zum Beispiel mit var value = parseFloat(string.replace(",", ".")); ... Dadurch wird das erste Vorkommen eines Kommas durch einen Punkt ersetzt.
Es ist kein Fehler, wenn überhaupt kein Komma steht.
parseFloat versucht, alles in einen Wert umzuwandeln und dann wird ein (zusätzliches) Komma als Ende des Werts angesehen.

Ein RMAthLineEdit-Feld akzeptiert den Komma- oder Punktstil gleichermaßen.
Sie müssen diesen Widgettyp in der UI-Datei angeben.

Die Standardanzeige ist immer ein Punkt.
Das habe ich schon in mehreren Versuchen gemacht, Punkte und Kommas ersetzt, hin und her …
... Letztlich ist es einfacher, den Punkt zu akzeptieren. :( :cry: :roll:


Im Moment habe ich keine Zeit, mir Re2LL anzusehen … Vielleicht am Montag.

BTW: Die private Nachricht, die ich Ihnen gesendet habe, befindet sich immer noch in meinem Postausgang (14:10)
Siehe vollständig oben rechts auf der Forumsseite.

Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by thhz » Sat Feb 15, 2025 5:02 pm

Hallo CVH,

var value = parseFloat... funktioniert :lol:

kein Problem, ich bin so schon sehr dankbar für deine Hilfe

hab ein schönes Wochenende

Gruß
Thomas
regrads
Thomas

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

Re: Bemaßung in Script einbauen

Post by CVH » Sun Feb 16, 2025 8:23 am

Ich vermute, dass Sie Benachrichtigungen für private Nachrichten zulassen müssen.
Siehe „Board-Einstellungen“ in Ihrem Benutzer-Kontrollbereich.
Eine Antwort auf Ihre PM hängt in meinem Postausgang.

Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by CVH » Mon Feb 17, 2025 7:32 am

Hallo,
Für das Re2LL-Skript ...
Ein Rechteck wäre einfacher als eine Polylinie wie im Schildbrücken-Fix.

In Re2LL.generatePreview beziehen sich alle auf die Symbolgröße oder verwenden einfach die Standardeinstellungen.
Wie bei Schildbrücken erklärt:
Sie können mit der Symbolgröße entscheiden, ob Sie beim Bibliothekssymbol kleine Details einschließen möchten oder nicht.
Das Symbol ist immer eine skalierte Darstellung des Skriptelements.
Elemente, die auf 1 Pixel oder gar keinen Abstand skaliert sind, können das Vorschausymbol überladen.

Das Problem bei Bögen besteht darin, dass Start- und Endwinkel wohl definiert sein müssen und die Ausrichtung stimmen muss.
In Re2LL.createArc werden alle als im Uhrzeigersinn verlaufende Bögen erstellt.
Start- und Endwinkel müssen dann 3/2Pi und 1/2Pi (im Beispiel links) bzw. 1/2Pi und 3/2Pi (im Beispiel rechts) betragen.
Intern verwendet QCAD Winkel in Radiant. Die 'Simple API' kann an bestimmten Stellen Grade verwenden ... :wink:

Auch hier wäre eine Polylinie einfacher.
Definieren Sie den Schlitz als Rechteck aus 4 Ecken.
Der Krümmungsfaktor dieser geraden Segmente ist Null.
Eine Krümmung um 180° beträgt dann -1 (im Uhrzeigersinn) oder 1 (gegen den Uhrzeigersinn).
bulge = tan(sweep/4) = tan(+/-45) = +/-1
Ein 90 Grad Bogen beträgt beispielsweise +/-0.414213562373, das gerade Streckenstück ist die Sehne.

PolySlot.png
PolySlot.png (6.03 KiB) Viewed 75919 times

Der Code würde folgendermaßen aussehen:

Code: Select all

    // Create a closed polyline shape with these corners:
    var poly = new RPolyline(corners, true);    // Closed
    // Segment 0 and 2 must bulge 180° outwards (Negative when CW):
    poly.setBulges([-1.0, 0.0 -1.0, 0.0]);
Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by thhz » Tue Feb 18, 2025 8:51 pm

Hallo CVH,

ich habe es hinbekommen :)
obwohl ich mich den bulge Berechnungen noch tiefer beschäftigen muss,
so ganz verstanden habe ich das noch nicht,
cornersL + cornersR habe ich gemacht um später einfacher die Punkte für eine Bemaßung zu haben,
ist der Gedanke ok oder gibt es eine einfachere Lösung?

nochmal vielen Dank für deine Hilfe

Gruß
Thomas
Attachments
Re2LL.js
(5.5 KiB) Downloaded 768 times
regrads
Thomas

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

Re: Bemaßung in Script einbauen

Post by CVH » Tue Feb 18, 2025 10:41 pm

Hallo,

Re2LL.js funktioniert wie erwartet ... Allerdings ...
Ein geschlossenes Polygon, das einem Rechteck ähnelt, hat 4 Ecken.

Aus irgendeinem unbekannten Grund sind Sie zu einem nicht logisch geschlossenen Polygon zurückgekehrt, bei dem Ecke 4 = Ecke 0.
(Indizes basieren auf Null).

Nicht logisch geschlossen, aber geometrisch geschlossen.

Ein Polygon mit 5 Ecken hat 5 Eckpunkte ('vertices') und somit 5 Krümmungsfaktors.
Da das fünfte Segment überhaupt keine Länge hat, ist es nicht wirklich wichtig, diesen Faktor zu definieren.
Schon ein Rätsel, dass 5 Ecken und 4 Faktoren akzeptiert wurden.
Allerdings sollte das Array mit Krümmungsfaktors dann 5 Elemente haben.

Halten Sie es einfach, 4 Ecken und 4 Faktoren, als logisch geschlossenes Polygon. :wink:

Ein +180-Grad-Bogen hat immer einen Krümmungsfaktor von 1.00 (Oder -1.00 für -180 Grad)
Egal wie lang die Sehne ('chord') ist und die Sehne ist in diesem Fall gleich dem Durchmesser.


Grüße,
CVH

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

Re: Bemaßung in Script einbauen

Post by thhz » Thu Feb 20, 2025 8:12 pm

Hallo CVH,

jetzt habe ich es verstanden, nun ist alles auch logisch geschlossen, es funktioniert einwandfrei,
So wie ich konstruiert hatte gab es mit den Ovalen innen ein Problem, klickte man darauf stürzte Qcad ab,
das Programm ging einfach zu.
Als ich auf false umgestellt hatte konnte man die Ovale anklicken und bearbeiten.
Aber jetzt ist alles gut.

vielen Dank

Gruß
Thomas
regrads
Thomas

Post Reply

Return to “QCAD Professional”