Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Ein bischen CAD-Anzeige (aka WMF in FMX benutzen) (https://www.delphipraxis.net/203950-ein-bischen-cad-anzeige-aka-wmf-fmx-benutzen.html)

Rainer Wolff 9. Apr 2020 10:52

Ein bischen CAD-Anzeige (aka WMF in FMX benutzen)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

jetzt hole ich hier mal noch ein bischen weiter aus und beschreibe, um was es mir eigentlich geht:

In meinen Anwendungen habe ich oftmals einen Editor, mit dem ich einen CAD-ähnlich Daten zusammenbaue. Ich habe ein Blech, in das mit verschiedenen Werkzeugen Ausschnitte gestanzt oder geprägt werden. Der Editor legt fest, wie groß das Teil werden soll, und an welchen X/Y-Positionen welche Ausschnitte gestanzt werden. Die Ausschnitte sind mal einfache Rundlöcher oder Vierecke, aber auch verschiedenste Konturen.
Die Werkzeugdaten für diese Ausschnitte liegen meist als DXF vor. Diese lese ich in Coreldraw ein und exportiere daraus WMF.

Das ganze bastle ich dann zusammen mit einem Koordinatenkreuz und einem Viereck für meine Blechplatine masstabsgerecht in eine Paintbox. Die Werkzeugdimensionen kann ich ja einfach über MMWidth/Height aus dem WMF entnehmen. Das lässt sich dann bei mir auch mehr oder weniger gut zoomen und der Ausschnitt verschieben.

Jetzt würde ich das ganze gerne etwas aufmöbeln, ohne dabei das Rad neu zu erfinden. Die Objekte in der Grafikanzeige zu selektieren wäre schön, das zoomen und verschieben läuft nicht so rund...

Die ganzen Grafik-Engines, die mir über den Weg gelaufen sind, gehen mehr in Richtung Spieleprogrammierung und benötigen erst mal ein ausgiebiges Handbuchstudium, soweit ich das bisher angerissen habe. Klar wäre so eine 3D-Darstellung auch hübsch, aber womit. GLScene habe ich kurz angeschaut, die 3D-Platine mit Loch-Demo ist zwar ganz nett und ähnelt schon meiner Anwendung, aber als ich das Loch aus der Mitte verschoben habe, war es auf Vorder- und Rückseite schon verkehrt, also wenn die Demo schon Reparaturversuche braucht, ich weiss nicht...

FMX bietet ja im Grunde schon Skalierung und Rotation von Haus aus, die Frage ist, wie bekomme ich hier meine Werkzeugkonturen hinein. Darauf hat meine Frage bezüglich WMF und FMX abgezielt.

SVG hatte ich als Grundidee auch schon, TPath soll ja da schon ein bischen was können, eine meiner Konturen konnte ich damit anzeigen, nur das mit dem Nullpunkt war noch nicht so doll. Dann habe ich mal ein anderes Werkzeug nach SVG konvertiert, das kann TPath aber wohl nicht ab:
Code:
<g id="Ebene_x0020_1">
  <metadata id="CorelCorpID_0Corel-Layer"/>
  <polygon class="fil0 str0" points="1.6,309.5 1.6,284.5 -1.6,284.5 -1.6,309.5 "/>
  <polygon class="fil0 str0" points="-8.8,284.5 -5.6,284.5 -5.6,309.5 -8.8,309.5 "/>
  <polygon class="fil0 str0" points="5.6,309.5 5.6,284.5 8.8,284.5 8.8,309.5 "/>
 </g>
Wer hätte dafür also einen genialen Tip für ein Framework, das solche Sachen einfach lösen könnte.

Rollo62 9. Apr 2020 11:26

AW: Ein bischen CAD-Anzeige (aka WMF in FMX benutzen)
 
Ich mache sowas auf Basis der TPath Komponente.
Da muss man sich schon was selber drumrum bauen, ist aber bei einachen Shapes sehr sinnvoll.

TiGü 9. Apr 2020 11:33

AW: Ein bischen CAD-Anzeige (aka WMF in FMX benutzen)
 
Zitat:

Die Werkzeugdaten für diese Ausschnitte liegen meist als DXF vor. Diese lese ich in Coreldraw ein und exportiere daraus WMF.
Ohne mich groß auszukennen, aber wäre eine direkte Verwendung der DXF-Daten nicht sinnvoller?

Mir ist das mal beim Surfen begegnet: https://cadsofttools.de/products/cad-vcl-enterprise/
Ist zwar ursprünglich für VCL und preislich ab einen vierstelligen Eurobeitrag zu haben, aber so eine eigene Mannstunde ist ja auch nicht für umsonst und wenn da ggf. schon viele Probleme gelöst sind, wäre es vielleicht sinnvoll sich damit näher zu beschäftigen.

Rainer Wolff 9. Apr 2020 13:19

AW: Ein bischen CAD-Anzeige (aka WMF in FMX benutzen)
 
Zitat:

Zitat von Rollo62 (Beitrag 1461703)
Ich mache sowas auf Basis der TPath Komponente.
Da muss man sich schon was selber drumrum bauen, ist aber bei einachen Shapes sehr sinnvoll.

Zitat:

Zitat von Delphi-Hilfeseiten
Die Eigenschaft Data unterstützt nur eine durch Komma getrennte Liste von Anweisungen, die für das Attribut d des Elements path in SVG 1.0 definiert sind.

Benutzt du da noch zusätzliche SVG-Komponenten oder liest du die einzelnen Elemente aus der SVG und konvertierst zu d-Path-Elementen?

Rollo62 9. Apr 2020 16:49

AW: Ein bischen CAD-Anzeige (aka WMF in FMX benutzen)
 
Zitat:

Zitat von Rainer Wolff (Beitrag 1461717)
Zitat:

Zitat von Rollo62 (Beitrag 1461703)
Ich mache sowas auf Basis der TPath Komponente.
Da muss man sich schon was selber drumrum bauen, ist aber bei einachen Shapes sehr sinnvoll.

Zitat:

Zitat von Delphi-Hilfeseiten
Die Eigenschaft Data unterstützt nur eine durch Komma getrennte Liste von Anweisungen, die für das Attribut d des Elements path in SVG 1.0 definiert sind.

Benutzt du da noch zusätzliche SVG-Komponenten oder liest du die einzelnen Elemente aus der SVG und konvertierst zu d-Path-Elementen?

Ich benutze das hauptsächlich um einfache SVG Grafiken anzuzeigen.
Dazu habe ich mir einen Exraktor gebaut, der den d="" Pfad aus dem SVG extrahiert.
Die SVG bekomme ich vom Designer oder von Inkscape.

Manchmal muss ich da von Hand noch etwas Korrigieren, das hält sich aber in Grenzen.

Redeemer 9. Apr 2020 21:04

AW: Ein bischen CAD-Anzeige (aka WMF in FMX benutzen)
 
Zitat:

Zitat von Rainer Wolff (Beitrag 1461699)
SVG hatte ich als Grundidee auch schon, TPath soll ja da schon ein bischen was können, eine meiner Konturen konnte ich damit anzeigen, nur das mit dem Nullpunkt war noch nicht so doll.

Was genau meinst du mit Nullpunkt?

Zitat:

Zitat von Rainer Wolff (Beitrag 1461699)
Dann habe ich mal ein anderes Werkzeug nach SVG konvertiert, das kann TPath aber wohl nicht ab:
Code:
<g id="Ebene_x0020_1">
  <metadata id="CorelCorpID_0Corel-Layer"/>
  <polygon class="fil0 str0" points="1.6,309.5 1.6,284.5 -1.6,284.5 -1.6,309.5 "/>
  <polygon class="fil0 str0" points="-8.8,284.5 -5.6,284.5 -5.6,309.5 -8.8,309.5 "/>
  <polygon class="fil0 str0" points="5.6,309.5 5.6,284.5 8.8,284.5 8.8,309.5 "/>
 </g>

Was genau scheitert da denn? Bei einem
Delphi-Quellcode:
<polygon>
-Tag kannst du einfach den Inhalt von
Delphi-Quellcode:
points
nehmen, ein
Delphi-Quellcode:
M
davor setzen und ein
Delphi-Quellcode:
z
ans Ende und dann so tun, als wäre das das
Delphi-Quellcode:
d
-Attribut eines
Delphi-Quellcode:
<path>
-Tags.
Delphi-Quellcode:
  if XML.CurrentTag = 'polygon' then
  begin
    if XML.GetAttribute('points', d) then
    DrawPoly(Context, 'M' + d + 'Z');
  end
Bei Polyline dasselbe nur ohne
Delphi-Quellcode:
z
.
Ich hab mal 2017 einen relativ kompletten SVG-Renderer geschrieben, der SVG Tiny in GDI-Calls umsetzt. Bringt dir also erstmal nichts. Wenn ich mir den im vorherigen Thread verlinkten DP-EN-Thread ansehe, ist mein Path-Dekoder (
Delphi-Quellcode:
DrawPoly
im vorherigen Code-Block) dem von TPath zwar überlegen, aber sehr ähnlich. Fehlende Features könnte man also auch ergänzen. Dein obiger Code ist übrigens nicht SVG Tiny, dessen größter Unterschied zu SVG ist, dass es kein
Delphi-Quellcode:
id
und
Delphi-Quellcode:
class
kennt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz