stl2dat
Convertisseur STL vers LDraw
Mise à jour de la page : 17 septembre 2015.
L'utilitaire stl2dat écrit par Marc Klein permet de convertir des fichiers .stl issus de logiciels CAO
comme Solidworks, Autocad, etc... en fichiers .dat pour les programmes compatibles LDraw.
Créer des pièces LDraw à la main est intéressant, mais quand vous avez accès à un logiciel moderne de CAO, c'est un peu fastidieux.
Ainsi j'ai (dixit l'auteur) recherché une solution pour convertir les modèles CAO en un fichier .dat pour LDraw.
J'aurais pu faire un outil natif, mais ce travail est beaucoup plus compliqué, et il aurait seulement été valable pour
un logiciel de CAO particulier.
J'ai trouvé que le format stl contient suffisamment d'informations pour construire un fichier .dat.
Ainsi j'ai décidé de faire cet outil de conversion de fichier STL en fichier DAT.
stl2dat lit un fichier au format STL (stéréo-lithographique) texte ou binaire,
et convertit les facettes triangulaires de ce fichier en facettes triangulaires ou quadrangulaires dans un fichier au format LDraw,
crée des lignes de bords et des lignes conditionnelles, et substitue toutes ces entités, lorsque c'est possible,
par des primitives LDraw standards comme un cylindre (n-4cyli.dat) ou un bord circulaire (n-4edge.dat).
C'est une simple application en ligne de commande.
Il est possible de l'utiliser sous Windows, grâce à l'interface LETGUI de Michael Heidemann, ce qui est hautement recommandé (voir plus bas).
Navigation rapide
Téléchargement
Programme et exemple :
- stl2dat.exe v1.22 (58 Ko) le programme lui-même.
- 32137.dat (62 Ko) un exemple de pièce convertie avec stl2dat.
Source du programme :
Pour configurer Solidworks :
- stl.reg Un fichier de réglage pour définir les paramètres d'enregistrement au format STL pour Solidworks
(double-cliquer sur le fichier pour l'installer).
- stl.swb Une macro pour définir les paramètres d'enregistrement au format STL pour Solidworks
- stl2000.reg (Solidworks 2000), pour définir le paramètre de tessellation ou facettisation
(voir chapitre : Conseils de modélisation). (double-cliquer sur l'un des fichiers pour l'installer).
- stl99.reg (Solidworks 99).
- stl98.reg (Solidworks 98+ ou avant).
Historique du programme
- Version 1.22 : 11/07/2011
Suppression de traces en mode nodebug.
- Version 1.21 : 03/05/2011
Correction d'un bug stoppant la lecture lorsqu'une facette trop petite était rencontrée.
- Version 1.20 : 03/05/2011
Nouvelle option -oeps utilisée pour la suppression des facettes inutiles.
Debug : Utilisation d'un eps plus lors de la lecture des facettes.
- Version 1.19 : 30/01/2011
Nouvelle option -raw sortie directe sans
aucune optimisation ni calcul de primitives ou d'arêtes.
- Version 1.18 : 19/01/2011
Nouvelle option -out permettant de définir le
nom du fichier de sortie.
- Version 1.17 : 18/01/2011
Correction d'un bug : L'auteur et le nom de
la pièce étaient faux lorsque l'option -o était présente.
- Version 1.16 : 17/12/2010
Suppression d'une trace.
- Version 1.15 : 20/11/2007
Autorise les espaces dans la description.
- Version 1.14 : 21/02/2007
Crée l'entête au nouveau format standard LDraw.
- Version 1.13 : 23/04/2005
Nouvelle option -deps (déterminant maxi) et test des quadrilatères non coplanaires.
Option -o5 inversée. Utilisez -o5 pour ne pas forcer la création des lignes conditionnelles entre faces concaves.
- Version 1.12 : 06/03/2003
Nouvelle option -o5 pour forcer la création des lignes conditionnelles entre faces concaves.
Ces lignes ne sont pas nécessaires pour des programmes comme MLCad ou L3Lab, mais LDLite les utilise pour lisser ces surfaces.
- Version 1.01 : 19/07/2002
Nouvelles options -no1, -no2, -no3, -no4, -no5 pour ne pas écrire certains types d'entités,
et les options -ldr et -dat pour changer l'extension du fichier.
- Version 1.0 : 14/08/2001
Utilisation de plusieurs primitives si la
primitive unique n'existe pas. Exemple pour une portion de cylindre de 5/8 on
utilisera les primitives 2-4cyli et 1-8cyli (5/8 = 4/8 + 1/8). Notez aussi qu'on
utilise la nouvelle primitive 1-16cyli. Cela permet de substituer n'importe
quelle portion de cylindre en primitives.
- Beta 9 : 12/11/2000
Amélioration de la détection des cylindres en vérifiant leur hauteur.
- Beta 8 : 01/09/2000
Amélioration de la détection des arêtes (lignes) inutiles en comptant le nombre de vecteurs normaux adjacents à l'arête.
- Beta 7 : 02/05/2000
Détection des arêtes inutiles (expérimentation).
Matrice de transformation.
- Beta 6 : 13/03/2000
Mon convertisseur stl2dat lit maintenant les fichiers binaires stl. Il identifie les fichiers binaires automatiquement.
J'ai également présenté une nouvelle option pour placer l'origine, parce
que certains programmes de CAO peuvent seulement produire des fichiers stl où
toutes les coordonnées sont positives. Cette option permet de déplacer l'origine
pour le fichier dat.
- Beta 5: 13/03/2000
Le programme détecte maintenant les primitives de
cylindre en se basant seulement sur l'angle entre les facettes. L'ancienne
manière basée sur la différence entre la normale peut être utilisée avec le
commutateur -cn.
Renommage des options pour définir la
couleur pour un type d'entité donnée.
Nouvelle option pour placer une
couleur aléatoire pour les surfaces détectées.
Correction de quelques
bugs.
- Beta 4 : 07/03/2000
J'ai complètement récrit la détection des
primitives et des bords : Maintenant le programme balaye d'abord toutes les
facettes pour créer tous les bords adjacents et pour garder l'information au
sujet des facettes adjacentes. Puis toutes les facettes tangentes sont
regroupées par surface géométrique. Les facettes sont écrites groupées par
surface géométrique, séparées par une ligne vide.
La plupart des options
peuvent maintenant être placées dans la ligne de commande.
Optimisé la
création des lignes conditionnelles : Aucune création de ligne inutile.
- Beta 3 : 14/02/2000
On crée maintenant correctement les lignes de bord.
J'ai retiré l'anomalie des "faces partiellement adjacentes", c'était
un bug idiot, les triangles étaient fusionnés trop tôt.
- Beta 2 : 10/02/2000
On crée maintenant les primitives standard
n-4cyli.dat et n-4edge.dat.
Quelques bugs ont été également corrigés.
- Bêta 1 : 28/01/2000
Première version.
Installation
Installez le programme dans un simple dossier, comme vos autres utilitaires LDraw.
Exemple : c:\lego\stl2dat.
Si vous utilisez Solidworks installez la macro stl.swb avec vos autres macros, et
double-cliquez sur stl.reg pour enregistrer dans votre base de registre les paramètres d'enregistrement au format stl.
Double-cliquez également sur le fichier stl2000.reg (Solidworks 2000) ou stl99.reg (Solidworks 99) ou stl98.reg (Solidworks 98+ ou avant),
pour définir le paramètre de tesselation (voir chapitre : Conseils de modélisation).
Description
Description des fonctionnalités du programme et son mode d'utilisation.
Voici une copie d'écran d'une simple exécution du programme :
Utilisation
- Créez la pièce avec un logiciel de CAO.
Utilisez l'unité
LDraw, pas les millimètres (20 LDU = 1 longueur de brique 1x1 = 8 mm).
Pour une bonne substitution des facettes et des bords par des primitives LDraw,
suivre les conseils du chapitre : Conseils de modélisation.
- Exportez le modèle dans le format stl. Avec Solidworks, utilisez
la commande "Enregistrer sous...".
Réglez les paramètres de stl : Déviation
= 0,0005, Tolérance d'angle = 22,5°.
La tolérance d'angle est importante
pour la détection des primitives cylindriques.
Avec Solidworks, vous devez
utiliser la macro stl.swb (voir chapitre : Téléchargement) pour
cela.
- Exécutez ensuite stl2dat pour convertir le fichier.
Le
programme doit s'exécuter dans une fenêtre DOS (Invite de commande) ou être démarré avec
Démarrer / Exécuter. Le programme peut s'exécuter sous Windows, même s'il a une interface
de type console.
On peut également préférer l'interface graphique LETGUI (recommandé).
Essayez différentes valeurs
d'eps d'angle. On obtient un bon résultat avec les options -a 22,51 -eps 0,01
- Éditez le fichier .dat pour ajouter les informations manquantes
comme les commentaires ou finaliser l'entête.
Substituez manuellement les primitives complexes,
comme les connecteurs Technic, axes, chevilles, goujons, etc..., car c'est trop complexe pour être fait
automatiquement.
- Copiez le fichier .dat dans le sous-dossier parts du dossier d'installation de votre
bibliothèque LDraw, et le faire reconnaître dans le fichier Parts.lst, puis utilisez-le
avec un programme compatible LDraw.
Astuce
Pour certaines pièces complexes, il peut être utile de modéliser des sections séparées de la pièce,
et puis fusionner les fichiers .dat résultants. Dans ce cas, il y a généralement des facettes superflues dans ce fichier .dat.
Pour faciliter cette opération, les facettes tangentes sont regroupées. Vous pouvez également employer l'option -cs pour visualiser
plus facilement les surfaces détectées par le programme.
Syntaxe
stl2dat.exe fichier_entrée [ options ] [ nom [ auteur ] ]
fichier_entrée : nom du fichier d'entrée au format STL (Texte ou Binaire).
nom : nom descriptif de la pièce (première ligne de l'entête du fichier dat).
auteur : nom et [pseudo] de l'auteur.
options : options disponibles :
-out nom_fichier : nom du fichier de sortie.
-o X Y Z : point d'origine.
-m X Y Z A B C D E F G H I : matrice de transformation.
-a angle : angle limite pour les lignes conditionnelles (défaut 22.5 degrés).
-aq angle : angle limite pour des quadrilatères (défaut 15 degrés).
-at angle : angle limite pour la suppression des facettes inutiles (défaut 11.25 degrés).
-eps valeur : arrondi de calcul (défaut 0.01).
-teps valeur : distance minimum pour la coïncidence (défaut 0.001).
-deps valeur : déterminant maximum pour les quadrilatères coplanaires (défaut 0.1).
-o4 : pas de fusion des quadrilatères.
-o5 : suppression des lignes conditionnelles internes (parties concaves).
-op : ne pas créer les primitives.
-pp : imprimer les surfaces géométriques.
-cn : détecter les cylindres d'après la différence entre la normale de la facette et la normal de la surface théorique.
-oe : ne pas créer les lignes de bord.
-of : ne pas supprimer les facettes inutiles.
-np : pas de surfaces géométriques planes.
-nc : pas de surfaces géométriques cylindriques.
-nt : pas de surfaces géométriques tangentes.
-c1 couleur : couleur des primitives.
-c2 couleur : couleur des lignes de bords.
-c3 couleur : couleur des triangles.
-c4 couleur : couleur des quadrilatères.
-c5 couleur : couleur des lignes conditionnelles.
-no1 : pas de primitives.
-no2 : pas de lignes de bords.
-no3 : pas de triangles.
-no4 : pas de quadrilatères.
-no5 : pas de lignes conditionnelles.
-cs : couleur aléatoire des surfaces.
-cc : couleur aléatoire des surfaces adjacentes à un cylindre.
-dat : crée un fichier .dat.
-ldr : crée un fichier .ldr.
-nobfc : pas d'instructions BFC.
-silent : n'affiche pas les informations.
-ldraw : ne crée pas l'entête au standard LDraw.
-raw : conversion directe sans aucun calcul.
Exemples
Exemples de lignes de commande :
stl2dat mypart.stl -a 22.5 "Ma première pièce" "Marc Klein"
stl2dat x000.dat -o 100 100 50 "Ma pièce" "Mon nom"
Le résultat est un fichier nommé mypart.dat dans le même dossier que mypart.stl
Exemple du résultat de la conversion :
La pièce 32137 a été créée avec Solidworks, puis convertie avec stl2dat
et visualisée avec MLCad.
Algorithme de conversion
- Le programme balaye d'abord toutes les facettes pour créer tous les bords
adjacents et pour garder l'information au sujet des facettes adjacentes.
- Toutes les facettes tangentes sont regroupées par surface géométrique.
Les types supportés sont : plan, cylindre et toute autre surface tangente.
- Les primitives cylindriques sont détectées en tenant compte de l'angle
entre deux facettes.
- Les bords nécessaires sont crées : lignes du type 2 (lignes de bord) et 5 (lignes conditionnelles).
Intégration de stl2dat dans LETGUI
Il est possible de lancer stl2dat à partir d'une interface
plus conviviale que la ligne de commande. LETGUI crée par Michael Heidemann
est fait pour cela.
Utilisation de l'interface
- Sélectionnez "STL2Dat" dans le menu déroulant "Tool".
- Entrez le chemin d'accès à l'utilitaire stl2dat, si cela n'a pas été configuré, dans le champ "STL2Dat".
- Entrez le nom du fichier d'entrée avec son chemin, dans le champ "Inputfile", ou le sélectionner
avec le bouton .
- Entrez le nom du fichier de sortie, ou gardez celui défini automatiquement, dans le champ "Outputfile".
Ce fichier peut être visualisé en cliquant sur le bouton , ou
édité avec le bouton . L'extension (dat ou ldr) dépend
du choix défini plus bas.
- Modifiez, si besoin les valeurs des options origin (position de l'origine de la pièce), et transformation matrix (matrice de transformation
définissant l'échelle et l'orientation de la pièce).
- Modifiez, si besoin les valeurs d'angle -a, -aq, -at pour les calculs.
- Modifiez, si besoin les valeurs de tolérance -eps, -teps, -deps pour les calculs.
- Entrez, si besoin un numéro de couleur LDraw -c1 pour les primitives, -c2 pour les lignes de bords, -c3 pour les triangles,
-c4 pour les quadrilatères, -c5 pour les lignes conditionnelles.
- Cochez, si besoin le choix de l'extension du fichier de sortie DAT (par défaut) ou LDR.
- Cochez, si besoin l'option -o4 pour ne pas fusionner les triangles en quadrilatères.
- Cochez, si besoin l'option -o5 pour supprimer les lignes conditionnelles en zone concave.
- Cochez, si besoin l'option -op pour substituer si possible des primitives.
- Cochez, si besoin l'option -pp pour imprimer les surfaces géométriques.
- Cochez, si besoin l'option -cn pour détecter la présence de cylindres.
- Cochez, si besoin l'option -ce pour créer des lignes de bords.
- Cochez, si besoin l'option -np pour détecter la présence de surfaces non planes.
- Cochez, si besoin l'option -nc pour détecter la présence de surfaces de cylindre.
- Cochez, si besoin l'option -nt pour détecter la présence de surfaces tangentes.
- Cochez, si besoin l'option -cs pour affecter une couleur aléatoire aux surfaces.
- Cochez, si besoin l'option -cc pour affecter une couleur aléatoire aux surfaces adjacentes aux cylindres.
- Cochez, si besoin l'option -no1 pour ne pas créer de primitive.
- Cochez, si besoin l'option -no2 pour ne pas créer de ligne de bord.
- Cochez, si besoin l'option -no3 pour ne pas créer de triangle.
- Cochez, si besoin l'option -no4 pour ne pas créer de quadrilatère.
- Cochez, si besoin l'option -no5 pour ne pas créer de ligne conditionnelle.
- Modifiez, si besoin la valeur de tolérance pour supprimer les petites surfaces inutiles.
- Cochez, si besoin l'option -of pour ne pas supprimer les petites surfaces inutiles.
- Cochez, si besoin l'option -raw pour convertir uniquement sans aucun autre traitement.
- Cochez, si besoin l'option -nobfc pour ne pas insérer d'instruction BFC dans l'entête (sens des faces).
- Cochez, si besoin l'option -silent pour faire la conversion sans message d'information.
- Cochez, si besoin l'option -ldraw pour ne pas insérer d'entête LDraw dans le fichier de sortie.
- Entrez, si besoin le nom de la pièce (part description) pour l'entête LDraw.
- Entrez, si besoin le nom et pseudo de l'auteur de la pièce (author) pour l'entête LDraw.
- Exécutez la commande en cliquant sur le bouton .
Pour plus d'informations générales sur cette interface, allez sur la page LETGUI.
Développements futurs
Quelques idées :
- Faire une triangulation de Delaunay (meilleure triangulation).
- Détecter les primitives disque (disc), anneau (ring) ou cône (con).
- Détecter les primitives de goujon (pin)
- Fusionner les segments alignés.
- Fusionner les facettes, si possible.
Conseils de modélisation
Quelques recommandations pour utiliser au mieux le programme de conversion de
modèle CAO vers LDraw, et en particulier la substitution par des primitives LDraw courbes :
- Le paramètre de tessellation ou facettisation d'un maillage courbe devrait être défini de sorte qu'un cylindre
régulier soit défini avec 16 facettes (résolution standard LDraw). Dans Solidworks, ceci est fait en
plaçant l'angle minimum à 22,5 degrés et en plaçant la déviation maximum avec
une valeur élevée. Il est difficile de placer cette option dans le dialogue
interactif, ainsi le mieux est d'utiliser l'un des fichiers suivants (voir au chapitre : Téléchargement) :
stl2000.reg (Solidworks 2000)
stl99.reg (Solidworks 99)
stl98.reg (Solidworks 98+ ou avant)
- Créez seulement des cylindres partiels d'un multiple de 22,5 degrés.
Quand ce n'est pas possible, modifiez la conception pour remplacer la partie
du cylindre non entière par des segments de droite.
Exemple :
|
|
Pièce avec un cylindre non multiple de 22,5°. |
Pièce modifiée pour utiliser un cylindre de 90° et 2 facettes de liaison. |
|
|
Facettisation résultante. Notez le nombre impair des facettes du cylindre. |
Facettisation résultante. Le cylindre peut être modélisé avec une primitive LDraw standard. |
|
|
|
Esquisse de la pièce. |
- Parfois, quand le cylindre coupe une autre surface courbe, la facettisation n'est pas bien faite par le programme de CAO.
Pour éviter cela, employez un polygone au lieu d'un cylindre.
Exemple :
|
|
Intersection de deux cylindres natifs. |
Cylindres faits avec des polygones au lieu de cercles. |
|
|
Facettisation résultante. Notez le nombre de triangles non voulus. |
Facettisation résultante. Les facettes définissant le cylindre correspondent exactement aux polygones. |
|
|
|
Esquisse du polygone. |
Droits et Copyright
Le programme stl2dat et son manuel d'utilisation appartient à (c) Marc Klein.
Par convention de l'auteur, il est seulement destiné à être utilisé pour des pièces Lego.
Vous pouvez le retrouver sur son site et sa
page Lego.
Les autres programmes cités appartiennent à leurs ayants droits respectifs.
Adaptation de ce manuel : J.C. Tchang. J'ai volontairement changé certains termes pour rester
plus en cohérence avec mes autres manuels, par exemple : "ligne de bord" pour "arête" ou "bord" ou "ligne de type 2",
"ligne conditionnelle" pour "bord facultatif" ou "ligne de type 5", "facettisation" pour "tessellation".
J'ai également ajouté le chapitre sur LETGUI.