FR 3066953 A1 20181207 FR 1754866 A 20170601 INRIA201 FRD Dispositif de traitement de données pour la génération de microstructures à propriétés élastiques orthotropiques L'invention concerne le domaine des objets présentant des propriétés élastiques orthotropiques et en particulier la fabrication de ces objets par fabrication additive ou autre. De nombreux travaux ont abordé la génération de structures permettant d'obtenir des objets présentant une élasticité variable. Ces travaux utilisent le principe d'une application d'un motif à petite échelle (microstructure) dont l'étude à grande échelle permet de valider les caractéristiques structurelles. Ainsi, un objet présentant une élasticité variable peut être fabriqué en réalisant plusieurs sous objets basés sur des motifs différents. Cependant, ce type d'approche est complexe à mettre en oeuvre dans le contexte de la fabrication additive car cette dernière impose des contraintes de fabrication fortes dépendant de la technologie (continuité verticale dans le cas du dépôt par couche, ou absence de poche dans le cas de l'utilisation de poudres). De plus, ce genre de technique génère des objets informatiques (maillages ou volumes) extrêmement volumineux, ce qui pose des problèmes avec les machines de fabrication additive actuelles. La Demanderesse a proposé dans la demande de brevet française FR1652497 un dispositif fabriquant basé sur la génération de mousses isotropiques de Voronoï permettant d'obtenir une grande gamme d'élasticité et de varier cette élasticité progressivement au sein du volume d'une pièce. Cependant, cette approche ne peut pas produire une élasticité qui, en un point donné, est différente selon la direction des efforts : l'élasticité est nécessairement isotropique, c'est à dire la même quelle que soit la direction des efforts en un point local. Il n'est donc pas possible de produire un objet dont l'élasticité est modulable selon certaines directions, par exemple un cube qui soit plus rigide verticalement que dans le plan horizontal. 3066953 2 Ces problèmes se retrouvent également lorsque l'on cherche à usiner ces objets par d'autres méthodes, que ce soit par moulage ou par extrusion. L'invention vient améliorer la situation. À cet effet, l'invention propose un dispositif de 5 traitement de données pour fabrication de mousse, comprenant une mémoire agencée pour recevoir des données d'emplacement désignant un emplacement et un élément de volume contenant cet emplacement, et un générateur agencé pour déterminer des données de fabrication additive indiquant si un emplacement associé à des données d'emplacement est vide ou plein. La mémoire est agencée pour recevoir des données de 10 densité, des données de déformation et des données de rayon. Le générateur est agencé pour calculer, pour un emplacement donné désigné par des données d'emplacement, des données de graines de branche désignant des emplacements de graines de branches d'un jeu de graines de branches associé à l'emplacement donné, 15 pour déterminer lesdits emplacements de graines de branche dans une pluralité d'éléments de volumes comprenant l'élément de volume contenant l'emplacement donné d'une part et des éléments de volumes sélectionnés dans un voisinage de l'élément de volume contenant l'emplacement donné d'autre part, chaque élément de volume recevant un nombre de graines de branche tiré de données de densité associées à cet élément de 20 volume, pour calculer une mesure entre une première graine de branche et une deuxième graine de branche à partir de la distance entre l'emplacement de la première graine de branche d'une part et la deuxième graine de branche d'autre part, en pondérant cette distance en fonction de données de déformation associées à la première graine de branche et à la deuxième graine de branche, pour sélectionner au moins deux graines de branches 25 pour chaque graine de branche, de sorte que ces au moins deux graines de branches sont les voisins les plus proches selon la mesure calculée par le générateur (4, 10), et pour définir des données de fabrication indiquant qu'un emplacement est plein lorsque la distance entre ledit emplacement et sa projection sur une des branches reliant chaque graine de branche à ses voisins les plus proches est inférieure à une distance tirée des 30 données de rayon. 3066953 3 Dans d'autres modes de réalisation, le dispositif pourra présenter une ou plusieurs des caractéristiques supplémentaires suivantes : - le générateur est outre agencé pour calculer la mesure entre une première graine de branche et une deuxième graine de branche en la pondérant en fonction d'un référentiel 5 associé aux données de déformation, - le générateur est agencé pour sélectionner les voisins les plus proches d'une graine de branche donnée parmi un sous-ensemble de graines de branches qui exclut les graines de branche dont les emplacements sont situés à une distance de l'emplacement de la graine de branche donnée supérieure à un seuil tiré des données de déformation et du nombre de 10 voisins les plus proches recherchés, - le générateur est agencé pour allouer les graines de branche de manière déterministe au sein de chaque élément de volume, - le générateur est agencé pour déterminer lesdits emplacements de graines de branche en divisant chaque élément de volume de la pluralité d'éléments de volume en un ou 15 plusieurs sous-éléments de volume dont le nombre est calculé à partir des données de densité et du volume de chaque élément de volume, en déterminant de manière pseudoaléatoire en fonction des données d'emplacement et des données de densité des sous-éléments de volume recevant une graine de branche, et en déterminant de façon pseudoaléatoire dans chaque sous-élément de volume recevant une graine de branche des 20 données de graine de branche désignant un emplacement dans ce sous-élément de volume, - le générateur est un modélisateur agencé pour recevoir un triplet associant des données de densité, des données de déformation et des données de rayon, pour déterminer un jeu de données de fabrication additive pour un objet de forme sensiblement cubique à partir 25 de ce couple, et pour appliquer une méthode d'homogénéisation pour en tirer une donnée de tenseur, - le modélisateur est agencé, pour un triplet donné, pour déterminer plusieurs jeux de données de fabrication additive en faisant varier les déterminations pseudo-aléatoires, et pour réaliser une moyenne des données de tenseur pour le triplet donné, et 30 - le générateur est un constructeur agencé pour recevoir des données d'objet définissant la forme d'un objet à produire par fabrication additive et comprenant des données de tenseur associées à des emplacements désignés par les données d'objet, et, pour certains 3066953 4 au moins des emplacements des données d'objets, pour déterminer des données de déformation, des données de référentiel, des données de rayon et des données de densité à partir des données de tenseur associées, et pour déterminer des données de fabrication additive correspondantes. 5 L'invention concerne également un procédé de fabrication d'une mousse orthotropique qui comprend les opérations suivantes : - recevoir des données d'objet associant des données d'emplacement et des données de tenseur, les données de tenseur étant associées à des données de densité, des données de 10 rayon et des données de déformation, - déterminer des emplacements de graines de branche dans une pluralité d'éléments de volume, le nombre de graines de branche dans un élément de volume donné étant déterminé à partir des données de densité associées aux emplacements de l'élément de volume donné, 15 - pour chaque graine de branche, calculer une pluralité de mesures entre cette graine de branche en tant que première graine de branche d'une part et une deuxième graine de branche d'autre part, la deuxième graine de branche étant choisie pour chaque mesure parmi les autres graines de branche, la mesure étant calculée à partir de la distance entre l'emplacement de la première graine de branche d'une part et la deuxième graine de 20 branche d'autre part, en pondérant cette distance en fonction de données de déformation associées à la première graine de branche et à la deuxième graine de branche, - sélectionner au moins deux graines de branches pour chaque graine de branche, de sorte que ces au moins deux graines de branches sont les voisins les plus proches dans la pluralité de mesures calculées pour chaque graine, et 25 - définir des données de fabrication indiquant qu'un emplacement donné est plein lorsque la distance entre ledit emplacement donné et sa projection sur une des branches reliant chaque graine à ses voisins les plus proches est inférieure à une distance tirée de données de rayon, et - fabriquer une mousse suivant les emplacements pleins définis. 30 Dans diverses variantes le procédé peut présenter une ou plusieurs des caractéristiques suivantes : 3066953 5 - la mesure entre une première graine de branche et une deuxième graine de branche est pondérée en fonction d'un référentiel associé aux données de déformation, - pour sélectionner les voisins les plus proches d'une graine de branche donnée, la pluralité de mesures est calculée avec un sous-ensemble de graines de branches qui exclut 5 les graines de branche dont les emplacements sont situés à une distance de l'emplacement de la graine de branche donnée supérieure à un seuil tiré des données de déformation et du nombre de voisins les plus proches recherchés, - lequel lesdits emplacements de graines de branche sont déterminés de manière déterministe, 10 - lesdits emplacements de graines de branche sont déterminés en divisant chaque élément de volume de la pluralité d'éléments de volume en un ou plusieurs sous-éléments de volume dont le nombre est calculé à partir des données de densité et du volume de chaque élément de volume, en déterminant de manière pseudo-aléatoire en fonction des données d'emplacement et des données de densité des sous-éléments de volume recevant une 15 graine de branche, et en déterminant de façon pseudo-aléatoire dans chaque sous-élément de volume recevant une graine de branche des données de graine de branche désignant un emplacement dans ce sous-élément de volume, et - l'opération de fabrication de mousse est réalisée par fabrication additive. 20 D'autres caractéristiques et avantages de l'invention apparaîtront mieux à la lecture de la description qui suit, tirée d'exemples donnés à titre illustratif et non limitatif, tirés des dessins sur lesquels : - la figure 1 représente un diagramme schématique d'un dispositif selon invention, - la figure 2 représente un exemple de mise en oeuvre d'une fonction par le modélisateur 25 de la figure 1, - la figure 3 représente un exemple d'une fonction mise en oeuvre par le modélisateur et le constructeur de la figure 1 pour calculer des graines de branche, - la figure 4 représente un exemple d'une fonction mise en oeuvre dans la fonction de la figure 3, 30 - la figure 5 représente une fonction mise en oeuvre par le dispositif de la figure 1 pour imprimer un objet, 3066953 6 - la figure 6 représente un exemple de graphe d'élasticités obtenues dans le cadre de l'invention, et - la figure 7 représente un exemple d'un objet fabriqué par le dispositif de l'invention, sous diverses contraintes. 5 Les dessins et la description ci-après contiennent, pour l'essentiel, des éléments de caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant. 10 La présente description est de nature à faire intervenir des éléments susceptibles de protection par le droit d'auteur et/ou le copyright. Le titulaire des droits n'a pas d'objection à la reproduction à l'identique par quiconque du présent document de brevet ou de sa description, telle qu'elle apparaît dans les dossiers officiels. Pour le reste, il réserve intégralement ses droits. 15 La figure 1 représente un dispositif 2 selon l'invention dans son environnement. Le dispositif 2 comprend un constructeur 4, une imprimante 6 et une mémoire 8. Dans l'exemple décrit ici, le dispositif 2 comprend également un modélisateur 10 dont le fonctionnement sera décrit ci-après. 20 Dans le cadre de l'invention, la mémoire 8 peut être tout type de stockage de données propre à recevoir des données numériques : disque dur, disque dur à mémoire flash (SSD en anglais), mémoire flash sous toute forme, mémoire vive, disque magnétique, stockage distribué localement ou dans le cloud, etc. Les données calculées par le dispositif peuvent 25 être stockées sur tout type de mémoire similaire à la mémoire 8, ou sur celle-ci. Ces données peuvent être effacées après que le dispositif ait effectué ses tâches ou conservées. Les données stockées dans la mémoire 8 comprennent des n-uplets qui associent un tenseur orthotropique, des données de déformation, une densité et un rayon. Dans 30 l'exemple décrit ici, ces n-uplets sont calculés par le modélisateur 10. En variante, ils pourraient être obtenus différemment. Dans l'exemple décrit ici, les tenseurs orthotropiques associent un repère définissant deux ou trois axes, des valeurs d'élasticité 3066953 7 selon chaque axe du repère, et optionnellement un ou deux coefficients de Poisson. Dans l'exemple décrit ici, les données de déformation comprennent autant de valeurs que les tenseurs orthotropiques comprennent d'axes. Comme on le verra plus bas, les données de déformation, la densité et le rayon permettent de produire une mousse ayant les propriétés 5 orthotropiques du tenseur orthotropique du n-uplet auquel cet ensemble de données est associé. Les données stockées dans la mémoire 8 pourraient également être agencées sous une autre forme que des triplets ou des n-uplets. Le constructeur 4 et le modélisateur 10 sont des éléments accédant directement ou 10 indirectement à la mémoire 8. Ils peuvent être réalisés sous la forme d'un code informatique approprié exécuté sur un ou plusieurs processeurs. Par processeurs, il doit être compris tout processeur adapté aux calculs décrits plus bas. Un tel processeur peut être réalisé de toute manière connue, sous la forme d'un microprocesseur pour ordinateur personnel, d'une puce dédiée de type FPGA ou SoC (« system on chip » en anglais), 15 d'une ressource de calcul sur une grille, d'un microcontrôleur, ou de toute autre forme propre à fournir la puissance de calcul nécessaire à la réalisation décrite plus bas. Un ou plusieurs de ces éléments peuvent également être réalisés sous la forme de circuits électroniques spécialisés tel un ASIC. Une combinaison de processeur et de circuits électroniques peut également être envisagée. 20 Le dispositif 2 reçoit des données d'objet 12 Les données d'objet 12 comprennent une description de la forme tridimensionnelle qui est souhaitée pour l'objet à imprimer, ainsi qu'une indication d' orthotropie sous la forme d'un champ de tenseurs d' orthotropie variant au sein de l'objet, de manière continue ou discontinue. 25 À partir des données d'objet 12, le constructeur 4 accède à la mémoire 8 et détermine un n-uplet pour chaque partie distincte de l'objet. Ensuite, à partir de la forme tridimensionnelle recherchée et des données obtenues, le constructeur 4 détermine les emplacements de chaque couche devant être imprimés et commande l'imprimante 6 pour 30 produire en sortie un objet 14 qui présente des caractéristiques d'élasticité et la forme tridimensionnelle dictées par les données d'objet 12. Le constructeur 4 peut également déterminer la totalité de l'objet 14 en parallélisant les calculs pour chaque partie distincte, 3066953 8 et imprimer l'objet 14 selon diverses méthodes. La génération de la mousse interne à l'objet peut donc être procédurale ou pas, c'est à dire que la géométrie de la mousse peut être intégralement pré-calculée, ou bien générée à la volée pendant le processus d'impression (procédurale), limitant ainsi fortement la quantité de mémoire nécessaire 5 pour stocker la pièce. Les objets réalisés au moyen du dispositif 2 peuvent être qualifiés de « mousses orthotropiques ». En effet, l'invention a été conçue en vue de produire des objets dont le comportement élastique est orthotropique - ce qui inclut et généralise l'isotropie. 10 Pour cela, le constructeur 4 détermine pour chaque couche de l'objet des graines de branche dont la quantité est dictée par la densité du triplet tiré de la mémoire 8 à partir des données d'objet 12 pour la portion de l'objet en cours d'impression. 15 Ensuite, les graines de la portion considérée sont parcourues afin de relier chaque graine à ses k graines voisines les plus proches, la proximité étant tirée du champ de mesures défini à partir des vecteurs de déformations locaux. La distance utilisée pour le calcul de proximité est donc biaisée par les données de déformation, ce qui suscite le comportement élastique orthotropique. Enfin, chaque point de cette portion pouvant être imprimé est 20 considéré comme plein s'il se situe à une distance choisie des branches et vide sinon, la distance choisie correspondant au rayon du triplet tiré de la mémoire 8 à partir des données d'objet 12. La notion de distance doit être ici interprétée au sens large, il est donc possible de modifier la distance pour modifier la géométrie des arêtes de la mousse orthotropique. Ainsi, le constructeur 4 construit de proche en proche des branches qui 25 présentent chacune une épaisseur choisie pour conférer à la structure une élasticité choisie. La figure 2 représente un exemple d'une fonction mise en oeuvre par le modélisateur 10 pour établir les triplets valeur d'élasticité, densité et rayon. Pour cela, le modélisateur 10 30 génère une grande quantité de cubes de mousses orthotropiques pour un grand nombre de triplets densité-rayon-vecteur de déformation, et détermine par une méthode d'homogénéisation une valeur d'élasticité associée à chaque triplet. Sans perte de 3066953 9 généralité, et de manière avantageuse pour les performances, les vecteurs de déformation peuvent être prévus de sorte qu'au moins une des valeurs de chaque vecteur est fixée à 1. Afin de ne pas avoir à explorer toutes les orientations possibles, les mousses produites dans cette phase d'analyse ont une orthotropie alignée avec les axes de chaque cube. 5 Le modélisateur 10 commence ainsi dans une opération 200 par exécuter une fonction Rand(), et stocke le résultat dans un tableau HDRH. La fonction Rand() a pour objectif de générer un très grand nombre de triplets densité-rayon-vecteur de déformation, afin de pouvoir offrir une grande variété dans la construction des mousses orthotropiques qui 10 seront produites et analysées par la suite. Cette fonction initialise également un indice i à 1, un indice g à 0, et un tableau TS[] à 0. Ensuite, le modélisateur 10 exécute une double boucle. Cette double boucle parcourt les triplets du tableau HDRH, et, pour chaque triplet, effectue une boucle dans laquelle un 15 triplet donné est utilisé un grand nombre de fois pour produire une mousse orthotropique d'essai et pour en tirer des valeurs d'élasticité orthotropique correspondantes. Lorsque le vecteur de déformation H contient trois valeurs, les valeurs d'élasticité orthotropiques comprennent trois modules d'élasticité, deux coefficients de Poisson et deux facteurs de cisaillement. Lorsque le vecteur de déformation H contient deux valeurs, les valeurs 20 d'élasticité orthotropiques comprennent deux modules d'élasticité, un coefficient de Poisson et un facteur de cisaillement. Dans ce cas, l'orthotropie ne s'exprime que selon deux dimensions, c'est-à-dire que la mousse sera homogène selon l'une des trois dimensions. Dans l'exemple qui suit, le vecteur de déformation H comprend trois valeurs (hx,hy,hz). 25 La double boucle commence donc par une opération 210 dans laquelle une fonction Pop() sort un triplet du tableau HDR[]. Ensuite la deuxième boucle commence dans une opération 220 avec l'exécution d'une fonction RandP(). La fonction RandP() reçoit l'indice g comme argument et retourne un point q choisi de manière aléatoire en fonction 30 de g dans un hyper-cube (rayon, densité et vecteur de déformation : 5 dimensions). Cette fonction est utilisée pour générer de la variété dans les mousses orthotropiques de la deuxième boucle. En effet, la fonction RandP() produit des points de départs distincts qui 3066953 10 vont générer des graines de branches différentes, ce qui assure la fiabilité de la moyenne réalisée dans la deuxième boucle. Ensuite, dans une opération 230, une fonction Til() est exécutée qui reçoit comme 5 arguments un pointeur vers une fonction GB(), le point q, le triplet (d,r,H) courant, et l'indice g. La fonction GB() a pour rôle la génération d'un jeu de N de graines de branches qui définiront avec le rayon r la mousse orthotropique de l'instance courante de la deuxième boucle. La figure 3 représente un exemple de mise en oeuvre de la fonction GB() et sera décrite plus bas. 10 La fonction Til() génère une mousse orthotropique en partant de données d'objet décrivant un bloc cubique qui est de dimension suffisante (environ 3 cm' dans l'exemple décrit ici) pour appliquer une méthode d'homogénéisation (voir « Shape optimization by the homogenization method » par Allaire, G. 2012, vol. 146. Springer Science & Business 15 Media), et pour lequel le champ de tenseurs est uniforme, de sorte que l'élasticité est la même dans toute la structure. Ainsi, la méthode d'homogénéisation mesure l'élasticité orthotropique d'un bloc cubique homogène équivalent, pour le triplet (d,r,H) courant Ceci permet d'associer un tenseur d'élasticité orthotropique à chaque vecteur. 20 Dans l'exemple décrit ici, la fonction Til() génère le cube de mousse d'un seul bloc, en générant toutes les graines de branche en une seule exécution de la fonction GB(). En variante, la fonction Til() peut paralléliser la production des graines de branche en découpant le cube en une pluralité de sous-cubes et en exécutant la fonction GB() sur chaque sous-cube. Cela est rendu possible par le fait que la fonction qui définit les graines 25 de branche à partir du point q de départ est déterministe. Ensuite, les graines de branches générées par la fonction GB() et le rayon r sont alors utilisés pour déterminer si chaque point du cube est plein ou vide, comme cela sera décrit avec la figure 5. Une fois tous les points p du cube traités, il en résulte une mousse V. 30 Dans une opération 240, une fonction Hom(), est alors exécutée afin de déterminer la valeur d'élasticité E de la mousse orthotropique V reçue comme argument. L'élasticité 3066953 11 de la mousse V est calculée en évaluant le tenseur d'élasticité homogénéisé. La procédure est globalement similaire à celle décrite pour l'isotropie dans « Procedural Voronoi foams for Additive Manufacturing », Martinez et al. 2016, ACM TOG, 35, 4). Une différence importante est que le tenseur à extraire est orthotropique: Une fois le tenseur homogénéisé 5 obtenu, les paramètres du tenseur orthotropique idéal sont extraits par une minimisation de la distance logarithmique Euclidienne entre le tenseur idéal et le tenseur homogénéisé, en contraignant le tenseur orthotropique à rester défini positif D'autres méthodes sont possibles en variante. 10 Ce résultat est stocké dans le tableau TS[] à l'indice i. Le tableau TS[] reçoit ainsi la liste des élasticités déterminées pour toutes les mousses associées à un triplet (d,r,H) donné pour un indice i donné d'exécution de la première boucle. Afin de déterminer si toutes les deuxièmes boucles ont été explorées, l'indice g est 15 comparé à un seuil avgsd dans une opération 250. Si g est inférieur, alors la deuxième boucle est répétée à nouveau pour le même indice i de première boucle, avec l'incrémentation de l'indice g dans l'opération 260. Sinon, alors la première boucle se termine pour l'indice i, avec l'exécution d'une fonction 20 Avg() dans une opération 270. La fonction Avg() reçoit comme arguments la liste des élasticités TS[i], ainsi que la densité d et le rayon r. La fonction Avg() détermine l'élasticité moyenne des mousses qui ont été réalisées sur la base de toutes les deuxièmes boucles pour l'indice i. Il en résulte un n-uplet associant tenseur orthotropique et le triplet rayon-densité-vecteur de déformation, qui est stocké dans une matrice THDR[]. Afin de 25 déterminer une mesure de précision, il peut être avantageux de calculer également la déviation standard des paramètres des tenseurs d'élasticité pour un indice i donné. Enfin, l'indice i de première boucle est incrémenté dans une opération 280, l'indice g est réinitialisé à 0 dans une opération 290, et la première boucle reprend avec l'opération 30 210. 3066953 12 Lorsque l'opération 210 détermine que tous les triplets (d,r,H) du tableau DR[] ont été traités, la fonction se termine dans une opération 299. La figure 3 va maintenant être décrite afin de mieux comprendre la fonction GB() de 5 l'opération 230. Comme on le verra avec la figure 5, la mousse orthotropique est construite en reliant entre elles des graines de branche qui ont été générées avec une densité qui dépend des données d'objet 12 La fonction GB() a donc pour rôle, pour un emplacement donné et des données 10 d'objet donné, de générer les graines de branche correspondantes, et de déterminer lesquelles de ces graines de branche sont reliées entre elles. Comme on le verra plus bas, chaque graine de branche sera reliée à ses plus proches voisines, selon une distance qui tient compte des valeurs des vecteurs de déformation. En 15 effet, la Demanderesse a découvert qu'en choisissant les k voisins les plus proches selon le champ tiré des vecteurs de déformation associés aux tenseurs orthotropiques via les nuplets, et en fabriquant une mousse à partir des branches reliant ces k plus proches voisins, la mousse résultante a des propriétés orthotropiques correspondant aux tenseurs orthotropiques souhaités. 20 En variante préférée, la fonction GB() utilise une grille implicite en trois dimensions ayant au moins une graine dans chaque case. Seules les cases proches de la case comprenant l'emplacement donné sont potentiellement pertinentes. Le nombre de cellules à examiner est calculé à partir des valeurs hx, hy, hz du vecteur de déformation associé à une case 25 donnée. Par grille implicite, on entend un pré-découpage cubique en cases de dimension fixe de l'espace, qui dans l'exemple décrit ici présente une dimension comprise entre 2mm et 5mm, et est défini de manière implicite, c'est-à-dire que seul l'indice d'une case est retenu, et que toutes les données y étant relatives sont calculées à la volée. En variante, l'espace pourrait être découpé de manière différente (e.g. grille rhombus, grille en nid 30 d'abeille), et/ou avec des dimensions différentes, et/ou avec une définition explicite. Les graines pourraient aussi être générées sans grille sous-jacente, par tout autre processus générant une distribution aléatoire isotrope de points, comme un algorithme de 3066953 13 distribution de points de type tessellation de Voronoi à centroïde, ou bien une distribution à disque de Poisson (par exemple un algorithme de "dart throwing"). Dans le cas où une parallélisation est souhaitée, cette distribution doit être de nature déterministe. 5 La fonction GB() commence dans une opération 300 avec la réception d'un champ de densités D, d'un champ de vecteurs de déformation H et d'un emplacement q comme arguments, ainsi qu'avec l'initialisation à 0 d'un vecteur N. Le champ de densités D et le champ de vecteurs de déformation HF représentent les valeurs de densité d et les vecteurs de déformation H qui sont associés à chaque emplacement de l'espace associé à 10 l'emplacement q qui est traité par la fonction GB(). Dans l'exemple de l'opération 230, le champ de densités D et le champ de vecteurs de déformation HF sont respectivement une valeur de densité d et un vecteur de déformation H choisis pour réaliser le cube de mousse à l'opération 210. Comme on le 15 verra, l'emplacement q joue un rôle important sur l'aléas dans la production des graines de cellules de branche par la fonction GB(), et la variation de g permet donc de générer des mousses orthotropiques très variées pour une densité d fixée. Après l'initialisation, une fonction PN() est exécutée dans une opération 310. La fonction 20 PN() reçoit q comme argument, et va déterminer toutes les cases qui entourent la case comprenant l'emplacement q et qui sont susceptibles de contenir une graine de branche qui pourrait être un des k voisins les plus proches de la graine de la case contenant q. Pour cela, la fonction PN() commence par agrandir l'espace associé à l'emplacement q sur lequel travaille la fonction GB() en fonction des données de champs de vecteurs de 25 déformation HF. En effet, le but de la fonction GB() est de déterminer des emplacements de graines de branche pour l'espace couvert par la fonction GB() à partir de l'emplacement q, et de déterminer pour chacune des graines de branches ses voisins les plus proches, selon une 30 distance qui est biaisée par le vecteur de déformation. Cela signifie qu'un plus proche voisin d'une graine donnée pourrait se trouver en dehors de l'espace de travail initial de 3066953 14 la fonction GB() et qu'il faut « agrandir » cet espace pour inclure tous les emplacements qui sont susceptibles de contenir une graine de branche qui soit un plus proche voisin. Ainsi, si l'espace sur lequel travaille la fonction GB() est défini par deux coins de cube cmin et cmax, la fonction PN() va retourner un espace [cmin+L ; cmax+L] où L est la 5 valeur maximale à laquelle une graine la plus proche peut se trouver, et est induite par la valeur maximale de toutes les valeurs des vecteurs de déformation H du champ de vecteurs de déformation HF. Ainsi, la fonction PN() retourne un tableau T[] qui comprend des couples associant 10 chacun un indice de case de l'espace agrandi dans lesquelles des graines de branche doivent être générées, et la densité qui est associée aux emplacements de cette case. Ensuite, une première boucle est lancée afin de déterminer, pour chaque couple du tableau T[] l'emplacement des graines de branche pour ces cases avec leur densité d. Cette boucle 15 commence dans une opération 320 avec l'extraction d'une case c à visiter dans le tableau T[] et de la densité d correspondante au moyen d'une fonction Pope, puis une fonction SC() est exécutée dans une opération 330 avec comme arguments la densité d et la case dépilée pour déterminer une ou des graines de branche pour la case c et la densité d. Dans le cas de l'opération 230, la densité d est fixée, et sera donc la même pour toutes les cases. 20 Néanmoins, dans d'autres cas, la fonction PN() peut retourner des cases dont la densité n'est pas la même que celle de la case contenant l'emplacement q. Ensuite, la première boucle reprend avec l'opération 320, jusqu'à ce que toutes les cases du tableau T[] aient été visitées pour déterminer les graines de branche correspondantes, 25 et que celles-ci aient été entrées dans le vecteur N[]. Une fonction KNN() est alors lancée dans une opération 340, avec comme arguments un nombre de voisins k, le champ de vecteurs de déformation HF et le vecteur N[]. La fonction KNN() parcourt toutes les graines de branche du vecteur N[] et détermine pour 30 chacune d'entre elle les k graines de branche du vecteur N[] qui lui sont les plus proches, selon une distance basée sur la formule suivante : 3066953 15 \ d (r , s) = I (r - sr. M (r)(r - s) + \ I (s - r)T M (s)(s - r) où M(r) représente la déformation induite par le vecteur de déformation H du champ de vecteurs de déformation HF à l'emplacement de la graine de branche r, modifié en fonction de l'orientation du repère du tenseur orthotropique auquel il est associé, selon la 5 formule M(r) = RTHR, où R est le repère du tenseur orthotropique auquel est associé le vecteur de déformation H. Dans le cas de l'opération 230, comme les cubes de mousse qui sont générés présentent une orthotropie alignée avec les axes du cube, M est une matrice avec H sur sa diagonale. 10 De manière avantageuse, pour une graine de branche donnée, le vecteur N[] peut être parcouru pour ne retenir qu'un nombre réduit de voisins potentiels. En effet, en fonction du vecteur de déformation H associé à la graine de branche donné, il est possible de déterminer l'enveloppe minimale dans laquelle se trouveront forcément tous les k voisins potentiels. Cela signifie que, pour cette graine de branche donnée, on peut ignorer toutes 15 les autres graines de branche et qu'il n'est nécessaire de réaliser le calcul de distance ci- dessus et le tri des k distances les plus courtes que sur un nombre restreint de graines de branche. Les travaux de la Demanderesse ont démontré que, pour des vecteurs de déformation à 3 20 dimensions, les k voisins sont en pratique contenus dans une sphère centrée sur la graine de branche donnée et dont le rayon vaut 2. c * hx. 3 \ I k / (ff * hx * hy * hz) avec c la dimension d'une case et h la plus grande valeur entre hx, hy et hz. Pour des vecteurs de déformation à 2 dimensions, les k voisins sont contenus dans un cercle centré sur la graine de branche donnée et dont le rayon vaut 2. c * hx\ I k / (ff * hx * hy), où c est la taille de 25 la case associée à la graine de branche donnée. Une borne plus resserrée pourrait être déterminée. Sur la base de ces distances, la fonction KNN() retient, pour chaque graine de branche, les k graines qui donnent la distance la plus faible. Les expériences de la Demanderesse 30 ont démontré qu'un nombre de voisins k supérieur ou égal à 2 suffit à obtenir des résultats connectés (c'est-à-dire des mousses monobloc) dans la plupart des cas, et qu'un excellent 2 3066953 16 compromis anisométrie / connectivité / temps de calcul est obtenu avec k égal à 6. Dans l'exemple décrit ici, le nombre k est gardé constant pendant l'exécution de la fonction GB(). En variante, la valeur de k pourrait varier pendant l'exécution de la fonction GB(). 5 La fonction KNN() retourne une liste B des graines qui doivent être reliées entre elles. Cette liste peut être sous la forme de couples, ou de n-uplets dans lesquelles le premier élément désigne une graine de branche centrale, et les autres membres du n-uplets toutes les graines de branches auxquelles la graine de branche centrale doit être reliée. Dans ce dernier cas, cela revient à remplacer dans le vecteur N[] chaque graine de branche par le 10 n-uplet dont le premier élément est la graine de branche correspondante. Enfin, la fonction GB() se termine avec l'opération 399. La figure 4 représente un exemple de réalisation de la fonction SC(). Cette fonction a pour 15 rôle, à partir d'une case c et d'une densité reçues en arguments, de générer les graines de branches correspondant à la densité recherchée. Pour cela, la case c va être divisée de manière répétée en sous-cases, jusqu'à ce que la taille des sous-cases soit telle que chaque sous-case contienne environ une graine. Il est important de noter que différents appels de la fonction SC(d;c) vont toujours générer exactement le même ensemble de graines pour 20 une même case c. Dit autrement, la fonction SC() est déterministe pour un même emplacement q originel. Pour cela, dans une opération 400, la case c et la densité d sont reçues comme argument, et un indice de profondeur h ainsi qu'un vecteur N recevant les graines de branches sont 25 initialisés à 0. Ensuite, dans une opération 405, une fonction Cl() est exécutée pour déterminer les coordonnées de la case c. Cette détermination est importante pour la parallélisation de la fonction SC() comme on le verra plus bas. 30 La case c est alors divisée en sous-cases dans une boucle impliquant des opérations 410, 415 et 420. Dans l'opération 410, un nombre de graines théorique t est calculé en 3066953 17 multipliant la densité d par une constante ccl correspondant à la taille des cases au plus haut niveau, laquelle constante est multipliée par deux à la puissance moins h, ce produit étant élevé au cube. En effet, dans l'exemple décrit ici, comme l'espace est découpé de manière cubique, chaque profondeur supplémentaire (quand h croit) divise le volume de 5 la case par huit. Dans l'opération 415, t est comparé à 8. En effet, si t est inférieur à 8, alors il n'est plus nécessaire de découper la case en sous-cases, puisque chaque sous-case aura au maximum une graine de branche. Sinon, dans une opération 420, une fonction Dwn() augmente les dimensions ijk afin de sous-diviser la case en huit sous-cases, puis l'opération 410 est répétée. 10 Dans l'exemple décrit ici, les cases sont cubiques et sont découpées de manière identique en sous-cases de volume identique, et toutes les cases de niveau le plus élevé ont un volume égal à celui de la case de niveau le plus élevé contenant l'emplacement q. En variante, les volumes des cases pourraient varier, les formes des cases et des sous-cases 15 également, et le nombre de graines dans les sous-cases serait alors évalué en conséquence, de sorte que la somme du nombre de graines générées dans les sous-cases corresponde au nombre de graines calculé pour leur case parente, comme les sous-cases forment une partition du volume de cette dernière. 20 Lorsque la profondeur la plus basse utile pour la densité recherchée a été atteinte, une fonction Rand(ijk) est exécutée dans une opération 425. Cette fonction rentre dans un vecteur I[] huit indices dans un ordre pseudo-aléatoire, chaque indice désignant une sous-case. La fonction étant pseudo-aléatoire, le même tableau I[] est produit pour une même valeur de ijk. 25 Ensuite, un indice i est initialisé à 0 dans une opération 430. L'indice i est utilisé pour parcourir les sous-cases du vecteur I[] et leur attribuer une graine de branche si nécessaire. Une boucle est ainsi exécutée, dans laquelle une opération 435 détermine si suffisamment 30 de graines ont été générées. En effet, t sera généralement une valeur non entière. L'indice i est donc comparé à t-1. Si i est inférieur à t-1, alors il faut encore produire une graine de branche dans la case désignée par I[i]. 3066953 18 Pour cela, une fonction RandS() est exécutée dans une opération 440. Cette fonction reçoit comme argument I[i] et détermine de manière pseudo-aléatoire un emplacement dans la case désignée par l'indice I[i], et le place dans le vecteur N de sorte qu'il occupe l'indice 0 s'il est plus proche de l'emplacement q que la graine de branche occupant l'indice 0. 5 L'aléa de cette fonction dépend au moins en partie de l'indice de la sous-case, ce qui signifie qu'à chaque fois que la fonction est exécutée avec cet indice, c'est la même graine de branche qui est générée. Et lorsque l'indice change, une autre graine aléatoire est générée, etc. Ainsi, la fonction RandP(g) de l'opération 220 fait varier les motifs de 10 mousse orthotropiques produits, puisqu'elle fait varier l'indice de la case pour laquelle les graines sont cherchées en modifiant les points q. La graine de branche correspondante est stockée dans le vecteur N, puis l'indice i est incrémenté dans une opération 445, puis le test de l'opération 435 est répété. Lorsque ce 15 test est négatif, il faut générer une graine de branche dans la prochaine sous-case, selon une probabilité correspondant à la partie décimale de t. Pour cela, une fonction RandLS() est exécutée dans une opération 450 et reçoit comme argument I[i] et t. La fonction RandLS() est très similaire à la fonction RandS(), sauf 20 qu'elle ne crée dans la sous-case restante (c'est-à-dire celles désignée par l' indice I[i]) qu'avec une probabilité égale à la partie décimale de t (c'est-à-dire t moins partie entière de t). Si une graine est ainsi générée, elle est également reçue dans le vecteur N. Ensuite, dans une opération 455, une fonction Up() qui reçoit ijk comme argument est 25 exécutée. Cette fonction détermine si la case ijk actuelle est la dernière case fille de la case parente de niveau supérieur, c'est-à-dire dans l'exemple ici décrit si ijk modulo (2,2,2) vaut (1,1,1). Si c'est le cas, alors les huit sous-cases de la case parente de niveau supérieur ont été traitées, et la fonction décrémente l'indice de profondeur h. La valeur ijk est alors mise à jour en gardant la partie entière d'une division par (2,2,2), obtenant 30 ainsi l'indice de la case parente de niveau supérieur. Par exemple, si la profondeur h était égale à 3 et l'indice ijk égal à (3,7,7), le nouvel indice h est égal à 2, et l'indice ijk égal à (1,3,3), qui correspond à la case parente. Ce nouvel indice est lui-même testé pour 3066953 19 déterminer si la case ijk actuelle est la dernière du niveau donné. L'opération est répétée jusqu'à déterminer une case ijk qui n'est pas la dernière case fille de son parent de niveau supérieur, ou qui est au niveau le plus élevé. Ainsi, lorsque la dernière sous-case du niveau le plus profond est traitée, la fonction Up() remonte jusqu'au niveau 0. 5 Ensuite, un test dans une opération 460 détermine si toutes les cases ont été traitées (c'est-à-dire si h a été décrémenté jusqu'à 0). S'il reste des sous-cases à parcourir, une fonction Nxt() qui reçoit ijk comme argument est exécutée dans une opération 465, et sinon la fonction SC() s'arrête dans une opération 499. La fonction Nxt() est agencée pour 10 organiser le parcours des sous-cases ayant une même case parente. En effet, comme à chaque niveau une case donnée se sous-divise en huit sous-cases, la case ijk de niveau h est une parmi huit sous-cases de sa case parente. La fonction Nxt() ajuste ijk pour parcourir les sous-cases d'une même case parente selon un ordre garantissant que toutes les cases sont explorées, la dernière sous-case visitée ayant un indice ijk modulo (2,2,2) 15 égal a (1,1,1). La boucle reprend alors avec l'opération 410, pour redescendre aussi profond que nécessaire dans la nouvelle case, etc. Cet agencement est particulièrement avantageux, car il permet de paralléliser massivement les opérations de la fonction SC(), par exemple pour les exécuter sur un 20 processeur graphique. En variante, la fonction SC() pourrait être programmée de manière récursive, ce qui est plus simple en termes de programmation, mais pose des problèmes pour un traitement parallélisé sur un GPU ou une architecture sans pile de données à 1 ' exécution. 25 La figure 5 représente un exemple d'une fonction mise en oeuvre par le constructeur 4 pour fabriquer l'objet 14 à partir des données d'objet 12. La fabrication est une boucle dans laquelle les données d'objet 12, qui décrivent la forme de l'objet en trois dimensions, ainsi que l'orthotropie recherchée pour chaque portion, 30 sont progressivement dépilées pour construire l'objet 14. 3066953 20 Une première opération est exécutée pour récupérer toutes les informations relatives à une région donnée. En effet, comme la fonction SC() est déterministe, les graines de branche seront toujours les mêmes pour une même région de l'espace. 5 Par conséquent, il est possible de découper l'objet en plusieurs régions, par exemple des cubes, et de calculer les branches pour chaque cube, en parallèle. Une approche procédurale serait également possible, mais aurait un coup de calcul très supérieur car le calcul des branches nécessite de déterminer les k voisins les plus proches pour chaque graine de branche. 10 Ainsi dans une opération 500, les données d'objet 12 sont dépilées par une fonction Pope, et stockées dans une variable Rg. Cette variable reçoit toutes les données de tenseurs orthotropiques d'un bloc courant à imprimer et les données d'orientation (angles) de celles-ci, définissant ainsi un champ de tenseurs variant dans l'espace. 15 Ensuite, dans une opération 505, une fonction Tens() extrait toutes les données de tenseurs orthotropiques et les données d'orientation correspondant aux champ de tenseurs et les range dans un vecteur t[]. Cette fonction peut être une simple copie ou comprendre une opération de normalisation ou d'homogénéisation pour tenir compte d'un contexte lié à 20 un objet particulier. Le vecteur t[] est exploité dans une opération 510 par une fonction Str() qui le reçoit comme argument, ainsi qu'un rayon rmin qui représente le rayon minimal d'impression de l'imprimante 6. 25 La fonction Str() est importante car son résultat est un champ de vecteurs h[], d[] et r[] qui déterminent le nombre de graines de branche et l'épaisseur des branches correspondantes dans la mousse orthotropique qui sera imprimée. 30 Pour cela, la fonction Str() accède à la mémoire 8 pour déterminer, pour chaque élément du vecteur t[] un triplet associant un rayon r, une densité d et des valeurs de vecteur de 3066953 21 déformation hx, hy, hz. Comme on l'a vu, ce triplet a été calculé précédemment par le modélisateur 10. Dans l'exemple décrit ici, les triplets ont été déterminés en appliquant la théorie de 5 l'homogénéisation à un motif de mousse orthotropique répliqué. La théorie de l'homogénéisation a été validée pour des objets réguliers, c'est-à-dire composés uniquement d'un seul motif répété. Cependant, le but recherché est précisément une hétérogénéité d'élasticité, et donc la mousse orthotropique formant l'objet 14 ne sera par nature pas d'un seul motif répété. 10 Les travaux de la Demanderesse ont néanmoins montré que l'hypothèse d'homogénéité restait valable dans le cas des mousses orthotropiques, avec une correspondance d'autant meilleure que la densité est élevée, car la mousse à une échelle petite par rapport au volume rempli. Pour cette raison, la fonction Str() est prévue pour choisir en priorité un 15 triplet dans lequel le rayon r vaut rmin, afin de maximiser la densité d. La figure 6 représente un exemple de diagramme tridimensionnel reliant tous les triplets pour un type de matériau additif choisi, comme une résine photosensible commercialisée sous le nom « B9R-1-Cherry » par la société B9Creators (marque déposée). Lorsqu'une valeur n'est pas explicitement présente, elle peut être interpolée à partir des valeurs présentes les plus 20 proches. Les données représentées sur la figure 6 peuvent aussi être approximées par un polynôme, afin d'impliciter encore plus les données. Lorsque que, pour une élasticité donnée, le rayon rmin nécessiterait une densité trop importante, c'est la prochaine épaisseur réalisable après rmin qui est retenue, etc. 25 Ensuite, les branches de la mousse orthotropique vont être générées afin de définir pour chaque point de la région Rg si l'imprimante 6 doit ajouter de la matière, ou pas. Dans une opération 515, un point s est initialisé de manière aléatoire dans Rg. Ensuite, dans une opération 520, les graines de branches du bloc courant et les branches 30 correspondantes sont calculées au moyen de la fonction GB(), en tenant compte des données d'orientation de l'opération 500. 3066953 22 Une boucle est alors lancée qui parcourt toutes les branches, et définit comme plein les points à l'intérieur d'un espace situé autour de chaque branche ayant l'épaisseur du rayon r associé à la région de cette branche. 5 Pour cela, dans une opération 525, un indice i est initialisé à 0 pour parcourir le vecteur B issu de l'opération 520, puis dans une opération 530, une fonction Pnt() détermine les emplacements qui doivent être imprimés autour de la branche B[i], et commande l'imprimante 6 en conséquence. 10 Ensuite, un test vérifie dans une opération 535 si toutes les branches ont été parcourues. Si ce n'est pas le cas, alors l'indice i est incrémenté dans une opération 540 et la boucle reprend avec la branche suivante. Si c'est le cas, alors le calcul est répété pour la région suivante avec l'opération 500. 15 Une fois que toutes les couches Rg ont été traitées, l'objet 14 a été imprimé et la fonction s'arrête avec une opération 599. Comme on l'a vu plus haut, les régions peuvent être traitées en parallèle, et la fonction de la figure 5 pourra être modifiée en conséquence. De plus, la fonction PN() de la fonction 20 GB() est susceptible d'aller sélectionner des graines en dehors de la région Rg traitée. Grâce au caractère déterministe de la sélection des graines, cela ne pose néanmoins pas de problème de discontinuité aux frontières des régions, le contenu restant strictement identique de part et d'autre. De plus, lorsqu'une branche aura été déterminée entre deux graines appartenant à une première région Rgl et une deuxième région Rg2, et que la 25 région Rgl fait l'objet d'un calcul avant la région Rg2, il ne sera plus nécessaire de reprendre ce calcul pour cette branche pour la région Rg2. La figure 7 montre un exemple d'application de l'invention dans le plan (2D) dans lequel l'objet produit se déforme en U lorsqu'il est plié selon un axe, et en C lorsqu'il est plié 30 selon un autre axe. 3066953 23 Les fonctions GB() et SC() sont donc particulièrement avantageuses car elles permettent de réduire fortement la quantité d'informations à stocker d'un bout à l'autre de la chaîne. En effet, les mousses orthotropiques sont intégralement définies par le champ de tenseurs et leurs orientations. 5 Ainsi, de la production des triplets à leur consommation avec un champ de tenseurs pour fabriquer les objets, un nombre réduit de paramètres suffisent à définir les mousses orthotropiques de l'invention. Cela permet d'économiser une quantité de données précédemment ingérable dans l'état de l'art, avec un coût de calcul raisonnable. De plus, 10 il apparaît que le constructeur 4 comme le modélisateur 10 sont chacun un générateur de graines de branches utilisées pour définir si des emplacements sont pleins ou vides dans un objet final, qu'il serve à une qualification d'élasticité ou dans un objet à fabriquer. Enfin, la méthode proposée permet de générer une élasticité orthotropique librement orientable dans une pièce ce qui n'est possible avec aucune autre méthode de l'état de 15 l'art. La Demanderesse a étudié l'application de l'invention aux diverses méthodes de fabrication additive et a validé les éléments suivants : - Pour une impression à filament, l'impression est possible avec une variation de 20 l'élasticité selon deux axes seulement, l'élasticité étant homogène selon la troisième direction, - Pour une impression à poudre, l'épaisseur obtenue pour les branches peut descendre à 1001.1m, et - Pour une impression à poudre, l'épaisseur obtenue pour les branches peut descendre 25 à 2501.1m. De nombreuses variantes peuvent être envisagées. En effet, concernant les emplacements correspondant à une surface de l'objet, le traitement peut être complété pour apporter une « peau » ou du moins offrir une surface régulière (nonobstant les trous). Pour cela, il est 30 possible de rajouter une couche supplémentaire de matière le long de la surface de l'objet, d'épaisseur choisie, donnant ainsi un aspect lisse à celui-ci. Optionnellement cette couche peut être partiellement ajourée. 3066953 24 De même, lorsqu'il est détecté qu'un emplacement q est proche de deux branches sans être suffisamment proche compte tenu de leur rayon, il peut néanmoins être prévu d'imprimer l'emplacement correspondant, afin d'améliorer la tenue aux embranchements des branches entre elles. La création des triplets peut être modifiée pour tenir compte 5 d'analyses de conformité de l'élasticité. Enfin, pour des raisons esthétiques il est possible d'utiliser une densité plus faible et un rayon plus fort pour une élasticité donnée, ou tout autre choix pour faire correspondre un rayon et une densité à l'élasticité choisie. Un autre avantage majeur de l'invention est qu'elle permet de réaliser des objets dont la 10 rigidité est connue avec un poids très inférieur aux techniques classiques, car l'orthotropie permet de mieux s'adapter à des contraintes inhomogènes dans les pièces. Bien que l'exemple décrit plus haut soit en référence à une fabrication additive, les mousses orthotropiques de l'invention pourraient être réalisées différemment, par 15 exemple par moulage ou par extrusion. REVENDICATIONS1. Dispositif de traitement de données pour fabrication de mousse, comprenant une mémoire (8) agencée pour recevoir des données d'emplacement désignant un emplacement et un élément de volume contenant cet emplacement, et un générateur (4) agencé pour déterminer des données de fabrication additive indiquant si un emplacement associé à des données d'emplacement est vide ou plein, caractérisé en ce que : - la mémoire (8) est agencée pour recevoir des données de densité, des données de déformation et des données de rayon, et en ce que - le générateur (4, 10) est agencé pour calculer, pour un emplacement donné désigné par des données d'emplacement, des données de graines de branche désignant des emplacements de graines de branches d'un jeu de graines de branches associé à l'emplacement donné, - le générateur est agencé pour déterminer lesdits emplacements de graines de branche dans une pluralité d'éléments de volumes comprenant l'élément de volume contenant l'emplacement donné d'une part et des éléments de volumes sélectionnés dans un voisinage de l'élément de volume contenant l'emplacement donné d'autre part, chaque élément de volume recevant un nombre de graines de branche tiré de données de densité associées à cet élément de volume, - le générateur (4, 10) est en outre agencé pour calculer une mesure entre une première graine de branche et une deuxième graine de branche à partir de la distance entre l'emplacement de la première graine de branche d'une part et la deuxième graine de branche d'autre part, en pondérant cette distance en fonction de données de déformation associées à la première graine de branche et à la deuxième graine de branche, - le générateur (4, 10) est en outre agencé pour sélectionner au moins deux graines de branches pour chaque graine de branche, de sorte que ces au moins deux graines de branches sont les voisins les plus proches selon la mesure calculée par le générateur (4, 10), et - le générateur (4, 10) est en outre agencé pour définir des données de fabrication indiquant qu'un emplacement est plein lorsque la distance entre ledit emplacement et sa projection sur une des branches reliant chaque graine de 3066953 26 branche à ses voisins les plus proches est inférieure à une distance tirée des données de rayon. 2. Dispositif selon la revendication 1, dans lequel le générateur (4, 10) est outre 5 agencé pour calculer la mesure entre une première graine de branche et une deuxième graine de branche en la pondérant en fonction d'un référentiel associé aux données de déformation. 3. Dispositif selon la revendication 1 ou 2, dans lequel le générateur (4, 10) est 10 agencé pour sélectionner les voisins les plus proches d'une graine de branche donnée parmi un sous-ensemble de graines de branches qui exclut les graines de branche dont les emplacements sont situés à une distance de l'emplacement de la graine de branche donnée supérieure à un seuil tiré des données de déformation et du nombre de voisins les plus proches recherchés. 15 4. Dispositif selon l'une des revendications précédentes, dans lequel le générateur (4, 10) est agencé pour allouer les graines de branche de manière déterministe au sein de chaque élément de volume 20 5. Dispositif selon l'une des revendications précédentes, dans lequel le générateur (4, 10) est agencé pour déterminer lesdits emplacements de graines de branche en divisant chaque élément de volume de la pluralité d'éléments de volume en un ou plusieurs sous-éléments de volume dont le nombre est calculé à partir des données de densité et du volume de chaque élément de volume, en déterminant de manière 25 pseudo-aléatoire en fonction des données d'emplacement et des données de densité des sous-éléments de volume recevant une graine de branche, et en déterminant de façon pseudo-aléatoire dans chaque sous-élément de volume recevant une graine de branche des données de graine de branche désignant un emplacement dans ce sous-élément de volume. 30 6. Dispositif selon l'une des revendications 1 à 5, dans lequel le générateur (4, 10) est un modélisateur (10) agencé pour recevoir un triplet associant des données de densité, des données de déformation et des données de rayon, pour déterminer un 3066953 27 jeu de données de fabrication additive pour un objet de forme sensiblement cubique à partir de ce couple, et pour appliquer une méthode d'homogénéisation pour en tirer une donnée de tenseur. 5 7. Dispositif selon la revendication 6, dans lequel le modélisateur (10) est agencé, pour un triplet donné, pour déterminer plusieurs jeux de données de fabrication additive en faisant varier les déterminations pseudo-aléatoires, et pour réaliser une moyenne des données de tenseur pour le triplet donné. 10 8. Dispositif selon l'une des revendications 1 à 5, dans lequel le générateur (4,10) est un constructeur (4) agencé pour recevoir des données d'objet (12) définissant la forme d'un objet à produire par fabrication additive et comprenant des données de tenseur associées à des emplacements désignés par les données d'objet, et, pour certains au moins des emplacements des données d'objets, pour déterminer des 15 données de déformation, des données de référentiel, des données de rayon et des données de densité à partir des données de tenseur associées, et pour déterminer des données de fabrication additive correspondantes. 9. Procédé de fabrication d'une mousse orthotropique, caractérisé en ce qu'il 20 comprend les opérations suivantes : - recevoir des données d'objet associant des données d'emplacement et des données de tenseur, les données de tenseur étant associées à des données de densité, des données de rayon et des données de déformation, - déterminer des emplacements de graines de branche dans une pluralité 25 d'éléments de volume, le nombre de graines de branche dans un élément de volume donné étant déterminé à partir des données de densité associées aux emplacements de l'élément de volume donné, - pour chaque graine de branche, calculer une pluralité de mesures entre cette graine de branche en tant que première graine de branche d'une part et une 30 deuxième graine de branche d'autre part, la deuxième graine de branche étant choisie pour chaque mesure parmi les autres graines de branche, la mesure étant calculée à partir de la distance entre l'emplacement de la première graine de 3066953 28 branche d'une part et la deuxième graine de branche d'autre part, en pondérant cette distance en fonction de données de déformation associées à la première graine de branche et à la deuxième graine de branche, - sélectionner au moins deux graines de branches pour chaque graine de branche, 5 de sorte que ces au moins deux graines de branches sont les voisins les plus proches dans la pluralité de mesures calculées pour chaque graine, et - définir des données de fabrication indiquant qu'un emplacement donné est plein lorsque la distance entre ledit emplacement donné et sa projection sur une des branches reliant chaque graine à ses voisins les plus proches est inférieure à une 10 distance tirée de données de rayon, et - fabriquer une mousse suivant les emplacements pleins définis. 10. Procédé selon la revendication 9, dans lequel la mesure entre une première graine de branche et une deuxième graine de branche est pondérée en fonction d'un 15 référentiel associé aux données de déformation. 11. Procédé selon la revendication 9 ou 10, dans lequel pour sélectionner les voisins les plus proches d'une graine de branche donnée, la pluralité de mesures est calculée avec un sous-ensemble de graines de branches qui exclut les graines de 20 branche dont les emplacements sont situés à une distance de l'emplacement de la graine de branche donnée supérieure à un seuil tiré des données de déformation et du nombre de voisins les plus proches recherchés. 12. Procédé selon l'une des revendications 9 à 11, dans lequel lesdits emplacements 25 de graines de branche sont déterminés de manière déterministe. 13. Procédé selon l'une des revendications 9 à 12, dans lequel lesdits emplacements de graines de branche sont déterminés en divisant chaque élément de volume de la pluralité d'éléments de volume en un ou plusieurs sous-éléments de volume 30 dont le nombre est calculé à partir des données de densité et du volume de chaque élément de volume, en déterminant de manière pseudo-aléatoire en fonction des données d'emplacement et des données de densité des sous-éléments de volume recevant une graine de branche, et en déterminant de façon pseudo-aléatoire dans 3066953 29 chaque sous-élément de volume recevant une graine de branche des données de graine de branche désignant un emplacement dans ce sous-élément de volume. 14. Procédé selon l'une des revendications 9 à 13, dans lequel l'opération de 5 fabrication de mousse est réalisée par fabrication additive.