Projekt Ingenieurberechnung. Brauche euren Rat!



  • Hallo C++er,

    zu einem in Kürze zu realsierenden Projekt brauche ich dringend ein paar Tipps, denn die Realisierbarkeit ansich steht nicht in Frage, wohl aber die zusätzlichen Tools/Bibliotheken, die neben "reinem" C++ noch benötigt werden. Ich will (wohl eher muss!) die Weichen gleich richtig stellen.

    Ausgangslage:

    Ein Programm zum Auslegen/Berechnen eines technischen Produkts wird für mehrere Anwndergruppen benötigt:

    1. Entwicklerteam: volle Funktionalität
    2. Vertrieb vor Ort: eingeschränkte Funktionalität
    3. Vertrieb weltwet bzw. Kunden: stark eingeschränkte Funktionalität

    Eingeschränkt bedeutet, dass dem Vertriebsmitarbeiter keine Optionen bei der Auslegung gegeben werden, weil deren Ergebnis nur ein Ingenieur beurteilen kann. Auch der Zugriff auf die zugrundeliegende Datenbank (z. B. mit Abmessungen aus technischen Zeichnungen etc.) ist dem Vertrieb nicht zugänglich.

    Zu der Auslegung gehört zum einen, dass Kurven grafisch dargestellt werden müssen und zum anderen auch als pdf zusammen mit Datenblättern generiert werden müssen, um sie einem Kunden zur Verfügung zu stellen.

    Bisherige Überlegungen:

    Es wird ein Windowsprogramm das ist Konzernvorgabe.

    Den Rechenkern würde ich gerne zunächst als Kommandozeilenprogramm implementieren und testen. Die Daten Ein- und Ausgabe würde ich über Textdateien realisieren. (Wie ich die Textdatein am besten aufbaue, ist dann auch noch die Frage, um bei mehreren 1000 Datensätzen einen schnellen Zugriff zu ermöglichen).

    Der Vertrieb wird niemals von Kommandozeile aus arbeiten, also ist meine Überlegung, den Rechenkern in Qt einzubinden. Da kommt nun der Knackpunkt: Wie zeichne ich Kurven und wie generiere ich am besten pdf-Dateien?

    Ich habe verschiedene Methoden angedacht, die mich alle nicht vollends zufrieden stellen, weil auf den Rechnern der Vertriebsleute dann auch entsprechende Zusatzsoftware installiert werden müsste.

    1. LaTex-Ausgabe: Sieht super aus und ist leicht zu realisieren. Wäre meine Lösung, wenn ich das nur für mich machen würde 🤡.
    2. SVG generieren und mittels Inkscape in pdf konvertieren (Inkscape auf jeden Vertriebsrechnet 😞 ). Wie plotte ich dann Kurven? Gnuplot kann SVG generieren, also Gnuplot auch noch auf jeden Rechner :(.
    3. Cairo-PDF. Klingt gut, aber wie plotte ich da??? Muss ich mir selber Routinen schreiben, um Graphen zu skalieren etc.??? Wer hat nen Tipp?
    4. Datenblatt und Kurven in Qt generieren und dann "ganz normal" drucken in pdf. Was haltet ihr davon? (Ich muss dazu sagen, dass ohnehin in Qt in Echtzeit Kurven geplottet werden müssen, denn nicht für jeden Auslegungsversuch wird ein pdf erstellt!)
    5. Dein Vorschlag!

    So, damit nicht genug...letztes Problem: Datensicherheit! Wenn die Eingangsdaten als Textdatei vorliegen, kann sie jeder lesen. Dass muss ich verhindern. Habt ihr dazu eine Idee? Das Programm müsste sowohl mit den unverschlüsselten Daten umgehen können (für die Entwicklungsabteilung) und eben auch mit wie auch immer verschlüsselten Daten, die der Vetrieb bekommt. Gibt´s da fertige Bibliotheken?

    Puuuhh...soweit erstmal, ich hoffe, ich bin einigermaßen eindeutig ;-).

    Vielen Dank für eure Hilfe!



  • GUI: Wie Du schon sagtest, QT ist eine gute Wahl.
    Rechenkern: Mach einach eine .dll draus. Die kann dynamisch geladen werden.
    PDF: QT unterstützt seit 4.1 das SVG-Format auf dem Du rendern kannst und auch pdf. http://www.golem.de/0512/42300.html
    Sicherheit: Als Bibliothek gibts da CryptoPP, aber 100% Sicherheit gibts nicht. http://www.cryptopp.com/

    Aber wieso Daten Ein- und Ausgabe über .txt Dateien? Du kannst doch direkt mit der .dll kommunizieren über eine API die diese zur Verfügung stellen kann?
    Wenn Du es verstecken willst, dann exportier nur eine Funktion die eine Factory zurückgibt, über die die Klassen erzeugt werden. Dann kann man ohne die zugehörigen Header kaum was damit anfangen, bzw es erfordert erhebliches Reverse Engineering um das zu machen.
    Kurzes Beispiel für so ein Pattern:

    #ifdef BUILD_ING_PROG
    #define MY_EXPORT __declspec(dllexport)
    #else
    #define MY_EXPORT __declspec(dllimport)
    #endif
    
    // Definition die als Header fungiert für das Clientprogramm
    class MyFooBar
    {
    public:
        virtual void bar() = 0;
    };
    
    // Implementation, bleibt versteckt, wird nur gelinkt.
    class MyFoobarImpl : public MyFooBar
    {
       virtual void bar()
       {  
          // Do something
       }
    };
    
    class MyFactory
    {
    public:
        MyFooBar* createFoobar() { return new MyFooBarImpl; }
    };
    
    // Factory-Funktion die exportiert wird:
    
    MyFactory* g_factory = NULL;
    
    extern "C"
    MY_EXPORT MyFactory* getFactory()
    {
         if ( g_factory == NULL ) 
            g_factory = new MyFactory();
         return g_factory;
    }
    

    Das is jetzt nur fix reingehämmert, aber ich denke Du verstehst die Idee. Natürlich müssen Objekte die mit der Factory erzeugt werden auch wieder gelöscht werden. Anzumerken ist, dass sämtliche Klassen in der Basis als pure virtual vorliegen müssen, damit keine Abhängigkeiten vorhanden sind die gelöst werden müssen von seitens des Linkers.
    rya.



  • Danke schonmal. Hat noch jemand eine Idee, wie ich am besten Kurven plotte (in Qt)?

    Wenn ich SVG-Unterstützung habe, ist das ja ganz nett, aber jede Kurvenskalierung und Achsenbeschriftung etc. selbst zu programmieren, scheint mir doch ein wenig ineffizient. Gibt´s da nicht was geeignetes?



  • Was möchtest du denn eigentlich für Kurven zeichnen? Soll das so etwas sein
    http://gnuplot.sourceforge.net/demo_4.2/simple.html, oder vielleicht eher so etwas: http://gnuplot.sourceforge.net/demo_4.2/surface2.html?
    Ersteres, also 2D-Kurven, bekommt man auch sehr schnell selber hin.
    Den PDF-Creator bekommt man hier kostenlos: http://sourceforge.net/projects/pdfcreator/files/PDFCreator/PDFCreator%201.0.2/PDFCreator-1_0_2_setup.exe/download.
    Du könntest also eine ganz normale Druckfunktion schreiben und Text sowie Bitmaps in den Drucker-Kontext rendern. Ob die Ausgabe in eine PDF-Datei geht oder wirklich zu Papier gebracht wird, ist doch erstmal egal.



  • Kurven? schrieb:

    Was möchtest du denn eigentlich für Kurven zeichnen? Soll das so etwas sein
    http://gnuplot.sourceforge.net/demo_4.2/simple.html, oder vielleicht eher so etwas: http://gnuplot.sourceforge.net/demo_4.2/surface2.html?
    Ersteres, also 2D-Kurven, bekommt man auch sehr schnell selber hin.
    Den PDF-Creator bekommt man hier kostenlos: http://sourceforge.net/projects/pdfcreator/files/PDFCreator/PDFCreator%201.0.2/PDFCreator-1_0_2_setup.exe/download.
    Du könntest also eine ganz normale Druckfunktion schreiben und Text sowie Bitmaps in den Drucker-Kontext rendern. Ob die Ausgabe in eine PDF-Datei geht oder wirklich zu Papier gebracht wird, ist doch erstmal egal.

    Naja den PDF Creator braucht er ja nicht, is doch alles in QT drin.... er muss es sich halt nur mal anschauen und auch ausprobieren.
    rya.



  • Ich wollte damit auch nur sagen, dass man für solche Aufgaben noch nicht einmal QT braucht.



  • Ersteres, also einfache 2D-Kurven, das hätte ich dazu sagen sollen. Ich seh eben nur die Schwierigkeit, falls ich alles selbst entwickeln muss und noch keine vorgefertigten Kooardinatensysteme, Beschriftungen usw. vorhanden sind.

    Qt brauche ich schon, denn die Anwenderfreundlichkeit muss sowieso durch Qt gewährleistet werden!



  • KeineAhnung78 schrieb:

    Ersteres, also einfache 2D-Kurven, das hätte ich dazu sagen sollen. Ich seh eben nur die Schwierigkeit, falls ich alles selbst entwickeln muss und noch keine vorgefertigten Kooardinatensysteme, Beschriftungen usw. vorhanden sind.

    Qt brauche ich schon, denn die Anwenderfreundlichkeit muss sowieso durch Qt gewährleistet werden!

    QT kann Dir nur ein Framework liefern. Damit das Programm auch Anwenderfreundlich gestaltet wird, liegt nur an Dir.
    Mach doch einfach mal nen groben Prototypen mit rudimentären Funktionen, dann siehst doch wie das alles aussehen kann/muss.
    rya.



  • Du solltest dir einmal grundsätzliche Gedanken über das Programm machen. Nur auf QT zu setzen und dadurch Qualität erwarten, geht leider nicht.
    1. Wie groß sind die einzelnen Grafiken, wie lang ist jeweils ungefähr der Text ?
    2. Soll es eine MDI-Anwendung werden?
    3. Muss es unbedingt PDF sein? Man kann auch gut eine HTML-Seite erstellen, die die Grafiken einbettet.
    4. Wieso ist es schwierig, ein Bitmap entsprechender Größe zu erstellen, ein Koordinatensystem zu zeichnen und anschließend die Kurve einzufügen (reicht hier nicht vielleicht gdiplus)?
    Nur so ein paar Gedanken...



  • Um Kurven zu plotten benutze ich qwt.



  • Schau dir doch mal qwt an:
    http://qwt.sourceforge.net/



  • Kurven? schrieb:

    Du solltest dir einmal grundsätzliche Gedanken über das Programm machen. Nur auf QT zu setzen und dadurch Qualität erwarten, geht leider nicht.
    1. Wie groß sind die einzelnen Grafiken, wie lang ist jeweils ungefähr der Text ?
    2. Soll es eine MDI-Anwendung werden?
    3. Muss es unbedingt PDF sein? Man kann auch gut eine HTML-Seite erstellen, die die Grafiken einbettet.
    4. Wieso ist es schwierig, ein Bitmap entsprechender Größe zu erstellen, ein Koordinatensystem zu zeichnen und anschließend die Kurve einzufügen (reicht hier nicht vielleicht gdiplus)?
    Nur so ein paar Gedanken...

    zu 1) Es sind vielleicht 4 Koordinatensysteme mit jeweils 2 Kurven. Dazu werden Datenblätter ausgegeben mit vielleicht 100 Werten in zweispaltigem Layout.

    zu 2) Nein, ein Dialog mit ein paar Tabs könnte reichen.

    zu 3) ja, Konzernvorgabe

    zu 4) Bitmap soll es nicht sein, sondern skalierbare (vektorielle) Kurven. Ich find es schon aufwändig, so etwas selbst zu zeichnen Ich muss die Achsen zeichnen und beschriften, dann die Ticks, diese richtig beschriften mit unterschiedlichen Wertebereichen, und dann muss die gesamte Grafik skalierbar sein und dynamisch! D. h. wird ein Parameter verändert (z. B. an einer Checkbox o. ä.) muss sofort die neue Kurve erscheinen. Statisch wird das ganze erst in dem Moment, wenn man die Rechnung für richtig befindet und das pdf für den Kunden erstellt.



  • l'abra d'or schrieb:

    Schau dir doch mal qwt an:
    http://qwt.sourceforge.net/

    Danke, hab ich mir schonmal angesehen. Fand´s ein bisschen bieder, nehme ich aber auf jeden Fall als Alternative wahr!



  • KeineAhnung78 schrieb:

    l'abra d'or schrieb:

    Schau dir doch mal qwt an:
    http://qwt.sourceforge.net/

    Danke, hab ich mir schonmal angesehen. Fand´s ein bisschen bieder, nehme ich aber auf jeden Fall als Alternative wahr!

    Ich hab vor Jahren qwt genutzt, um 2D-Plots zu realisieren (Echtzeitvisualisierung). Hat funktioniert. Ist schon scheisse dass Qt nichts integriertes hat.

    Wenn du auf Qt setzt brauchst du auch eine entsprechende Lizenz, das sollte dir klar sein. Und Qt hat echt auch so seine Macken. Ein Loggingfenster zu realisieren, dass viele Zeilen Text pro Sekunde ausgeben soll, war zumindest vor ein paar Jahren nur mit Hacks möglich.

    Na ja 😃



  • langistsher schrieb:

    KeineAhnung78 schrieb:

    l'abra d'or schrieb:

    Schau dir doch mal qwt an:
    http://qwt.sourceforge.net/

    Danke, hab ich mir schonmal angesehen. Fand´s ein bisschen bieder, nehme ich aber auf jeden Fall als Alternative wahr!

    Ich hab vor Jahren qwt genutzt, um 2D-Plots zu realisieren (Echtzeitvisualisierung). Hat funktioniert. Ist schon scheisse dass Qt nichts integriertes hat.

    Wenn du auf Qt setzt brauchst du auch eine entsprechende Lizenz, das sollte dir klar sein. Und Qt hat echt auch so seine Macken. Ein Loggingfenster zu realisieren, dass viele Zeilen Text pro Sekunde ausgeben soll, war zumindest vor ein paar Jahren nur mit Hacks möglich.

    Na ja 😃

    Die Lizenz LGPL liegt jedem QT Download kostenlos bei.
    rya.



  • Scorcher24 schrieb:

    Die Lizenz LGPL liegt jedem QT Download kostenlos bei.

    Dafür müsste KeineAhnung78 aber dynamisch linken oder Open-Source entwickeln.



  • Nexus schrieb:

    Scorcher24 schrieb:

    Die Lizenz LGPL liegt jedem QT Download kostenlos bei.

    Dafür müsste KeineAhnung78 aber dynamisch linken oder Open-Source entwickeln.

    Wo liegt das Problem?



  • Nexus schrieb:

    Scorcher24 schrieb:

    Die Lizenz LGPL liegt jedem QT Download kostenlos bei.

    Dafür müsste KeineAhnung78 aber dynamisch linken oder Open-Source entwickeln.

    Was ist das Problem dynamisch zu linken? oO
    Warum haben hier alle ne .dll phobie? 😃
    rya.



  • Es hat doch niemand von einem Problem gesprochen.

    Ich meinte das mehr als Anmerkung.


Anmelden zum Antworten