J.C. Tchang |
Original Version On Philo's Site. |
L'utilitaire Intersector vous permet de couper les faces contenues dans un fichier LDraw, au niveau de leurs intersections. Chaque ensemble de faces est envoyé à l'utilitaire dans des fichiers LDraw séparés. Un troisième fichier, contenant le résultat coupé est crée. Tous les triangles, quadrilatères, lignes, et lignes conditionnelles du fichier coupé sont limités par les triangles et quadrilatères du fichier coupant.
Nota : Les lignes d'intersection ne sont pas calculées. Vous devez utiliser le programme Isecalc avec les mêmes fichiers d'entrée pour les créer.
C'est une simple application utilisant la console DOS, et le code source est fourni ci-dessous pour celui qui l'intégrera dans une interface plus agréable. Vous pouvez également utiliser l'interface de Michael Heidemann LETGUI, (fortement recommandé !).
Voici une copie d'écran d'un exemple d'exécution :
Il est possible de lancer Intersector à 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 Intersector a été interfacé dans LDForge.
Voir le chapitre : Programme de coupe d'entités : Intersector.
Intersector a été intégré dans l'éditeur de pièce LD Part Editor, voir la page : LD Part Editor, et particulièrement le chapitre Coupe d'entités : Intersector.
|
Triangles, |
Lignes, | ||
Extérieur |
Turquoise |
11 |
Blue |
1 |
Intérieur |
Yellow |
14 |
Dark Tan |
28 |
Inconnu |
Gray |
7 |
Black |
0 |
Le cylindre coupe un quadrilatère, et une ligne, montrés ici dans LDView,
avec le mode BFC actif (l'intérieur est rouge, et l'extérieur vert).
Le résultat à droite. La partie intérieure est jaune (Yellow) pour la face
et brun (Dark Tan) pour la ligne, et la partie extérieure est turquoise (Turquoise)
pour la face et bleue (Blue) pour la ligne.
Intersector ne sait pas donner de quel côté se trouve les deux zones triangulaires
grises.
Ligne de commande : intersector -c square.dat cylint.dat cutint.dat
Fichiers : square.dat, cylint.dat, cutint.dat
Le sens des quadrilatères composant le cylindre ont été inversés, et l'intérieur
devient l'extérieur. La coloration des faces coupées change en conséquence.
Ligne de commande : intersector -c square.dat cylext.dat cutext.dat
Fichiers : square.dat, cylext.dat, cutext.dat
Lorsque le sens des faces du fichier coupant n'est pas cohérant (ici elles
ont été inversées aléatoirement), l'intérieur et l'extérieur n'est pas
clairement défini. Trier le résultat devient beaucoup plus difficile !
Ligne de commande : intersector -c square.dat cylrnd.dat cutrnd.dat
Fichiers : square.dat, cylrnd.dat, cutrnd.dat
Le regroupement des triangles est très utile pour nettoyer le résultat
du processus de coupe. Sur la gauche le résultat sans regroupement (option -t)
Ligne de commande : intersector -c -t square.dat cylint.dat triangul2.dat
Fichiers : square.dat, cylint.dat, triangul2.dat
Pour de petites pièces (le cylindre dans cet exemple fait 0.8 LDU de rayon),
les tolérances de calcul utilisées par Intersector peuvent être inadaptées.
L'option de mise à l'échelle (-s <échelle>) peut aider. L'image de gauche,
montre le résultat d'Intersector sans l'option -s : Il manque 2 facettes dans la partie jaune,
et il y a un petit espace dans la partie droite. L'image de droite montre le résultat
avec l'option -s 3. Avec cette augmentation d'échelle temporaire,
tous les problèmes ont disparus.
Lignes de commande : intersector -c a1.dat a2.dat noprescaling.dat intersector -c -s 3 a1.dat a2.dat prescaling_3.dat
Fichiers : a1.dat, a2.dat, noprescaling.dat, prescaling_3.dat
Voici une utilisation plus pratique. Nous avons eu besoin de construire un cockpit de forme arrondie.
Nous sommes partis de l'intersection de deux quarts de cylindres.
Fichiers : ws1.dat, ws2.dat
Nous créons maintenant l'intersection de ws1 coupé par ws2 :
Ligne de commande : intersector -c ws1.dat ws2.dat ws12.dat
Puis, ws2 coupé par ws1 :
Ligne de commande : intersector -c ws2.dat ws1.dat ws21.dat
et, en utilisant Isecalc, le ligne d'intersection entre les deux fichiers :
Ligne de commande : isecalc ws1.dat ws2.dat wsline.dat
Fichiers : ws1.dat, ws2.dat, ws12.dat, ws21.dat, wsline.dat
L'étape suivante est de nettoyer les fichiers, supprimer les parties inutiles,
colorées en bleu ou en turquoise.
C'est facile pour ws12 : Dans MLCad, cliquer sur une face turquoise, puis sélectionner tous les éléments de la même couleur (Menu : Edition / Sélectionner / Même couleur, ou bouton correspondant), puis appuyer sur la touche de suppression "Suppr" ou "Del". Maintenant sélectionner une ligne conditionnelle "blue" (bleue) dans la liste (on ne les voit pas facilement dans les fenêtres graphiques), puis comme précédemment sélectionnez toutes celles de cette couleur, et supprimez-les toutes, pour enlever les lignes non désirées dans le fichier résultat de la coupe.
Le traitement de ws21 est juste un peu plus compliqué, puisqu'il reste quelques éléments de couleur grise (grey). Il vous faut alors utiliser la sélection par zone, en complément de la sélection par couleur.
Astuce : Comment utiliser la sélection par zone sur des
lignes conditionnelles ? Par défaut MLCad prend en compte uniquement les lignes
conditionnelles qui sont visibles dans la vue ou se fait la sélection. Voici comment passer
outre cette restriction :
Après nettoyage, tous les éléments restants sont recolorés en "main color" (couleur 16) et "edge color" (couleur 24)
Fichiers : ws12a.dat, ws21a.dat
Après assemblage des différents sous-fichiers, vous obtenez ce résultat final.
Fichier : ws.dat
Voici un exemple plus détaillé utilisé pour construire une première ébauche du
moyen moteur "Power Functions". Ce moteur, présente deux épineux problèmes
de modélisation : La ligne de séparation en zigzag entre les pièces avant et
arrière, et la face plane de l'attache du câble.
Trois éléments, dans des fichiers séparés, sont utilisés : Un cylindre fermé
et chanfreiné, une lame de coupe en zigzag, et une lame de coupe de l'attachement de câble.
Les primitives du cylindre sont décomposées (Inlined) dans le fichier en
utilisant Inliner.
Dans LDView, avec son mode BFC actif, nous vérifions que le fichier
est cohérent sur le sens des faces (les faces adjacentes sont de la même couleur).
Fichiers : pf1.dat, pf2.dat, pf3.dat
La coupe est faite par :
Ligne de commande : intersector -c pf1.dat pf2.dat pfsplit.dat
Puis, avec MLCad, en utilisant la sélection par couleur, et la sélection par zone, les parties avant et arrière sont séparées et mises dans des fichiers différents. Elles sont recolorées en "main color" / "edge color" (cette étape n'est pas nécessaire pour la partie arrière, car elle sera encore coupée dans la prochaine étape...).
Fichiers : pfsplit.dat, pfback.dat, pffront.dat
L'arrière est maintenant coupé pour créer l'attache plane du câble. Ici
nous avons besoin de couper les deux éléments, aussi deux utilisations d'Intersector
sont nécessaires.
Lignes de commande : intersector -c pfback.dat pf3.dat pfback1.dat intersector -c pf3.dat pfback.dat pfback2.dat
Fichiers : pfback1.dat, pfback2.dat
A nouveau, les fichiers sont séparés et recolorés avec MLCad.
Fichiers : pfback1a.dat, pfback2a.dat
Enfin, les lignes d'intersection sont calculées avec Isecalc :
Lignes de commande : isecalc pfback.dat pf3.dat pfbackl.dat isecalc pf1.dat pf2.dat pffrontl.dat
Fichiers : pfbackl.dat, pffrontl.dat
Tous les sous-fichiers sont assemblés, et colorés correctement.
Notez encore qu'il s'agit d'une première ébauche. Le fichier final de la pièce LDraw a aussi besoin d'être séparée en deux moitiés pour en réduire la taille (c'est aussi un avantage de le faire sur une pièce entièrement symétrique, le processus de coupe ne respectant pas cette symétrie). Quelques substitutions par des primitives, si elles sont possibles, sont à faire également.
Fichier : pf.dat
Le programme Intersector 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.