Edger2

Mise à jour de la page : 11 juillet 2013.
    Set 700/1 de 1950
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é !).

 

Téléchargement

 

Historique

 

Utilisation

Voici une copie d'écran d'un exemple d'exécution :

Liste des options


Affichage des options au lancement de Edger2 sans paramètres.

Nota : pour une description plus complète de leurs utilisations, seules ou associées, voir dans les exemples plus bas.

 

Intégration de Edger2 dans LETGUI

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.

Utilisation de l'interface

Pour plus d'informations générales sur cette interface, allez sur la page LETGUI.

 

Intégration de Edger2 dans LDForge

Le programme Edger2 a été interfacé dans LDForge.

Voir le chapitre : Programme de génération de lignes sur un maillage : Edger2.

 

Comment Edger2 fonctionne

 

Exemples

Exemple de base et mode couleurs de contrôle (-c)


De gauche à droite :

Ligne de commande :

Précision des coordonnées (-p)


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

Bords plats (-af)


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

Bords normaux (-ae)


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

Bords intermédiaires (-ac)


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

Bords extérieurs et bords orphelins (-u)


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 :

Faces concaves et convexes (-cx et -cv)


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 soucis 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 :

Arêtes vives (-b)


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 aigüs 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 :

Comportement du fichier de sortie (-w)


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

Lignes de bords existantes (-dc et -de)


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

Traitement des sous-fichiers (-s)


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

Chemins de recherche (-l)


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

Lignes conditionnelles des bords libres de cylindre ou de sphère


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 montre 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.

 

Edger2 est un décomposeur de sous-fichiers (Inliner)

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

 

Edger2 est un vérificateur de "jonctions en T", et de "trous"


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 :

  1. Mauvaise triangulation (jonction en T).
  2. Jonction impropre avec la primitive.
  3. Petit trou

 

Droits et Copyright

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.

Cette page

Traduction et Adaptation : J.C. Tchang.