Wie schwer ist es eine CAD Anwendung zu entwickeln?



  • Kennt sich jemand mit CAD Software aus?

    Wie aufwendig ist es eigentlich mit einer CAD Bibliothek wie Open CASCADE eine CAD Software zu entwickeln die die nötigsten Funktionen zum Erstellen von Skizzen und Bauteilen besitzt?



  • Kommt drauf an, wie viel das können muss, und wie ausgereift das sein sollte. Aber so Pi mal Daumen, auf jeden Fall sehr schwer 😉

    Bzw., worauf bezieht sich deine Frage? Du willst alleine eine CAD Software entwickeln? Unmöglich. Du hast etwa 100 Entwickler + Tester usw., paar Millionen, um sie paar Jahre zu finanzieren, und willst ein kleines CAD System entwickeln? Denkbar.



  • Wo genau liegen die Herausforderungen bei der Entwicklung von CAD Software?
    Wie gesagt muss kann man auf Open CASCADE zurückgreifen.

    Hier ist ein Beispiel mit Open CASCADE:
    https://www.opencascade.com/doc/occt-7.0.0/overview/html/occt__tutorial.html

    Ganz unten sieht man den kompletten Code für die Erzeugung eines Behälters.

    Man müsste also ein Programm entwickeln dass über eine GUI die entsprechenden Funktionen von Open CASCADE aufruft um ein beliebiges Objekt zu modellieren.

    Ich denke nicht dass es eben mal getan ist. Ich frage mich nur wo die großen Hürden liegen.



  • Ich frage mich nur wo die großen Hürden liegen.

    wie soll man dir die Frage beantworten?

    -weil es trotzdem viel Code ist
    -der muss geschrieben und gewartet werden
    -Open CASCADE macht ja auch nicht alles
    -einfaches GUI oder von allen geliebt?
    ... die List ist so lang wie bei jeder anderen beliebigen Software

    Ganz unten sieht man den kompletten Code für die Erzeugung eines Behälters.

    dann noch 100 weitere von diesen einfachen Features und langsam wird es ein CAD System, nur die GUI fehlt noch komplett - nochmal ein riesen haufen Code

    und,und,und...



  • Verstehe. Gut. Ich werde versuchen es anzugehen und berichte dann wie schwer es wirklich ist bzw. wie schnell ich vorankomme 🤡

    Eventuell lässt sich der Code Umfang durch ein paar unkonventionelle Entscheidungen verringern.



  • AutoDesk Inventor braucht ca. 15-20 GB. Auch wenn es sehr umfangreich ist und viel kann, doch mehrere GB ist echt viel. AutoCad Mechanical ist nicht so umfangreich braucht aber auch mehrere GB. Wenn du so gut wärst um mehrere GB grosse Programme zu schreiben die auch noch funktionieren, würdest du diese Frage nicht stellen :).
    Es gibt doch freie Programme die auch Open Source sind. Schau dir diese an und vergleiche. Vielleicht machst du da mit und lernst was, dann kannst du weiter schauen.
    Mit Suchmaschinen kannst du hoffentlich umgehen.



  • Das Programm braucht keine 15-20GB, das sind doch nur die großen Bibliotheken an "Stuff" die man dazubekommt. Also von fertigen Teilen über Materialien, über etc.

    (aber ja, die Programme sind trotzdem eher groß)

    MfG SideWinder



  • Wenn ich die ganzen Bibliotheken installierte dann würden das >30 GB. Aber du hast schon recht. Man muss auch noch sagen das dieses Programm für professionelle Anwender gedacht ist und der Funktionsumfang dementsprechend ist.
    Als kleinen Tip kann man sich ja FreeCad anschauen, kann noch nicht so viel ist aber kostenlos und Open Source, und hat selbst in diesem Stadium schon >200 MB. Für einen alleine ist das schon eine Ansage.

    PS: Es reicht nicht nur programmieren zu können, man muss etwas Ahnung von dem Thema haben um zu wissen was man wie programmieren muss. Wenn du professioneller werden willst brauchst du auch professionelle Unterstützung.



  • Ich werf einfach mal paar Punkte in den Raum, für die dir Open Cascade (überhaupt) nichts bietet:
    - GUI wurde ja schon genannt, das ist sehr sehr viel Aufwand
    - 3D Darstellung? Freecad basiert auf Open Cascade und benutzt trotzdem Coin3D für die Visualisierung
    - (2D) Constraints? Nicht unwichtig bei einem CAD System. Da gibts viele Ansätze und Untersuchungen, auch abseits der etablierten CAD Systeme. Das ist nicht so einfach umzusetzen.
    - Nochmal GUI... Mal abgesehen von "einfacherer" GUI, die man z.B. mit Qt schreiben könnte, brauchst du etwas, um den 2D Sketcher zu bedienen, und vermutlich auch Bedienelemente in der 3D Ansicht. Wir haben sowas ähnliches in der Arbeit, das allein sind Mannjahre.
    - Einheiten, Formeln, Beziehungen zwischen Elementen...
    - Undo/Redo? Die Verwaltung der Beziehungen bedeutet hier viel Aufwand und da muss man einiges bedenken. Und je mehr Features usw., desto mehr Aufwand und desto mehr musst du bedenken.
    - Willst du Baugruppen unterstützen? Wahrscheinlich nochmal ähnlich viel Aufwand wie für den Rest.
    - Irgendwelche "Spezialfunktionen" wie Bleche?
    - tausende andere Sachen, die mir spontan nicht einfallen.

    Und wieso glaubst du, dass Open Cascade gut genug wäre? Wir hatten das in der Arbeit auch mal evaluiert, das hatte Probleme ohne Ende und wir haben dann Parasolid lizenziert. Was auch schon genügend Bugs hat, ist aber trotzdem ein anderes Kaliber.



  • p.s. Und damit das ganze sich in eine halbwegs sinnvolle Richtung entwickeln kann, muss die Architektur der Software stimmen. Und dafür brauchst du schon viel Erfahrung und Verständnis von dem, was rauskommen wird. Sonst wirst du schon mitten in der Entwicklung gegen die Wand fahren und alles umbauen wollen. Und wenn du das durchziehst und alles umbaust, wirst du wenig später trotzdem wieder alles umbauen wollen. Weil irgendeine neue Anforderung oder ein Detail, das dir nicht klar war dann bedeutet, dass nichts mehr zusammenpasst. Es ist fast unmöglich, so ein Projekt von vornherein zu planen, vor allem wenn man nicht schon Jahre Erfahrung in genau dem Bereich hat.



  • @Mechanics

    Welche Probleme hattet ihr mit Open CASCADE?

    Ich werde nicht drauf los programmieren und mir Gedanken über die Architektur machen. Ich möchte es möglichst modular gestalten so dass Modelierkern, GUI und die gebotene Funktionalität dazwischen relativ einfach austauschbar bleiben.



  • Das kann ich dir nicht 100% genau beantworten (und es ist auch schon Jahre her). Wir haben jedenfalls sehr viele Testdaten, teilweise ziemlich komplexe. Und die Ergebnisse waren eben nicht 100% zufriedenstellend, bei komplexeren Modellen gabs eben Berechnungsfehler und Ungenauigkeiten.
    Ich will das nicht schlechtreden, die Bibliothek ist schon sehr gut. Aber wenn du an ein richtiges CAD denkst, kannst du dir eben ganz sicher sein, dass es gut genug ist? Das ist ebenfalls eine entsprechende Hürde. Und je nachdem, wie und für was das benutzt wird (das mag durchaus auch eine große Rolle spielen, wir hatten eben schon sehr viele Workflows/Daten/Anforderungen), ist es eben auch nicht 100% zuverlässig. Das mag in 99,9% der Fälle egal sein, aber stell dir mal hypothetisch vor, du würdest dich mit deinem CAD auf dem Markt etablieren. Dann würden die 0.1% dazu führen, dass sich bei dir lauter Kunden über kaputte Modelle beschweren, und dann hättest du auf ein mal massiv Probleme mit einer Basisbibliothek, auf die du dich einfach verlassen hast.
    Was übrigens "normal" ist. ALLE Bibliotheken sind verbuggt, Parasolid wie gesagt auch. Wir benutzen z.B. auch Qt für die GUI und haben da intern auch schon sehr viel umgebaut, das ist wahrscheinlich noch um Größenordnungen verbuggter, als OpenCascade.



  • Welche Software kann 100% zufriedenstellende Ergebnisse liefern? Wie du selbst sagst gibt es in jeder Software Fehler.

    Eine Fehlerrate von nur 0,1% wäre doch ein Traum und stellt kein Grund da die Software nicht kommerziell zu betreiben.

    Ich will jetzt nicht das nächste AutoCAD oder Inventor entwickeln. Mir ist bewusst dass das ein "bisschen" zu viel ist. Ich denke da eher an ein solides CAD Programm das sauber aufgebaut ist und Grundfunktionalitäten beinhaltet. Das ist Herausforderung genug. Ich denke man kann viel dabei lernen. Vor allem will ich einen Eindruck davon gewinnen wie umfangreich es wirklich ist. Wobei ich nicht vor habe alles in C++ zu entwickeln.
    Für Open Cascade gibt es auch eine Python Anbindung. Ich habe noch ein paar Ideen wie ich den Code Umfang grundsätzlich minimieren bzw. vereinfachen kann.
    So bin ich überhaupt auf die Idee gekommen.

    Ich habe also nicht vor die Arbeit eines 50 Mann starken Entwicklerteams nachzuahmen, sondern durch moderne und kreative Ansätze schneller zum Ziel zu kommen.

    Ich glaube viele Unternehmen sind nur eingeschränkt dazu in der Lage. Da sie bereits seit vielen Jahren auf eine Software aufgebaut haben. Angefangen mit Konzepten und Bibliotheken die heute nicht unbedingt als die modernste und einfachste Lösung gilt.
    Die reife der Software, der feste Kundenstamm und das große Entwicklerteam gewährleisten trotzdem die Konkurrenzfähigkeit gegenüber Neuentwicklungen.

    Wobei ich die Auswahl von Open Cascade aber kaum als moderne Neuentwicklung bezeichnen kann.
    In meinen bisherigen Überlegungen ist es das älteste Stück Software.



  • Ich habe also nicht vor die Arbeit eines 50 Mann starken Entwicklerteams nachzuahmen, sondern durch moderne und kreative Ansätze schneller zum Ziel zu kommen.

    das versuchen doch alle 🙂



  • CADUser123 schrieb:

    Ich denke da eher an ein solides CAD Programm das sauber aufgebaut ist und Grundfunktionalitäten beinhaltet.

    Wer soll das kaufen?

    Planst du es kommerziell zu vertreiben und davon zu leben oder ist es für dich ein reines Spaßprojekt bzw. Vorzeigeprojekt für die nächste Bewerbung?

    Falls ersteres zutreffen sollte, bedenke, es gibt schon dutzende CAD Programme für kleines Geld jenseits von den Großen wie AutoCAD und Co.
    Erstere haben auch nur ein kleines Entwicklerteam, aber sie haben mindestens 20 Jahre Vorsprung und entspreched Umfangreich sind diese kleinen CAD Programme für kleines Geld schon. Dazu noch FreeCAD, das völlig kostenlos ist.

    Wer soll dein CAD Programm also kaufen?
    Kannst du davon leben, wenn du es für 20 € pro Lizenz verkaufst?
    Kannst du basierend auf so einem Finanzierungsmodell die Firma mindestens 15 Jahre halten, so dass du bezüglich der Features aufholen kannst und später dein Produkt teurer für z.B. 400 € verkaufen kannst und dann nach weiteren 10 Jahren Entwicklung dann vielleicht mal für > 1500 €?

    Ich sag es daher mal so.
    Von du vom Start an ein neues Projekt stemmen willst, dann ist es sinnvoller ein großes Kapital hinter dir zu haben.
    Damit kannst du 20-50 Entwickler die ersten 2 Jahre bezahlen und im 2. Jahr ist dann deine Software halbwegs ordentlich um die Lizenzen zu Preisen, die eine Firma finanziell tragen können, zu verkaufen.

    Falls du es aber als reines Spaßprojekt machst, dann wäre es sinnvoller, wenn du einfach bei FreeCAD einsteigst.



  • CADUser123 schrieb:

    Ich denke da eher an ein solides CAD Programm das sauber aufgebaut ist und Grundfunktionalitäten beinhaltet. Das ist Herausforderung genug. Ich denke man kann viel dabei lernen.

    Ja. Als Hobby Projekt finde ich das auf jeden Fall sehr interessant und würds dir auch empfehlen. Und ich würde nicht unbedingt dazu raten, bei Free Cad einzusteigen. Da ist schon zu viel da, es ist nicht unbedingt gut aufgebaut (zumindest gefällts mir nicht), und du kannst da nicht mehr viel ändern/beitragen. Also, wenn du was lernen und Spass haben willst, würd ich dir eher empfehlen, was eigenes anzufangen.

    Ob Python eine gute Idee ist, weiß ich nicht. Das ist einer der Gründe, warum mir FreeCad nicht gefällt. Ich halte das für nicht wartbar. Ich würd nie ein größeres Projekt mit so einer Sprache anfangen. Und alles scriptbar zu machen und zu mischen, wie bei FreeCad, ist viel mehr Aufwand und auch nicht top-wartbar.



  • @Mechanics

    Und ich würde nicht unbedingt dazu raten, bei Free Cad einzusteigen. Da ist schon zu viel da, es ist nicht unbedingt gut aufgebaut (zumindest gefällts mir nicht), und du kannst da nicht mehr viel ändern/beitragen.

    Ich verfolge die Entwicklung von FreeCAD ein wenig mit. Aber mehr aus der Seite des Anwenders. Ich tue mich generell schwer damit mich in solche ausgewachsenen Projekte einzuarbeiten.

    Ob Python eine gute Idee ist, weiß ich nicht. Das ist einer der Gründe, warum mir FreeCad nicht gefällt. Ich halte das für nicht wartbar. Ich würd nie ein größeres Projekt mit so einer Sprache anfangen. Und alles scriptbar zu machen und zu mischen, wie bei FreeCad, ist viel mehr Aufwand und auch nicht top-wartbar.

    Kannst du das etwas näher erläutern? Die Einbindung einer Scriptsprache in großen
    Programmen ist eigentlich eine produktive Idee. Funktionen lassen sich mit einer Scriptsprache mit weniger Code realisieren. Alles wild zu mischen ist sicher keine gute Idee. Aber wenn man ein in C++ entwickelten Geometriekern hat, was spricht dagegen sämtliche Funktionalität für die Modellierung von Objekten mit einer Scriptsprache zu realisieren?

    Bei Open Cascade ist es ja sogar so dass es eine Bibliothek für die Nutzung von Python gibt. Ich muss diese Anbindung also nicht erst selbst entwickeln.
    http://www.pythonocc.org/

    In FreeCAD nutzen sie glaube ich nicht die pythonocc Bibiliothek sondern einen selbst geschrieben Wrapper der nur einen Bruchteil der Funktionen von Open Cascade ansprechen kann.

    @computertrolls

    Planst du es kommerziell zu vertreiben und davon zu leben oder ist es für dich ein reines Spaßprojekt bzw. Vorzeigeprojekt für die nächste Bewerbung?

    Ein persönliches Forschungsprojekt 🙂

    Erstere haben auch nur ein kleines Entwicklerteam, aber sie haben mindestens 20 Jahre Vorsprung und entspreched Umfangreich sind diese kleinen CAD Programme für kleines Geld schon. Dazu noch FreeCAD, das völlig kostenlos ist.

    Ich finde man sollte sich von solchen Betrachtungen nicht abschrecken lassen. 20 Jahre Entwicklung klingt heftig. Aber betrachte es doch mal genauer. Wurde denn 20 Jahre lang massiv neuer Code generiert? Oder hat man alle Fehlentscheidungen im Design umgebaut oder hat man weil es funktioniert und sich gut verkauft weiter darauf aufebaut? Wurde der Code jeden Tag größer oder ist mit der Zeit durch Veränderungen auch viel Code verschwunden?

    20 Jahre Entwicklung kann vieles bedeuten. Ich glaube nicht dass man bei einer Neuentwicklung genau so lange braucht.
    Das ist so als würde man sagen, der Westen hat in 100 Jahren den Zustand x erreicht und jetzt müssen die Chinesen und Japaner genau so lange denken und entwickeln bis sie den selben Zustand erreichen.
    Die Realität sieht anders aus. Neuentwicklungen profitieren von bereits vorhandener Erfahrung, Wissen und neuen Methoden der Gegenwart.

    C++ ist moderner und mächtiger als vor 20 Jahren. Es gibt mehr und bessere Bibliotheken und Werkzeuge für die Entwicklung von Software. Die Literatur bietet mehr Wissen und Erfahrung als vor 20 Jahren usw. usf.



  • CADUser123 schrieb:

    Kannst du das etwas näher erläutern? Die Einbindung einer Scriptsprache in großen
    Programmen ist eigentlich eine produktive Idee. Funktionen lassen sich mit einer Scriptsprache mit weniger Code realisieren.

    Das ist schon richtig. Aber bei Free Cad ist die Scriptsprache nicht einfach nur eingebunden, sondern viele grundlegende interne Module sind in Python geschrieben, was ich für völlig unnötig halte. Da werden erstmal irgendwelche internen Datenstrukturen usw. definiert, dann gibts Python Wrapper dafür, und dann werden sie erst in Python zu etwas sinnvollem verbunden. Mir gefällt das einfach nicht. Ich halte das zwar immer noch für wartbarer, als alles in Python zu schreiben, aber ich hätt halt den kompletten "Kern" (also alles, GUI, Workflows usw.) in C++ geschrieben. So versteht man nicht alles, wenn man sich den Python Code anschaut, versteht aber auch nicht alles, wenn man sich den C++ Code anschaut, weil da hauptsächlich lose Bausteine sind. Und einer der Gründe, warum ich mir das angeschaut habe war, dass ich mich nach einem Projekt umgeschaut habe, bei dem ich privat mitmachen könnte. Und ich wollte C++ programmieren und nicht Python.

    CADUser123 schrieb:

    Aber wenn man ein in C++ entwickelten Geometriekern hat, was spricht dagegen sämtliche Funktionalität für die Modellierung von Objekten mit einer Scriptsprache zu realisieren?

    Weil du den Rest massiv unterschätzt. Wir haben in der Arbeit auch einen eigenen Geometriekern (wir schreiben kein CAD System, einige unserer Tools gehen aber so ein bisschen in die Richtung). Wir haben insgesamt 6 Mio Zeilen Code und der Geometriekern (natürlich nicht so umfangreich wie Open Cascade) ist ein winziger Bruchteil davon. Zwar recht komplex, aber auch keine Hexenkunst, wir haben auch komplexere Teile.
    Allein ein sinnvolles Datenmodell für ein CAD zu modellieren ist sehr schwierig (wie gesagt, z.B. Sketches, Abhängigkeiten, Redo/Undo, Baugruppen, Regeln, Constraints usw.). Wenn das mal ausgereift ist, kommt vermutlich eine komplexe, riesige Klassenhierarchie raus. Und das in einer Scriptsprache im Griff behalten zu wollen, ist völlig kontraproduktiv. Grad das würde ich auf jeden Fall in C++ schreiben. Und mal davon abgesehen wirst du auch abgesehen vom Geometriekern viele Teile haben, die performant sein sollten, und z.B. Python ist eine der langsamsten Sprachen überhaupt.

    CADUser123 schrieb:

    Ich finde man sollte sich von solchen Betrachtungen nicht abschrecken lassen. 20 Jahre Entwicklung klingt heftig. Aber betrachte es doch mal genauer.

    Auch das unterschätzt du massiv. Die kleinen CAD Hersteller haben sicher auch nicht weniger als 20 Entwickler, außerdem Tester, Support usw. Wir haben so 20-30 Entwickler (in unserer Abteilung, nicht insgesamt), wir entwickeln die Software seit über 20 Jahren, und wir versuchen mit den Großen mitzuhalten, die hunderte oder tausende Entwickler haben. Und wir haben auch Tester, Support, Consulting usw... Das ist nochmal eine andere Größenordnung, als sowas allein aufziehen zu wollen.
    Es ist heutzutage tatsächlich viel einfacher, Software zu entwickeln, als früher. Allerdings ist auch die Erwartungshaltung an die Sofware eine ganz andere. Wenn dein Programm aussieht wie AutoCad vor 20 Jahren, wird es keiner haben wollen.
    Und wenn du drüber nachdenkst, mit irgendjemandem mithalten zu wollen, der schon länger aus dem Markt ist, musst du bedenken, wie viele kleine und große Probleme die schon gelöst haben, über die du erst stolpern wirst. Wenn du hunderte Kunden hast, wirst du sehr viele Probleme untersuchen und fixen müssen, die du selber nie festgestellt hättest. Den meisten Aufwand macht bei uns nicht die Größe der Software aus, sondern das untersuchen irgendwelcher Probleme, für die wir oft nichts können. z.B. verbuggter Netzwerkcode in der Qt, der überhaupt nicht zu unserer Kernfunktionalität gehört, und der dann bei irgendwelchen Kunden mit seltsamen Proxykonfigurationen nicht funktioniert. Oder irgendwelche verbuggten Grafiktreiber, die ganz selten zu Crashes führen, die wir ewig untersuchen und für die wir dann bei uns irgendwelche Workarounds einbauen.
    Also, selbst wenn du irgendwas hinbekommen solltest, was halbwegs nach einem modernen Programm aussiehst, und das bei dir halbwegs funktioniert, wird es bei den meisten deiner potentieller Kunden nicht funktionieren, und du wirst 10 Mann im Support und 20 Entwickler brauchen 😉

    Aber nochmal, ich wills dir nicht ausreden, ich halte das auf jeden Fall für ein interessantes Hobbyprojekt 😉



  • CADUser123 schrieb:

    Die Realität sieht anders aus. Neuentwicklungen profitieren von bereits vorhandener Erfahrung, Wissen und neuen Methoden der Gegenwart.

    Ja, aber hast du diese Erfahrung?

    Wer das gleiche Programm noch einmal von vorne schreibt, der hat sie, aber jemand der quer einsteigt muss diese noch längst nicht haben.
    Klar, du kannst C++ >= 11 nehmen, profitierst von moderneren Tools, modernen GPU Schnittstellen und Wissen, aber damit hat du noch nicht die Erfahrung die einem sagt, wie man richtig vorgeht.



  • Ich schaue nach Literatur die mir vor und während der Entwicklung helfen könnten. Habt ihr vielleicht ein paar Empfehlungen für den Bereich CAD, Geometrie Mathematik und 3D Programmierung?

    Es gibt ein Buch von Nikolay Golovanov dem Mitgründer von ASCON die den Geometriekern C3D entwickeln.

    Geometric Modeling: The mathematics of shapes
    ISBN 978-1497473195

    Diese Bücher könnten auch hilfreich sein:

    Lehrbuch der Grafikprogrammierung: Grundlagen, Programmierung, Anwendung
    ISBN 978-3827410283

    Computergrafik für Ingenieure: Eine anwendungsorientierte Einführung
    ISBN 978-3642238420

    Computergrafik: Ein anwendungsorientiertes Lehrbuch
    ISBN 978-3446404342

    Geometrie: Anwendungsbezogene Grundlagen und Beispiele für Ingenieure
    ISBN 978-3446441439

    Design Patterns: Elements Of Reusable Object-Oriented Software
    ISBN 978-9332555402

    Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14
    ISBN 978-1491903995

    @Mechanics

    Ok ich nehme die mahnenden Worte zur Kenntnis und werde schauen wie ich damit umgehe sobald ich damit konfrontiert bin. Ich rechne damit dass ich bei einer überlegten Vorgehensweise nicht sehr viel damit zu kämpfen haben werde.
    Ich will ehrlich gesagt auch keine alte Hardware oder Betriebssysteme unterstützen. Schon gar nicht veraltete Grafiktreiber.
    Ich wähle ein modernes Hardware und Software Umfeld und darin will ich entwickeln und das Programm testen. Später kann ich die Systemvoraussetzungen angeben. Wer sie nicht erfüllt soll nicht meckern.
    Auch will ich gar nicht das es in 100% der Anwendungsfälle funktioniert. Mit 99% wäre ich auch zufrieden.
    Aber lasst mich erstmal den Anfang finden, bevor es ums Vermarkung und Support geht 😃


Anmelden zum Antworten