J.C. Tchang |
Original Version On Philo's Site. |
Edger2, est un utilitaire permettant d'ajouter des lignes LDraw sur un maillage de facettes.
L'utilitaire Edger de Lee Gaiteri, permet de créer des lignes conditionnelles sur les bords de facettes adjacentes, et des lignes ordinaires sur l'extérieur ou sur un bord adjacent non trouvé (bord orphelin). Mais, il a quelques inconvénients, comme d'exiger une concordance parfaite des facettes (chose difficile à obtenir avec la précision limitée de certains utilitaires comme MLCad), et il ne sait pas traiter directement les sous-fichiers ou primitives. Comme nous avons eu une formation C++ au travail, j'ai suggéré d'écrire une version améliorée de Edger comme exercice d'application. Edger2 en est le résultat...
C'est une simple application en ligne de commande. Le code source est fourni ci-dessous, pour celui qui voudrait l'intégrer dans une interface plus conviviale. Vous pouvez également utiliser l'interface graphique LETGUI crée par Michael Heidemann (hautement recommandé !).
Voici une copie d'écran d'un exemple d'exécution :
Nota : pour une description plus complète de leurs utilisations, seules ou associées, voir dans les exemples plus bas.
Il est possible de lancer Edger2 à partir d'une interface
plus conviviale que la ligne de commande. LETGUI crée par Michael Heidemann
est fait pour cela.
Pour plus d'informations générales sur cette interface, allez sur la page LETGUI.
Le programme Edger2 a été interfacé dans LDForge.
Voir le chapitre : Programme de génération de lignes sur un maillage : Edger2.
Edger2 a été intégré dans l'éditeur de pièce LD Part Editor, voir la page : LD Part Editor, et particulièrement le chapitre Génération de lignes sur un maillage : Edger2.
De gauche à droite :
Ligne de commande :
edger2 edg1.dat edg1o1.dat edger2 -c edg1.dat edg1o2.dat
Ici, nous voyons le rôle de la précision. L'option -p
contrôle la distance maximum entre deux points que Edger2 va considérer comme communs.
La pièce de cet exemple a été construite par duplication et rotation d'une section.
En raison d'arrondis de calculs en faisant ces rotations (MLCad est limité en précision,
LDView est seulement un peu meilleur), les points des facettes adjacentes n'ont pas
exactement les mêmes coordonnées. Si la précision spécifiée est trop haute, des points éloignés
peuvent être considérés comme communs et des lignes rouges peuvent être crées.
La valeur par défaut pour la précision est de 0.001.
Ligne de commande : edger2 -p 0.0001 edg1.dat edg1p1.dat
L'option -af spécifie l'angle entre deux facettes
qui est assez plat pour ne pas avoir besoin de lignes conditionnelles.
Dans l'exemple montré, -af est mis à 0, et Edger2
insère inutilement des lignes conditionnelles sur les bords plats.
La valeur par défaut est -af 0.1 (0.1°).
Ligne de commande : edger2 -c -af 0 edg1.dat edg1a1.dat
L'option -ae spécifie l'angle au dessus duquel
Edger2 crée des lignes de bord normales. Ici nous avons mis ae à 20°,
et la jonction entre les sections (qui ont un angle d'environ 30°) reçoivent
des lignes de bords au lieu de lignes conditionnelles. La valeur par défaut est
-ae 60 (60°).
Ligne de commande : edger2 -c -ae 20 edg1.dat edg1a2.dat
L'option -ac spécifie l'angle maximum au dessous
duquel Edger2 crée des lignes conditionnelles. Ici nous avons mis ac à 20°,
et les jonctions entre les sections (qui ont un angle d'environ 30°) sont dans
le "no mans land" entre lignes conditionnelles et lignes de bord. Elles
prennent les deux types : lignes de bord ET lignes conditionnelles.
Elles sont toutes les deux colorées en vert pour mieux les distinguer :
L'utilisateur doit en supprimer une manuellement. Dans le fichier LDraw résultant,
la ligne de bord est suivie par la ligne conditionnelle. Ce mode est utile
pour valider les fichiers 3D comme les fichiers LDraw reçus du
LEGO Universe Team (voir ici
pour plus de détails).
Ligne de commande : edger2 -c -ac 20 edg1.dat edg1a3.dat
Le comportement des lignes orphelines est contrôlé avec les options -u.
Avec -u+ Edger2 crée uniquement des lignes sur les bords orphelins.
Cette option est utile pour créer la ligne de bord qui sera utilisée par exemple par
Coverer ou Ytruder
(voir également l'usage pour la détection des jonctions en T, à la fin de cette page).
Lorsque vous n'avez pas besoin de ces lignes, utilisez l'option -u-.
Notez que vous pouvez utiliser -u- et -u+
en même temps : Dans ce cas, Edger2 ne crée pas de nouvelles lignes ! Nous verrons plus
loin l'usage de cette possibilité.
Ligne de commande :
Edger2 -u+ -c edg1.dat edg1u1.dat Edger2 -u- -c edg1.dat edg1u2.dat
Nous pouvons restreindre la création des lignes conditionnelles au surfaces convexes
en utilisant l'option -cx, ou aux surfaces concaves avec -cv.
Techniquement, les lignes conditionnelles sont utiles uniquement sur les surfaces convexes, mais depuis que
le "lisseur" de LDView a besoin de lignes conditionnelles partout pour faire son merveilleux travail,
je ne sais pas si cette option aura beaucoup d'usage. Naturellement, Edger2 a besoin de reconnaître
l'intérieur de l'extérieur, pour savoir si une surface est convexe ou concave. Une
méta-commande BFC est donc nécessaire dans le fichier d'entrée.
L'option -cv crée des lignes conditionnelles seulement
sur des surfaces concaves. Ajouté dans le souci d'être complet, mais devrait être
également le plus souvent inutile !
Le dernier exemple ("bad BFC" à droite) montre le besoin d'avoir un fichier avec une orientation correcte de toutes les facettes : En dépit de l'option convexe utilisée, des lignes conditionnelles ont été ajoutées sur les facettes de la partie concave, ayant une mauvaise orientation.
Ligne de commande :
Edger2 -cx -c edg2.dat edg2cx.dat Edger2 -cv -c edg2.dat edg2cv.dat Edger2 -cx -c edg2a.dat edg2cxbad.dat
Nouveau en version 1.2 : Comme les pièces moulées ont rarement des arêtes vives, le comportement par défaut de Edger2
est de supposer que l'angle de la normale aux faces se trouve entre 0° et 90°. Cela
a l'avantage qu'il travaille correctement même si la pièce est un patchwork
d'éléments BFC directs et inverses. Mais, parfois, il est utile qu'il soit capable
de gérer les angles aigus correctement. Dans l'exemple ci-dessus, Edger2 mettra
des lignes conditionnelles au lieu de lignes de bord sur les coins du triangle,
surtout si le seuil "ligne conditionnelle"/"ligne de bord" est mis haut.
Avec l'option -b, l'angle entre les normales est évalué
sur une fourchette de 0° à 180°, mais le fichier doit être certifié BFC pour fonctionner.
Ligne de commande :
Edger2 -ac 70 edgebin.dat edgenob.dat Edger2 -ac 70 -b edgebin.dat edgeb.dat
L'option -w demande à Edger2 de sauvegarder uniquement
les lignes nouvellement créées, sans les entités du fichier d'entrée.
Ce comportement est similaire à celui de Edger.
Ligne de commande : Edger2 -w -c edg1.dat edg1w.dat
Les options -dc et -de permettent
de supprimer des lignes existantes avant de les régénérer. Notez que cela
n'affecte que le fichier principal en cas de sous-fichier ou primitive et pas ces derniers,
sauf si les options -s ou -i
sont utilisées (voir ci-dessous).
Ligne de commande : Edger2 -dc -de -ac 30 -ae 50 LUT2543.dat edg3d.dat
La décomposition de sous-fichiers est une des améliorations importantes de Edger2
par rapport à Edger. Par défaut Edger2 regarde uniquement si des lignes sont manquantes,
dans le fichier principal, mais avec cette option, il peut également regarder
dans les sous-fichiers ou primitives. Naturellement c'est principalement utile à la
jonction entre facettes du fichier principal et des facettes de primitives,
ou pour créer des lignes conditionnelles à la jonction entre sous-fichiers.
C'est le cas dans l'exemple montré. Les quatre sections, formant cette roue,
reçoivent des lignes conditionnelles à leurs rencontres. Par défaut,
les sous-fichiers sont uniquement recherchés dans le dossier contenant le fichier d'entrée,
ou en relatif avec les dossiers parts\s et \p de LDraw.
Ligne de commande : Edger2 -s edg4.dat edg4s.dat
Si vous voulez regarder aussi sur des primitives, vous devez spécifier le chemin
de LDraw. Cela est fait avec l'option -l.
En plus du dossier du fichier d'entrée, Edger2 cherche dans les chemins spécifiés.
Lorsque -l "ldp" est spécifié, il cherche dans les dossiers
ldp\p\, ldp\parts\, ldp\parts\s\, ldp\Unofficial\p\, ldp\Unofficial\p\parts\,
ldp\Unofficial\p\parts\s\. Vous pouvez avoir plusieurs options -l,
ajoutant de nouveaux chemins de recherche.
L'exemple ci-dessus montre une forme constitué de primitives de cylindres et cônes empilés. Edger2 ajoute des lignes conditionnelles à leurs jonctions (au milieu). La troisième image montre le bon lissage en résultant.
Ligne de commande : Edger2 -s -l c:\ldraw edg5.dat edg5l.dat
Nouveau en version 1.3 : Les primitives des portions de cylindre (n-ncyli.dat sauf 4-4cyli.dat, ...)
ou de sphère (n-nsphe.dat sauf 8-8sphe.dat) ont des lignes conditionnelles intégrées aux extrémités.
Pour les cylindres ces lignes sont tangentes aux plans de raccordements,
et pour les sphères elles sont tangentes aux cylindres de raccordements.
Si vous essayez de joindre quelque chose dirigé vers l'intérieur du plan tangent, les lignes conditionnelles intégrées
ne montrent pas correctement ce qui devrait être (image de gauche). Edger2 crée une nouvelle ligne
conditionnelle superposée dans ce cas (image du milieu).
Ligne de commande : Edger2 -s -l c:\ldraw edg6.dat edg6a.dat
Nota 1 : Malheureusement rien n'empêche les lignes conditionnelles d'apparaître, au mauvais angle d'incidence si l'on joint quelque chose dirigé vers l'extérieur du plan tangent (image de droite, fichier exemple edg6b.dat). Edger2 ne peut rien faire dans ce cas.
Nota 2 : Les portions de cylindre se raccordent correctement avec d'autres portions de cylindre, comme les portions de sphère avec d'autres portions de sphère, car les lignes conditionnelles de chaque bord complètent les autres convenablement.
Avec l'addition de la capacité de traiter les sous-fichiers (incluant la gestion du sens de faces BFC pour les options convexe et concave), j'avais l'outil nécessaire à la décomposition des sous-fichiers, en respectant le sens BFC des faces. Donc j'ai ajouté l'option -i pour écrire ces données décomposées dans le fichier de sortie, au lieu de la référence du sous-fichier (ligne LDraw type 1).
Ces options fonctionnent aussi bien sur les sous-fichiers et les primitives. La seconde option supprimant tous les commentaires présents dans ces fichiers.
Pour utiliser Edger2 uniquement en décomposeur, il faut utiliser ensemble les deux options -u- et -u+ (cela empêche Edger2 d'ajouter toute nouvelle ligne). La commande suivante décompose les cônes de l'exemple précédent :
Ligne de commande : Edger2 -u- -u+ -i- -l c:\ldraw edg5l.dat edg5linl.dat
Les facettes se rejoignant sur un bord et non sur un sommet forment une jonction en T.
Cela doit être évité, car cela cause un artefact (objet artificiel) dans la visualisation
(voir à ce sujet le message de la
file de discussion Lugnet).
Les "trous" sont de petits espaces rendant une pièce non fermée, et visualisant donc
une partie de sa face interne.
L'exemple suivant montre un motif avec beaucoup de jonctions en T, et un petit trou sur le bord gauche. Utiliser la détection des bords orphelins de Edger2 montre clairement ces problèmes, en ajoutant des lignes rouges dans le milieu du motif.
Ligne de commande : Edger2 -u+ -s -l c:\ldraw tjunc.dat tjunco.dat
La visualisation du résultat en mode filaire donne :
Le programme Edger2 et son manuel d'utilisation appartiennent à (c) Philo (Philippe Hurbain).
Vous pouvez le retrouver sur son site et sa page des utilitaires LDraw, et sur la version d'origine en anglais de cette page.
Traduction et Adaptation : J.C. Tchang.