Concevoir l'architecture de son projet

Création d'une appli de bureau avancée

a marqué ce sujet comme résolu.

Bonjour à tous,

J’envisage de me lancer dans la création d’une application de conception 3D, avec pas mal de fonctionnalités semblables à des logiciels tel que FreeCAD ou bien encore Fusion360 pour les connaisseurs.

Pour résumer rapidement les principales fonctionnalités de cette application seront :

  • Affichage graphique (Qt)
  • Visualiseur 3D (OpenCascade)
  • Gestion des interactions utilisateur avec le visualiseur 3D
  • D’autres choses encore (simulation, animations)

En clair le projet est de créer une application assez complète et qui va donc demander pas mal de travail. Je compte développer cette application en python et n’étant pas développeur de formation, je ne connait pas trop les outils permettant de définir l’architecture de son projet proprement.

En effet de part mon inexpérience dans ce type de projet j’ai peur de me lancer trop tôt à coder et devoir mettre de la rustine à gogo lorsque je me serait rendu compte que mon architecture initiale était mauvaise mais qu’il est trop tard pour faire marche arrière.

Je suis donc à l’écoute de tout outil ou méthode qui pourrait me permettre de m’organiser et de commencer ce projet sur des bases saines.

Merci :)

+0 -0

Salut,

Tu dis que tu n’es pas développeur de formation. Est-ce que ce projet est un projet pour le plaisir ou tu as un besoin à remplir ? Je demande parce que si ce n’est pas pour le plaisir, il y a peut-être d’autres solutions possibles que de développer une application custom.

Je dirais que c’est un peu des deux, dans un premier temps ce sera développé sur du temps libre et plutôt axé plaisir mais avec en arrière plan l’idée de pourvoir s’en servir professionnellement, selon ce que ça devient.

Je visualise ce projet un peu comme une vitrine de mes compétences de développement d’outils scientifiques (je suis ingénieur en mécanique) et si le projet à assez de sens pour devenir quelque chose de professionnel/commercial c’est une voie qui m’intéresse.

Maintenant qu’entends tu par les autres solutions ?

+0 -0

Maintenant qu’entends tu par les autres solutions ?

Jojuss

Il existe plein d’outils open source disponibles :

  • Blender - tu peux coder des outils/plugins en Python
  • CadQuery - tu peux paramétrer des modèles en Python
  • Dust3d

C’est loin d’être évident de coder un éditeur 3D … Pour l’architecture, le mieux c’est de penser modulaire : fenêtre principale, menu, rendu 3D avec éditeur, rendu final 3D, etc. Et puis tu découpes pour avoir des éléments d’interfaces que tu peux facilement ré-utiliser. Petit à petit tu construis. Tu peux t’aider de l’éditeur Qt Creator pour la partie interface, ce sera déjà un gain de temps.

+0 -0

@Yarflam merci de ta réponse :

Concernant les outils open source que tu cites je les connais, je compte justement utiliser CadQuery pour modéliser les modèles 3D (lui ajouter une interface graphique en soit).

Blender et Dust3D ne sont pas compatible avec ce que je souhaite faire car ils n’utilisent pas la même représentation 3D que CadQuery (qui est basée sur OpenCascade, seul noyau géométrique BREP opensource)

Je connais également Salome-meca qui est probablement le logiciel open source qui correspond le plus à ce que je veux faire, mais est très avancé.

Dans tous les cas je ne souhaite pas vraiment d’alternatives, le but ici est bien de développer quelque chose.

J’ai déjà plein d’idées pour l’architecture mais justement la où j’aurais aimé des conseils ce serait sur la façon d’organiser ces idées:

  • Est-ce que je liste bêtement ces idées dans une TODO liste ?
  • Ou bien il y a des moyen plus efficace de ne pas se perdre en route ?

Désolé si je n’ai pas été très clair dès le début

C’est bien de commencer à noter les idées en vrac - ça fait office d’un premier jet. Tu pourras piocher dedans et le remplir tout le long du développement de ton application.

De façon professionnel, ces blocs d’idées sont transposés en Cahier des Charges. Un document texte structuré mettant en avant les principales fonctionnalités et les besoins spécifiques.

Pour l’aspect interface, on commence en général par du zoning. Tu peux le réaliser avec du papier et un stylo ou un outil en ligne comme draw.io. L’idée c’est de positionner les premières briques, comment tu vois les outils / menus. On est plus sur de la grossière disposition.

Ensuite tu peux rentrer plus sur l’aspect visuel avec Adobe XD, si tu souhaites une interface esthétique et qui respecte l’expérience utilisateur.

Pour l’aspect technique et contrôle. Ce qui est pas mal c’est de concevoir les cas d’utilisations en proposant des scénarios et des étapes à effectuer au sein de l’interface. Tu vas commencer à rentrer dans le cœur de ton application et son fonctionnement.

Puis pour chaque étape, tu peux noter les modules / fonctionnalités qui te permettront de répondre à la manipulation. Par exemple un bouton pour ajouter un cube dans ta scène ou un menu pour exporter ton modèle CAD.

Si tu as des algorithmes plus sophistiqués, tu peux te construire des schémas logiques (appelé aussi arbre de décision) et construire les étapes de ta recette de cuisine. :pirate:

Quant à la transposition en code, je te conseille vraiment de penser modulaire. Des petits blocs de codes pouvant être associés, déplacés et restructurés suivant les étapes de ton projet.

Pour suivre ton développement (vision projet cette fois), tu peux regarder du côté de la méthode Kanban.

Edit : j’ai éludé la question de la BDD étant donné qu’il s’agit plutôt d’une application lourde mais si jamais tu envisages de le relier à une base en ligne (ou que sais-je), tu peux te tourner sur les modèles relationnels - même en faisant du NoSQL, la structuration au préalable via des relations facilite grandement la vision & le développement.

+0 -0

Rebonjour,

J’ai continué à réfléchir au projet et j’ai une nouvelle question : J’aimerais étudier la possibilité d’utiliser cette application via le web. Par ça j’entends :

  • Un serveur tourne et est réponsable de la création/modification (affichage ?) des objets 3D
  • Communique ces informations à l’application
  • L’application resterait une application bureau (mais la possibilité d’en avoir une version navigateur web devient plus facilement intégrable)

Si je souhaite avoir la possibilité de faire ça en plus d’avoir une application "all in one" qui fonctionnerait seulement sur le PC client comment devrais-je penser mon projet ?

Je me dit également que anticiper une telle chose est si complexe qu’il serait probablement plus intéressant de développer deux application différentes.

L’idée de la question est donc :

  1. Est-ce viable de prendre en compte ce paramètre dans l’application "all in one" où vaut-il mieux développer deux applications distinctes quitte à récopier pas mal de la première ?
  2. Si c’est faisable sans trop de complexité, comment prévoir cette facette de l’application dans le développement initial?

Merci :)

Normalement, ton moteur intérieur sera découplé de l’interface, donc il n’y aura pas de problème spécifique là-dessus. Après, tu ne peux pas vraiment partager quelque chose de plus là-dessus à mon avis, une interface native et une interface web ça reste pas du tout la même chose (sauf à coup d’electron, mais c’est pas du tout une bonne idée pour un tel logiciel).

Par contre, l’idée en elle-même ne me semble pas forcément bonne : ça demande beaucoup de performances graphiques, donc ce n’est pas possible à faire tourner en navigateur, et les serveurs ne sont globalement pas faits pour faire tourner des applications graphique + ça devient très cher. Il me semble que les possibilités d’assemblage de puissance graphique (type crossfire, etc.) sont plus ou moins abandonnées. Du coup, ça reviendrait à faire un PC dédié à distance, comme les systèmes de streaming de jeu vidéo, et dans ce cas-là tu n’as plus besoin d’un système web dédié, autant utiliser effectivement un système type streaming de jeu vidéo (ou VNC, par exemple).

+0 -0

@Moté Merci, tu soulèves des points intéressants. Pour le coup l’idée n’était pas de faire tourner l’application graphique sur le serveur mais la création des objets en mémoire (donc plutôt des opérations axées CPU). C’est juste une idée à la volée mais je me suis dit qu’il pourrait peut être possible de permettre le travail collaboratif (à l’instar de google doc) sur des modèles 3D de cette manière vu que plusieurs utilisateurs auraient accès aux mêmes objets sur un serveur et non sur leur PC.

Je ne comprends pas pourquoi tu dis qu’il est impossible de faire du rendu 3D dans un navitateur, celà existe pourtant ?

Ceci étant dit c’est vrai que l’intérêt de tout ça est discutable devant l’ajout de complexité que ça amène.

+0 -0

Je ne dis pas que c’est impossible, mais niveau performances c’est très moyen, et un logiciel comme ça c’est très exigeant. (et puis du coup, ton idée ne nécessite pas un logiciel web, c’est tout à fait faisable également en natif)

Honnêtement, si ça avait un intérêt, les industriels l’auraient mis en place.

+0 -0

Du coup pour résumer :

  1. Une appli navigateur n’est pas une bonne idée.
  2. Il est possible d’utiliser l’application bureau avec un serveur pour travailler en collaboration sur des modèles 3D?

Par :

Honnêtement, si ça avait un intérêt, les industriels l’auraient mis en place.

Tu entends qu’avoir une application web pour ce genre de logiciel n’a pas vraiment d’intérêt ou bien tu fais référence à 2. ?

Oui, ton navigateur bridera les performances de ton application, et oui tu peux tout à fait utiliser une appli de bureau pour travailler en collaboration. L’exemple le plus proche, c’est les jeux : On peut tout à fait les faire sur navigateur ou en natif, et dans les deux cas fonctionner en réseau (ou non, d’ailleurs). Mais un jeu gourmand, on le fait tourner en natif où il peut exploiter plus directement les performances et technologies de ton système.

Avoir une application web n’a probablement pas d’intérêt, c’est bien ce que je dis. Dans une logique industrielle, je crois qu’il y a des éditeurs web pour les services d’impression à la demande notamment, mais pour du système industriel (type CATIA), il ne me semble pas que ce soit le cas. En fait, je parlais même de systèmes synchronisés, mais je vois que CATIA possède des éléments serveurs, même si je n’ai aucune idée des fonctionnalités auxquelles ça correspond.

+0 -0

Ca marche merci pour les précisions.

Oui CATIA dispose de fonctionnalités PLM qui gèrent de l’échange de données à travers différents corps de métiers mais je n’en connait pas beaucoup plus.

En tout cas je retiens l’idée d’intégrer ça !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte