J.C. Tchang |
Original Version on Roland Melkert Site. |
Le programme LDCad est un éditeur de modèle LDraw créé par Roland Melkert et utilisant la bibliothèque de pièces de LDraw.org. Ce manuel est basé sur la version 1.7 Alpha 2a du programme.
L'écran principal du programme peut se diviser ainsi :
Voir la page de téléchargement sur le site de l'auteur du programme :
http://www.melkert.net/LDCad/download.
Personnellement, j'utilise la version pour Windows format archive. Prendre la version Linux pour ceux qui utilisent ce système.
Si vous voulez utiliser la dernière version de développement (moins stable) voir :.
http://www.melkert.net/LDCad/nextVer
Vous pouvez également utiliser la version (v1.6c actuellement) intégrée au système d'installation LDraw "tout en un", voir :
LDraw All-In-One-Installer.
Pour avoir plus de détails sur les modifications, voir le fichier : docs/changeLog.txt à partir du dossier d'installation de LDCad.
En pré-requis, la bibliothèque de pièces LDraw doit être installée.
Lancer l'exécutable d'installation ou décompresser le fichier archive avec le décompresseur
de l'explorateur de fichiers Windows ou un autre décompresseur, par exemple 7-Zip,
puis valider les droits d'utilisation et donner le dossier d'installation
du programme. Personnellement j'utilise le dossier :
C:\LEGO\LDCad
Au premier lancement le programme demande l'emplacement de la bibliothèque LDraw :
Il suffit d'indiquer le dossier d'installation de votre bibliothèque de pièces LDraw.
Dans le panneau pièces s'affiche un message "Updating content / Please wait" ce qui veut dire que son contenu est en cours de mise-à-jour et qu'il faut attendre un peu pour que le panneau s'affiche.
Voir également : Comment changer l'emplacement de la bibliothèque LDraw ?
Pour éditer les scripts à partir de LDCad il faut configurer un programme par défaut pour les fichiers .lua.
Pour cela, sous Windows, avec le bouton droit de la souris, ouvrir les "Propriétés" d'un fichier .lua et sélectionner un programme à utiliser par défaut pour ouvrir ce type de fichier.
Ce programme peut être Notepad (fourni avec Windows), Notepad2 (un peu plus évolué), mais de préférence Notepad++ (affiche la syntaxe LUA), ou LuaDevelopmentTools (LDT) (gère la syntaxe standard).
Lancer le programme de façon classique en cliquant sur le bouton "LDCad" du bureau ou le sélectionnant dans le menu de démarrage.
Nota : Par défaut, une seule instance du programme peut être lancé à la fois.
Il est possible de contourner ce problème en ajoutant :
useSingleInstance=false
dans le fichier de configuration LDCad.cfg. Voir également ipcIDStr pour la communication entre processus.
Voir le chapitre : Fichier LDCad.cfg.
Mon but (dixit l'auteur du programme) avec cet éditeur est d'avoir une version "moderne" de la façon de faire de MLCad. Donc, bien qu'il y ait seulement une vue "3D" par défaut, vous ne pouvez modifier les choses que dans deux dimensions à un moment donné. C'est fondamental de vous représenter en mode 2D sur un plan "devant" (front), "côté" (side) ou "dessus" (top). Vous choisissez le plan à utiliser avec le référentiel en bas à gauche (boussole) et avec le menu grille (Grid). Il est bon de jouer avec insérer et déplacer un truc pour comprendre ce que je dis ici.
Pour bien démarrer avec LDCad, je vous conseille de parcourir le chapitre : Description de l'interface utilisateur et la revue des différents panneaux qui suit, puis d'utiliser le Tutoriel : Edition de base pour démarrer un premier modèle.
L'interface possède trois sections principales, à savoir : Le panneau couleurs (en haut à gauche par défaut), le panneau pièces (en bas à gauche) et la vue d'édition principale (le reste). Une quatrième section optionnelle permet d'afficher le panneau du code source du fichier. Les panneaux Couleurs et Pièces, s'interprètent d'eux-mêmes, mais leur description, plus bas, peut permettre d'en savoir plus. Utilisez-les pour naviguer à travers les couleurs ou les pièces disponibles. Ces deux panneaux sont complètement personnalisables en éditant un fichier INI, mais pour le moment le paramétrage par défaut devrait suffire.
Pour commencer à travailler, soit démarrer un nouveau modèle soit en ouvrir un existant. Les deux actions peuvent être faites dans le panneau "Getting started" au démarrage du programme, ou ensuite avec le menu "File", ou avec le bouton "Open a file", ou avec le menu contextuel "File" ou "Main menu / File" de l'éditeur que vous ouvrez avec un clic droit n'importe où dans la fenêtre graphique. Dans ce menu aller dans le menu principal ("Main menu") puis fichier ("File") et sélectionner ouvrir un fichier ("Open ..") ou créer un nouveau fichier ("New model"). Quand un fichier est actif (dans une session) la fenêtre graphique vous permet d'accéder à plusieurs aides à l'édition.
En bas à gauche vous pouvez voir un référentiel ou boussole ("Compass") qui vous donnera une information sur l'orientation du monde, et le plan courant de la grille. Quand la souris est sur ce référentiel il s'agrandit pour passer en mode interactif, ainsi vous pouvez l'utiliser pour changer de plan de travail (devant/côté/dessus), déplacer le point de vue en utilisant les flèches dans les coins de la grille, vérifier et fixer les pas de la grille, ou changer les différents modes d'utilisation de l'éditeur.
En haut de la fenêtre graphique, vous trouverez une information sur l'étape courante sur la gauche et une information sur la session du modèle en cours à droite. Les sessions sont les instances d'édition d'un fichier ou sous-fichier LDraw. Il y a une session par fichier ouvert et pour les fichiers multiples MPD il y a une session supplémentaire par sous-fichier. Vous pouvez passer d'une session à l'autre en cliquant sur le nom de session qui s'affiche en haut à gauche de la fenêtre graphique et en sélectionnant une autre session dans ce menu. Ce menu est aussi accessible par un clic sur le menu "Session / Change current session".
Je pense que c'est pour l'instant assez d'informations sur l'interface de base, et le reste deviendra clair pendant les activités d'édition. Si ça ne l'est pas, lire la suite. Egalement, quand vous avez un doute sur la fonction d'un bouton il y a normalement un message d'explication (en anglais) dans la barre de statut en bas de la fenêtre du programme.
Panneau de choix des couleurs avec son menu racine (Main group) :
- En haut : 6 onglets de sélections différentes. | |
Panneau avec le camembert de sélection d'une couleur lorsque qu'une catégorie a été sélectionnée :
- En haut : 6 onglets de sélections différentes. | |
- En bas la barre de la couleur sélectionnée par défaut, et les dernières utilisées. Les couleurs transparentes apparaissent sous forme de damier. |
La couleur sélectionnée devient courante et est la couleur par défaut de toutes les nouvelles pièces, et les briques du panneau pièces s'affichent avec cette couleur.
La couleur courante peut être changée directement en plaçant la souris sur
le nom de la couleur courante, puis en tapant un numéro de couleur validé par la touche "Entrée".
On peut aussi cliquer sur le nom de la couleur courante et rentrer le numéro
de la couleur dans la boite de dialogue qui s'ouvre :
Nota : Le numéro peut être donné en hexadécimal en précédent la valeur par 0x.
Pour l'utilisation des couleurs voir le chapitre : Couleur, et les raccourcis clavier : Raccourcis clavier et souris : Panneau couleurs.
Si vous avez configuré le panneau couleurs pour avoir vos catégories personnelles, la catégorie "[Back]" permet d'accéder aux différentes configurations et au "Main group" de la configuration par défaut ("default"). Voir le chapitre : Configuration panneau couleurs.
La catégorie de couleurs "Favorites" est vide par défaut. Mettez-y vos couleurs favorites. Cela peut être par exemple votre charte de couleurs pour créer un modèle.
Pour ajouter une couleur dans cette catégorie, sélectionner une couleur dans une autre catégorie pour qu'elle devienne courante, puis l'ajouter comme "Favorite" avec le menu contextuel "Color bin / Favorites / Add current" ou le bouton correspondant de la barre d'outils ou le raccourci "F".
Pour supprimer une couleur dans cette catégorie, la sélectionner dans le camembert "Favorites", puis utiliser le menu contextuel "Color bin / Favorites / Remove current" ou le raccourci Maj+F ou utiliser "Color bin / Favorites / Clear" pour les supprimer toutes.
Nota : Les couleurs favorites sont stockées dans le fichier colorBin.fav, voir : Fichier colorBin.fav.
Il est possible d'ajouter des panneaux supplémentaires avec le menu "View / New color bin window"
ou le menu contextuel "Color bin / New color bin window".
Par défaut le panneau est indépendant et peut chevaucher les autres panneaux de la fenêtre du programme. Il peut être collé aux autres panneaux, voir : Manipulation des panneaux couleurs, pièces et code source.
Le panneau peut être supprimé avec le menu contextuel "Color bin / Close window" ou lorsqu'il est indépendant avec sa croix en haut à droite.
En haut, 6 onglets de sélections différentes, avec en dessous la catégorie ou groupe de pièces sélectionnées.
En dessous un filtre de sélection pour rechercher des pièces suivant certains critères. Voir plus bas.
Panneau de choix des catégories avec :
- Sorted by function : Trié par fonctions arborescentes.
- Search the inventory : Par résultat de recherche (recherche sur toutes les pièces).
- Templates : Par assemblages prédéfinis (gabarits). | |
Sélection d'une pièce :
- Vous pouvez sélectionner une pièce dans la catégorie courante,
ou descendre avec le curseur latéral. La couleur des pièces dans le panneau dépend de la couleur par défaut. | |
Sélection d'une pièce appartenant à un ensemble :
- Vous pouvez sélectionner une pièce dans la catégorie "Lego sets". Pour créer un panneau de ce type, voir :
Configuration panneau pièces.
Nota : Avec la version v1.7 Alpha 2, le nombre de pièces de chaque type décroit, puis la pièce disparait, lorsqu'elles sont insérées dans le modèle. A condition de mettre dans le menu "Part bin" "Part usage countdown" sur "Enabled". Nota : Avec la version v1.7 Alpha 2a, la pièce disparait, seulement si dans le menu "Part bin" "Hide countdown zero" est sur "Yes" | |
Affichage des points d'attirance :
- On peut afficher/cacher les points d'attirance avec F11 (panneau pièces et édition graphique). | |
Affichage des motifs texturés :
- On peut afficher les textures de pièce générées à partir d'images (!TEXMAP),
en mettant "Prefs / LDraw / Textures" sur "Enabled", à condition que
"Prefs / LDraw / Vertex processing" ne soit pas sur "None". | |
Affichage des pièces Non Officielles : - Le message "unOff" s'affiche au bas de chaque case d'une pièce non officielle, en mettant "Part bin / Unofficial indication" sur "Enabled". | |
Affichage des pièces comportant une aide interne : - Le message "HLP" s'affiche au bas à gauche de chaque case d'une pièce qui comporte la méta-commande "!HELP" dans son fichier, en mettant "Part bin / Help indication" sur "Enabled".
Cliquer dessus pour faire apparaître le contenu de cette aide : |
Pour configurer le panneau pièces, voir le chapitre : Configuration panneau pièces.
Lorsque la bibliothèque de pièces à changé un message d'attente s'affiche dans le panneau :
La catégorie des pièces "Favorites" est vide par défaut. Y mettre vos pièces favorites, c'est-à-dire les pièces que vous utilisez régulièrement ou de temps en temps mais que vous avez du mal à trouver dans leur catégorie de base.
Pour ajouter une pièce dans cette catégorie, sélectionner une pièce dans une autre catégorie pour qu'elle devienne courante, puis l'ajouter comme "Favorite" avec le menu contextuel "Part bin / Favorites / Add current" ou le bouton correspondant de la barre d'outils ou le raccourci "F". Nota : Un simple survol d'une pièce ne la rend pas courante, il faut cliquer dessus avant de la mettre comme favorite.
Pour supprimer une pièce dans cette catégorie, la sélectionner dans la catégorie "Favorites", puis utiliser le menu contextuel "Part bin / Favorites / Remove current" ou le raccourci Maj+F ou utiliser "Part bin / Favorites / Clear" pour les supprimer toutes.
Nota : Les pièces favorites sont stockées dans le fichier partBin.fav, voir : Fichier partBin.fav. En v1.5, pour supprimer une pièce favorite de LDCad, il faut fermer LDCad, puis éditer ce fichier et supprimer la pièce.
Pour diminuer le nombre de pièces affichées et faciliter la sélection,
il est possible de cliquer sur le bandeau :
Un clic sur l'entonnoir à gauche fait apparaître une fenêtre de filtre de pièces :
Le filtre ne s'applique que sur la catégorie de pièces affichée. Pour faire une recherche sur toutes les pièces, sélectionner à partir du haut de l'arborescence ("Main group"), l'icône représentant une Minifig tenant une loupe ("Search the inventory").
Pour supprimer le filtre cliquer sur l'entonnoir à croix rouge à droite du bandeau.
Avec la version v1-7 Alpha 2a il est possible d'utiliser un filtre négatif avec le caractère ! devant les termes de recherche utilisés avec les filtres AND (ET) et OR (OU).
Par exemple "1x1 !round" pour obtenir toutes les pièces 1x1 à l'exception des pièces rondes.
Autres exemples d'attente :
Certaines catégories du panneau présentent l'icône d'une clé plate lorsque l'on passe dessus.
On la trouve dans les catégories des sous-modèles MPD ou des gabarits ("Templates").
En cliquant sur cette clé on édite le sous-modèle concerné.
En mode édition de pièce cette même icône permet d'éditer la pièce concernée.
Pour activer le mode édition de pièce (pour modifier sa connectivité par exemple), Le menu "Prefs / Editing / Part editing / Part (shadow) editing" doit être sur "Enabled".
Il est possible d'ajouter des panneaux supplémentaires avec le menu "View / New part bin window"
ou le menu contextuel "Part bin / New part bin window". Le but est par exemple de choisir des pièces
avec le panneau principal et de visualiser et sélectionner les sous-fichiers
du modèle courant avec le second panneau.
Par défaut le panneau est indépendant et peut chevaucher les autres panneaux de la fenêtre du programme. Il peut être collé aux autres panneaux, voir : Manipulation des panneaux couleurs, pièces et code source.
Son orientation dépend de ses dimensions (rapport hauteur/largeur). On l'ajuste en tirant sur un coin ou un bord avec la souris.
Le panneau peut être supprimé avec le menu contextuel "Part bin / Close window" ou lorsqu'il est indépendant avec sa croix en haut à droite.
Il est possible d'afficher le code source, dans un ou plusieurs panneaux, avec le menu "View / New source window" ou le menu contextuel "Source / New source window".
Par défaut le panneau est indépendant et peut chevaucher les autres panneaux de la fenêtre du programme. Il peut être collé aux autres panneaux, voir : Manipulation des panneaux couleurs, pièces et code source.
Le panneau peut être supprimé avec le menu contextuel "Source / Close window" ou lorsqu'il est indépendant avec sa croix en haut à droite.
Un "+" s'affiche à gauche des sous-fichiers. Cliquer dessus pour dérouler le contenu de ce sous-fichier. Cliquer ensuite sur le "-" pour fermer le contenu.
La ligne de code survolée par la souris est encadrée en vert si elle est éditable, en rouge sinon, et la pièce correspondante passe en surbrillance dans la fenêtre graphique.
Un clic sur une ligne de code sélectionne cette ligne et la met sur un fond plus clair. Si cette entité est une entité graphique elle est aussi sélectionnée dans la fenêtre graphique. Si ce n'est pas une entité graphique un message "Selection is invisible." ou "Selection contains invisible items." apparait dans la fenêtre graphique.
Un double-clic sur une ligne de sous-fichier rend ce sous-fichier actif. Pour revenir au modèle principal cliquer sur le bouton "Edit the main model".
Pour sélectionner plusieurs entités utilisez la touche Ctrl. Cliquer sur une entité sélectionnée pour la désélectionner. Utiliser Ctrl+A pour tout sélectionner. Utiliser "Echap" ou Ctrl+Maj+A pour annuler toute sélection.
Pour sélectionner une succession d'entités, cliquer sur la première, puis avec la touche Maj cliquez sur la dernière.
Utiliser le menu contextuel "Select / Invert" pour inverser les entités sélectionnées (hors méta-commandes).
Utiliser le menu contextuel "Select / Working color" ou "Working part" ou "Working part and color" pour sélectionner toutes les pièces ayant la couleur active, le type de la pièce active, ou le type et la couleur de la pièce active.
Utiliser le menu contextuel "Select / Same color" ou "Same part" ou "Same part and color" pour sélectionner toutes les pièces ayant la couleur de la sélection, le type de la pièce sélectionnée, ou le type et la couleur de la pièce sélectionnée.
Utiliser le menu contextuel "Select / Same step(s)" pour sélectionner toutes les pièces visibles partageant les étapes des pièces de la sélection courante. Avec "Select / Current step" vous sélectionnez toutes les pièces visibles de l'étape courante. Avec "Select / Except current step" vous sélectionnez toutes celles n'appartenant pas à l'étape courante. Avec "Select / Limit to current step" vous désélectionnez toutes celles n'appartenant pas à l'étape courante.
Avec les touches Ctrl+X, Ctrl+C, Ctrl+V, il est possible de couper/copier/coller une sélection. Au moment du coller un message "Select the source insertion point" s'affiche et un point d'insertion s'affiche en vert. Il suffit de cliquer au bon endroit.
On peut aussi faire glisser une sélection à la souris jusqu'à un nouvel emplacement.
Lors d'une sélection, la couleur de la première entité sélectionnée devient couleur courante.
La ligne de code survolée par la souris est encadrée en vert si elle est éditable, en rouge sinon. Cliquer dessus pour la sélectionner, puis sur le bouton central de la souris pour l'éditer. On peut aussi l'éditer avec le menu contextuel "Selection / Properties".
Voir le chapitre : Modification du code source, pour l'édition de chaque type d'entité.
Les panneaux couleurs, pièces et code source y compris les supplémentaires peuvent être accrochés sur les bords de la fenêtre du programme ou bien placés dans des fenêtres indépendantes.
Pour modifier l'état d'un panneau, vérifier dans le menu "Prefs / GUI" que "Lock docked windows" soit sur "No". Si "Lock docked windows" est sur "Yes" l'état des panneaux est figé.
Pour rendre un panneau indépendant il suffit de cliquer sur le panneau et de le faire glisser à la souris en dehors de son emplacement. En version 1.7 il faut appuyer également sur la touche "Ctrl" en le faisant glisser (ne semble pas fonctionner).
Pour accrocher un panneau indépendant sur un bord de la fenêtre du programme, appuyer sur "Ctrl" puis cliquer sur le panneau et le faire glisser à la souris vers un des bords. La position de la souris conditionne le bord concerné et le redimensionnement ou non des panneaux voisins.
Voir également : Comment (dés)ancrer de (nouvaux) panneaux ?
La zone d'édition graphique ou fenêtre graphique permet de visualiser le modèle en cours,
d'ajouter ou supprimer des pièces, de les déplacer ou les tourner, de leur changer de couleur, etc ... :
On y trouve :
Voir également : Je n'aime pas la façon dont l'appareil photo (point de vue) tourne, peut-on faire quelque chose à ce sujet ?
Repères d'orientation :
Par défaut le référentiel absolu (monde) s'affiche, ainsi que le plan de la grille active.
Les flèches de couleur du référentiel indiquent : - Flèche rouge : X+ - Flèche verte : Y+ (Le standard LDraw définit le Y positif vers le bas) - Flèche bleue : Z+ La grille est gris clair. | |
En mode grille relative il y a deux référentiels qui s'affichent : - Le référentiel absolu du modèle passe avec des couleurs plus sombres et un trait plus fin (si "Prefs / Editing / Show abs axises in compass" est sur "YES"). - Le référentiel local devient référentiel courant. La grille passe en orange. |
En survolant avec la souris le repère d'orientation (référentiel), celui-ci se transforme en outil de manipulation du point de vue (déplacement, orientation), et paramétrage de modélisation (plan de travail, pas de la grille).
- Cliquer sur les losanges au centre pour sélectionner le plan de travail par défaut
(XY, YZ, ZX). - Cliquer sur un endroit vide en bougeant la souris pour faire tourner le modèle. - Cliquer sur l'un des 2 panneaux "flèches doubles" sur la grille, en bougeant la souris pour déplacer le point de vue du modèle suivant le plan de la grille, horizontalement ou verticalement. - Cliquer sur l'un des 2 panneaux "flèches quadruples" sur la grille, en bougeant la souris pour déplacer le point de vue du modèle suivant le plan de la grille, en tous sens.
- En haut s'affiche le pas de la grille courante en X, Y et Z, et le pas de rotation en degrés. - Cliquer avec le bouton droit de la souris pour ouvrir le menu "Editing views". |
Description des modes s'affichant dans les 4 coins du panneau :
- Outil de manipulation du point de vue en mode grille relative. - La grille passe en orange et le repère absolu (monde) prend des couleurs plus foncées. |
- En mode vue 2D on peut choisir le sens de la vue en faisant tourner le cube avec la souris.
Vue de gauche (Left), droite (Right), face (Front), arrière (Back), dessus (Top) et dessous (Bottom). - La vue est activée dès que la face du cube passe en jaune. - Attention, en faisant tourner le cube, on joue sur le sens de la vue mais aussi sur son orientation à l'écran, ce qui donne 6x4=24 possibilités d'affichage. |
Pour remettre le point de vue en position 3D de base :
- Taper la touche "O" pour la grille, si rien n'est sélectionné.
- Taper la touche "Début" pour aligner la sélection sur la grille courante.
- Taper la touche Ctrl+Début pour réinitialiser la rotation de la sélection.
- Menu contextuel "Editing view / View Angle / Left 45 deg" ou menu
"View / Editing view / View Angle / Left 45 deg" pour réinitialiser l'orientation
(ou une autre orientation possible si vous avez choisi le multi-vues).
Nota : Ce panneau peut être caché/réaffiché avec le menu "View / Editing views / Compass".
En haut à gauche de la fenêtre graphique on a une information sur le numéro de l'étape courante et le nombre d'étapes du modèle actif.
En cliquant dessus on ouvre le menu "Stepping" pour changer d'étape de construction, en créer ou en supprimer.
En haut à droite de la fenêtre graphique on a une information sur le nom du modèle ou sous-modèle en cours. Si le nom est suivi de {M} il s'agit du modèle principal du fichier en cours.
En cliquant dessus on ouvre le menu "Change current model" pour changer de modèle courant.
En survolant le panneau un menu à onglets s'affiche pour sélectionner le mode d'affichage.
Nota : Le mode sélectionné s'affiche en jaune. Les options actives (sauf "Close") sont en vert et les inactives en rouge.
En bas à droite de la fenêtre graphique on a une icône I comme "Information". En survolant à la souris cette icône un panneau d'informations s'affiche.
Parts / Selection : Nombre total de pièces de la sélection courante et (nombre de pièces différentes). Sub models / Selection : Nombre total de pièces en sous-modèle de la sélection courante et (nombre de pièces différentes). Color / Selection : Nombre de couleurs de la sélection courante. Size / in bricks : Dimensions en X/Y/Z en nombre de briques entières (1 brique = 8 mm en largeur et 9,6 mm en hauteur). |
Nota : Les lignes "Selection" ne s'affichent que s'il y a une sélection de pièces active.
Si une pièce ou un sous-modèle est sélectionné, le panneau coordonnées donne la position en X/Y/Z de son origine. S'il y en a plusieurs, il s'agit des coordonnées de la première de la sélection.
En cliquant sur ce panneau, la boite de dialogue des propriétés du premier objet de la sélection s'affiche. En cliquant avec le bouton droit de la souris, le menu "Edit" s'affiche.
Ce panneau peut être caché en désactivant "INFO" dans le panneau session.
Si une pièce de chemin ou une section de ressort est sélectionné, le panneau coordonnées est remplacé par un
panneau donnant les caractéristiques du chemin ou du ressort.
NR=Numéro du chemin, GRP=Groupe, CNT=Nombre de pièces ou éléments.
NR=Numéro de section du ressort, PROP=Proportion du ressort complet, WND=Nombre de spires.
En cliquant sur ce panneau, la boite de dialogue des propriétés du chemin ou de la section du ressort s'affiche.
Si la sélection (dans le panneau code source) porte sur une ligne de commentaire ou une méta-commande, le panneau coordonnées est remplacé par le message "Selection is invisible" (La sélection est invisible).
Si la sélection porte à la fois sur des entités graphiques et sur des lignes de commentaire ou de méta-commande, le panneau coordonnées s'affiche ainsi que le message "Selection contains invisible items" (La sélection contient des éléments invisibles).
Si on ajoute une entité non graphique à partir du panneau pièce, le message "invisible part selected, release it anywhere to add it" (pièce invisible sélectionnée, lâchez-la n'importe où pour l'ajouter).
Lors d'une animation, un panneau de contrôle peut s'afficher en bas de l'écran graphique.
Ce panneau peut être masqué pendant l'animation en désactivant "CPAN" dans le panneau session.
Lors d'une animation interactive, un panneau de contrôle peut s'afficher en bas de l'écran graphique.
Ce panneau peut être masqué pendant l'animation interactive en désactivant "CPAN" dans le panneau session.
Lorsqu'au moins une pièce est sélectionnée, cet outil apparait au-dessus de la première pièce de la sélection.
Cet outil permet de déplacer ou tourner les pièces de la sélection dans le modèle.
Outil de manipulation :
- La pyramide supérieure permet d'éloigner/rapprocher l'outil par rapport à la sélection. | |
Mode rotation pièce :
- En cliquant sur le petit cube supérieur nous avons un outil de rotation. | |
Mode déplacement pièce :
- En cliquant sur le petit cube central nous avons un outil de déplacement. | |
Mode déplacement du point de centre :
- Cliquer sur le petit cube du bas pour pouvoir déplacer le point de centre.
Cela permet de changer l'origine des rotations. |
Cet outil peut être masqué en désactivant "PIN" dans le panneau session.
Il peut être mis constamment transparent dans le menu "Prefs / Editing" en mettant "3D Editpin visibility" sur "Always transparent" ou automatiquement suivant sa position avec "Automatic" (par défaut), sinon mettre sur "Always solid".
Pour couper le panneau visualisation en plusieurs panneaux, utiliser le menu "View / Editing views / Split", et pour définir un sens à chaque vue utiliser le menu "View / Editing views / View angle".
Pour supprimer des vues, utiliser le menu "View / Editing views / Split / Unsplit" ou toutes les vues avec "View / Editing views / Split / Unsplit all".
Pour passer temporairement du mode multi-vues au mode mono-vue de la vue active et inversement, utiliser le menu "View / Editing views / Split / Swap full screen" ou la barre "espace" du clavier.
Pour ceux qui ont des difficultés à concevoir uniquement en vue 3D et pour éviter
de faire le modèle symétrique à celui à obtenir, la meilleur configuration est de
définir les vues comme ci-dessus (norme ISO européenne).
En haut à gauche vue de face (front), en haut à droite vue de gauche (left),
en bas à gauche vue de dessus (top) et en bas à droite vue 3D (left 45°).
Il faut d'abord couper le panneau visualisation avec le menu "View / Editing views / Split / Split four ways", puis définir un sens à chaque vue et pour les vues 2D figer leur orientation en mettant "AEP/MEP" sur "MEP" dans le panneau point de vue. A partir de ce moment l'utilisation du bouton droit ou gauche de la souris déplace le contenu de la vue sans le faire tourner.
En bas de la fenêtre du programme se trouve la barre de statut. Elle est séparée en 3 parties :
Un modèle LDraw est un assemblage de briques ou pièces virtuelles utilisant le format de fichier LDraw. Il s'agit soit d'un modèle simple (généralement un fichier .LDR), soit d'un modèle multiple (généralement un fichier .MPD). Celui-ci est composé de sous-fichiers dont le premier est le maître-modèle ou modèle principal (celui qui s'affiche en premier).
Au démarrage de LDCad s'affiche le panneau "Getting started", permettant de démarrer un projet de modèle :
LDCad peut charger en même temps plusieurs fichiers au format LDraw. Chaque fichier peut contenir un modèle simple (généralement .LDR, parfois .DAT) ou un modèle multiple (généralement .MPD, parfois .LDR).
Au démarrage du programme, il est possible d'ouvrir un modèle existant dans le panneau "Getting started". Ce modèle peut être n'importe où sur votre disque ("model from disk"), parmi les exemples fournis avec le programme ("example model") ou parmi ceux récemment ouverts ("Recent").
Ensuite, il est possible d'ouvrir d'autres modèles avec le menu "File / Open", ou "File / Recent", ou "File / Example".
On peut aussi ouvrir le fichier d'un modèle existant en faisant glisser, à partir de l'explorateur Windows, ce fichier dans la fenêtre de LDCad ou le déposer sur l'icône du programme.
Une boite de dialogue s'affiche :
Lorsqu'un fichier est ouvert dans LDCad il peut être également modifié en externe par un autre programme.
Dans ce cas une boite de dialogue s'affiche :
Sinon le fichier peut toujours être rechargé avec le menu "File / Reload". A utiliser pour retourner à l'état de la dernière sauvegarde.
Au démarrage du programme, il est possible d'ouvrir un nouveau modèle dans le panneau "Getting started", en sélectionnant "Start a new model".
Ensuite, il est possible d'ouvrir d'autres nouveaux modèles avec le menu "File / New model", ou "File / New" en cochant "Model" pour un modèle standard.
Il faut ensuite renseigner l'entête du fichier.
Onglet "Main" (principal) :
Nota : Si le champ "Author" n'a pas été précédemment renseigné une boite de dialogue
s'ouvre pour appliquer ce nom à tous les sous-modèles :
Onglet "Tags" (étiquettes) :
Onglet "Help" (aide) :
Onglet "History" (historique) :
Usage : Entrer le texte de la modification puis cliquer sur le bouton "Add" pour remplir les automatiquement autres champs.
Onglet "Scripting" (scriptage) :
Les fichiers LDraw peuvent contenir un modèle simple composé d'un assemblage de pièces unitaires, ou un modèle multiple composé du modèle principal (le premier dans le fichier) et de sous-modèles appelés par le modèle principal ou d'autres sous-modèles.
Utiliser le menu "Session / Add new submodel ..".
On peut aussi utiliser le menu "Session / Add new .." en cochant "Model" pour un sous-modèle standard :
Il faut ensuite renseigner l'entête du sous-fichier comme l'entête d'un fichier standard, avec en plus la possibilité de changer le nom du sous-fichier.
Ce message s'affiche :
Pour indiquer que le sous-fichier va être détaché et que cette opération ne peut pas être annulée.
Ensuite le panneau "Edit header" s'affiche et se remplit comme pour un nouveau modèle.
Le nouveau modèle "New file" par défaut est créé et devient actif.
Nota : Si le sous-modèle possède lui-même des sous-modèles, ils ne sont pas créés dans le nouveau modèle.
Pour créer un modèle de pièce dynamique utiliser le menu "File / New" en cochant "Path part", ou pour un sous-modèle "Session / Add new" en cochant également "Path part".
Créer un modèle pour l'ajouter à sa bibliothèque de gabarits ou créer un sous-modèle pour l'utiliser directement dans son modèle en cours.
Cliquer sur "Yes / Proceed" pour continuer, sinon cliquer sur "Cancel" pour annuler et ensuite utiliser un gabarit existant au lieu de partir de rien. Cocher "Don't ask again" pour ne plus poser la question ultérieurement.
Onglet "Main" (principal) :
Onglet "Tags" (étiquettes) :
Onglet "Help" (aide) :
Onglet "History" (historique) :
Onglet "Path" (chemin) :
Nota : Pour modifier l'entête de la pièce dynamique il faut utiliser le menu "Session / Edit header" ou hors sélection (avec "Echap") utiliser la touche "Entrée".
0 FILE hose01.ldr 0 AUTHOR LDCad 0 !CATEGORY technic 0 !KEYWORDS flexible, pneumatic 0 !LDCAD CONTENT [type=path] [addFallBack=default] [looped=false] [displayKind=mm] [curveStep=0] [displayLenCor=0] 0 !LDCAD PATH_POINT [type=bezier] [posOri=0 0 0 1 0 0 0 0 1 0 -1 0] [prevCPDist=25] [nextCPDist=17] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0] 0 !LDCAD PATH_POINT [type=bezier] [posOri=26 15 14 0 0 -1 0 -1 0 -1 0 0] [prevCPDist=21.5] [nextCPDist=25] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0] 0 !LDCAD PATH_POINT [type=bezier] [posOri=38 80 40 0 0 -1 0 -1 0 -1 0 0] [prevCPDist=25] [nextCPDist=5] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0] 0 !LDCAD PATH_POINT [type=bezier] [posOri=38 100 40 0 0 -1 0 -1 0 -1 0 0] [prevCPDist=5] [nextCPDist=33.5] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0] 0 !LDCAD PATH_POINT [type=bezier] [posOri=-23.236 199.403 60 0 0.256 -0.967 0 -0.967 -0.256 -1 0 0] [prevCPDist=30.5] [nextCPDist=25] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0] 0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=ldcPnuHoseSeg.dat] [donYSize=400%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=deform] [donYAlign=0] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=10] [donInline=false] [segsEdgeDelKind=keepFirstLeft] 0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=0 0 0 1 0 0 0 0 1 0 -1 0] [extraLen=8mm] [part=165.dat] 0 !LDCAD PATH_CAP [group=end] [color=16] [posOri=-23.236 199.403 60 0 -0.256 0.967 0 0.967 0.256 -1 0 0] [extraLen=8mm] [part=165.dat] 0 !LDCAD GENERATED [generator=LDCad 1.4 Alpha] 0 //This is the fallback LDraw content for above PATH configuration. 0 // Do not edit, any changes will be lost upon regeneration. 0 // The path is approx 102.261589 mm (255.65) and exists out of 50 segments.
Pour créer un modèle de ressort utiliser le menu "File / New" en cochant "Spring part", ou pour un sous modèle "Session / Add new" en cochant également "Spring part".
Créer un modèle pour l'ajouter à sa bibliothèque de gabarits ou créer un sous-modèle pour l'utiliser directement dans son modèle en cours.
Cliquer sur "Yes / Proceed" pour continuer, sinon cliquer sur "Cancel" pour annuler et ensuite utiliser un gabarit de ressort existant au lieu de partir de rien. Cocher "Don't ask again" pour ne plus poser la question ultérieurement.
Onglet "Main" (principal) :
Onglet "Tags" (étiquettes) :
Onglet "Help" (aide) :
Onglet "History" (historique) :
Onglet "Spring" (ressort) :
Nota : pour modifier l'entête du ressort il faut utiliser le menu "Session / Edit header".
Ouvrir le fichier externe dans LDCad avec le menu "File / Open ..". Puis l'incorporer comme sous-modèle d'un autre modèle avec le panneau pièces dans la catégorie "Model content ".
Si le fichier externe est un modèle multiple, seul le modèle principal
peut-être incorporé. Ses sous-modèles renvoient un message d'erreur :
Utiliser le sous-fichier XXX en dehors de son fichier principal (MPD) n'est pas permis.
Par glisser/déposer de l'explorateur Windows dans la fenêtre LDCad :
Sélectionner "Use file(s) by reference" pour insérer un sous-modèle externe.
Cela fonctionne avec un modèle simple (.ldr) ou un modèle multiple (.mpd). Il n'y a qu'une seule ligne d'ajoutée dans le code source du fichier.
Pour incorporer les entités du modèle externe dans le modèle courant, sélectionner le modèle externe, puis "Selection / Reorganize / Embed unofficial content" dans le menu contextuel.
Un message de confirmation s'affiche :
Etes-vous sûr de vouloir intégrer les entités non officielles sélectionnées ?
Il y a seulement une annulation partielle pour cette action.
Une boite de dialogue s'ouvre :
Entrer une chaine de caractères servant de préfixe à toutes les entités intégrées.
LDCad en interne utilise toujours la double précision.
Mais comme le format LDraw doit rester convivial et lisible, vous perdrez des décimales en raison de l'arrondissement des données après avoir enregistré et rechargé le modèle.
Dans les modèles très complexes, cela peut devenir très perceptible après quelques séquences de sauvegarde / chargement.
Une solution possible pourrait être d'augmenter le nombre de chiffres que LDCad utilise pendant l'enregistrement.
Pour cela sortir de LDCad, puis éditer le fichier "config/main.cfg",
puis changer le paramètre :
modelFileDecCnt = 3
Par exemple en :
modelFileDecCnt = 6
Voir : Configuration générale de LDCad.
Utiliser le menu "File / Save" (Ctrl+S) ou le bouton correspondant pour sauvegarder le fichier contenant le modèle ou sous-modèle actif. Utiliser "File / Save as" pour le sauvegarder sous un autre nom ou dans un autre dossier.
Pour sauvegarder tous les fichiers ouverts utiliser le menu "File / Save all" (Ctrl+Maj+S).
Nota : Au moment de la sauvegarde, LDCad ajoute le contenu des fichiers donneurs des pièces dynamiques pour permettre d'utiliser le fichier LDraw généré par d'autres programmes externes.
Nota : Pour ceux qui ne veulent pas avoir, dans des cas particuliers, la présence de ces fichiers donneurs, il faut modifier les commandes 0 !LDCAD CONTENT en mettant le paramètre addFallBack=never ou addFallBack=remove. Cela peut être fait sur le fichier avec un éditeur de fichier texte ou avec LDCad, un "Session / Edit header" de chaque pièce dynamique, onglet "Path", champ "Code gen". Une autre possibilité, avec addFallBack=default, les modèles excluront automatiquement le contenu des fichiers donneurs, s'ils sont stockés dans un emplacement de modèle enregistré (infos Roland Melkert). Voir au chapitres : Ajouter un modèle ou sous-modèle de pièce dynamique et Méta-commandes LDCad.
Pour sortir du programme utiliser le menu "File / Exit", ou cliquer sur le bouton à la croix, à droite de la barre de titre.
Pour sortir du fichier en cours utiliser le menu "File / Close", ou cliquer sur "Close" dans le panneau session.
Sinon utiliser le menu "File / Close all" pour fermer tous les fichiers ouverts, ou "File / Close unchanged" pour fermer tous les fichiers ouverts non modifiés.
Nota : Lors de la sortie un message de confirmation apparait si un fichier modifié n'a pas été sauvegardé au préalable.
Une pièce est la représentation virtuelle au format LDraw d'une pièce LEGO réelle. Le programme LDCad ne fournit aucune pièce en lui-même, mais utilise les bibliothèques du site LDraw.org.
Il y a deux bibliothèques de pièces LDraw sur le site LDraw.org. La principale est la bibliothèque officielle des pièces validées. La seconde concerne les pièces soumises par leur auteur et en attente de correction ou de validation.
La bibliothèque officielle est mise-à-jour environ deux fois par an et la non officielle à chaque mise-à-jour de fichier dans "Parts Tracker".
Voir également : Comment utiliser des pièces non officielles ?
En dehors de ces deux bibliothèques vous pouvez trouver d'autres pièces, Lego ou Non, pouvant être utilisées par LDCad, à condition qu'elles utilisent le format LDraw.
En utilisant un modèle créé par un tiers, il peut arriver que ce modèle utilise des pièces qui ne soient pas dans votre bibliothèque.
Pour connaître les pièces manquantes éventuelles, utiliser le menu contextuel "Select / Missing file parts" du panneau "Source" pour toutes les sélectionner (si on est dans le bon sous-fichier éventuel).
Pour résoudre ce problème, mettre à jour votre bibliothèque ou demander les fichiers manquants à l'auteur du modèle, s'ils sont spécifiques.
Nota : Les petits référentiels peuvent porter plusieurs couleurs :
Pour insérer une pièce il faut au préalable avoir une session ouverte, soit en créant un nouveau fichier ("New .."), soit en en ouvrant un existant ("Open .."). Voir le chapitre "Démarrer un modèle".
Pour sélectionner une pièce dans le panneau pièce :
Il y a quatre méthodes pour insérer une nouvelle pièce :
Un conseil : Insérer la première pièce du modèle à "X=Y=Z=0" et les suivantes à partir de la première. Pour les sous-modèles, ayant un point de rotation dans le modèle principal, mettre de préférence ce point de rotation à "X=Y=Z=0".
Voir le chapitre suivant pour les paramètres de la nouvelle pièce qui utilisent les variables de travail.
Voir également le chapitre sur l'attirance pièce pour son positionnement.
Toutes les insertions ou éditions faites sont basées sur les variables de travail courantes. Ce sont les :
Les modèles gabarits LDCad sont des petits assemblages de pièces au format LDraw que vous pouvez faire glisser du panneau pièces dans vos modèles, comme toute autre pièce ou modèle. Pour cela LDCad utilise par défaut le dossier "C:/Users/tchang/AppData/Roaming/LDCad/templates/shortcut" (changer tchang par votre nom d'utilisateur Windows) qui contient tous les gabarits par défaut.
Ces gabarits concernent de petits assemblages fixes (roue), articulés (charnière), comportant une pièce dynamique (câble électrique, tuyau pneumatique, ressort), ou des pièces à maillons (chaîne).
Les gabarits par défaut se trouvent dans le groupe "Templates" du panneau pièces.
Un message apparait au moment de l'insertion :
Si le gabarit ne peut être décomposé (pièce souple ou à maillons) le message se limite à :
Vous pouvez ajouter vous-même des gabarits en ajoutant un nouvel emplacement avec le menu "Prefs / LDraw / User templates", puis en sauvegardant un ou plusieurs fichiers LDraw à cet endroit. Les lignes directrices pour les créer sont :
Lorsque vous prévoyez de créer de nombreux modèles vous-même il peut être nécessaire de créer pour eux des groupes personnalisés (.pbg) dans le panneau pièce. De cette façon vous pouvez les organiser plus logiquement à l'intérieur de ce panneau.
La modification de gabarit existant peut faire apparaître un message de confirmation :
Cliquer sur "Yes/Proceed" pour éditer le gabarit officiel, sinon sur "Cancel" pour annuler
et cocher "Don't ask again" pour que la question ne soit plus posée ultérieurement.
Une utilisation importante des gabarits, dans la configuration de LDCad par défaut, concerne les pièces dynamiques (pièces souples), c'est-à-dire les pièces de chemin et les ressorts. Ces gabarits définissent une situation de départ utile pour ajouter par exemple un tuyau pneumatique ou un amortisseur à votre modèle.
Vous pouvez créer ces types de gabarits vous-même en démarrant un fichier de chemin ou de ressort autonome dans LDCad en utilisant le menu "File / New .." et en cochant "Path part" ou "Spring part". Il faut les sauvegarder dans les sous-dossiers "template/path" pour les chemins ou "template/spring" pour les ressorts.
Il est possible d'éditer les pièces. Le menu : "Prefs / Editing / Part editing / Part (shadow) editing" doit être sur "Enabled". A partir de ce moment une "clef plate" apparait sur les icônes des pièces dans le panneau pièces, permettant l'édition.
Un message peut apparaître si vous utilisez une bibliothèque fantôme compressée :
Voir le chapitre : Bibliothèque fantôme.
Affichage d'une pièce en cours d'édition.
Nota : Attention les entités de type 2 (ligne), 3 (triangle), 4 (quadrilatère), 5 (ligne conditionnelle), si elles sont utilisées dans un modèle alors ce modèle est considéré comme une pièce, alors évitez d'en mettre dans le modèle principal.
Un message d'erreur apparaît pour éviter ce problème :
Aller dans la catégorie "Special / LDraw part building items" du panneau pièce
pour insérer des entités de base de type 2 (ligne), 3 (triangle), 4 (quadrilatère), 5 (ligne conditionnelle),
dans la pièce en cours d'édition avec des valeurs nulles :
Les insérer de préférence dans le panneau code source, puis les éditer pour leur donner des valeurs voulues.
Voir le chapitre : Modification d'une entité.
Michael Heidemann a créé (vers 2006) une bibliothèque de pièces LDraw pour le jeu de construction Plasticant. Philo, avec son autorisation (en 06-2019) l'a adaptée pour LDCad, en ajoutant les informations de connexion et de symétrie.
Pour télécharger la bibliothèque, voir : Plasticant alternate library, du Forum LDraw.org (en Anglais).
Nota : Penser à ajouter le chemin vers cette bibliothèque "Unofficial library" dans la configuration d'une nouvelle Bibliothèque de pièces.
Dans ce chapitre nous parlons des pièces présentes dans la bibliothèque qui sont en réalité des assemblages fixes de pièces unitaires. Pour les sous-modèles, voir le chapitre : Modèle multiple (MPD).
Ces pièces ont généralement le mot "(Complete)" entre parenthèses dans leur désignation et/ou c01, c02, ... dans leur nom de fichier.
Si l'on a besoin de cet assemblage dans la configuration proposée par la bibliothèque alors pas de problème cet assemblage s'insère comme une pièce ordinaire.
Si l'on a besoin de cet assemblage dans une autre configuration, voici la marche à suivre :
En attendant un module spécifique pour créer et insérer une minifig personnalisée dans LDCad, suivre les étapes suivantes :
Cela est également valable avec les "Technic Action Figure" 2698c01.dat, les "Complete friends figures" ou les "Complete fabuland figures".
L'assemblage des roues composées d'une jante et d'un pneu se trouvent dans "Templates / Wheels".
L'assemblage des pièces articulées se trouvent dans "Templates / Hinges/turntables" et dans "Templates / Misc".
LDCad est capable de gérer les pièces ou autocollants texturés, c'est-à-dire des pièces à motif recevant la projection d'une image sur ses faces.
Ces pièces utilisent la méta-commande de Texturation (!TEXMAP).
La projection peut se faire sur des faces planes, cylindriques ou sphériques.
Pour que les images s'affichent il faut mettre "Prefs / LDraw / Textures" sur "Enabled", et que "Prefs / LDraw / Vertex processing" ne soit pas sur "None". Sinon la pièce s'affiche comme si elle n'avait pas de motif.
Si l'image n'est pas accessible ou inexistante le motif est remplacé par une grande croix blanche.
Cet affichage se fait dans la fenêtre graphique et dans le panneau pièces.
Pour créer un autocollant texturé rectangulaire vous pouvez utiliser : Textured sticker generator, du même auteur.
Avec la version v1.7 Alpha 1, apparait la gestion de la méta-commande !DATA pour les pièces texturées.
Voir en complément : Bloc de données d'un projet MPD.
Les types de pièces dynamiques ou pièces souples concernent :
Les pièces dynamiques prédéfinies se trouvent dans le panneau pièces dans le groupe de pièces des gabarits ("Templates").
Voir : Tutoriel : Edition avancée et en particulier le chapitre Pièces dynamiques et les chapitres qui suivent.
|
|
|
Lors du déplacement interactif d'une boule, suivre la valeur dans la barre de statut.
Pour le point de chemin circulaire, il est aussi possible, en appuyant sur le bouton central de la souris
au-dessus d'une boule, d'ouvrir cette boite de dialogue pour entrer la valeur exacte directement.
On peut aussi passer par la boite de dialogue "Path point / selection properties" et
son champ "Radius" (Rayon).
Pour passer d'un type de point à l'autre, le sélectionner, puis avec le bouton du milieu de la souris ouvrir la boite de dialogue "Path point / selection properties". Ensuite sélectionner le type dans le champ "Type".
Maintenir la touche Ctrl enfoncée tout en redimensionnant un point de contrôle de Bézier appliquera la nouvelle longueur aux deux points de contrôle à la fois.
Dans le menu "Templates" du panneau pièces certaines pièces dynamiques apparaissent avec le qualificatif LQ. Il s'agit de pièces dynamiques ayant une qualité basse (Low Quality) pour réduire la taille du fichier généré. A utiliser de préférence sur un gros modèle qui montre les pièces dynamiques à petite échelle.
Voir également : Pourquoi les modèles contenant des pièces flexibles sont-ils si gros ?
On peut supprimer la pièce dynamique standard pour la remplacer par une version LQ, mais il est aussi possible de faire cette conversion de façon brute sur le fichier LDraw avec un éditeur de fichier texte.
Exemple de modification pour un tuyau pneumatique :
Avant :
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=ldcPnuHoseSeg.dat] [donYSize=400%]
[donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=deform] [donYAlign=0] [donInline=false]
[segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=10] [segsMrgAng=0] [segsMrgRollAng=0]
[segsEdgeDelKind=keepFirstLeft]
Après :
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=166.dat] [donYSize=400%]
[donCen=absCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false]
[segSize=75%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0]
[segsEdgeDelKind=keepFirstLeft]
Puis, ouvrir le modèle dans LDCad et forcer la régénération des pièces dynamiques avec Ctrl+F5 ou Ctrl+Maj+F5.
Nota : Il y a plusieurs paramètres à modifier. Il faut prendre exemple en insérant une pièce standard et une pièce LQ de même type. Mettre également le paramètre [segsMaxMerge=1] pour faire le rendu photo réaliste du modèle avec Studio, sinon les segments générés sont raccourcis par le rendu (c'est un bug!) et le tuyau devient discontinu.
Ce chapitre est basé sur un message de Philo sur LDraw.org : RE: Technic 8854 Power Crane.
Voir en complément : Studio : Tutoriel 3 : Utiliser les pièces souples LDCad avec Studio.
Les gabarits se trouve dans "Templates / Electric cables".
Les gabarits se trouve dans "Templates / Power functions".
La construction utilise un élément de base (donneur officiel LDCad) :
Exemple du câble.
Le gabarit se trouve dans "Templates / Chains".
La construction utilise 2 éléments de base :
Nota : La chaîne générée doit posséder 21 maillons intermédiaires (Chaîne 30104) ou 5 maillons intermédiaires (Chaîne 92338).
Le gabarit se trouve dans "Templates / Chains".
Le gabarit se trouve dans "Templates / Ropes and strings".
Exemple du cordage standard (rond).
Exemple du cordage utilisant l'élément LSynth LS60.dat.
Pour cela utiliser :
0 !LDCAD PATH_SKIN [donCol=0] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=LS60.dat] [donYSize=100%] [donCen=absCen] [donFinScale=segMerge] [donPlace=refsDyn] [segSize=75%] [segSizeTol=5%] [segsMaxMerge=1]
Le gabarit se trouve dans "Templates / Ropes and strings".
Le gabarit se trouve dans "Templates / Technic".
Le gabarit se trouve dans "Templates / Technic".
Le gabarit se trouve dans "Templates / Technic".
Le gabarit se trouve dans "Templates / Technic".
Le gabarit se trouve dans "Templates / Technic".
Le gabarit se trouve dans "Templates / Technic".
Les gabarits se trouve dans "Templates / Pneumatic". Deux versions : Standard et LQ (basse qualité).
Voir création dans le tutoriel : Tutoriel : Tuyau pneumatique.
Le gabarit se trouve dans "Templates / Technic". Deux versions : Standard et LQ (basse qualité)
Le gabarit se trouve dans "Templates / Rubber bands".
Le gabarit se trouve dans "Templates / Rubber bands".
Les gabarits, chemin ouvert ou fermé, se trouvent dans "Templates / Chains".
Les gabarits, chemin ouvert ou fermé, se trouvent dans "Templates / Chains".
La construction utilise un élément de base :
Se monte généralement sur :
|
Exemple avec pignons 3648B et 3649.
Les gabarits, chemin ouvert ou fermé, se trouvent dans "Templates / Chains".
La construction utilise un élément de base :
Se monte généralement sur :
|
Exemple en ajoutant un 3ème point pour simuler la gravité en haut de la chaîne.
Les gabarits pour les amortisseurs utilisant les ressorts se trouvent dans "Templates / Shocks".
Voir : Modèle ou sous-modèle de ressort pour créer un nouveau ressort, et Amortisseur pour sa mise en place.
Sur une idée et réalisation de Philo.
Bracelet 66821.
Code du gabarit utilisé pour le bracelet :
0 Bracelet 25L with 14 Studs
0 Name: bracelet.ldr
0 Author: LDCad
0 !CATEGORY Sheet Plastic
0 !KEYWORDS Wrist, Band, Strap, DOTS
0 !LDCAD CONTENT [type=path] [addFallBack=default] [looped=false] [displayKind=mm] [curveStep=0] [displayLenCor=0]
0 !LDCAD PATH_POINT [type=bezier] [posOri=0 0 15 -1 0 0 0 0 -1 0 -1 0] [prevCPDist=25] [nextCPDist=25] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]
0 !LDCAD PATH_POINT [type=bezier] [posOri=0 0 450 -1 0 0 0 0 -1 0 -1 0] [prevCPDist=25] [nextCPDist=25] [cirR=20] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=1111%] [donCen=partCen] [donCenYOfs=5.5] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=1000%] [donCen=partCen] [donCenYOfs=5] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k01.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=12]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=833%] [donCen=partCen] [donCenYOfs=4.16] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=889%] [donCen=partCen] [donCenYOfs=4.45] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=777%] [donCen=partCen] [donCenYOfs=3.89] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k03.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=14]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=1222%] [donCen=partCen] [donCenYOfs=6.11] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k03.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=14]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=1222%] [donCen=partCen] [donCenYOfs=6.11] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k03.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=14]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=1222%] [donCen=partCen] [donCenYOfs=6.11] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k03.dat] [donYSize=100%] [donCen=partCen] [donCenYOfs=0] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=14]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=1222%] [donCen=partCen] [donCenYOfs=6.11] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 0 1 0 -1 0] [donPart=66821k02.dat] [donYSize=833%] [donCen=partCen] [donCenYOfs=4.16] [donFinScale=segMerge] [donPlace=refsStat] [donYAlign=0] [donInline=false] [segSize=90%] [segSizeTol=20%] [segsCnt=0] [segsGrp=1] [segsMaxMerge=0] [segsMrgAng=0] [segsMrgRollAng=0] [segsEdgeDelKind=keepFirstLeft] [donZSize=8]
0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=0 0 0 1 0 0 0 1 0 0 0 1] [part=66821k05.dat] [extraLen=2] [inlineRef=false]
0 !LDCAD PATH_CAP [group=end] [color=16] [posOri=0 0 458 -1 0 0 0 1 0 0 0 -1] [part=66821k04.dat] [extraLen=2] [inlineRef=false]
Résultat du bracelet assemblé : Ensemble 41903.
Voir le message sur LDraw.org: 41903 - Cosmic Wonder.
Philo a créé un pack de pièces dynamiques manquantes dans LDCad.
Voir : Pack de modèles pour pièces souples LDCad.
La création de pièce dynamique doit être envisagée seulement lorsque le gabarit de la pièce dynamique correspondant à votre besoin n'existe pas. Les étapes à suivre se résument à :
Pour avoir une pièce dynamique ayant une longueur fixe, il faut aller dans le menu "Session / Edit header" d'une pièce dynamique pour ouvrir la boite de dialogue "Edit header", puis dans l'onglet "Path" ajouter une ou plusieurs contraintes de longueur dans "Length constains". Voir le chapitre : Modèle ou sous-modèle de pièce dynamique.
Vous pouvez aussi limiter le nombre de segments sur le chemin pour obtenir le même effet, mais la méthode des contraintes est destinée à être utilisé combinée avec la génération d'inventaire, bien que cela ne soit pas utilisé à l'heure actuelle (v1.5).
Les fichiers donneurs sont des pièces LDraw spéciales (.dat) utilisées lors de la génération du contenu d'un chemin.
Lorsqu'ils sont utilisés par exemple pour générer une pièce de chemin, ils sont recherchés dans les emplacements LDraw standards. Mais, il est préférable de les garder séparés pour une meilleure organisation. Les donneurs par défaut de LDCad se trouvent dans le sous-dossier "donors". Suivant l'emplacement de votre configuration, cet endroit devra également être dans la liste des dossiers de recherche LDraw.
Si vous concevez le contenu (partie souple) d'un chemin personnalisé, vous devrez également créer un certain nombre de fichiers donneurs. Vous pouvez stocker ces fichiers n'importe où, même dans les bibliothèques LDraw existantes. Mais c'est plus propre de leur donner un dossier spécial quelque part et d'ajouter cet emplacement dans les recherches en utilisant le type spécial "donor" dans la boite de dialogue de recherche LDraw, accessible depuis le menu "Prefs / LDraw / Search (library) paths".
Créer un fichier donneur est identique à la création de pièce ou primitive LDraw des bibliothèques officielle et non officielle. Le seul problème supplémentaire, qui pourrais vous inquiéter est quand faut-il inclure des lignes conditionnelles, si vous avez l'intention de les utiliser, avec la méthode de positionnement de la déformation. Car cela pourrait entraîner la génération de très gros fichiers, alors que ce n'est pas vraiment la peine visuellement parlant.
Avant de créer des donneurs personnalisés, il serait utile de parcourir ceux disponibles par défaut dans LDCad, car dans ceux que j'ai ajouté vous trouverez quelques commentaires sur leur utilisation ici et là.
Voir le chapitre : Panneau couleurs pour une description du choix des couleurs.
Voir les chapitres : Configuration panneau couleurs et Configuration palette de couleurs, pour sa configuration.
Utiliser le panneau couleurs pour définir la couleur par défaut ou couleur courante. Cette couleur est utilisée pour afficher les pièces dans le panneau pièces et sera la couleur de toutes les pièces insérées ensuite dans le modèle.
Après sélection, cela est fait en utilisant le panneau couleurs. L'utiliser pour naviguer jusqu'à la couleur désirée, et la cliquer dans la "roue des couleurs" (camembert). Cela changera la couleur courante indiquée dans la barre juste en dessous. Cliquer sur cette barre appliquera la couleur désirée à la sélection courante. On peut également faire un double clic directement sur la couleur désirée dans le camembert.
Pour mettre en place une pièce ou la déplacer il y a deux modes d'attirance possible :
En dehors de ces modes, il est toujours possible de placer une pièce approximativement, puis d'éditer ses propriétés (bouton central de la souris) pour changer ses coordonnées et orientation.
Ce mode est actif si GS (Grid Snapping) est actif dans le panneau point de vue.
Toutes les insertions utilisent une "attirance relative sur le pas de la grille" par défaut, donc si la dernière pièce sélectionnée était sur un emplacement non courant par exemple à 4,4,4 en utilisant les pas 10,8,10, elle sautera à 14,4,14 puis 24,4,24 .... en étant sur le plan XZ (c'est différent de MLCad qui sautera en absolu). Je pense que ce pas relatif est meilleur parce qu'il permet des insertions rapides par exemple les chevilles Technic (Technic Pin) dans une poutre (Beam), après avoir mis la première correctement. Dans MLCad vous aviez à ajuster chaque cheville séparément ou utiliser une grille plus fine pour tout.
Voir le chapitre : Tutoriel : Base du placement des briques.
Ce mode est actif si PS (Part Snapping) est actif dans le panneau point de vue.
Voir le chapitre : Tutoriel : Base du placement des briques, en utilisant l'attirance pièce.
Lorsqu'une pièce n'existe pas dans la bibliothèque fantôme, utiliser par exemple l'astuce du remplacement d'une pièce par une autre. Voir le chapitre : Remplacement.
Voir également : Comment activer l'attirance aux pièces ?
Voir aussi : L'attirance aux pièces agit bizarrement, les choses semblent mal s'accrocher et/ou s'accrocher partiellement ?
Chaque modèle ou sous-modèle peut être découpé en étapes de construction. Une étape correspondant à toutes les pièces ajoutées ensemble, comme sur une page de manuel d'instructions par exemple.
La gestion des étapes se fait par le panneau étape en haut à gauche de la zone graphique et le menu "Stepping" qui apparaît lorsqu'on clique dessus. On a aussi certains boutons de la barre d'outils.
Une étape ordinaire correspond à l'ajout de la méta-commande : 0 STEP dans le code source.
Utiliser le menu "Stepping / Insert" pour ajouter une étape avant celle courante, "Stepping / Selection insert" pour ajouter une étape avant la pièce principale de la sélection, et "Stepping / Append" pour ajouter une étape après la dernière.
On peut aussi ajouter une étape après la dernière avec le bouton correspondant de la barre d'outils.
On peut également ajouter une étape ordinaire avec le panneau pièce : "Special / LDraw meta items / Building step meta". Glisser cette méta-commande directement à l'endroit voulu dans le panneau code source.
Une étape de rotation permet d'afficher le modèle suivant une orientation temporaire.
Elle correspond à l'ajout de méta-commandes : 0 ROTSTEP xxx dans le code source.
La rotation peut se faire suivant les 3 angles de façon absolue, relative ou incrémentale.
Pour ajouter une étape de rotation, il faut d'abord ajouter une étape ordinaire comme vu précédemment, puis de modifier cette méta-commande d'étape ordinaire en étape de rotation. Voir : Edition d'une étape (STEP ou ROTSTEP).
On peut également ajouter une étape de rotation avec le panneau pièce : "Special / LDraw meta items / Rotated building step meta". Glisser cette méta-commande directement à l'endroit voulu dans le panneau code source, puis l'éditer. Voir : Edition d'une étape (STEP ou ROTSTEP).
On peut visualiser le modèle dans l'état d'une étape donnée.
Lorsqu'une étape est sélectionnée, toutes les pièces de cette étape et celles des étapes précédentes s'affichent dans la zone graphique tandis que celles des étapes suivantes sont cachées.
Lorsqu'une étape de rotation est sélectionnée, l'orientation des vues tient compte des angles donnés. Pour voir les étapes de rotation s'afficher automatiquement, cliquer sur "NSR" et passer à "ASR" dans le panneau point de vue ou utiliser le raccourci B.
Dans le menu "Stepping" cliquer sur "First" pour aller à la première étape, "Last" pour aller sur la dernière, "Previous" pour la précédente, "Next" pour la suivante et "Selected" pour aller à l'étape de la pièce principale de la sélection. Dans le même menu on peut également sélectionner une étape par son numéro d'ordre.
On peut aussi utiliser les boutons "First", "Previous", "Next" et "Last" de la barre d'outils.
On peut aussi visualiser l'étape d'une pièce sélectionnée avec le menu contextuel "Selection / Stepping / Selected" ou en cliquant dans le panneau étape "Stepping / Selected".
Utiliser le menu "Stepping / Del current" pour supprimer l'étape sélectionnée courante. Les pièces composant cette étape appartiennent alors à l'étape précédente. On peut aussi cliquer sur la ligne de l'étape à supprimer dans le panneau code source et taper "Suppr" ou "Del" au clavier.
Utiliser le menu "Stepping / Move to step" pour déplacer la sélection à l'étape de son choix.
Pour modifier une méta-commande d'étape voir : Edition d'une étape (STEP ou ROTSTEP).
On peut aussi sélectionner toutes les pièces de l'étape d'une pièce sélectionnée avec le menu contextuel "Select / Same Step(s)".
On peut grouper une sélection de pièces pour pouvoir manipuler ce groupe comme une seule pièce.
Utiliser le menu contextuel "Selection / Grouping / Group selection" pour créer un groupe de la sélection courante. Vous pouvez aussi utiliser le bouton correspondant de la barre d'outils ou le raccourci Ctrl+G.
Pour ajouter des pièces à un groupe, sélectionner une pièce du groupe puis avec Ctrl+Clic sélectionner les pièces à ajouter. Utiliser ensuite le menu contextuel "Selection / Grouping / Add selection to group".
Les groupes n'apparaissent pas explicitement dans le panneau code source, mais lorsque l'on fait un clic sur une ligne de code appartenant à un groupe toutes les lignes appartenant à ce groupe sont également sélectionnés.
Pour supprimer un groupe, sélectionner une pièce du groupe puis avec le menu contextuel "Selection / Grouping / Ungroup selection" vous supprimez le/les groupes de premier niveau des pièces sélectionnées.
Pour supprimer tous les groupes, utiliser le menu contextuel "Selection / Grouping / Ungroup all".
Lorsque l'on copie un groupe de pièces, le groupe n'est pas copié. Si l'on veut grouper les pièces de la nouvelle sélection, utiliser Ctrl+G ou le menu contextuel. Si les 2 groupes sont identiques, il est préférable d'utiliser la notion de sous-modèle.
Un groupe de pièces appartient à la couche de regroupement actif. Si l'on change de couche de regroupement la sélection du groupe n'est pas active.
Pour avoir une information sur les méta-commandes de groupe voir : Métas de groupes.
Par défaut les pièces sont dans la couche 1. Il y a 32 couches de disponible. Pour changer de couche survoler le panneau session et dans l'onglet "Normal" ou "Nested", cliquer sur "Grouping layer". Sélectionner une nouvelle couche dans le menu "Grouping layer" qui s'affiche. Sélectionner "0: none/disabled" pour aucune.
On peut aussi changer de couche par défaut avec le menu "Edit / Selection / Grouping / Grouping layer".
Nota : La notion de couche de regroupement est encore expérimentale en version v1.6 Alpha 4.
On peut mettre à jour, si besoin, les groupes automatiques avec le menu "Edit / Selection / Grouping / Update auto groups".
On peut supprimer, si besoin, les groupes automatiques avec le menu "Edit / Selection / Grouping / Clear auto groups".
On peut cacher temporairement une sélection de pièces pour pouvoir mieux visualiser ce qui est derrière ou dessous.
Utiliser le menu contextuel "Selection / Ghosting / Hide selection" pour cacher la sélection. Vous pouvez aussi utiliser le bouton correspondant de la barre d'outils ou le raccourci H.
Utiliser le menu contextuel "Selection / Ghosting / Undo last" pour réafficher de façon récursive la dernière sélection cachée. Vous pouvez aussi utiliser le bouton correspondant de la barre d'outils ou le raccourci Ctrl+H.
Utiliser le menu contextuel "Selection / Ghosting / Show all" pour réafficher toutes les pièces cachées. Vous pouvez aussi utiliser le bouton correspondant de la barre d'outils ou le raccourci Ctrl+Maj+H.
Utiliser le menu contextuel "Selection / Ghosting / Show selection" pour réafficher les pièces cachées sélectionnées dans le code source. Vous pouvez aussi utiliser le raccourci Maj+H.
Nota : L'état caché n'est pas sauvegardé, en conséquence les pièces cachées apparaîtront normalement à la prochaine ouverture du fichier.
L'échange de buffer ou échange tampon est une façon de sauvegarder en mémoire tampon la position d'une ou plusieurs pièces (position provisoire), puis de les placer à leur position définitive.
En mode édition "Normal" ou "Nested" le bouton "BXCHG" active ou désactive l'action de ce mécanisme.
Pour créer des échanges de buffer insérer les méta-commandes "Buffer exchange storage" et "Buffer exchange retrieval" à partir du panneau pièces dans la catégorie "Special parts / LDraw meta Items".
Nota : Ces méta-commandes ne sont visibles que dans le panneau source.
Pour les éditer, voir : Edition d'un échange de buffer (BUFEXCHG).
Pour les supprimer, voir : Créer modèle : togBufEx.
Etape 1 : Ajout 2 briques dans le modèle. Sauve état A. |
Etape 2 : Ajout 4 pièces Positions provisoires. |
Etape 3 : Retrouve état A Mêmes pièces Positions définitives. |
Etape 4 : Ajout 2 briques supplémentaires. |
Listing de l'exemple :
Voir fichier : bufferts.ldr (exemple originaire de MLcad).
Utiliser la macro avec le menu "Scripts / technic / Piston placement helper".
Cela configurera l'orientation de toutes les pièces du piston dans le modèle actuel.
Pièces reconnues par la macro :
Placement provisoire des éléments. | Après exécution de la macro. |
Utiliser la macro avec le menu "Scripts / technic / Universal joint(s) placement helper".
Cela définira l'orientation et le centre des pièces d'assemblage de joint universel pour une ou deux connexions de joint universel.
Pièces reconnues par la macro :
Pour un joint simple, sélectionner dans l'ordre (avec la touche Ctrl) :
Placement provisoire des éléments. | Après exécution de la macro. |
Pour un joint double, sélectionner dans l'ordre (avec la touche Ctrl) :
Placement provisoire des éléments. | Après exécution de la macro. |
Nota : Il vaut mieux utiliser le même modèle pour les deux parties du cardan.
Ici le résultat n'est pas bon car l'axe des tourillons des extrémités 1 et 4,
ainsi que les extrémités 2 et 3 doivent être respectivement dans un même plan.
Message après exécution :
Vous devrez peut-être réaligner tout ce qui est attaché à la dernière pièce d'extrémité.
On peut ajouter une ligne d'auteur avec le panneau pièce : "Special / LDraw meta items / Author meta". Glisser cette méta-commande directement dans l'entête du fichier du panneau code source, puis l'éditer. Voir : Edition du nom de l'auteur (Author).
On peut ajouter une ligne d'aide avec le panneau pièce : "Special / LDraw meta items / Help comment meta". Glisser cette méta-commande directement dans l'entête du fichier du panneau code source, puis si besoin l'éditer. Voir : Edition d'une ligne d'aide (!HELP).
On peut ajouter le type de licence donné aux utilisateurs du fichier après publication avec le panneau pièce : "Special / LDraw meta items / License meta". Glisser cette méta-commande directement dans l'entête du fichier du panneau code source, puis si besoin l'éditer. Voir : Edition de la licence d'utilisation (LICENSE).
On peut ajouter une ligne d'historique avec le panneau pièce : "Special / LDraw meta items / History comment meta". Glisser cette méta-commande directement dans l'entête du fichier du panneau code source, puis l'éditer. Voir : Edition d'une ligne d'historique (!HISTORY).
On peut ajouter la catégorie du modèle avec le panneau pièce : "Special / LDraw meta items / Category meta". Glisser cette méta-commande directement dans l'entête du fichier du panneau code source, puis l'éditer. Voir : Edition de la catégorie (!CATEGORY).
On peut ajouter les mots-clefs définissant le modèle avec le panneau pièce : "Special / LDraw meta items / Keywords meta". Glisser cette méta-commande directement dans l'entête du fichier du panneau code source, puis l'éditer. Voir : Edition des mots clefs (!KEYWORDS).
On peut ajouter un commentaire avec le panneau pièce : "Special / LDraw meta items / Comment". Glisser cette méta-commande directement à l'endroit voulu dans le panneau code source, puis l'éditer. Voir : Edition de la description ou d'un commentaire.
On peut aussi ajouter une ligne vide avec le panneau pièce : "Special / LDraw meta items / Empty line". Glisser cette méta-commande directement à l'endroit voulu dans le panneau code source.
LDCad est capable de gérer la présence de méta-commandes spécifiques à ces programmes.
LDCad peut les éditer, Voir : Edition de méta-commande MLCad, Edition de méta-commande LSynth, Edition de méta-commande LPub.
Par contre il n'est pas prévu de commande spécifique pour en créer de nouvelles directement sous LDCad.
Il est possible, en externe :
Il est possible, sous LDcad :
Cette méta-commande spécifique au programme MLCad permet de grouper des pièces, mais LDCad utilise son propre format de groupe.
Le format de la ligne commence par 0 MLCAD BTG.
Avec le menu "Scripts / mlcad / Remove groups" on peut supprimer toutes les lignes du modèle ou sous-modèle actif utilisant cette méta-commande.
Cette méta-commande spécifique au programme MLCad permet de définir des points de rotation et de définir celui actif.
Le format de la ligne commence par 0 ROTATION CENTER ou 0 ROTATION CONFIG.
Avec le menu "Scripts / mlcad / Remove rotation" on peut supprimer toutes les lignes du modèle ou sous-modèle actif utilisant ces méta-commandes.
Cette méta-commande spécifique au programme MLCad permet d'ajouter une pièce dans le fichier LDraw mais de la rendre invisible en visualisation.
Le format de la ligne commence par 0 MLCAD HIDE.
Dans LDCad la pièce reste invisible par défaut.
Avec le menu "Scripts / mlcad / Select hidden lines" on peut sélectionner toutes les lignes du fichier utilisant cette méta-commande. On peut aussi sélectionner une ou plusieurs lignes directement à la souris dans le panneau code source.
Avec le menu "Scripts / mlcad / Toggle hidden lines" on peut basculer la sélection du mode "hide" ou mode "normal" et inversement.
Cette méta-commande spécifique au programme MLCad permet d'ajouter une pièce dans un sous-modèle du fichier LDraw. Cette pièce est visible lorsque l'on édite ou visualise le sous-modèle mais est invisible dans le modèle parent appelant ce sous-modèle.
Le format de la ligne commence par 0 GHOST.
Dans LDCad la pièce reste invisible par défaut dans le sous-modèle comme dans le modèle parent.
Avec le menu "Scripts / mlcad / Select ghosted lines" on peut sélectionner toutes les lignes du fichier utilisant cette méta-commande. On peut aussi sélectionner une ou plusieurs lignes directement à la souris dans le panneau code source.
Avec le menu "Scripts / mlcad / Toggle ghosted lines" on peut basculer la sélection du mode "ghost" ou mode "normal" et inversement.
LDCad permet de gérer des modèles multiples, c'est-à-dire un fichier (.mpd) contenant plusieurs sous-modèles. Le premier sous-modèle ou modèle principal est le modèle affiché par défaut. Les autres sous-modèles sont appelés par le modèle principal ou un autre sous-modèle.
Pour créer un fichier MPD commencer par créer un fichier ordinaire avec "File / New model" ou "File / New" en cochant "Model". Cela deviendra par la suite le modèle principal du fichier MPD.
Le fichier devient un fichier MPD en créant le premier sous-modèle avec "Session / Add new submodel" ou "Session / Add new" en cochant "Model". On peut ensuite créer autant de sous-modèles que l'on veut.
Le modèle principal et les sous-modèles peuvent contenir autant de pièces que l'on veut, comme n'importe quel modèle ordinaire. Ces pièces s'insèrent et se gèrent de façon classique.
En dehors des pièces, ils peuvent contenir les autres sous-modèles qui se gèrent pratiquement comme des pièces ordinaires. Un sous-modèle pouvant appeler un autre sous-modèle sur autant de niveaux que l'on veut, et un sous-modèle peut être utilisé autant de fois que l'on veut.
La seule contrainte, pour éviter un problème de récursivité, est de ne jamais ajouter un sous-modèle dans le sous-modèle lui-même ou un de ses sous-modèles quel qu'en soit le niveau.
Pour ajouter un sous-modèle dans le modèle principal ou un autre sous-modèle, allez dans le panneau pièces dans "Model (content) / Content of current model's file", puis le sélectionner et l'insérer dans le sous-modèle actif par glisser/déposer ou la touche "Inser".
Pour changer de sous-modèle courant, dans la même arborescence du panneau pièces, cliquer sur l'icône de clé plate qui apparait près de la représentation du sous-modèle. On peut également le sélectionner dans la liste du panneau session ou avec le menu "Session / Change current session".
Pour revenir modèle principal, dans la même arborescence du panneau pièces, cliquer sur l'icône de clé plate qui apparait près de la représentation du modèle principal (avec {M} dans la désignation). On peut également le sélectionner dans la liste du panneau session, avec le menu "Session / MPD main session", ou le bouton "Main model" ou "Ctrl+Fin".
Lors de l'insertion la couleur par défaut est appliquée au sous-modèle, ce qui n'a aucun effet en général, sauf si certaines pièces du sous-modèle sont de couleur 16, alors la couleur par défaut est affectée à ces pièces. C'est utile pour utiliser un même sous-modèle avec des couleurs différentes dans le modèle principal.
Utiliser "Session / Set main subfile" pour changer le sous-modèle actif en modèle principal.
Utiliser "Session / Edit header" pour renommer un sous-modèle ou changer d'autres informations.
Utiliser "Session / Delete this subfile" pour supprimer le sous-modèle actif.
Sur un exemple de Roland Dahl voici la méthode qu'il a utilisée pour créer un modèle à l'échelle en insérant dans LDCad des images planes de ce modèle.
Vue 3D du modèle du bateau Endurance utilisé par
Ernest Shackleton pour son expédition transantarctique de 1914.
La méthode détourne l'usage de Textured sticker generator pour créer des autocollants recevant des vues planes du modèle. Ces autocollants sont ensuite ajoutés dans le modèle LDCad et utilisés comme gabarits dans la construction du modèle.
Nota : Pour changer l'échelle des autocollants il suffit de les sélectionner puis avec le menu contextuel "Properties" de changer les valeurs non nulles des champs "Part orientation" par un nouveau facteur suivant les deux directions principales de l'autocollant.
Les pièces doivent être sélectionnées pour leur appliquer une modification, comme un déplacement, une rotation, un changement de couleur, etc.
Une pièce est sélectionnée en cliquant dessus, sa bordure passe en bleu clair. Pour sélectionner des pièces supplémentaires, appuyer sur la touche Ctrl et cliquer sur d'autres pièces. LDCad ajoutera ces pièces à la sélection ou les enlèvera si elles sont déjà dans la sélection.
La première pièce sélectionnée est la "pièce principale" de la sélection, qui est utilisée comme centre pour toutes les activités d'édition utilisant l'outil de déplacement/rotation. C'est la sorte d'ombrelle qui est visible quand au moins une pièce est sélectionnée. Cet outil est utilisé pour tourner et déplacer les pièces. Vous pouvez changer de pièce principale en cliquant sur une autre pièce dans la sélection tout en appuyant sur Ctrl+Maj.
Les pièces peuvent être sélectionnées dans une zone rectangulaire. Pour cela :
Sélection de zone avec gestion de la profondeur.
Nota : Une pièce doit avoir au moins un sommet dans la zone rectangulaire pour être sélectionnée.
Pour avoir des informations sur une sélection utiliser le menu contextuel "Selection / Selection info", et mettre "Show info" sur "Yes".
Le point de référence de chaque pièce correspond à son origine.
Avec ce menu on peut obtenir la distance ou l'angle entre pièces ou également résoudre les angles à appliquer pour fermer un triangle de pièces (généralement briques et poutres Technic). Les 3 informations peuvent s'afficher conjointement.
Avec "Loop" sur "Yes" l'information s'affichage également entre la dernière et la première pièce de la sélection.
Avec "Rel to edit plane" sur "No" le calcul se fait en 3D, et sur "Yes" suivant le plan d'édition 2D actif. La valeur affichée dépend alors du sens de la vue.
Avec "Apply to grid ori" le calcul se fait par rapport à la grille définie par les 3 premières pièces de la sélection, tout en gardant l'axe courant.
Mettre "Show distance" sur "Yes" dans le menu précédent.
La distance s'affiche en cyan entre les deux pièces de la sélection. S'il y a plus de deux pièces la distance est affichée sur chaque paire de pièces successives.
Un clic sur la boite contenant la distance met la valeur dans le presse-papier.
Mettre "Show angles" sur "Yes" dans le menu précédent.
L'angle s'affiche en jaune à la seconde pièce de la sélection de trois pièces. S'il y a plus de trois pièces l'angle est affichée sur chaque trio de pièces successives.
Un clic sur la boite contenant l'angle met la valeur dans le presse-papier.
Mettre "Show triangle angles" et "Rel to edit plane" sur "Yes" dans le menu précédent.
Il faut sélectionner 4 pièces, la première et la dernière devant se rejoindre pour fermer le triangle et les 2 intermédiaires servant respectivement de pivots. Les 2 configurations possibles s'affichent avec des lignes vertes et rouges plus l'hypoténuse blanche. Les angles pour fermer le triangle s'affiche dans une boite verte et une boite rouge suivant configuration.
Un clic sur la boite contenant les angles de la configuration à retenir met les valeurs dans le presse-papier.
Voir le chapitre : Tutoriel : Fermer un triangle pour l'utilisation de ces données.
Pour copier une sélection dans le presse-papier utiliser le menu contextuel "Selection / Copy" ou le
raccourci clavier Ctrl+C. Une boite de dialogue de paramétrage apparaît :
Pour ne plus afficher la boite de dialogue précédente sélectionner "Always" aux questions, la première fois qu'elle apparaît, ou au préalable en configurant les options (Voir ci-dessous).
Nota : La boite de dialogue peut varier en fonction des pièces copiées. Voir toutes les options : Options copier/coller.
Pour couper une sélection et la mettre dans le presse-papier utiliser le menu contextuel "Selection / Cut" ou le raccourci clavier Ctrl+X.
Pour coller le contenu du presse-papier utiliser le menu contextuel "Selection / Paste" ou le
raccourci clavier Ctrl+V. Une boite de dialogue de paramétrage apparaît :
Pour remplacer toutes les pièces d'une sélection par une autre pièce, en gardant leur position, orientation et couleur d'origine, il suffit de sélectionner les pièces à remplacer, puis de faire un double-clic sur la nouvelle pièce dans le panneau pièces.
Si les pièces à remplacer sont nombreuses, en sélectionner une seule puis sélectionner "Same part" dans le menu "Select". Elles seront toutes sélectionnées.
Une autre solution, étant hors sélection, c'est de sélectionner l'ancienne pièce dans le panneau pièces et de choisir "Working part" dans le menu "Select", puis de faire un double-clic sur la nouvelle pièce.
Nota : Dans les deux cas précédents utiliser le mode d'édition imbriqué ("Nested editing mode"), s'il y a des sous-modèles et qu'il faut remplacer les pièces de façon récursive dans ces sous-modèles.
Il existe une troisième solution plus brutale, c'est d'utiliser un éditeur de fichier texte pour ouvrir le fichier du modèle et de faire une Recherche/Remplacement sur l'ancien/nouveau numéro de pièce. Recharger ensuite le fichier dans LDCad.
Evidemment cela marche pour remplacer une seule pièce sélectionnée par une autre pièce. Cette utilisation est particulièrement pratique pour remplacer une pièce simple par une version à motif ou une pièce à motif par un autre motif, comme une tête de Minifig par une autre.
Une autre utilisation possible de la propriété de garder la position et l'orientation est de placer facilement une pièce ayant les propriétés d'attirance pièce, puis de la remplacer par une autre similaire ne l'ayant pas.
Attention, si vous avez sélectionné tout le modèle, un double-clic dans le panneau pièces remplace toutes les pièces du modèle par la même pièce, ce qui n'est généralement pas la chose voulue. Alors annulez avec Ctrl+Z.
Ici, son château-fort ne ressemble plus à grand chose. Mésaventure arrivée
à Orion Pobursky.
Vous pouvez déplacer une pièce en la "saisissant" avec le bouton gauche de la souris. Elle se déplacera sur le plan de la grille courante en utilisant le pas courant. Vous pouvez aussi utiliser l'outil de manipulation en le mettant en mode déplacement (utiliser le cube en haut de l'outil). Quand c'est fait alors un grand double chemin en croix sera visible. Vous pouvez attraper celui qui convient par un clic gauche et déplacer la pièce en gardant le bouton pressé. Cela peut être fait dans une seule direction ou les deux ensemble selon où vous cliquez sur les flèches (indiqué par leur surbrillance).
Vous pouvez aussi utiliser la boite de dialogue de déplacement manuel, qui s'ouvre en cliquant avec le bouton central de la souris sur les flèches de l'outil de manipulation ou avec le bouton droit de la souris sur une pièce de la sélection dans le menu "Selection / Move ..".
Déplacement manuel :
|
Tourner la sélection peut être fait en utilisant l'outil de manipulation en le mettant en mode rotation. Quand il est dans ce mode il montre un disque segmenté. Cliquez dessus avec la souris en gardant le bouton pressé et déplacez la souris, l'angle courant sera montré visuellement et en degrés. La sélection entière tournera autour du centre de la première pièce sélectionnée (pièce principale). Les pièces tourneront toujours suivant un axe perpendiculaire au plan de la grille courante, même si ce plan n'est pas à niveau. Les futures versions vous laisseront changer le point de rotation des pièces à un autre endroit que le centre de la pièce principale.
Vous pouvez aussi utiliser la boite de dialogue de rotation manuelle, qui s'ouvre en cliquant avec le bouton central de la souris sur le disque de l'outil de manipulation ou avec le bouton droit de la souris sur une pièce de la sélection dans le menu "Selection / Rotate ..".
Centre de rotation manuel :
Selection absolute center : Centre absolu de la sélection. Mainpart origin : Origine de la pièce principale. Mainpart absolute center : Centre absolu de la pièce principale. |
Nota : Actuellement (v1.6 Alpha 4) les angles de rotation sont en degrés et 1/10ème de degré seulement.
Voir également le chapitre : Tutoriel : Alignement de pièces à l'aide de scripts de rotation.
Pour symétriser le contenu (en entier) du sous-fichier actif, aller dans le menu "Session / Mirror this subfile".
Nota : Certaines pièces ont besoin d'information supplémentaire pour un placement angulaire correct. Cette information n'est pas toujours disponible.
Porte du camion 5580. | La symétrie de la porte est OK, mais la vitre n'a pas été retournée. |
L'entête du modèle principal ou d'un sous-modèle peut être modifié par le menu "Session / Edit Header".
Pour la description des différents onglets et champs, voir : Ouvrir un nouveau modèle. La seule différence est qu'il est possible de modifier le nom du fichier ou sous-fichier dans "(sub)file name".
Il est aussi possible d'éditer une ligne d'entête existante directement, voir ci-dessous : Modification d'une méta-commandes ou entité.
Nota : Certaines lignes d'entête ne possèdent pas l'édition directe :
Comme l'indique ce message, il faut alors revenir à l'édition de l'entête.
Cliquer sur une entité dans la fenêtre graphique ou sur une ligne du panneau code source pour la sélectionner, puis appuyer sur le bouton central de la souris pour l'éditer ou avec le bouton droit de la souris sélectionner la commande "Selection / Properties".
Edition de la description ou d'un commentaire :
Edition du nom du sous-fichier (Name) :
Nota : Cette fonction n'existe plus dans les dernières versions. Editer l'entête.
Edition du nom de l'auteur (Author) :
Edition de la catégorie (!CATEGORY) :
Edition des mots clefs (!KEYWORDS) :
Edition de la licence d'utilisation (LICENSE) :
Edition d'une ligne d'aide (!HELP) :
Edition d'une ligne d'historique (!HISTORY) :
Edition de la ligne theme du modèle (!THEME) :
Edition d'une étape (STEP ou ROTSTEP) :
Nota : L'édition d'une étape ordinaire concerne l'instruction "0 STEP" se trouvant à la fin de l'étape en cours.
En conséquence, la dernière étape, si elle ne se termine pas par une instruction d'étape ne peut
être éditée et retourne le message :
(Vous ne pouvez pas éditer la dernière (ou la seule) étape).
Edition d'un échange de buffer (BUFEXCHG) :
Edition de méta-commande MLCad :
Edition de méta-commande LSynth :
Edition de méta-commande LPub :
Edition d'entité graphique (pièce ou sous-modèle) :
Edition de chemin de pièce dynamique :
Edition de section de ressort :
Edition de ligne (mode édition pièce) :
Edition de triangle (mode édition pièce) :
Edition de quadrilatère (mode édition pièce) :
Edition de ligne conditionnelle (mode édition pièce) :
Cette commande permet de faire le ménage ou compléter l'entête du fichier et d'éventuels sous-fichiers. Elle permet également de rendre le fichier conforme au standard OMR (En-têtes normalisées des modèles officiels). Accessible par le menu "File / Clean-up".
avec le menu "File / Clean-up", bouton "OMR" ou "OMR settings" :
LDCad v1.4 et plus récent utilise le langage de programmation lua pour ses scripts. Alors avant d'essayer d'utiliser les scripts dans LDCad il est bon de se familiariser avec l'usage général de ce langage : Lua (en anglais) ou Programmation en language LUA (en français), ou LUA : Le tutoriel (en français).
Dans LDCad les modules Lua officiels suivants sont toujours disponibles :
base, bit32, math, package, string et table.
Egalement le module spécial ldc permet d'accéder et de communiquer avec les parties internes de LDCad : Voir : Scripting API (en anglais), ou la traduction : Langage des scripts ci-dessous.
La combinaison du langage lua de base et une collection de fonctions spécifiques à LDCad que vous pouvez utiliser à travers le module ldc ouvre un très grand monde de possibilités.
Depuis la version v1.6 Beta 2, un nouveau module d'animation a été intégré à LDCad, le module aniTools accompagné du module genTools. Ce module n'est pas encore documenté, mais on peut voir des exemples avec les fichiers "8860.lua" et "42042 - Crawler Crane.lua".
Pour éditer un script, aller dans "Session / Scripting / Open script" ou "Scripts / xxxx / Open script".
Nota : Pour que le fichier lua par défaut s'ouvre, un éditeur doit être assigné à ce type de fichier dans l'explorateur de Windows. Voir le chapitre : Installation.
Exemple avec Notepad++ et le fichier 8248.lua :
Ouvrir une nouveau script ne semble pas prévu dans LDCad. Pour cela, ouvrir le script par défaut et utiliser le menu "File / Nouveau" de l'éditeur.
Si le script est modifié en dehors de LDCad,
il faut le recharger en cliquant sur "Accept" :
Lors de la mise au point d'un script, les messages d'erreur s'affichent dans la fenêtre console :
Cette fenêtre s'ouvre avec le menu : "Scripts / Scripting console".
Il y a deux cas de figures pour l'utilisation des scripts, soit en "Local" pour animer un modèle, soit en "Global" pour une utilisation plus générale.
Le script porte le même nom que le modèle avec l'extension .lua, et se place dans le même dossier que le modèle.
La sélection du script se trouve dans le menu "Scripts" sous la rubrique "Local".
Nota : Dans certains cas le script n'apparaît pas dans le menu. Dans ce cas glisser le fichier .lua à partir du gestionnaire de fichiers Windows dans la fenêtre LDCad. Un message apparaît et après confirmation le script se trouve dans le menu "Scripts" sous la rubrique "Local".
Le script porte un nom à votre convenance avec l'extension .lua, et se place dans un sous-dossier du dossier "scripts".
Suivant votre version de LDCad et les anciennes versions utilisées, ce dossier "scripts" se trouve dans le dossier d'installation de LDCad, C:/LEGO/LDCad/scripts dans mon cas, ou dans le dossier C:/Users/tchang/AppData/Roaming/LDCad/scripts (remplacer tchang par votre nom d'utilisateur Windows).
Pour connaitre quel dossier est actif, il suffit d'aller dans le menu "Scripts" et de mettre la souris sur un script de la catégorie "Global" pour faire apparaitre le nom du script et son chemin dans la barre de statut.
Dans ce dossier "scripts" se trouve le sous-dossier "default" qui contient les scripts fournis avec LDCad. Il est préférable de ne pas modifier ce sous-dossier pour éviter d'avoir un script écrasé lors d'une mise à jour de LDCad.
Il est préférable de créer un sous-dossier "tchang" (ou votre pseudo personnel), puis dans ce sous-dossier créer un nouveau sous-dossier "global". C'est dans ce dernier sous-dossier qu'il faut placer les scripts. Dans mon exemple : C:/LEGO/LDCad/scripts/tchang/global.
La sélection du script se trouve dans le menu "Scripts" sous la rubrique "Global".
Ce chapitre décrit les fonctions des scripts pour LDCad v1.4 et supérieur.
Voir source sur le site de l'auteur : Scripting API.
Dans LDCad les modules lua officiels suivants seront toujours disponibles :
base, bit32, math, package, string et table.
Egalement disponible est le module spécial à LDCad nommé : ldc, qui permet d'accéder aux outils LDCad et communiquer avec ses composants internes.
Le module ldc de LDCad introduit les objets userdata (données utilisateurs) suivants :
Le module ldc expose certaines fonctions simples de haut niveau, qui sont utilisées pour des informations générales et de lien de haut niveau entre les objets ldc :
ldc.getApiVersion | Renvoie le numéro de version entier de l'API LDCad. Chaque fois que quelque chose changera dans les fonctions ou les objets disponibles, ce numéro sera incrémenté. |
ldc.animation.getCurrent | Renvoie un nouvel objet d'animation lié à l'animation en train d'être jouée. Renvoie un objet d'animation non lié si aucune animation n'est jouée. |
ldc.session.getCurrent | Renvoie un nouvel objet de session lié à la session d'édition LDCad courante. Si aucune session n'est active, renvoie un objet de session non lié. |
L'objet vecteur est utilisé pour stocker une simple coordonnée X,Y,Z ou une direction.
Un objet vecteur peut être obtenu comme résultat d'autres fonctions ldc, mais vous pouvez également en créer un
pour un usage particulier en utilisant son constructeur, comme :
local myVec=ldc.vector()
Après cela, vous pouvez utiliser la variable myVec pour manipuler
les données x,y,z. Cela se fait à travers une collection de fonctions auxquelles vous avez
toujours accès en utilisant la méthode du raccourci lua ":". Exemple :
myVec:clear()
Lors de la création d'un vecteur, en utilisant ldc.vector(), il sera à 0,0,0 par défaut. Vous pouvez changer ce comportement en fournissant des paramètres supplémentaires. Les combinaisons acceptées sont :
Paramètres | Effet |
---|---|
1 vecteur | Copie le vecteur donné. |
1 matrice | Copie la position de la matrice donnée. |
3 nombres | Utilise les valeurs données comme x,y et z. |
1 nombre | Fixe x,y et z à la même valeur donnée. |
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés
par référence. Donc, pour obtenir une copie d'un vecteur vous devez utiliser sa fonction clone.
Elle renvoie un nouveau vecteur contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
clear réinitialise x,y et z à zéro.
Cette fonction n'a pas de paramètre supplémentaire.
set peut être utilisé pour changer les valeurs x, y et z du vecteur de la même manière
que vous les initialisez en utilisant le constructeur.
Elle accepte donc les mêmes combinaisons de paramètres comme décrit dans le constructeur.
Cette fonction n'a pas de valeur de retour.
setComp est utilisé pour changer x, y ou z en utilisant un index comme premier paramètre,
où 1 est pour x, 2 est pour y et 3 est pour z.
Un second paramètre est utilisé comme nouvelle valeur pour le composant indiqué.
Cette fonction n'a pas de valeur de retour.
setX est utilisé pour changer la valeur x du vecteur. Le seul paramètre est la nouvelle valeur de x.
Cette fonction n'a pas de valeur de retour.
setY est utilisé pour changer la valeur y du vecteur. Le seul paramètre est la nouvelle valeur de y.
Cette fonction n'a pas de valeur de retour.
setZ est utilisé pour changer la valeur z du vecteur. Le seul paramètre est la nouvelle valeur de z.
Cette fonction n'a pas de valeur de retour.
Get renvoie x,y et z en une seule fois, comme :
local x, y, z=myVec:get()
Ensuite, vous pouvez utiliser les variables lua normales x, y et z dans certains calculs manuels (vecteur).
Cette fonction n'a pas de paramètre supplémentaire.
getComp renvoie x, y ou z en utilisant un index, où x est 1, y est 2 et z est 3.
getX renvoie la valeur courante x du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getY renvoie la valeur courante y du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getZ renvoie la valeur courante z du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
add est utilisé pour augmenter x, y et z avec une valeur donnée. La valeur peut être
un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getAdd renvoie un nouveau vecteur avec le résultat de x, y et z augmenté d'une valeur. La valeur peut être un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
sub est utilisé pour diminuer x, y et z avec une valeur donnée. La valeur peut être
un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getSub renvoie un nouveau vecteur avec le résultat de x, y et z diminué d'une valeur. La valeur peut être un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
mul est utilisé pour multiplier x, y et z avec une valeur donnée. La valeur peut être
un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getMul renvoie un nouveau vecteur avec le résultat de x, y et z multiplié par une valeur. La valeur peut être un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
transform applique une matrice de transformation donnée à x, y et z. La matrice donnée
peut être l'une des matrices valides des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getTransformed renvoie un nouveau vecteur qui contient le résultat de la transformation x, y et z avec une matrice donnée. La matrice donnée peut être l'une des matrices valides des combinaisons de paramètres du constructeur.
normalize va redimensionner le vecteur pour que sa longueur devienne 1.0.
Cette fonction renvoie également l'ancienne longueur du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getNormalized renvoie un nouveau vecteur de même direction mais avec une longueur de 1.0.
Cette fonction n'a pas de paramètre supplémentaire.
getLength renvoie la longueur du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getDot renvoie le produit scalaire de x,y,z avec un second vecteur. Le vecteur donné peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
getCross renvoie un nouveau vecteur contenant le produit croisé de x,y,z avec un second vecteur. Le vecteur donné peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
getAngle renvoie l'angle interne avec le second vecteur donné en degrés. Le second vecteur
peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
Nota : Cette fonction accepte tout vecteur, la normalisation n'est pas
nécessaire.
getSignedAngle renvoie l'angle entre deux autres vecteurs en degrés,
en supposant que sa propre donnée est le plan normal.
Le résultat est négatif si le premier vecteur donné est devant le
second one (par exemple, 2 heures et 3 heures).
Le premier vecteur doit être donné à l'aide d'un objet vectoriel existant, le second
vecteur peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
Nota : Cette fonction accepte tout vecteur, la normalisation n'est pas
nécessaire.
L'objet matrice est un conteneur de matrice mathématique.
Les opérations de matrice orientées LDCad sont très ciblées pour une
utilisation combinée avec les entités LDraw de type 1 au niveau du modèle.
A cette fin, toutes les matrices sont censées décrire une position et une orientation seulement.
Si besoin, vous pouvez appliquer un facteur d'échelle, mais cela n'est pas
supporté officiellement lorsque c'est appliqué au modèle comme le montre
LDCad et se traduira par des problèmes d'éclairage, etc.
Un objet matrice peut être obtenu comme résultat d'autres fonctions ldc, mais
vous pouvez également en créer un pour un usage particulier en utilisant son constructeur, comme :
local myMatrix=ldc.matrix()
Après cela, vous pouvez utiliser la variable myMatrix pour manipuler les données de la matrice.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myMatrix:setIdentity()
Lors de la création d'une matrice en utilisant ldc.matrix() elle sera par défaut à l'état neutre "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1". Vous pouvez modifier ce comportement en fournissant des paramètres supplémentaires. Les combinaisons acceptées sont :
Paramètres | Effet |
---|---|
1 matrice | Copie la matrice donnée. |
12 nombres | Notation de ligne de code LDraw de type 1. |
9 nombres | Utilise les valeurs données comme sous-matrice d'orientation 3x3, tout en utilisant la valeur par défaut pour la position. |
3 nombres | Utilise les valeurs données comme position, tout en utilisant la valeur par défaut pour l'orientation. |
4 vecteurs | Le premier vecteur est utilisé comme position, les 3 autres comme orientation. Ils sont appariés comme les 12 nombres d'une ligne de code LDraw normale. |
3 vecteurs | Utilise les vecteurs donnés comme sous-matrice d'orientation 3x3, tout en utilisant la valeur par défaut pour la position. |
1 vecteur | Utilise le vecteur donné comme position, tout en utilisant les valeurs par défaut pour l'orientation. |
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'une matrice vous devez utiliser sa fonction clone.
Elle renvoie une nouvelle matrice contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
La fonction set peut être utilisé pour changer les valeurs de la matrice de la même manière que vous
les initialisez en utilisant le constructeur.
Elle accepte donc les mêmes combinaisons de paramètres comme décrit dans le constructeur.
Cette fonction n'a pas de valeur de retour.
setIdentitiy charge l'état neutre dans les données de la matrice.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
setOri peut être utilisé pour changer la part orientation (sous-matrice 3x3) des données de la matrice, cela peut être fait en utilisant les combinaisons de paramètres suivants :
Paramètres | Effet |
---|---|
1 matrice | Copie la partie orientation de la matrice donnée. |
9 nombres | Utilise les valeurs données comme sous-matrice d'orientation 3x3. |
3 vecteurs | Utilise les vecteurs donnés comme sous-matrice d'orientation 3x3. |
Cette fonction n'a pas de valeur de retour.
setPos peut être utilisé pour changer la part position des données de la matrice,
cela peut être fait en utilisant les combinaisons de paramètres vecteur valides
du constructeur.
Cette fonction n'a pas de valeur de retour.
setMul est utilisé pour stocker le résultat de deux autres matrices multipliées ensemble
dans la matrice. Il faut donc deux objets matrice comme paramètres.
La fonction ne renvoie pas de valeur, car elle modifie les données elles-mêmes.
getOri renvoie une copie de la partie orientation de la matrice dans un nouvel objet matrice.
La partie position de la matrice résultante est fixée à 0,0,0.
Cette fonction n'a pas de paramètre supplémentaire.
getPos renvoie un nouvel objet vecteur contenant les données de position de la matrice.
Cette fonction n'a pas de paramètre supplémentaire.
Get renvoie 12 nombres qui contiennent les données de la matrice courante dans la notation
de ligne de code de type 1 LDraw, comme :
local x, y, z, a, b, c, d, e, f, g, h, i=myMatrix:get()
Vous pouvez utiliser ces valeurs lorsque vous voulez faire une manipulation manuelle
de bas niveau sur une matrice ou besoin de transmettre les données à certaines bibliothèques tierces.
Cette fonction n'a pas de paramètre supplémentaire.
stripOri réinitialise la partie orientation de la matrice à sa valeur neutre,
tout en gardant la partie position.
Une nouvelle matrice contenant une copie de l'ancienne orientation (sans position) sera également retournée.
Cette fonction n'a pas de paramètre supplémentaire.
stripPos réinitialise la partie position de la matrice à sa valeur neutre,
tout en gardant la partie orientation.
Une nouvelle matrice contenant une copie de l'ancienne position sera également retournée.
Cette fonction n'a pas de paramètre supplémentaire.
limitToOri supprime les informations de position de la matrice, tout
en conservant la partie orientation.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
limitToOri supprime les informations d'orientation de la matrice, tout
en conservant la partie position.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
mulAB utilise une seconde matrice pour multiplier la première comme : self=self*B
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres matrice du constructeur comme source de "B".
Cette fonction n'a pas de valeur de retour.
mulAB utilise une seconde matrice pour multiplier la première comme : self=B*self
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres matrice du constructeur comme source de "B".
Cette fonction n'a pas de valeur de retour.
getMulAB est identique à mulAB, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
getMulBA est identique à mulBA, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
mulOriAB utilise une seconde matrice pour transformer sa sous-matrice d'orientation 3x3,
comme : self=self*B
Les informations de position de la matrice restent inchangées.
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres d'orientation de matrice du constructeur comme source de "B". Voir aussi setOri.
Cette fonction n'a pas de valeur de retour.
mulOriBA utilise une seconde matrice pour transformer sa sous-matrice d'orientation 3x3,
comme : self=B*self
Les informations de position de la matrice restent inchangées.
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres d'orientation de matrice du constructeur comme source de "B". Voir aussi setOri.
Cette fonction n'a pas de valeur de retour.
getMulOriAB est identique à mulOriAB, sauf qu'elle renvoie une nouvelle matrice avec les données d'orientation obtenues sans changer ses propres données.
getMulOriBA est identique à mulOriBA, sauf qu'elle renvoie une nouvelle matrice avec les données d'orientation obtenues sans changer ses propres données.
setTranslate charge une transformation de translation dans la matrice. Elle
remplace à la fois les informations de position et d'orientation.
La translation peut être donnée par toute combinaison de paramètres de vecteur valide
(Voir le constructeur du chapitre ldc.vector).
Cette fonction n'a pas de valeur de retour.
mulTranslateAB effectue une transformation de translation sur ses données actuelles.
La translation donnée (sous forme de matrice) est appliquée comme : self=self*transMatrix
La translation peut être donnée par toute combinaison de paramètres de vecteur valide
(Voir le constructeur du chapitre ldc.vector).
Cette fonction n'a pas de valeur de retour.
mulTranslateBA effectue une transformation de translation sur ses données actuelles.
La translation donnée (sous forme de matrice) est appliquée comme : self=transMatrix*self
La translation peut être donnée par toute combinaison de paramètres de vecteur valide
(Voir le constructeur du chapitre ldc.vector).
Cette fonction n'a pas de valeur de retour.
getMulTranslateAB est identique à mulTranslateAB, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
getMulTranslateBA est identique à mulTranslateBA, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
setRotate charge une transformation de rotation dans la matrice, ce qui
écrase toutes les données de la matrice.
La rotation désirée doit être donnée au moyen d'un angle (en degrés) et d'un vecteur
pour tourner autour. La partie vecteur peut être donnée par toute combinaison de paramètres
de vecteur valide du constructeur.
Cette fonction n'a pas de valeur de retour.
mulRotateAB effectue une transformation de rotation sur ses données actuelles.
La rotation désirée (sous forme de matrice) est appliqué comme : self=self*rotateMatrix
La rotation désirée doit être donnée au moyen d'un angle (en degrés) et d'un vecteur
pour tourner autour. La partie vecteur peut être donnée par toute combinaison de paramètres
de vecteur valide du constructeur.
Cette fonction n'a pas de valeur de retour.
mulRotateBA effectue une transformation de rotation sur ses données actuelles.
La rotation désirée (sous forme de matrice) est appliqué comme : self=rotateMatrix*self
La rotation désirée doit être donnée au moyen d'un angle (en degrés) et d'un vecteur
pour tourner autour. La partie vecteur peut être donnée par toute combinaison de paramètres
de vecteur valide du constructeur.
Cette fonction n'a pas de valeur de retour.
getMulRotateAB est identique à mulRotateAB, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
getMulRotateBA est identique à mulRotateBA, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
invert inverse la matrice de sorte qu'elle devient sa propre transformation "undo".
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
invertOri inverse (transposition 3x3) sa partie orientation sans changer l'information de position.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
invertPos inverse le signe des coordonnées de position x, y et z. L'orientation reste inchangée.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
getInverted fait la même chose que invert mais renvoie le résultat comme un nouvel objet matrice sans changer ses propres données.
getInverted fait la même chose que invertOri mais renvoie le résultat d'orientation (donc sans information de position) comme un nouvel objet matrice sans changer ses propres données.
getInvertedPos fait la même chose que invertPos mais renvoie le résultat de position comme un nouvel objet matrice sans changer ses propres données.
getTransformed peut être utilisé pour appliquer les données de la matrice courante à
une source quelconque.
La source doit être donnée comme un vecteur ou une de ses combinaisons de paramètres
de vecteur valide du constructeur.
La fonction renvoie alors les valeurs x, y et z transformées.
L'objet sous-fichier est utilisé pour accéder à un modèle LDraw simple dans LDCad.
Il est appelé sous-fichier car un fichier LDraw peut contenir plusieurs modèles (MPD).
Un objet sous-fichier peut être obtenu comme résultat d'autres fonctions ldc, mais
vous pouvez également en créer un pour une utilisation personnalisée en utilisant son constructeur,
comme :
local mySF=ldc.subfile()
Après cela, vous pouvez utiliser la variable mySF pour accéder aux données du modèle LDraw associé.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
local cnt=mySF:getRefCount()
Lors de la création d'un sous-fichier en utilisant ldc.subfile() celui-ci pointera par défaut
au niveau supérieur du modèle de la session d'édition courante. Mais, vous pouvez aussi
le faire pointer vers un autre modèle en fournissant le nom du modèle recherché en tant que paramètre
du constructeur.
Lorsque, par exemple, "minifig.ldr" est donné et est utilisé quelque part dans l'arborescence
du modèle de la session courante, il sera lié à l'objet sous-fichier. S'il n'y a pas un tel modèle,
l'objet sous-fichier ne sera pas lié.
Noter qu'un objet sous-fichier non lié provoque une erreur d'exécution dès que
vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet sous-fichier comme paramètre du constructeur
afin de le copier.
Tous les objets ldc sont orientés donnée utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet sous-fichier, vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet sous-fichier contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
link est utilisé pour associer l'objet sous-fichier avec un (autre) sous-fichier dans LDCad.
Cela se fait en donnant un nom qui est ensuite utilisé pour rechercher dans l'arborescence
du modèle de la session courante. Si aucun nom n'est donné, l'objet sera par défaut au niveau supérieur
des sous-fichiers de la session courante.
Si aucune session n'est active, ou si aucun sous-fichier de la session n'a le nom donné, l'objet sera non lié.
Noter qu'un objet sous-fichier non lié provoque une erreur d'exécution dès que
vous essayez de l'utiliser comme s'il était lié.
Cette fonction renvoie vrai (true) si un lien a été installé avec succès, renvoie faux (false) sinon.
isLinked renvoie une valeur booléenne indiquant si l'objet est actuellement lié à un
sous-fichier ou non.
Cette fonction n'a pas de paramètre supplémentaire.
getFileName renvoie le nom de fichier complet du sous-fichier courant lié (le cas échéant).
Si l'objet n'est pas lié, une chaîne vide sera retournée.
Cette fonction n'a pas de paramètre supplémentaire.
getRefCount renvoie le nombre de lignes de code de type 1 dans le sous-fichier lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getRef est utilisé pour obtenir un nouvel objet refLine lié à l'une des lignes
de code de type 1 contenu dans le sous-ficher lié.
Vous pouvez accéder aux lignes par index, en commençant à 1, ou par le nom de la pièce
(par exemple : 3001.dat). Si un nom de pièce est donné, la première référence dans le sous-fichier
pointant vers elle sera retournée. Si un nom de pièce et un index est donné, la énième référence
pointant vers elle sera retournée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
getGroupCount renvoie le nombre de groupes qui ont leur premier niveau dans le sous-fichier lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getGroup est utilisé pour obtenir un nouvel objet groupe lié à l'un des groupes LDCad
existant dans le sous-fichier lié.
Vous pouvez accéder aux groupes par index, en commençant à 1, ou par le nom d'un groupe
(par exemple Group 1).
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
L'objet refLine est utilisé pour accéder à une seule ligne de code LDraw de type 1 dans LDCad.
Un objet refLine est toujours obtenu à partir d'autres fonctions ldc, comme par exemple :
local myRef=mySF:getRef(1)
Après cela, vous pouvez utiliser la variable myRef pour manipuler les données de la ligne de code LDraw
de type 1 associée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myRef:setColor(15)
Le constructeur refLine n'a pas de paramètre et l'objet ne sera donc pas lié à
une ligne de code LDraw de type 1 réelle.
Notez qu'un objet refLine non lié provoque une erreur d'exécution
dès que vous essayez de l'utiliser comme s'il était lié.
Il est également autorisé de fournir un autre objet refLine comme paramètre du
constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc
toujours passés par référence.
Donc, pour obtenir une copie d'un objet refLine vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet refLine contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
isLinked renvoie une valeur booléenne indiquant si l'objet est actuellement lié avec
une refLine ou non.
Cette fonction n'a pas de paramètre supplémentaire.
getOri renvoie un nouvel objet matrice contenant l'orientation actuelle de la
refLine liée. Notez que l'orientation est relative au niveau où est le parent du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPos renvoie un nouveau vecteur contenant la position actuelle dans la ligne de code de type 1 liée.
Notez que l'information donnée est relative au niveau où est le parent du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPosOri renvoie un nouvel objet matrice contenant la matrice de placement complète
de la ligne de code de type 1 liée.
Notez que l'information donnée est relative au niveau où est le parent du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setOri est utilisé pour changer l'orientation de la ligne de code de type 1 liée, sans
changer sa position. Vous pouvez utiliser l'une des combinaisons de paramètres du constructeur
de matrice d'orientation, afin de fournir le nouveau placement. Pour plus d'informations
sur les paramètres, voir la fonction setOri de l'objet matrice elle-même.
Notez que l'information donnée est relative au niveau où est le parent du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPos est utilisé pour changer la position de la ligne de code de type 1 liée, sans
changer son orientation. La nouvelle position peut être fournie en utilisant
l'une des combinaisons de paramètres du constructeur de vecteur valide.
Notez que l'information donnée est relative au niveau où est le parent du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPosOri est utilisé pour changer la matrice de placement LDraw complète
de la ligne de code de type 1 liée. Vous pouvez utiliser l'une des combinaisons de paramètres
du constructeur de matrice valide, afin de fournir le nouveau placement.
Notez que l'information donnée est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
getVisible renvoie une valeur booléenne indiquant si la ligne de code de type 1 liée,
est actuellement visible dans l'éditeur LDCad.
Notez que l'état visible est seulement pertinent pendant la lecture d'animations.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setVisible est utilisé pour changer l'état visible de la ligne de code de type 1 liée
dans l'éditeur LDCad. Cela est fait en fournissant un paramètre booléen.
Notez que l'état visible est seulement pertinent pendant la lecture d'animations.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
getColor renvoie le code LDraw de la couleur actuellement utilisée par la ligne de code de type 1 liée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setColor est utilisé pour changer la couleur de la ligne de code de type 1 liée. La couleur
doit être donnée en utilisant son code couleur LDraw.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
getSubfile renvoie un nouvel objet sous-fichier lié au sous-fichier auquel refLine appartient.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
L'objet group est utilisé pour accéder au contenu LDraw d'un groupe LDCad.
Les objets du groupe peuvent être obtenus à partir d'autres fonctions ldc, ou
créés de façon autonome en utilisant leur constructeur, comme par exemple :
local myGrp=ldc.group()
La variable myGrp peut alors être utilisé pour accéder au contenu d'un groupe lié.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myGrp:setColor(15)
Lors de la création d'un objet groupe en utilisant ldc.group() il sera par défaut dans un état non lié.
Mais, vous pouvez également pointer vers quelque chose d'utile en fournissant le nom du groupe recherché
en tant que paramètre du constructeur.
Lorsque par exemple "Group 1" est utilisé, le sous-fichier principal de la session courante
est recherché pour le groupe donné. Vous pouvez éventuellement demander une recherche récursive pour
le groupe en fournissant true (vrai) comme second paramètre.
S'il est trouvé il sera lié et vous pouvez commencer à travailler avec ce groupe, sinon
l'état sera non lié. Notez qu'un objet groupe non lié provoque une erreur d'exécution dès
que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet groupe comme paramètre au constructeur
afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet groupe vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet groupe contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
link est utilisé pour associer l'objet groupe avec un (autre) groupe dans LDCad,
en utilisant un nom comme premier paramètre.
En option, un second paramètre booléen peut être utilisé pour indiquer si la fonction
doit faire une recherche récursive dans l'arborescence du modèle de la session courante si vrai (true),
ou juste dans le sous-fichier principal si faux (false) par défaut.
Si aucun groupe ne porte le nom soumis, l'objet sera non lié.
Cette fonction renvoie vrai (true) si le lien a été installé avec succès, renvoie faux (false) sinon.
isLinked renvoie une valeur booléenne indiquant si l'objet est actuellement lié à un groupe ou non.
Cette fonction n'a pas de paramètre supplémentaire.
getGroupName renvoie le nom du groupe lié. S'il n'y a pas de groupe actuellement lié,
elle retourne une chaîne vide.
Cette fonction n'a pas de paramètre supplémentaire.
getRefCount renvoie le nombre de lignes de code de type 1 dans le groupe LDCad lié.
Notez que ce nombre peut ne pas être égal au nombre total d'éléments dans le groupe
car un groupe ne contient pas exclusivement des lignes de code de type 1.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getRef est utilisé pour obtenir un nouvel objet refLine lié à l'une des lignes de code de type 1
que le groupe LDCad lié contient. Si un nom de pièce (partName) est donné à la place, la fonction
renvoie la première référence pointant vers elle. Si un nom de pièce et un index est donné, la fonction
renvoie le nième référence pointant vers elle.
Vous pouvez accéder aux lignes par index, en commençant à 1, ou par nom de pièce (exemple
3001.dat). Si un nom de pièce est donné la première référence dans le groupe pointant vers elle
est retourné.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getOri renvoie un nouvel objet matrice contenant l'orientation actuelle du groupe LDCad lié.
Notez que l'orientation est relative au niveau de l'élément principal du groupe lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPos renvoie un nouveau vecteur contenant la position du point de centre actuel du groupe LDCad lié.
Notez que la position est relative au niveau de l'élément principal du groupe lié.
Elle indique également la position du centre des groupes et non la véritable position des éléments principaux.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPosOri renvoie un nouvel objet matrice contenant la matrice de placement complète
du groupe LDCad lié. Notez que ce placement est relatif au niveau où est l'élément principal du groupe lié.
Sa part position est prise au point de centre actuel du groupe LDCad lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setOri est utilisé pour changer l'orientation du groupe LDCad lié, sans changer sa position.
Vous pouvez utiliser l'une des combinaisons de paramètres du constructeur de matrice d'orientation,
afin de fournir le nouveau placement. Pour plus d'informations sur les paramètres, voir la fonction setOri
de l'objet matrice elle-même.
Notez que l'information donnée est relative au niveau de l'élément principal du groupe lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPos est utilisé pour changer la position de la ligne de code de type 1 lié, sans changer
son orientation. La nouvelle position peut être fournie en utilisant l'une des combinaisons de
paramètres du constructeur de vecteur valide.
Notez que l'information donnée est relative au niveau de l'élément principal du groupe lié.
Elle s'applique également à la position du centre des groupes, et non à la vraie position de l'élément principal.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPosOri est utilisé pour changer la matrice de placement LDraw complète
du groupe LDCad lié. Vous pouvez utiliser l'une des combinaisons de paramètres
du constructeur de matrice valide, afin de fournir le nouveau placement.
Notez que l'information donnée est relative au niveau de l'élément principal du groupe lié.
Elle s'applique également à la position du centre des groupes, et non à la vraie position de l'élément principal.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setVisible affiche ou cache tous les éléments du groupe lié à l'aide d'un paramètre booléen.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setColor applique le code couleur LDraw donné à tous les éléments du groupe lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
L'objet animation est utilisé pour accéder et/ou créer une animation dans LDCad.
Il est presque toujours créé en utilisant son constructeur, comme par exemple :
local myAni=ldc.animation()
La variable myAni peut alors être utilisée pour manipuler une animation.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myAni:register('kick ass movie')
Lors de la création d'un objet animation en utilisant ldc.animation() il sera par défaut
à son état non lié. Mais vous pouvez également pointer vers une animation existante
ou une nouvelle animation, en une seule fois, en fournissant le nom de l'animation
voulue comme paramètre du constructeur.
Lorsque le nom donné appartient à une animation existante, dans la session d'édition courante,
l'objet animation sera lié. S'il n'y a pas un tel objet, il sera ajouté puis lié.
Notez qu'un objet animation non lié provoque une erreur d'exécution dès que vous essayez de
l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet animation comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet animation vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet animation contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
register est utilisé pour créer (ou lier) une (différente) animation dans la session d'édition courante.
Cela est fait en fournissant un nom comme paramètre.
Si une animation est trouvé avec ce nom, elle est liée avec, sinon elle sera créé puis liée.
Cette fonction n'a pas de valeur de retour.
link est utilisé pour associer un objet animation avec un (autre) objet animation,
dans la session d'édition courante.
Cela est fait en fournissant un nom comme paramètre.
Si un objet animation est trouvé avec ce nom il est lié, sinon l'objet retourne à son état non lié.
Cette fonction renvoie un indicateur booléen, indiquant si le lien a été installé ou non.
isLinked renvoie un indicateur booléen si l'objet est actuellement lié avec
une animation ou non.
Cette fonction n'a pas de paramètre supplémentaire.
getName renvoie le nom de l'animation courante liée. Si rien n'est actuellement lié,
une chaine vide est renvoyée.
Cette fonction n'a pas de paramètre supplémentaire.
setFPS est utilisé pour définir le nombre d'images par seconde de l'animation liée
en lecture.
Lorsque cette fonction n'est jamais appelée, l'animation prend par défaut la valeur
interne par défaut de LDCad. Changez seulement le fps (frames per second = images par seconde)
par script si vous souhaitez appliquer un taux statique pour une raison quelconque.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFPS renvoie le nombre actuel d'images par seconde qu'utilise l'animation liée
pendant la lecture.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFrameNr renvoie le numéro de l'image de l'animation liée actuellement active.
Notez que contrairement au comportement normal de lua, la première image de l'animation
est numéroté zéro, cela est dû principalement à une raison mathématique.
Notez également que le numéro ne doit pas être à moins de 0..fps*length-1 car cela
représente des images supplémentaires résultant de choses comme un mouvement lent.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFrameCount renvoie le nombre d'images actuellement actives de l'animation liée.
Notez que le nombre n'est pas forcement égal à fps*length car il comptabilise des images
supplémentaires résultant de choses comme un mouvement lent.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFrameTime renvoie le temps en secondes de l'image courante de l'animation liée représente.
C'est zéro pour la première image et (length-1/fps) pour la dernière.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
setLength est utilisé pour configurer le temps de lecture de l'animation liée.
Vous devez fournir la longueur souhaitée en secondes.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getLength renvoie le temps de lecture en secondes de l'animation liée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
setEvent est utilisé pour contrôler quelle fonction de script lua est appelée quand un
certain évènement d'animation se produit. Cela se fait en fournissant deux chaines de caractères
comme paramètres.
Le premier paramètre identifie l'évènement que vous voulez souscrire. Les évènements
disponibles sont :
Evènement | Description |
---|---|
start | Appelé chaque fois que la lecture d'une animation est sur le point de commencer. Vous pouvez utiliser cet évènement pour faire un pré-calcul global, etc. |
end | Appelé chaque fois que la lecture d'une animation s'arrête. Vous pouvez utiliser cet évènement pour faire du nettoyage ou autre chose. |
frame | Appelé à chaque fois que l'image de l'animation change. Cet évènement est le cheval de
bataille principal, car il doit calculer et appliquer l'état de tous les objets animés
dans l'animation. Notez que les appels d'image (frame) peuvent être complètement aléatoires en ce qui concerne leur frameNr associé. C'est le résultat de la nature de la lecture et/ou de ce qui est trouvé. |
Le second paramètre est le nom (sans les "()") de la fonction lua
dans votre script que vous voulez exécuter lorsque l'évènement donné se produit.
Notez que les évènements sont liés au niveau LDCad, non seulement pour l'objet de l'animation
sur lequel vous travaillez.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
L'objet session est utilisé pour accéder à une session d'édition dans LDCad.
Il est toujours créé en utilisant son constructeur, comme par exemple :
local mySes=ldc.session()
La variable mySes peut alors être utilisée pour accéder à des informations sur une session liée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
print(mySes:getName())
Lors de la création d'un objet session en utilisant ldc.session() il sera par défaut
à la session d'édition courante, s'il n'y en a pas il sera à son état non lié.
Notez qu'un objet session non lié provoque une erreur d'exécution dès que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet session comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet session vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet session contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
isLinked renvoie un indicateur booléen si l'objet est actuellement lié avec une session ou non.
Cette fonction n'a pas de paramètre supplémentaire.
getName renvoie le nom de la session liée. Le nom donné est identique à celui
affiché en haut à droite du panneau édition LDCad.
Si aucune session n'est actuellement liée, une chaine vide est renvoyée.
Cette fonction n'a pas de paramètre supplémentaire.
Ce chapitre décrit les fonctions des scripts de l'api version 6 pour LDCad v1.7 Alpha 2.
Voir source sur le site de l'auteur : Scripting API.
LDCad v1.4 et supérieur utilise lua pour tous les scripts. Donc, avant d'essayer d'utiliser des scripts dans LDCad, vous voudrez peut-être d'abord vous familiariser avec l'utilisation générale de lua.
Dans LDCad les modules lua officiels suivants seront toujours disponibles :
base, io, bit32, math, package, string et table.
Egalement disponible est le module spécial à LDCad nommé : ldc, qui permet d'accéder aux outils LDCad et de communiquer avec ses composants internes.
Le module ldc de LDCad introduit les éléments suivants :
Le module ldc expose certaines fonctions simples de haut niveau, qui sont utilisées pour des informations générales et de lien de haut niveau entre les objets ldc :
ldc.getApiVersion | Renvoie le numéro de version entier de l'API LDCad. Chaque fois que quelque chose changera dans les fonctions ou les objets disponibles, ce numéro sera incrémenté. |
ldc.getVersion | Renvoie la chaîne complète de la version de LDCad, par ex. "LDCad 1.7 (LNX64)". |
ldc.getLuaVersion | Renvoie la chaîne de la version actuelle de lua, par exemple "5.3.1". |
ldc.getClipboardText | Renvoie le texte contenu dans la presse-papier du système. |
ldc.setClipboardText | Peut être utilisé pour définir un nouveau texte dans le presse-papier. La fonction a un seul paramètre chaîne. |
Nota : Ce chapitre est encore en écriture au moment de sa publication, il reste encore de nombreux "A faire" pour le terminer.
Pour un accés direct aux différents sous-modules (en vert) utiliser le menu un peu plus haut.
Ce sous-module est utilisé pour manipuler les vecteurs 3D.
L'objet vecteur est utilisé pour stocker une simple coordonnée X,Y,Z ou une direction.
Un objet vecteur peut être obtenu comme résultat d'autres fonctions ldc, mais vous pouvez également en créer un
pour un usage particulier en utilisant son constructeur, comme :
local myVec=ldc.vector()
Après cela, vous pouvez utiliser la variable myVec pour manipuler
les données x,y,z. Cela se fait à travers une collection de fonctions auxquelles vous avez
toujours accès en utilisant la méthode du raccourci lua ":". Exemple :
myVec:clear()
Lors de la création d'un vecteur, en utilisant ldc.vector(), il sera à 0,0,0 par défaut. Vous pouvez changer ce comportement en fournissant des paramètres supplémentaires. Les combinaisons acceptées sont :
Paramètres | Effet |
---|---|
1 vecteur | Copie le vecteur donné. |
1 matrice | Copie la position de la matrice donnée. |
3 nombres | Utilise les valeurs données comme x,y et z. |
1 nombre | Fixe x,y et z à la même valeur donnée. |
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés
par référence. Donc, pour obtenir une copie d'un vecteur vous devez utiliser sa fonction clone.
Elle renvoie un nouveau vecteur contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
clear réinitialise x,y et z à zéro.
Cette fonction n'a pas de paramètre supplémentaire.
set peut être utilisé pour changer les valeurs x, y et z du vecteur de la même manière
que vous les initialisez en utilisant le constructeur.
Elle accepte donc les mêmes combinaisons de paramètres comme décrit dans le constructeur.
Cette fonction n'a pas de valeur de retour.
setComp est utilisé pour changer x, y ou z en utilisant un index comme premier paramètre,
où 1 est pour x, 2 est pour y et 3 est pour z.
Un second paramètre est utilisé comme nouvelle valeur pour le composant indiqué.
Cette fonction n'a pas de valeur de retour.
setX est utilisé pour changer la valeur x du vecteur. Le seul paramètre est la nouvelle valeur de x.
Cette fonction n'a pas de valeur de retour.
setY est utilisé pour changer la valeur y du vecteur. Le seul paramètre est la nouvelle valeur de y.
Cette fonction n'a pas de valeur de retour.
setZ est utilisé pour changer la valeur z du vecteur. Le seul paramètre est la nouvelle valeur de z.
Cette fonction n'a pas de valeur de retour.
Get renvoie x,y et z en une seule fois, comme :
local x, y, z=myVec:get()
Ensuite, vous pouvez utiliser les variables lua normales x, y et z dans certains calculs manuels (vecteur).
Cette fonction n'a pas de paramètre supplémentaire.
getComp renvoie x, y ou z en utilisant un index, où x est 1, y est 2 et z est 3.
getX renvoie la valeur courante x du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getY renvoie la valeur courante y du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getZ renvoie la valeur courante z du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
add est utilisé pour augmenter x, y et z avec une valeur donnée. La valeur peut être
un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getAdd renvoie un nouveau vecteur avec le résultat de x, y et z augmenté d'une valeur. La valeur peut être un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
sub est utilisé pour diminuer x, y et z avec une valeur donnée. La valeur peut être
un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getSub renvoie un nouveau vecteur avec le résultat de x, y et z diminué d'une valeur. La valeur peut être un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
mul est utilisé pour multiplier x, y et z avec une valeur donnée. La valeur peut être
un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getMul renvoie un nouveau vecteur avec le résultat de x, y et z multiplié par une valeur. La valeur peut être un autre vecteur ou l'une des combinaisons de paramètres du constructeur.
transform applique une matrice de transformation donnée à x, y et z. La matrice donnée
peut être l'une des matrices valides des combinaisons de paramètres du constructeur.
Cette fonction n'a pas de valeur de retour.
getTransformed renvoie un nouveau vecteur qui contient le résultat de la transformation x, y et z avec une matrice donnée. La matrice donnée peut être l'une des matrices valides des combinaisons de paramètres du constructeur.
Cette fonction va multiplier x, y et z par -1.
Cette fonction va renvoyer un nouveau vecteur qui sera initialisé par les valeurs x, y et z du vecteur initial multiplié par -1.
normalize va redimensionner le vecteur pour que sa longueur devienne 1.0.
Cette fonction renvoie également l'ancienne longueur du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getNormalized renvoie un nouveau vecteur de même direction mais avec une longueur de 1.0.
Cette fonction n'a pas de paramètre supplémentaire.
getLength renvoie la longueur du vecteur.
Cette fonction n'a pas de paramètre supplémentaire.
getDistance renvoie la distance la plus courte entre les positions actuelles x, y et z par rapport à un vecteur directionnel donné. Cette fonction prend 1 ou 2 vecteurs comme paramètres. Si 2 vecteurs sont donnés, le premier doit être un objet ldc.vector qui sera utilisé comme origine du vecteur directionnel. Le second ou le seul vecteur sera utilisé comme vecteur directionnel et peut être donné en utilisant l'une des combinaisons de paramètres du constructeur ldc.vector.
getDot renvoie le produit scalaire de x,y,z avec un second vecteur. Le vecteur donné peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
getCross renvoie un nouveau vecteur contenant le produit croisé de x,y,z avec un second vecteur. Le vecteur donné peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
getAngle renvoie l'angle interne avec le second vecteur donné en degrés. Le second vecteur
peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
Nota : Cette fonction accepte tout vecteur, la normalisation n'est pas
nécessaire.
getSignedAngle renvoie l'angle entre deux autres vecteurs en degrés,
en supposant que sa propre donnée est le plan normal.
Le résultat est négatif si le premier vecteur donné est devant le
second one (par exemple, 2 heures et 3 heures).
Le premier vecteur doit être donné à l'aide d'un objet vectoriel existant, le second
vecteur peut être l'une des combinaisons de vecteurs valides des paramètres du constructeur.
Nota : Cette fonction accepte tout vecteur, la normalisation n'est pas
nécessaire.
Le sous-module matrix est utilisé pour manipuler des matrices 4x4 orientées LDraw.
L'objet matrice est un conteneur/objet de matrice mathématique.
Les opérations de matrice orientées LDCad sont très ciblées pour une
utilisation combinée avec les entités LDraw de type 1 au niveau du modèle.
A cette fin, toutes les matrices sont censées décrire une position et une orientation seulement.
Si besoin, vous pouvez appliquer un facteur d'échelle, mais cela n'est pas
supporté officiellement lorsque c'est appliqué au modèle comme le montre
LDCad et se traduira par des problèmes d'éclairage, etc.
Un objet matrice peut être obtenu comme résultat d'autres fonctions ldc, mais
vous pouvez également en créer un pour un usage particulier en utilisant son constructeur, comme :
local myMatrix=ldc.matrix()
Après cela, vous pouvez utiliser la variable myMatrix pour manipuler les données de la matrice.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myMatrix:setIdentity()
Lors de la création d'une matrice à l'aide de ldc.matrix(), l'état par défaut sera un état neutre
de "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1". Vous pouvez modifier ce comportement en fournissant
des paramètres supplémentaires. Les combinaisons acceptées sont :
Paramètres | Effet |
---|---|
1 matrice | Copie la matrice donnée. |
12 nombres | Notation de ligne de code LDraw de type 1. |
9 nombres | Utilise les valeurs données comme sous-matrice d'orientation 3x3, tout en utilisant la valeur par défaut pour la position. |
3 nombres | Utilise les valeurs données comme position, tout en utilisant la valeur par défaut pour l'orientation. |
4 vecteurs | Le premier vecteur est utilisé comme position, les 3 autres comme orientation. Ils sont appariés comme les 12 nombres d'une ligne de code LDraw normale. |
3 vecteurs | Utilise les vecteurs donnés comme sous-matrice d'orientation 3x3, tout en utilisant la valeur par défaut pour la position. |
1 vecteur | Utilise le vecteur donné comme position, tout en utilisant les valeurs par défaut pour l'orientation. |
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'une matrice vous devez utiliser sa fonction clone.
Elle renvoie une nouvelle matrice contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
La fonction set peut être utilisé pour changer les valeurs de la matrice de la même manière que vous
les initialisez en utilisant le constructeur.
Elle accepte donc les mêmes combinaisons de paramètres comme décrit dans le constructeur.
Cette fonction n'a pas de valeur de retour.
setIdentitiy charge l'état neutre dans les données de la matrice.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
setOri peut être utilisé pour changer la part orientation (sous-matrice 3x3) des données de la matrice, cela peut être fait en utilisant les combinaisons de paramètres suivants :
Paramètres | Effet |
---|---|
1 matrice | Copie la partie orientation de la matrice donnée. |
9 nombres | Utilise les valeurs données comme sous-matrice d'orientation 3x3. |
3 vecteurs | Utilise les vecteurs donnés comme sous-matrice d'orientation 3x3. |
Cette fonction n'a pas de valeur de retour.
setPos peut être utilisé pour changer la part position des données de la matrice,
cela peut être fait en utilisant les combinaisons de paramètres vecteur valides
du constructeur.
Cette fonction n'a pas de valeur de retour.
setMul est utilisé pour stocker le résultat de deux autres matrices multipliées ensemble
dans la matrice. Il faut donc deux objets matrice comme paramètres.
La fonction ne renvoie pas de valeur, car elle modifie les données elles-mêmes.
getOri renvoie une copie de la partie orientation de la matrice dans un nouvel objet matrice.
La partie position de la matrice résultante est fixée à 0,0,0.
Cette fonction n'a pas de paramètre supplémentaire.
getPos renvoie un nouvel objet vecteur contenant les données de position de la matrice.
Cette fonction n'a pas de paramètre supplémentaire.
getOriCol renvoie une seule colonne de la sous-matrice d'orientation 3x3 comme nouvel objet vectoriel.
C'est dans le même ordre que le constructeur car le constructeur est également orienté colonne.
La fonction prend 1 seul paramètre entier indiquant la colonne souhaitée,
1 pour X, 2 pour Y et 3 pour Z.
local myMatrix=ldc.matrix(x, y, z, a, b, c, d, e, f, g, h, i)
local yCol=myMatrix:getOriCol(2)
Dans l'exemple ci-dessus, le nouveau vecteur yCol contiendrait les valeurs d, e, f pour
ses composantes x, y et z.
getOriXCol est un alias pour getOriCol(1), voir ci-dessus pour plus de détails.
getOriYCol est un alias pour getOriCol(2), voir ci-dessus pour plus de détails.
getOriZCol est un alias pour getOriCol(3), voir ci-dessus pour plus de détails.
getOriCols renvoie les 3 colonnes de matrice d'orientation 3x3 à la fois, comme ceci :
local xCol, yCol, zCol=myMatrix:getOriCols()
La fonction setOriCols est utilisée pour initialiser la sous-matrice d'orientation 3x3 à l'aide de 3 vecteurs colonnes. Les 3 vecteurs donnés sont utilisés de la même manière que le constructeur ldc.matrix les utiliserait.
getOriRow renvoie une seule ligne de la sous-matrice d'orientation 3x3 comme nouvel objet vectoriel.
Veuillez noter qu'il s'agit d'un ordre différent lors de la comparaison avec le constructeur car le
constructeur est orienté colonne.
La fonction prend 1 seul paramètre entier indiquant la ligne souhaitée,
1 pour X, 2 pour Y et 3 pour Z.
local myMatrix=ldc.matrix(x, y, z, a, b, c, d, e, f, g, h, i)
local yRow=myMatrix:getOriRow(2)
Dans l'exemple ci-dessus, le nouveau vecteur yRow contiendrait les valeurs b, e, h pour
ses composantes x, y et z.
getOriXRow est un alias pour getOriRow(1), voir ci-dessus pour plus de détails.
getOriYRow est un alias pour getOriRow(2), voir ci-dessus pour plus de détails.
getOriZRow est un alias pour getOriRow(3), voir ci-dessus pour plus de détails.
getOriRows renvoie les 3 lignes de la matrice d'orientation 3x3 à la fois, comme ceci :
local xRow, yRow, zRow=myMatrix:getOriRows()
La fonction setOriRows est utilisée pour initialiser la sous-matrice d'orientation 3x3 à l'aide de 3 vecteurs de ligne. Veuillez noter que c'est dans un ordre différent que le constructeur les utiliserait car le constructeur est orienté colonne. Les 3 vecteurs seront automatiquement normalisés, mais devraient être orthogonaux.
Get renvoie 12 nombres qui contiennent les données de la matrice courante dans la notation
de ligne de code de type 1 LDraw, comme :
local x, y, z, a, b, c, d, e, f, g, h, i=myMatrix:get()
Vous pouvez utiliser ces valeurs lorsque vous voulez faire une manipulation manuelle
de bas niveau sur une matrice ou besoin de transmettre les données à certaines bibliothèques tierces.
Cette fonction n'a pas de paramètre supplémentaire.
stripOri réinitialise la partie orientation de la matrice à sa valeur neutre,
tout en gardant la partie position.
Une nouvelle matrice contenant une copie de l'ancienne orientation (sans position) sera également retournée.
Cette fonction n'a pas de paramètre supplémentaire.
stripPos réinitialise la partie position de la matrice à sa valeur neutre,
tout en gardant la partie orientation.
Une nouvelle matrice contenant une copie de l'ancienne position sera également retournée.
Cette fonction n'a pas de paramètre supplémentaire.
limitToOri supprime les informations de position de la matrice, tout
en conservant la partie orientation.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
limitToOri supprime les informations d'orientation de la matrice, tout
en conservant la partie position.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
mulAB utilise une seconde matrice pour multiplier la première comme : self=self*B
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres matrice du constructeur comme source de "B".
Cette fonction n'a pas de valeur de retour.
mulAB utilise une seconde matrice pour multiplier la première comme : self=B*self
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres matrice du constructeur comme source de "B".
Cette fonction n'a pas de valeur de retour.
getMulAB est identique à mulAB, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
getMulBA est identique à mulBA, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
mulOriAB utilise une seconde matrice pour transformer sa sous-matrice d'orientation 3x3,
comme : self=self*B
Les informations de position de la matrice restent inchangées.
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres d'orientation de matrice du constructeur comme source de "B". Voir aussi setOri.
Cette fonction n'a pas de valeur de retour.
mulOriBA utilise une seconde matrice pour transformer sa sous-matrice d'orientation 3x3,
comme : self=B*self
Les informations de position de la matrice restent inchangées.
En plus d'une seconde matrice directe, vous pouvez également utiliser les combinaisons
de paramètres d'orientation de matrice du constructeur comme source de "B". Voir aussi setOri.
Cette fonction n'a pas de valeur de retour.
getMulOriAB est identique à mulOriAB, sauf qu'elle renvoie une nouvelle matrice avec les données d'orientation obtenues sans changer ses propres données.
getMulOriBA est identique à mulOriBA, sauf qu'elle renvoie une nouvelle matrice avec les données d'orientation obtenues sans changer ses propres données.
setTranslate charge une transformation de translation dans la matrice. Elle
remplace à la fois les informations de position et d'orientation.
La translation peut être donnée par toute combinaison de paramètres de vecteur valide
(Voir le constructeur du chapitre ldc.vector).
Cette fonction n'a pas de valeur de retour.
mulTranslateAB effectue une transformation de translation sur ses données actuelles.
La translation donnée (sous forme de matrice) est appliquée comme : self=self*transMatrix
La translation peut être donnée par toute combinaison de paramètres de vecteur valide
(Voir le constructeur du chapitre ldc.vector).
Cette fonction n'a pas de valeur de retour.
mulTranslateBA effectue une transformation de translation sur ses données actuelles.
La translation donnée (sous forme de matrice) est appliquée comme : self=transMatrix*self
La translation peut être donnée par toute combinaison de paramètres de vecteur valide
(Voir le constructeur du chapitre ldc.vector).
Cette fonction n'a pas de valeur de retour.
getMulTranslateAB est identique à mulTranslateAB, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
getMulTranslateBA est identique à mulTranslateBA, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
setRotate charge une transformation de rotation dans la matrice, ce qui
écrase toutes les données de la matrice.
La rotation désirée doit être donnée au moyen d'un angle (en degrés) et d'un vecteur
pour tourner autour. La partie vecteur peut être donnée par toute combinaison de paramètres
de vecteur valide du constructeur.
Cette fonction n'a pas de valeur de retour.
mulRotateAB effectue une transformation de rotation sur ses données actuelles.
La rotation désirée (sous forme de matrice) est appliqué comme : self=self*rotateMatrix
La rotation désirée doit être donnée au moyen d'un angle (en degrés) et d'un vecteur
pour tourner autour. La partie vecteur peut être donnée par toute combinaison de paramètres
de vecteur valide du constructeur.
Cette fonction n'a pas de valeur de retour.
mulRotateBA effectue une transformation de rotation sur ses données actuelles.
La rotation désirée (sous forme de matrice) est appliqué comme : self=rotateMatrix*self
La rotation désirée doit être donnée au moyen d'un angle (en degrés) et d'un vecteur
pour tourner autour. La partie vecteur peut être donnée par toute combinaison de paramètres
de vecteur valide du constructeur.
Cette fonction n'a pas de valeur de retour.
getMulRotateAB est identique à mulRotateAB, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
getMulRotateBA est identique à mulRotateBA, sauf qu'elle renvoie une nouvelle matrice avec les données obtenues sans changer ses propres données.
invert inverse la matrice de sorte qu'elle devient sa propre transformation "undo".
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
invertOri inverse (transposition 3x3) sa partie orientation sans changer l'information de position.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
invertPos inverse le signe des coordonnées de position x, y et z. L'orientation reste inchangée.
Cette fonction n'a pas de paramètre supplémentaire et n'a pas de valeur de retour.
getInverted fait la même chose que invert mais renvoie le résultat comme un nouvel objet matrice sans changer ses propres données.
getInverted fait la même chose que invertOri mais renvoie le résultat d'orientation (donc sans information de position) comme un nouvel objet matrice sans changer ses propres données.
getInvertedPos fait la même chose que invertPos mais renvoie le résultat de position comme un nouvel objet matrice sans changer ses propres données.
getTransformed peut être utilisé pour appliquer les données de la matrice courante à
une source quelconque.
La source doit être donnée comme un vecteur ou une de ses combinaisons de paramètres
de vecteur valide du constructeur.
La fonction renvoie alors les valeurs x, y et z transformées.
Le sous-module subfile est utilisé pour accéder et manipuler le contenu d'un sous-fichier LDraw.
L'objet sous-fichier est utilisé pour accéder à un modèle LDraw simple dans LDCad.
Il est appelé sous-fichier car un fichier LDraw peut contenir plusieurs modèles (MPD).
Un objet sous-fichier peut être obtenu comme résultat d'autres fonctions ldc, mais
vous pouvez également en créer un pour une utilisation personnalisée en utilisant son constructeur,
comme :
local mySF=ldc.subfile()
Après cela, vous pouvez utiliser la variable mySF pour accéder aux données du modèle LDraw associé.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
local cnt=mySF:getRefCount()
Lors de la création d'un sous-fichier en utilisant ldc.subfile() celui-ci pointera par défaut
au niveau supérieur du modèle de la session d'édition courante. Mais, vous pouvez aussi
le faire pointer vers un autre modèle en fournissant le nom du modèle recherché en tant que paramètre
du constructeur.
Lorsque, par exemple, "minifig.ldr" est donné et est utilisé quelque part dans l'arborescence
du modèle de la session courante, il sera lié à l'objet sous-fichier. S'il n'y a pas un tel modèle,
l'objet sous-fichier ne sera pas lié.
Noter qu'un objet sous-fichier non lié provoque une erreur d'exécution dès que
vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet sous-fichier comme paramètre du constructeur
afin de le copier.
Tous les objets ldc sont orientés donnée utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet sous-fichier, vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet sous-fichier contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
link est utilisé pour associer l'objet sous-fichier avec un (autre) sous-fichier dans LDCad.
Cela se fait en donnant un nom qui est ensuite utilisé pour rechercher dans l'arborescence
du modèle de la session courante. Si aucun nom n'est donné, l'objet sera par défaut au niveau supérieur
des sous-fichiers de la session courante.
Si aucune session n'est active, ou si aucun sous-fichier de la session n'a le nom donné, l'objet sera non lié.
Noter qu'un objet sous-fichier non lié provoque une erreur d'exécution dès que
vous essayez de l'utiliser comme s'il était lié.
Cette fonction renvoie vrai (true) si un lien a été installé avec succès, renvoie faux (false) sinon.
isLinked renvoie une valeur booléenne indiquant si l'objet est actuellement lié à un
sous-fichier ou non.
Cette fonction n'a pas de paramètre supplémentaire.
hasSameLink prend 1 seul objet sous-fichier comme paramètre et renvoie un booléen indiquant si cet objet est lié au même sous-fichier LDCad/LDraw ou non.
getFileName renvoie le nom de fichier complet du sous-fichier courant lié (le cas échéant).
Si l'objet n'est pas lié, une chaîne vide sera retournée.
Cette fonction n'a pas de paramètre supplémentaire.
getRefCount renvoie le nombre de lignes de code de type 1 dans le sous-fichier lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getRef est utilisé pour obtenir un nouvel objet refLine lié à l'une des lignes
de code de type 1 contenu dans le sous-ficher lié.
Vous pouvez accéder aux lignes par index, en commençant à 1, ou par le nom de la pièce
(par exemple : 3001.dat). Si un nom de pièce est donné, la première référence dans le sous-fichier
pointant vers elle sera retournée. Si un nom de pièce et un index est donné, la énième référence
pointant vers elle sera retournée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
getGroupCount renvoie le nombre de groupes qui ont leur premier niveau dans le sous-fichier lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getGroup est utilisé pour obtenir un nouvel objet groupe lié à l'un des groupes LDCad
existant dans le sous-fichier lié.
Vous pouvez accéder aux groupes par index, en commençant à 1, ou par le nom d'un groupe
(par exemple Group 1).
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
getLineCount renvoie le nombre de lignes LDraw dans le sous-fichier lié. Si l'objet n'est pas lié, l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getLine prend un seul paramètre entier et revoie un nouvel objet ldc.srcLine
lié à la nième ligne LDraw dans le sous-fichier actuellement lié.
La première ligne du sous-fichier a un index de 1.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
getStepCount
getStepCount renvoie le nombre d'étapes dans le sous-fichier lié. Veuillez noter que cela est égal au nombre de méta-commandes d'étape plus 1, car il y a toujours au moins 1 étape dans un sous-fichier. Si l'objet n'est pas lié, l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getStepLineInfo prend un seul paramètre entier indiquant un numéro d'étape, commençant par 1.
Il renvoie ensuite le décalage, en commençant par 1, sur la première ligne LDraw et le nombre
de lignes de cette étape, comme ceci :
local ofs,cnt=mySF:getStepLineInfo(2)
ofs et cnt peuvent ensuite être utilisés avec mySF:getLine par exemple pour boucler
toutes les lignes LDraw à l'intérieur de cette étape.
Si l'étape donnée n'existe pas ou si l'objet n'est pas lié, l'appel de cette fonction
provoquera une erreur mettant fin à l'exécution du script.
getStepRefInfo prend un seul paramètre entier indiquant un numéro d'étape, commençant par 1.
Il renvoie ensuite le décalage, en commençant par 1, sur la première ligne LDraw et le nombre
de lignes de cette étape, comme ceci :
local ofs,cnt=mySF:getStepRefInfo(2)
ofs et cnt peuvent ensuite être utilisés avec mySF:getRef par exemple pour boucler
les lignes de référence à l'intérieur de cette étape.
Si l'étape donnée n'existe pas ou si l'objet n'est pas lié, l'appel de cette fonction
provoquera une erreur mettant fin à l'exécution du script.
addNewLine prend un index facultatif, suivi d'un objet lié à une nouvelle chaîne ou à une ligne.
Il ajoutera ensuite une nouvelle ligne LDraw au sous-fichier actuellement lié. La nouvelle ligne sera
ajoutée après la dernière si aucun index n'est donné ou inséré à l'index donné en poussant tout le
contenu suivant (y compris la ligne actuellement à la position d'index) d'une ligne vers le bas.
Si une chaîne est donnée comme seul ou deuxième paramètre, elle sera analysée comme
une ligne LDraw, comme si elle se trouvait dans un fichier.
Si un objet de ligne est donné comme seul ou deuxième paramètre, le nouvelle ligne en sera une copie
et la ligne donnée restera inchangée.
La fonction retourne un nouvel objet ldc.srcLine lié à la nouvelle ligne LDraw, comme ceci :
local newLine=mySF:addNewLine('0 //Hello all')
Si l'index (facultatif) donné est hors limites ou si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
deleteLine prend un seul paramètre d'objet entier ou ligne.
Si un entier est donné, il sera utilisé pour supprimer la nième (commençant par 1) ligne du sous-fichier lié.
Si un objet ligne est donné, la fonction le supprimera du sous-fichier lié s'il est actuellement lié
à une ligne dans le sous-fichier de l'objet. Il ne fera rien si la ligne donnée appartient à un autre sous-fichier.
La fonction retournera un booléen (quel que soit la type de paramètre) indiquant si la ligne a bien
été supprimé ou non.
Si l'index donné est hors limites ou si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
moveLine prend un index ou un objet de ligne combiné avec un deuxième entier afin de déplacer la première ligne.
La fonction déplacera la ligne donnée (ou celle à l'index donné) vers la (deuxième) ligne de comptage d'index donnée.
Ce qui signifie qu si vous avez un ordre de lignes "a b c d" et que vous utilisez la fonction moveLine(1, 3)
l'ordre des lignes résultant sera "b c a d".
La fonction renvoie un booléen indiquant si la ligne a été réellement déplacée ou non.
Si un objet ligne est donné comme premier paramètre, il doit être lié à une ligne à l'intérieur du
même sous-fichier, sinon une erreur d'exécution mettra fin à l'exécution du script.
Si l'index donné est hors limites ou si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
addNewRef prend un index facultatif suivi d'un objet ldc.refLine ou d'une chaîne partName.
Il ajoutera ensuite une nouvelle ligne LDraw de type 1 au sous-fichier actuellement lié.
La nouvelle ligne sera ajoutée après la dernière ligne de type 1 si aucun index n'est donné
ou inséré à l'index donné en poussant tout le contenu suivant (y compris la ligne actuellement
à la position d'index) d'une ligne vers le bas.
Si une chaîne est donnée comme seul ou deuxième paramètre, une nouvelle ligne de type 1 référençant
la partie nommée en utilisant la couler 16 à la position 0,0,0 et dans une orientation neutre.
Si un objet refLine est donné comme seul ou deuxième paramètre, la nouvelle ligne en sera une copie
et la ligne donnée restera inchangée
La fonction retourne un nouvel objet ldc.refLine lié à la nouvelle ligne LDraw de type 1 et l'index
de la nouvelle ligne, comme ceci :
local newRef=mySF:addNewRef('3001.dat')
Si l'index (facultatif) donné est hors limites ou si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
deleteRef prend un seul paramètre d'objet entier ou ligne.
Si un entier est donné, il sera utilisé pour supprimer la nième (commençant à 1) ligne de type 1
du sous-fichier lié.
Si un objet ligne est donné, la fonction le supprimera du sous-fichier lié s'il est actuellement lié à une ligne de type 1
dans le sous-fichier de l'objet. Il ne fera rien si la ligne donnée n'est pas une ligne de type 1
ou si elle appartient à un autre sous-fichier.
La fonction renvoie un booléen (quel que soit le type de paramètre) indiquant si la ligne a bien été
supprimée ou non.
Si l'index donné est hors limites ou si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
moveRef prend un index ou un objet ligne combiné avec un deuxième entier afin de déplacer la première ligne.
La fonction déplacera la ligne de type 1 donnée (ou celle à l'index donné) vers la (deuxième) ligne de type 1
d'index donnée.
Ce qui signifie que si vous avez un ordre de lignes "a b c d" et que vous utilisez la fonction moveRef(1, 3)
l'ordre des lignes résultant sera "b c a d".
La fonction renvoie un booléen indiquant si la ligne a été réellement déplacée ou non.
Si un objet ligne est donné comme premier paramètre, il doit être lié à une ligne de type 1 à l'intérieur du
même sous-fichier, sinon une erreur d'exécution mettra fin à l'exécution du script.
Si l'index donné est hors limites ou si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isPart renvoie un booléen indiquant si le sous-fichier lié est considéré comme une pièce en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isRealPart renvoie un booléen indiquant si le sous-fichier lié est considéré comme une pièce réelle/native
en interne par LDCad. La différence entre isRealPart et isPart est que isRealPart exclura les pièces
renommées (~Moved to) et les alias (=).
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isColourPart renvoie un booléen indiquant si le sous-fichier lié est considéré comme une pièce
avec une couleur fixée (_) en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isShortCut renvoie un booléen indiquant si le sous-fichier lié est considéré comme une pièce
avec un raccourci de pièce assemblée (Shortcut) en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isModel renvoie un booléen indiquant si le sous-fichier lié est considéré comme un modèle
en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isGenerated renvoie un booléen indiquant si le sous-fichier lié utilise l'un des
générateurs de LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isOfficialPart renvoie un booléen indiquant si le sous-fichier lié est considéré comme une pièce
de la bibliothèque officielle en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isMoved renvoie un booléen indiquant si le sous-fichier lié est considéré comme un alias
de pièce déplacé (~Moved to) en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isAliasPart renvoie un booléen indiquant si le sous-fichier lié est considéré comme un alias
de pièce (=) en interne par LDCad.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isMissing renvoie un booléen indiquant si le sous-fichier lié est considéré comme un
espace réservé pour un contenu manquant ou non.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isRedirectedPart
isRedirectedPart renvoie un booléen indiquant si le sous-fichier lié est considéré comme une
pièce redirigée en interne par LDCad. Cette fonction est une combinaison de
isPart et pas isRealPart.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getDescription renvoie une chaîne contenant le texte de la description du sous-fichier
actuellement lié à partir de son en-tête.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getAuthor renvoie une chaîne contenant le texte de l'auteur du sous-fichier
actuellement lié à partir de son en-tête.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getCategory renvoie une chaîne contenant le texte de catégorie du sous-fichier
actuellement lié à partir de son en-tête.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getLicense renvoie une chaîne contenant le texte de licence du sous-fichier
actuellement lié à partir de son en-tête.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
Le sous-module srcLine est utilisé pour manipuler le contenu des éléments de ligne et de groupe LDraw dans LDCad.
L'objet srcLine est utilisé pour accéder à une seule ligne de code ou groupe LDraw dans LDCad.
Un objet srcLine peut être obtenu à partir d'autres fonctions ldc, mais vous pouvez également
en créer un pour une utilisation personnalisée en utilisant son constructeur, comme :
local myLine=ldc.srcLine()
Après cela, vous pouvez utiliser la variable myLine pour accéder aux données du modèle LDraw associé.
Cela se fait via une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
print(myLine:isLinked())
Lors de la création d'un sous-fichier à l'aide de ldc.srcLine() il sera par défaut dans un
état non lié. Un objet srcLine non lié n'est pas très utile, vous obtenez donc généralement des
objets srcLine à partir d'autres fonctions.
Il est également permis de fournir un autre objet sous-fichier en paramètre au constructeur afin de le copier.
Notez qu'un objet srcLine non lié provoque une erreur d'exécution
dès que vous essayez de l'utiliser comme s'il était lié.
Tous les objets ldc sont orientés données utilisateur lua, et donc
toujours passés par référence.
Donc, pour obtenir une copie d'un objet srcLine vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet srcLine contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
La fonction link peut être utilisée pour lier l'objet srcLine à une autre ligne LDraw. Elle ne prend qu'un paramètre qui doit être un autre objet orienté ligne (compatible).
isLinked renvoie une valeur booléenne indiquant si l'objet est actuellement lié avec
une ligne LDraw ou non.
Cette fonction n'a pas de paramètre supplémentaire.
hasSameLink prend un objet basé sur une seule ligne comme paramètre et renvoie un booléen indiquant si cet objet est lié à la même ligne LDraw ou non.
isGroupItem renvoie un booléen indiquant si cet objet est lié à un élément de groupe au lieu
d'une ligne de sous-fichier normale.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isGroupRef renvoie un booléen indiquant si cet objet est lié à l'élément de groupe
de référence du groupe.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getGroupRef renvoie un nouvel objet de groupe lié au groupe auquel cet élément de groupe
fait référence. Il renverra un objet de groupe non lié si cet objet de ligne n'est actuellement
pas lié à un élément de référence de groupe.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getLineIndex renvoie l'index, en commençant par 1, de la ligne liée
actuelle à l'intérieur de l'objet sous-fichier la contenant.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getOwner renvoie un nouvel objet sous-fichier lié à ces lignes contenant le sous-fichier.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
delete peut être utilisé pour supprimer la ligne LDraw actuellement liée de son
sous-fichier contenant. Si l'objet est lié à un élément de groupe, cette fonction
ne fera rien. Si la ligne est supprimée, l'objet ne sera plus lié.
La fonction renverra un booléen indiquant si quelque chose a été supprimé ou non.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isMeta renvoie un booléen indiquant si cette ligne est une ligne méta LDraw.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isRef renvoie un booléen indiquant si cette ligne est une ligne LDraw de type 1.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isStatEdge renvoie un booléen indiquant si cette ligne est une ligne LDraw de type 2 (ligne de bord).
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isTriangle renvoie un booléen indiquant si cette ligne est une ligne LDraw de type 3 (triangle).
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isQuad renvoie un booléen indiquant si cette ligne est une ligne LDraw de type 4 (quadrilatère).
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isCondEdge renvoie un booléen indiquant si cette ligne est une ligne LDraw de type 5 (ligne conditionnelle).
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isEdge renvoie un booléen indiquant si cette ligne est une ligne LDraw de type 2 ou 5.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isStepMeta renvoie un booléen indiquant si cette ligne est une méta-ligne d'étape LDraw.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isNormalStepMeta renvoie un booléen indiquant si cette ligne est une méta-ligne d'étape de base (non rotative).
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
isRotationStepMeta renvoie un booléen indiquant si cette ligne est une méta-ligne d'étape avec rotation.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
Le sous-module refLine est utilisé pour manipuler les lignes LDraw de type 1 dans LDCad.
Le constructeur est utilisé pour créer un nouvel objet refLine.
En option, un autre objet refLine peut être donné comme seul paramètre afin de copier cet objet.
Sans autre objet, le nouvel objet passera par défaut à l'état non lié.
Les objets refLine utiles sont toujours obtenus à partir d'autres fonctions ldc, comme par exemple :
local myRef=mySF:getRef(1)
Après cela, vous pouvez utiliser la variable myRef pour manipuler les données de la ligne de code LDraw
de type 1 associée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myRef:setColor(15)
Notez qu'un objet refLine non lié provoquera une erreur d'exécution
dès que vous essayez de l'utiliser comme s'il était lié.
Un objet refLine offre également toutes les fonctions qu'offre un objet srcLine, voir ci-dessus pour leurs détails.
getRefIndex renvoie l'index de la ligne LDraw de type 1 liée à l'intérieur du sous-fichier
conteneur à partir de 1.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getName renvoie une chaîne contenant le nom du sous-fichier auquel cette ligne de type 1
fait actuellement référence.
Si l'objet n'est pas lié,
l'appel de cette fonction provoquera une erreur mettant fin à l'exécution du script.
getOri renvoie un nouvel objet matrice contenant l'orientation actuelle de la
refLine liée. Notez que l'orientation est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPos renvoie un nouveau vecteur contenant la position actuelle dans la ligne de code de type 1 liée.
Notez que l'information donnée est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPosOri renvoie un nouvel objet matrice contenant la matrice de placement complète
de la ligne de code de type 1 liée.
Notez que l'information donnée est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setOri est utilisé pour changer l'orientation de la ligne de code de type 1 liée, sans
changer sa position. Vous pouvez utiliser l'une des combinaisons de paramètres du constructeur
de matrice d'orientation, afin de fournir le nouveau placement. Pour plus d'informations
sur les paramètres, voir la fonction setOri de l'objet matrice elle-même.
Notez que l'information donnée est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPos est utilisé pour changer la position de la ligne de code de type 1 liée, sans
changer son orientation. La nouvelle position peut être fournie en utilisant
l'une des combinaisons de paramètres du constructeur de vecteur valide.
Notez que l'information donnée est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPosOri est utilisé pour changer la matrice de placement LDraw complète
de la ligne de code de type 1 liée. Vous pouvez utiliser l'une des combinaisons de paramètres
du constructeur de matrice valide, afin de fournir le nouveau placement.
Notez que l'information donnée est relative au niveau où est le parent refLine du sous-fichier.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
getVisible renvoie une valeur booléenne indiquant si la ligne de code de type 1 liée,
est actuellement visible dans l'éditeur LDCad.
Notez que l'état visible est seulement pertinent pendant la lecture d'animations.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setVisible est utilisé pour changer l'état visible de la ligne de code de type 1 liée
dans l'éditeur LDCad. Cela est fait en fournissant un paramètre booléen.
Notez que l'état visible est seulement pertinent pendant la lecture d'animations.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
getColor renvoie le code LDraw de la couleur actuellement utilisée par la ligne de code de type 1 liée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setColor est utilisé pour changer la couleur de la ligne de code de type 1 liée. La couleur
doit être donnée en utilisant son code couleur LDraw.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
getSubfile renvoie un nouvel objet sous-fichier lié au sous-fichier auquel refLine appartient.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
Le sous-module group est utilisé pour accéder et manipuler les groupes en édition LDCad.
L'objet group est utilisé pour accéder au contenu LDraw d'un groupe LDCad.
Les objets du groupe peuvent être obtenus à partir d'autres fonctions ldc, ou
créés de façon autonome en utilisant leur constructeur, comme par exemple :
local myGrp=ldc.group()
La variable myGrp peut alors être utilisée pour accéder au contenu d'un groupe lié.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myGrp:setColor(15)
Lors de la création d'un objet groupe en utilisant ldc.group() il sera par défaut dans un état non lié.
Mais, vous pouvez également pointer vers quelque chose d'utile dès le départ en fournissant le nom du groupe
recherché en tant que paramètre du constructeur.
Lorsque par exemple "Group 1" est utilisé, le sous-fichier principal de la session courante
est recherché pour le groupe donné. Vous pouvez éventuellement demander une recherche récursive pour
le groupe en fournissant true (vrai) comme second paramètre.
S'il est trouvé, il sera lié et vous pouvez commencer à travailler avec ce groupe, sinon
l'état sera non lié. Notez qu'un objet groupe non lié provoque une erreur d'exécution dès
que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet group comme paramètre au constructeur
afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet group vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet group contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
link est utilisé pour associer l'objet group avec un (autre) groupe dans LDCad,
en utilisant un nom comme premier paramètre.
En option, un second paramètre booléen peut être utilisé pour indiquer si la fonction
doit faire une recherche récursive dans l'arborescence du modèle de la session courante si vrai (true),
ou juste dans le sous-fichier principal si faux (false), valeur par défaut.
Si aucun groupe ne porte le nom soumis, l'objet sera non lié.
Cette fonction renvoie vrai (true) si le lien a été installé avec succès, renvoie faux (false) sinon.
isLinked renvoie une valeur booléenne indiquant si l'objet est actuellement lié à un groupe ou non.
Cette fonction n'a pas de paramètre supplémentaire.
hasSameLink prend un seul objet de groupe comme paramètre et renvoie un booléen indiquant si cet objet est lié au même groupe LDCad ou non.
getGroupName renvoie le nom du groupe lié. S'il n'y a pas de groupe actuellement lié,
elle renvoie une chaîne vide.
Cette fonction n'a pas de paramètre supplémentaire.
getLineCount renvoie le nombre de lignes/éléments dans le groupe lié actuel.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getLine renvoie la nième ligne du groupe actuellement lié. Il prend un paramètre entier indiquant l'index,
commençant par 1, de la ligne demandée.
Si l'objet n'est pas lié ou si l'index est hors limite, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
getRefCount renvoie le nombre de lignes de code de type 1 dans le groupe LDCad lié.
Notez que ce nombre peut ne pas être égal au nombre total d'éléments dans le groupe
car un groupe ne contient pas exclusivement des lignes de code de type 1.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getRef est utilisé pour obtenir un nouvel objet refLine lié à l'une des lignes de code de type 1
que le groupe LDCad lié contient. Si un nom de pièce (partName) est donné à la place, la fonction
renvoie la première référence pointant vers elle. Si un nom de pièce et un index est donné, la fonction
renvoie le nième référence pointant vers elle.
Vous pouvez accéder aux lignes par index, en commençant à 1, ou par nom de pièce (exemple
3001.dat). Si un nom de pièce est donné la première référence dans le groupe pointant vers elle
est retournée.
Si l'objet n'est pas lié ou si l'index est hors limite, l'appel de cette fonction provoque une erreur
et termine l'exécution du script.
getOri renvoie un nouvel objet matrice contenant l'orientation actuelle du groupe LDCad lié.
Notez que l'orientation est relative au niveau de l'élément principal du groupe lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPos renvoie un nouveau vecteur contenant la position du point de centre actuel du groupe LDCad lié.
Notez que la position est relative au niveau de l'élément principal du groupe lié.
Elle indique également la position du centre du groupe et non la véritable position des éléments principaux.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
getPosOri renvoie un nouvel objet matrice contenant la matrice de placement complète
du groupe LDCad lié. Notez que ce placement est relatif au niveau où est l'élément principal du groupe lié.
Sa part position est prise au point de centre actuel du groupe LDCad lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de paramètre supplémentaire.
setOri est utilisé pour changer l'orientation du groupe LDCad lié, sans changer sa position.
Vous pouvez utiliser l'une des combinaisons de paramètres du constructeur de matrice d'orientation,
afin de fournir le nouveau placement. Pour plus d'informations sur les paramètres, voir la fonction setOri
de l'objet matrice elle-même.
Notez que l'information donnée est relative au niveau de l'élément principal du groupe lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPos est utilisé pour changer la position de la ligne de code de type 1 lié, sans changer
son orientation. La nouvelle position peut être fournie en utilisant l'une des combinaisons de
paramètres du constructeur de vecteur valide.
Notez que l'information donnée est relative au niveau de l'élément principal du groupe lié.
Elle s'applique également à la position du centre des groupes, et non à la vraie position de l'élément principal.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setPosOri est utilisé pour changer la matrice de placement LDraw complète
du groupe LDCad lié. Vous pouvez utiliser l'une des combinaisons de paramètres
du constructeur de matrice valide, afin de fournir le nouveau placement.
Notez que l'information donnée est relative au niveau de l'élément principal du groupe lié.
Elle s'applique également à la position du centre des groupes, et non à la vraie position de l'élément principal.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setVisible affiche ou cache tous les éléments du groupe lié à l'aide d'un paramètre booléen.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
setColor applique le code couleur LDraw donné à tous les éléments du groupe lié.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Cette fonction n'a pas de valeur de retour.
Le sous-module de sélection donne accès aux sélections effectuées dans l'éditeur de LDCad.
Le constructeur est utilisé pour créer un nouvel objet de sélection.
Si aucun paramètre n'est fourni, la sélection de la session d'édition en cours sera par défaut.
Si aucune session n'est active, elle passera par défaut à l'état non lié.
Il est également permis de fournir un autre objet de sélection comme seul paramètre, afin de copier celui-ci.
local mySel=ldc.selection()
L'exemple ci-dessus créera un objet de sélection nommé "mySel". Ensuite la variable mySel
peut être utilisée pour manipuler la sélection liée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
mySel:inverse()
Notez qu'un objet de sélection non lié provoque une erreur d'exécution lorsque vous essayez de l'utiliser
d'une manière qui nécessite qu'il soit lié.
Dans LDCad une sélection n'est qu'un type particulier de groupe. En conséquence, un objet selection
comprend toutes les fonctions d'un objet group. Voir ci-dessus pour plus de détails.
Notez que certaines d'entre elles se comportent légèrement différemment ou ne font rien.
C'est le résultat des limitations que les groupes de sélection imposent au comportement normal du groupe.
add est utilisé pour ajouter des éléments à la sélection actuellement liée.
Il a un seul paramètre facultatif qui accepte un objet ldc.srcLine ou ldc.refLine.
L'objet ligne fourni doit être contenu dans le même sous-fichier que celui que gère
la session de sélection liée. Si la ligne donnée ne fait pas partie du même sous-fichier,
une erreur met fin à l'exécution du script.
Si aucun paramètre n'est donné, toutes les lignes du sous-fichier associé seront
ajoutées/sélectionnées.
La fonction renvoie un booléen indiquant si la sélection a été modifiée ou non.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
remove est utilisé pour supprimer des éléments à la sélection actuellement liée.
Il a un seul paramètre facultatif qui accepte un objet ldc.srcLine ou ldc.refLine.
L'objet ligne fourni doit être contenu dans le même sous-fichier que celui que gère
la session de sélection liée. Si la ligne donnée ne fait pas partie du même sous-fichier,
une erreur met fin à l'exécution du script.
Si aucun paramètre n'est donné, toutes les lignes actuellement sélectionnées associé seront
désélectionnées, ce qui efface la sélection.
La fonction renvoie un booléen indiquant si la sélection a été modifiée ou non.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
inverse effectue une action "inverse" sur la sélection actuellement liée.
Cela entraîne la désélection du contenu actuel et l'ajout de tout ce qui précédemment
n'était pas sélectionné.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getSession renvoie un nouvel objet de session lié à la session d'édition LDCad
à laquelle appartient la sélection actuellement liée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
Le sous-module animation est utilisé pour créer et manipuler des animations LDCad.
getCurrent renvoie un nouvel objet d'animation lié à l'animation en cours de lecture. Il renvoie un objet d'animation non lié si aucune animation n'est en cours de lecture.
L'objet animation est utilisé pour accéder et/ou créer une animation dans LDCad.
Il est presque toujours créé en utilisant son constructeur, comme par exemple :
local myAni=ldc.animation()
La variable myAni peut alors être utilisée pour manipuler une animation.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
myAni:register('kick ass movie')
Lors de la création d'un objet animation en utilisant ldc.animation() il sera par défaut
à son état non lié. Mais vous pouvez également pointer vers une animation existante
ou une nouvelle animation, en une seule fois, en fournissant le nom de l'animation
voulue comme paramètre du constructeur.
Lorsque le nom donné appartient à une animation existante, dans la session d'édition courante,
l'objet animation sera lié. S'il n'y a pas un tel objet, il sera ajouté puis lié.
Notez qu'un objet animation non lié provoque une erreur d'exécution dès que vous essayez de
l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet animation comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet animation vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet animation contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
register est utilisé pour créer (ou lier) une animation (différente) dans la session d'édition courante.
Cela est fait en fournissant un nom comme paramètre.
Si une animation est trouvé avec ce nom, elle est liée avec, sinon elle sera créé puis liée.
Cette fonction n'a pas de valeur de retour.
link est utilisé pour associer (lier) un objet animation avec un (autre) objet animation,
dans la session d'édition courante.
Cela est fait en fournissant un nom comme paramètre.
Si un objet animation est trouvé avec ce nom il est lié, sinon l'objet retourne à son état non lié.
Cette fonction renvoie un indicateur booléen, indiquant si le lien a été installé ou non.
isLinked renvoie un indicateur booléen si l'objet est actuellement lié avec
une animation ou non.
Cette fonction n'a pas de paramètre supplémentaire.
hasSameLink prend un seul objet d'animation comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même animation LDCad ou non.
getName renvoie le nom de l'animation courante liée. Si rien n'est actuellement lié,
une chaine vide est renvoyée.
Cette fonction n'a pas de paramètre supplémentaire.
getFPS renvoie le nombre actuel d'images par seconde qu'utilise l'animation liée
pendant la lecture.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
setFPS est utilisé pour définir le nombre d'images par seconde de l'animation liée
en lecture.
Lorsque cette fonction n'est jamais appelée, l'animation prend par défaut la valeur
interne par défaut de LDCad. Changez seulement le fps (frames per second = images par seconde)
par script si vous souhaitez appliquer un taux statique pour une raison quelconque.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFrameNr renvoie le numéro de l'image de l'animation liée actuellement active.
Notez que contrairement au comportement normal de lua, la première image de l'animation
est numéroté zéro, cela est dû principalement à une raison mathématique.
Notez également que le numéro ne doit pas être à moins de 0..fps*length-1 car cela
représente des images supplémentaires résultant de choses comme un mouvement lent (ralenti).
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFrameCount renvoie le nombre d'images actuellement actives de l'animation liée.
Notez que le nombre n'est pas forcement égal à fps*length car il comptabilise des images
supplémentaires résultant de choses comme un mouvement lent (ralenti).
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getFrameTime renvoie la durée en secondes que représente l'image courante de l'animation liée.
C'est zéro pour la première image et "numberOfFrames-1" pour la dernière.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
setLength est utilisé pour configurer le temps de lecture de l'animation liée.
Vous devez fournir la longueur souhaitée en secondes.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
getLength renvoie le temps de lecture en secondes de l'animation liée.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
setEvent est utilisé pour contrôler quelle fonction de script lua est appelée quand un
certain évènement d'animation se produit. Cela se fait en fournissant deux chaines de caractères
comme paramètres.
Le premier paramètre identifie l'évènement que vous voulez souscrire. Les évènements
disponibles sont :
Evènement | Description |
---|---|
start | Appelé chaque fois que la lecture d'une animation est sur le point de commencer. Vous pouvez utiliser cet évènement pour faire un pré-calcul global, etc. |
end | Appelé chaque fois que la lecture d'une animation s'arrête. Vous pouvez utiliser cet évènement pour faire du nettoyage ou autre chose. |
frame | Appelé à chaque fois que l'image de l'animation change. Cet évènement est le cheval de
bataille principal, car il doit calculer et appliquer l'état de tous les objets animés
dans l'animation. Notez que les appels d'image (frame) peuvent être complètement aléatoires en ce qui concerne leur frameNr associé. C'est le résultat de la nature de la lecture et/ou de ce qui est trouvé. |
Le second paramètre est le nom (sans les "()") de la fonction lua
dans votre script que vous voulez exécuter lorsque l'évènement donné se produit.
Notez que les évènements sont liés au niveau LDCad, pas seulement pour l'objet de l'animation
sur lequel vous travaillez.
Si l'objet n'est pas lié, l'appel de cette fonction provoque une erreur et termine l'exécution du script.
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
Le sous-module camera est utilisé pour créer et accéder aux objets camera.
L'objet camera est utilisé pour accéder à une caméra spécifique.
Il est presque toujours créé en utilisant son constructeur, comme par exemple :
local myCam=ldc.camera()
La variable myCam peut alors être utilisée pour manipuler une seule caméra.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
myCam:setLookAt(0, 0, 0)
A faire
Il est aussi autorisé de fournir un autre objet camera comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet camera vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet camera contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
hasSameLink prend un seul objet camera comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même caméra d'animation ou non.
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
Le sous-module light est utilisé pour créer et accéder aux objets lumière.
L'objet light est utilisé pour accéder à une lumière.
Il est presque toujours créé en utilisant son constructeur, comme par exemple :
local myLight=ldc.light()
La variable myLight peut alors être utilisée pour manipuler une seule lumière.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
myLight:setPos(0, -500, 0)
A faire
Il est aussi autorisé de fournir un autre objet light comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet light vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet light contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
hasSameLink prend un seul objet light comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même lumière ou non.
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
Le sous-module control est utilisé pour créer et accéder aux objets de contrôle.
A faire
Un objet de contrôle est utilisé pour créer des hotspots interactifs dans une animation.
Il est presque toujours créé en utilisant son constructeur, comme par exemple :
local myCtrl=ldc.control()
La variable myCtrl peut alors être utilisée pour manipuler un seul contrôle.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
myCtrl:setEvent('up', 'myUpEventHandler')
A faire
Notez qu'un objet de contrôle non lié provoque une erreur d'exécution lorsque vous essayez de l'utiliser
d'une manière qui nécessite qu'il soit lié.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet control vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet control contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
hasSameLink prend un seul objet control comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié au même contrôle d'animation LDCad ou non.
A faire
A faire
A faire
A faire
A faire
A faire
Le sous-module event est utilisé pour interroger des éléments tels que les états de la souris et du clavier dans une fonction de rappel LDCad.
getCurrent renvoie un nouvel objet événement représentant l'état actuel de l'événement.
Un objet événement contient toutes les choses liées à un seul événement.
Il revient par défaut à l'état actuel de l'événement.
Il est presque toujours créé en utilisant son constructeur, comme par exemple :
local myEvent=ldc.event()
La variable myEvent peut alors être utilisée pour accéder aux variables associées à un seul événement.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
print(myEvent:isKeyBoardEvent())
Il est aussi autorisé de fournir un autre objet event comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet event vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet event contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
isMouseEvent renvoie un booléen indiquant si l'événement est lié à un rappel orienté interaction souris ou non.
isMouseEvent renvoie un booléen indiquant si l'événement est lié au changement de focus de contrôle (entrée, laisser) ou non.
isMouseEnterEvent renvoie un booléen indiquant si l'événement est lié à un rappel control:setEvent('enter') ou non.
isMouseLeaveEvent renvoie un booléen indiquant si l'événement est lié à un rappel control:setEvent('leave') ou non.
isMouseDownEvent renvoie un booléen indiquant si l'événement est lié à un rappel control:setEvent('down') ou non.
isMouseUpEvent renvoie un booléen indiquant si l'événement est lié à un rappel control:setEvent('up') ou non.
isMouseMoveEvent renvoie un booléen indiquant si l'événement est lié à un rappel control:setEvent('move') ou non.
isKeyBoardEvent renvoie un booléen indiquant si l'événement est lié à un rappel orienté interaction clavier ou non.
isKeyEvent renvoie un booléen indiquant si l'événement est lié à un rappel input.captureKey ou non.
isCharEvent renvoie un booléen indiquant si l'événement est lié à un rappel input.captureChars ou non.
getControl renvoie l'objet de contrôle lié à cet événement.
getMousePos renvoie un nouvel objet vectoriel contenant la position de la souris au moment
où cet événement à été déclenché.
Notez qu'il s'agit d'une position de la souris en 3D, pas de l'emplacement du curseur à l'écran.
Il indique l'endroit que la souris "touche" sur le point d'accès de contrôle correspondant
dans l'espace absolu.
getKeyID renvoie un entier indiquant le keyID lié à cet événement.
getKeyChar renvoie une chaîne de caractères unique indiquant le caractère du clavier lié à cet événement.
Le sous-module input est utilisé pour configurer et manipuler les fonctionnalités liées à la souris et au clavier à utiliser pendant une animation interactive.
A faire
A faire
A faire
A faire
A faire
Le sous-module dialog est utilisé pour créer des dialogues interactifs à l'utilisateur du script. Ces boites de dialogue peuvent ensuite être utilisées pour poser une question à l'utilisateur ou lui montrer un message.
A faire
A faire
A faire
A faire
Un objet dialog est utilisé pour configurer une boîte de dialogue réutilisable.
Il est créé en utilisant son constructeur, comme par exemple :
local myDlg=ldc.dialog()
La variable myDlg peut alors être utilisée pour manipuler la boîte de dialogue associée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Par exemple :
A faire
Il est aussi autorisé de fournir un autre objet de session comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet dialog vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet dialog contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
A faire
Le sous-module session est utilisé pour accéder aux éléments liés à la session d'édition de LDCad.
getCurrent renvoie un nouvel objet session lié à la session d'édition LDCad courante. Si aucune session n'est active, renvoie un objet de session non lié.
L'objet session est utilisé pour accéder à une session d'édition spécifique dans LDCad.
Il est toujours créé en utilisant son constructeur, comme par exemple :
local mySes=ldc.session()
La variable mySes peut alors être utilisée pour accéder à des informations sur une session liée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
print(mySes:getName())
Lors de la création d'un objet session en utilisant ldc.session() il sera par défaut
à la session d'édition courante, s'il n'y en a pas il sera à son état non lié.
Notez qu'un objet session non lié provoque une erreur d'exécution dès que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet session comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet session vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet session contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
isLinked renvoie un indicateur booléen si l'objet est actuellement lié avec une session ou non.
Cette fonction n'a pas de paramètre supplémentaire.
hasSameLink prend un seul objet session comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même session d'édition LDCad ou non.
getName renvoie le nom de la session liée. Le nom donné est identique à celui
affiché en haut à droite du panneau édition de LDCad.
Si aucune session n'est actuellement liée, une chaine vide est renvoyée.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
A faire
A faire
A faire
A faire
Le sous-module view est utilisé pour accéder et manipuler les vues 3D de LDCad.
A faire
A faire
L'objet view est utilisé pour accéder à une vue spécifique.
Il est créé en utilisant son constructeur, comme par exemple :
local myView=ldc.view()
La variable myView peut alors être utilisée pour manipuler une vue spécifique dans LDCad.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
print(myView:())
A faire
Notez qu'un objet view non lié provoque une erreur d'exécution dès que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet view comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet view vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet view contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
A faire
hasSameLink prend un objet view comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même vue éditée LDCad ou non.
A faire
A faire
A faire
L'objet partBin est utilisé pour manipuler le panneau pièces de LDCad.
Il peut y avoir plusieurs panneaux et vues affichant le contenu de la bibliothèque de pièces, mais il n'y a
qu'une bibliothèque. En conséquence, cet objet n'a pas de constructeur et uniquement
des fonctions statiques.
A faire
A faire
L'objet colorBin est utilisé pour manipuler le panneau couleurs de LDCad.
Il peut y avoir plusieurs panneaux et vues affichant la liste des couleurs, mais il n'y a
qu'une liste. En conséquence, cet objet n'a pas de constructeur et uniquement
des fonctions statiques.
A faire
A faire
Le sous-module action est utilisé pour accéder et utiliser les actions LDCad. Ce sont toutes les choses auxquelles vous pouvez attribuer des raccourcis clavier dans l'éditeur lui-même.
Un objet action est utilisé pour accéder à une action LDCad spécifique.
Il est créé en utilisant son constructeur, comme par exemple :
local myAction=ldc.action('editSes_selAll')
La variable myAction peut alors être utilisée pour exécuter et/ou interroger l'état de l'action liée.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
myAction:run()
A faire
Notez qu'un objet action non lié provoque une erreur d'exécution dès que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet action comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet action vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet action contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
A faire
hasSameLink prend un seul objet action comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même action LDCad ou non.
A faire
A faire
A faire
A faire
A faire
Le sous-module macro est utilisé pour créer et utiliser des macros LDCad. Les macros peuvent être utilisées pour automatiser certaines tâches et/ou manipulations de modèles.
A faire
Un objet macro est utilisé pour accéder à une macro spécifique.
Il est créé en utilisant son constructeur, comme par exemple :
local myMacro=ldc.macro('My macro')
La variable myMacro peut alors être utilisée pour manipuler une macro spécifique dans LDCad.
Cela se fait à travers une collection de fonctions auxquelles vous avez toujours accès en utilisant
la méthode du raccourci lua ":". Exemple :
print(myMacro:isLinked())
A faire
Notez qu'un objet macro non lié provoque une erreur d'exécution dès que vous essayez de l'utiliser comme s'il était lié.
Il est aussi autorisé de fournir un autre objet macro comme paramètre au constructeur afin de le copier.
Tous les objets ldc sont orientés données utilisateur lua, et donc toujours passés par référence.
Donc, pour obtenir une copie d'un objet macro vous devez utiliser sa fonction clone.
Elle renvoie un nouvel objet macro contenant des données identiques.
Cette fonction n'a pas de paramètre supplémentaire.
A faire
A faire
A faire
hasSameLink prend un seul objet macro comme paramètre et renvoie un indicateur booléen indiquant si cet objet est lié à la même macro LDCad ou non.
A faire
A faire
A faire
A faire
A faire
L'inconvénient de tout cela est que vous devez investir du temps et des efforts pour commencer à utiliser les scripts. Comme la meilleure façon d'apprendre quelque chose est de passer par des exemples, voici, fournis par l'auteur de LDCad, quelques exemples essentiels de taches courantes que vous pouvez faire à l'aide de scripts dans LDCad.
La principale raison de l'ajout des scripts à LDCad était son utilisation combinée avec la création d'animations. La plupart des fonctions disponibles visent donc à cet objectif.
Toute animation dans LDCad doit être créée par le biais d'un script afin d'être accessible dans l'interface graphique. A cette fin, vous pouvez lier un fichier de script lua à votre modèle en utilisant la boite de dialogue de son entête ou juste par glisser-poser du fichier .lua dans LDCad lorsque son modèle est le modèle courant.
Ci-dessous le minimum de choses à mettre dans un script pour rendre accessible votre modèle au mode animation.
function register()
local ani=ldc.animation('test animation')
ani:setLength(10)
ani:setEvent('frame', 'onFrame')
end
function onFrame()
local ani=ldc.animation.getCurrent()
--do per frame animation stuff
end
register()
Le script ci-dessus crée et enregistre l'animation "test animation", et la configure pour avoir un temps de lecture de 10 secondes. Il attribue ensuite la fonction "onFrame" pour gérer la dépendance des changements à chaque image.
En utilisant ce script, avec n'importe quel modèle courant dans LDCad, cela rendra actif l'onglet "animation" dans le panneau session, qui à son tour listera "test animation" comme animation active courante (vous pouvez écrire plusieurs animations dans le même script).
Lorsque le mode animation joue l'animation, elle appelle la fonction "onFrame" de votre script lua à chaque image de l'animation. Il est de la teneur de cette fonction de gérer la position, l'orientation, la couleur, le statut afficher/masquer de toutes les choses que vous voulez faire au sein de votre film.
Le script actuel ne fait donc absolument rien. Il faut donc modifier la fonction "onFrame" pour faire tourner en continu la première brique dans le modèle autour de son axe Y, tout en conservant sa position globale en valeur absolue pendant la lecture.
function onFrame()
local ani=ldc.animation.getCurrent()
local angle=ani:getFrameNr()/ani:getFrameCnt()*360
local ref=ldc.subfile():getRef(1)
local ori=ldc.matrix()
ori:setRotate(angle, 0, 1, 0)
ref:setOri(ori)
end
La fonction calcule maintenant l'angle de rotation actuel sur la base du "frameNr" (une rotation par longueur de lecture). Il construit ensuite une matrice de rotation en utilisant l'angle, et l'applique à la ligne de référence LDraw en utilisant seulement sa partie orientation.
Noter que la brique sera en rotation autour de son axe Y dans sa propre orientation neutre. C'est pourquoi la matrice de rotation est appliquée en valeur absolue.
J'espère que l'exemple précédent vous permet de clarifier les bases. Maintenant, pour vraiment maîtriser les scripts d'animation il est bon d'essayer vous-même les API et d'analyser les modèles livrés en exemple avec LDCad, qui possèdent des scripts d'animation (par exemple 5510.mpd, 5580.mpd ou 4248.mpd). J'ai essayé d'ajouter autant que possible des commentaires utiles.
Nota : Les modèles possédant un script apparaissent dans la liste des fichiers suivis de {scripted}.
Module appelé par aniTools.
Depuis sa version 1.4 LDCad utilise les scripts, utilisant le langage lua, pour faire des trucs dynamiques amusants avec vos modèles LDraw.
Un script d'une animation peut se charger lorsqu'un modèle est actif en ouvrant son entête avec "Session / Edit header", onglet "Scripting", puis en sélectionnant le script sur le disque avec le bouton [ .. ], puis valider avec le bouton "OK".
On peut charger directement le script d'une animation par un glisser-coller du fichier de l'explorateur Windows à la fenêtre du programme.
Nota : En raison d'un bug, si l'on veut changer de fichier d'animation avec le même modèle il faut au préalable recharger ce modèle avec F5.
Le script peut se charger automatiquement avec le modèle, si celui-ci contient une ligne de déclaration : 0 !LDCAD SCRIPT [source=nom_script.lua], ou nom_script.lua est le nom du fichier script.
Activer le mode animation dans le panneau session, en cliquant sur l'onglet "Animation". Cela ouvre le panneau de gestion de l'animation et active l'animation par défaut du script.
S'il n'y a pas de script de chargé, le mode animation est inactif.
Pour sortir du mode animation, cliquer sur l'onglet "Normal" du panneau session.
Sélectionner une animation d'un fichier multi-script avec le menu "Session / Animation / Select animation". Ce menu apparait également dans le panneau session, onglet "Animation", en cliquant sur "Current: "xxx". Si "none" s'affiche c'est que le modèle ne possède pas d'animation.
Une fois l'animation chargée et sélectionnée, un panneau de gestion de l'animation apparait à l'écran. Voir : Panneau animation pour son utilisation.
Pour éditer l'animation active, aller dans "Session / Scripting / Open script".
Nota : Pour que le fichier lua s'ouvre, un éditeur doit être assigné à ce type de fichier dans l'explorateur de Windows. Voir le chapitre : Installation.
Pour créer une animation ...
Il est possible de mettre plusieurs animations dans un seul script. Pour cela utiliser un unique "frame / start function name" et enregistrer "multiple animation objects" dans la "register function".
function register()
local ani=ldc.animation('Animation 1')
ani:setLength(20)
ani:setEvent('frame', 'onAni1Frame')
ani:register('Animation 2')
ani:setLength(15)
ani:setEvent('frame', 'onAni2Frame')
end
function onAni1Frame()
local ani=ldc.animation.getCurrent()
--animation 1 frame stuff
end
function onAni2Frame()
local ani=ldc.animation.getCurrent()
--animation 2 frame stuff
end
register()
En premier voir les tutoriels de Roland Melkert (en plein écran) :
Les exemples qui suivent sont de Philo :
Animation fun with LDCad.
Les scripts sont à télécharger ici :
LDCad_animation_scripts.zip (mono-script),
model-build-animations.zip (multi-script) et
brick_drop_build_rotate.zip (mono-script).
Le modèle LDraw de Faramond Florent (Makou) avec ses sous-modèles décomposés :
10018_-_Darth_Maul-flat.mpd, ou Non :
10018_-_Darth_Maul-flat-sub.mpd.
Marche à suivre :
Nota 1 : Le script peut être chargé directement par un glisser-coller du fichier de l'explorateur Windows à la fenêtre du programme.
Nota 2 : En raison d'un bug (v1.5), si l'on veut changer de script avec le même modèle il faut au préalable recharger ce modèle avec F5.
Modèle : 10018 - Darth Maul-flat.mpd Script : bottom up build.lua (bottom-up) ou Multi-script : model-build-animations.lua (Bottom-up Build). |
Modèle : 10018 - Darth Maul-flat.mpd Script : part order build.lua (build) Script : part order dissolve.lua (dissolve) ou Multi-script : model-build-animations.lua (Build ou Dissolve). |
Modèle : 10018 - Darth Maul-flat.mpd Script : magnet build.lua (magnet build) ou Multi-script : model-build-animations.lua (Magnet Build). |
Modèle : 10018 - Darth Maul-flat.mpd Script : explode.lua (explode) ou Multi-script : model-build-animations.lua (Explode). |
Modèle : 10018 - Darth Maul-flat.mpd Script : brick drop build.lua (brick drop build) ou Multi-script : model-build-animations.lua (Layered Brick Drop Build). |
Modèle : 10018 - Darth Maul-flat-sub.mpd Script : brick drop build rotate (brick drop build+rotate). |
Voir l'exemple "8891-towTruck" et son fichier script "8891-towTruck.lua" :
Le cadre des images s'affiche avec le menu "View / Editing views / Export / Show export frame" ou "Alt+E / Show export frame".
Avec "View / Editing views / Export / Export frame size" il est possible
de changer la taille du cadre :
donner la taille en pixels comme 1920x1080, ou en ratio largeur/hauteur comme 1.85 ou 16:9.
Pour exporter une image PNG utiliser le menu : "View / Editing views / Export / OpenGL view export".
Paramétrage de l'image :
Pour exporter les images PNG d'une animation il faut être en mode animation et utiliser le menu : "Session / Animation / OpenGL animation export" ou "View / Editing views / Export / OpenGL animation export".
Paramétrage des images :
Exemple d'une des 125 images générées sur le modèle 5580 et la macro "Explode" :
Les fichiers se trouvent par défaut dans :
C:\Users\tchang\AppData\Roaming\LDCad\examples\5580-glExport (dans cet exemple).
Nota : Les images utilisent le point de vue et les pièces affichées suivant l'étape courante.
Les images peuvent être ensuite assemblées dans une vidéo animée à l'aide, par exemple, de Movie Maker de Windows.
Pour exporter au format de rendu POV-Ray le modèle tel à l'écran, utiliser le menu : "View / Editing views / Export / POV-Ray view export".
Paramétrage du fichier POV, Onglet "Main options" :
Onglet "POV Options" :
Options :
Prefixes :
Onglet "POV Include files" :
Onglet "INI Options" :
Exemple de l'image générée par POV-Ray à partir du fichier 5580.pov généré par LDCad :
Le fichier se trouve par défaut dans :
C:\Users\tchang\AppData\Roaming\LDCad\examples\5580-povExport (dans cet exemple).
Pour exporter au format de rendu POV-Ray une animation, utiliser le menu : "Session / Animation / POV-Ray animation export" ou "View / Editing views / Export / POV-Ray animation export".
Le paramétrage du fichier POV est identique au chapitre précédent.
L'exportation de modèle permet d'utiliser les modèles LDraw dans des environnements non compatibles avec ce format.
Apparue en version v1.7 Alpha 1, ce format d'exportation est prévu comme export vers Blender, mais le format glTF (Voir ci-dessous) semblant une meilleur solution, ce format pourrait disparaitre plus tard. La version v1.7 Alpha 1 de cet export n'est pas terminée.
Pour exporter au format Collada le modèle tel à l'écran, utiliser le menu : "View / Editing views / Export / Collada view export".
Paramétrage et création du fichier :
Apparue en version v1.7 Alpha 1, le format d'exportation glTF 2.0 est prévu comme export vers Blender meilleur que le format Collada (Voir ci-dessus). Il est plus complet.
La version v1.7 Alpha 1 de cet export nécessite encore beaucoup de travail. Amélioré en v1.7 Alpha 2.
Pour exporter au format glTF le modèle, utiliser le menu : "View / Editing views / Export / glTF view export".
Paramétrage et création des fichiers :
Apparue en version v1.7 Alpha 1, ce format d'exportation est prévu comme export d'animation vers Blender.
La version v1.7 Alpha 1 de cet export nécessite encore beaucoup de travail. Amélioré en v1.7 Alpha 2.
Pour exporter au format glTF le modèle animé, ouvrir le modèle puis passer en mode animation, puis ...
utiliser le menu : "View / Editing views / Export / glTF animation export".
Message informant que toutes les propriétés de l'animation ne sont pas exportées :
Cliquer sur "OK" pour continuer. Cocher "Don't show again" pour ne plus voir le message la prochaine fois.
Paramétrage et création des fichiers :
L'inventaire des pièces se fait avec la commande "Scripts / samples / Generate BOM list".
Sélectionner la liste dans la fenêtre console et insérer le résultat dans un tableur en utilisant la virgule comme séparateur de champ.
Nota : L'inventaire inclus toutes les pièces cachées et ne suit pas les règles de l'échange de buffer. Pour avoir un contenu plus précis, utiliser la fonction d'exportation du groupe d'inventaire du panneau pièces.
Dans ce chapitre, je vais vous guider à travers les bases de l'édition de modèle dans LDCad. Donc, après avoir lu ce chapitre vous devriez être capable de créer vos propres modèles LDraw basiques, comme une maison simple ou une petite voiture. Cependant, il est préférable de lire au préalable le chapitre : Description de l'interface utilisateur et en particulier de connaître un peu l'utilisation des panneaux pièces et couleurs.
Le plus simple est au démarrage de sélectionner "Start a new model" dans le panneau "Getting started", mais vous pouvez à tout moment ouvrir un nouveau modèle avec le menu "File / New model" (par défaut en haut à gauche de l'écran).
Juste après avoir démarré un nouveau modèle, une boite de dialogue "Edit header" s'ouvre. Elle est utilisée pour entrer quelques informations sur le modèle. A ce stade seul le champ "Author" a un intérêt réel, donc taper votre nom complet dans ce champ. Ensuite il suffit de fermer la boite de dialogue en appuyant sur le bouton "Accept".
La première fois que vous fermez cette boite de dialogue, un message apparaît demandant si le nom et le pseudo doivent être utilisés par défaut pour tous les futurs modèles comme "Author" et "User". Comme c'est généralement le cas, cliquez sur "Yes".
Après tout cela vous devez avoir une zone d'édition graphique vide dans laquelle vous pourrez commencer à construire quelque chose de révolutionnaire. L'écran doit ressembler à ceci :
Aux quatre coins du panneau d'édition graphique, vous trouverez des éléments qui contrôlent certains aspects du processus de construction :
Le panneau point de vue et le panneau étape sont discutés en détail ci-dessous. Le panneau session ne sera pas discuté ici car il n'est pas vraiment nécessaire pour travailler sur un modèle simple comme celui sur lequel nous allons travailler dans ce chapitre. L'icône I s'explique facilement (Voir le chapitre : Panneau information pour plus d'explications). N'hésitez pas à déplacer la souris de temps en temps pour voir combien de briques vous avez déjà utilisées, etc.
Lorsque vous travaillez sur un nouveau modèle LDraw, il est conseillé en premier de configurer les panneaux couleurs et pièces d'une manière pratique (Voir les chapitres : Panneau couleurs et Panneau pièces pour plus d'explications).
Nous allons par exemple fixer le premier onglet du panneau couleurs sur "Solid plastic" (plastique opaque) et le second sur "Transparent" (plastique transparent) car ces groupes de couleurs sont le plus souvent utilisés. Eventuellement (selon le type de modèle) vous pouvez également définir les troisième et quatrième onglets sur "Metallic" (métallique) et "Rubber" (caoutchouc).
Après avoir fait cela une fois, vous n'aurez probablement plus jamais à le refaire. En effet, cette configuration couvre 99% des besoins de modélisation normale et LDCad mémorise la configuration d'une session à l'autre.
Pour le panneau pièces c'est une autre histoire. Choisir les groupes de pièces pour les six onglets, dépendra grandement du type de modèle Lego (par exemple Technic, City, Creator, ...) que vous allez vouloir créer. Dans notre exemple, nous allons travailler sur une petite maison.
Donc, mettons l'onglet 1 sur les briques de base ("Plain bricks"), accessible en cliquant sur la séquence des cellules ci-dessous, à partir de la racine du panneau ("Main group").
=> =>
L'onglet 2 serait probablement le plus utile pour afficher les pièces plates, donc réglons le sur les pièces plates normales ("Normal plates"), accessible par :
=> =>
L'onglet 3 pourrait être utile en pointant sur les briques inclinées à 45° ("Sloped 45"), accessible par :
=> =>
Et comme une maison a besoin de fenêtres, nous allons pointer l'onglet 4 sur le groupe des fenêtres ("Windows"), accessible par :
=> =>
Ensuite, nous pourrions pointer l'onglet 5 sur le groupe des pièces triées par fonction ("Sorted") pour naviguer plus loin lorsque des pièces non listées dans les onglets précédents sont nécessaires.
Enfin, nous plaçons l'onglet 6 sur le groupe spécial recherche ("Search"), accessible en cliquant sur la cellule ci-dessous, à partir de la racine du panneau. Cela est nécessaire lorsque vous essayez de trouver une pièce qui n'est pas souvent utilisée, sans avoir à faire le tour de l'arborescence des pièces. Pour rechercher une pièce, tapez un mot-clef dans le filtre du groupe de recherche.
Avec les panneaux configurés à votre goût, il est temps de commencer à construire quelque chose.
Remarque, bien que LDCad ait un mode attirance des briques entre-elles, je voudrais tout d'abord utiliser le mode grille de positionnement, car il est important de comprendre la notion de grille pour profiter ensuite pleinement du mode attirance.
Construire un modèle virtuel LDraw est sensiblement la même chose que construire un vrai modèle LEGO, il suffit d'ajouter une brique à la fois. La seule différence est que votre stock de briques est illimité dans une multitude de couleurs.
Afin d'ajouter une brique dans le modèle, vous sélectionnez tout d'abord la couleur que vous voulez utiliser dans le panneau couleurs. Par exemple sélectionner "Red" (rouge) afin que nous puissions commencer à construire un mur pour notre petite maison. Après la couleur fixée, vous allez chercher la brique que vous voulez ajouter au modèle dans le panneau pièces.
Localisez la pièce "Brick 1x4" dans le panneau pour notre mur. Le premier onglet activé, nous devons nous trouver sur "Plain bricks", alors faisons défiler les pièces vers le bas avec la molette de la souris, jusqu'à ce que nous apercevions la brique 1x4. Cliquer alors sur cette brique et sans relâcher le bouton gauche de la souris, la déplacer dans la zone d'édition graphique.
Lorsque la brique entre dans la zone graphique vous devez voir quelque chose comme cela :
La grille visualise le plan d'édition ou placement actif et l'intersection des lignes bleu et rouge plus longues
représente l'origine de ce plan. Le petit panneau à côté de la pièce affiche sa position dans l'espace 3D.
Ne nous occupons pas pour l'instant des valeurs affichées et plaçons la pièce n'importe où
en relâchant le bouton de la souris.
Nota : Je suppose que vous n'avez pas fait pivoter la scène avant le placement. Si vous l'avez fait, vous pourriez voir la grille orientée d'une autre façon (verticalement par exemple au lieu d'être à plat). Si c'est le cas ne vous inquiétez pas, posez la brique n'importe où vers le centre, puis appuyez sur la touche "T" pour remettre la grille par défaut.
Une fois le bouton de la souris relâché l'affichage change à nouveau. La grille aura disparu et une sorte de parapluie sera épinglé sur le dessus de la brique, comme sur l'image ci-dessous.
Il s'agit de l'outil de manipulation principal d'une sélection appelé "pin" en anglais et "épingle" ou "broche" en français. Il sera toujours perpendiculaire au plan d'édition actif car il est principalement utilisé pour déplacer et/ou faire tourner les briques sélectionnées après leur placement initial par rapport à celui-ci. Par défaut l'épingle sera en mode rotation, indiqué par le gros disque sur le dessus.
L'approche orientée plan d'édition utilisée dans LDCad limitera toujours l'interaction à deux des trois directions de construction dans l'espace virtuel. En conséquence, votre point de vue sur le modèle est divisée en trois plans de séparations, à savoir : "Gauche/Droite (ou Côtés)", "Haut/Bas" et "Avant/Arrière". Ce sont donc les orientations possibles du plan d'édition. Le mode actif dépend principalement de la rotation de la scène (caméra). Cette fonctionnalité (optionnelle) essaie de deviner la direction dans laquelle vous voulez ajouter quelque chose et vous le configure automatiquement.
Si vous avez besoin d'un certain point de vue sur le modèle en utilisant un autre plan d'édition que celui suggéré, vous pouvez le faire en basculant manuellement vers l'un des autres modes. Ceci est fait en utilisant le panneau point de vue dans le coin inférieur gauche (je vais entrer en détail ci-dessous) ou en utilisant les trois raccourcis clavier qui leur sont assignés. Ce sont: "T" (Haut/Bas), "S" (côtés) et "F" (Avant/Arrière). Notez que le curseur de la souris doit être dans la zone d'édition pour que les raccourcis clavier répondent.
Avant de poursuivre, discutons du système de caméra de LDCad, car il est très important de bien voir votre modèle pendant le processus de construction.
LDCad utilise un système de caméra orienté boule de commande ("trackball") par défaut. Cela signifie que vous pouvez faire pivoter la vue librement dans toutes les directions possibles sans soudainement se comporter différemment ou à se verrouiller.
La façon la plus simple de comprendre l'approche trackball consiste à imaginer une grande boule de plage coincée dans le rectangle de la zone d'édition. Pendant que vous le tournez, vous le saisissez quelque part sur sa courbe et, en le faisant glisser, elle tourne dans la direction où vous déplacez la souris. La position de départ des rotations est donc très importante lors de l'utilisation de ce système de caméra.
Pour voir de quoi je parle, cliquez n'importe où sur l'arrière-plan de la zone d'édition, avec le bouton gauche (ou droit) de la souris. Puis, tout en maintenant le bouton enfoncé, déplacez légèrement la souris avant de la relâcher. Pour ce faire, en utilisant différentes positions de départ pour voir la façon dont il affecte la direction de rotation.
Certaines personnes n'arrivent pas à se familiariser avec ce type de système de caméra ou ne l'aiment tout simplement pas. Pour cette raison, il existe un autre mode de caméra disponible dans LDCad. C'est ce qu'on appelle le mode de rotation suivant les axes écran ("Spin") qui limitera la rotation comme le mouvement d'une platine. Ce mode peut être réglé en utilisant le panneau point de vue comme indiqué ci-dessous. Cependant, je vous conseille vivement de passer du temps à utiliser le mode "trackball" d'abord, car il est très puissant une fois que vous y êtes habitué.
La rotation seule ne suffit pas lorsque vous travaillez sur un modèle, vous devez parfois vous déplacer un peu. Cela peut être fait en maintenant la touche Maj enfoncée tout en maintenant le bouton gauche (ou droit) de la souris enfoncé. Pendant ce temps, le mouvement de la souris déplace la caméra vers la Gauche/Droite/Haut/Bas par rapport à l'orientation actuelle de l'écran. Vous pouvez également déplacer la caméra par rapport au plan d'édition en cours, en appuyant également sur la touche Ctrl. Souvent, vous aurez besoin d'un décalage pour vous concentrer sur la sélection actuelle, cela peut être fait en un seul mouvement en appuyant sur la touche de raccourci "C" (Centre).
La rotation ou le déplacement peuvent être effectués à l'aide du bouton gauche ou droit de la souris. La différence : Avec le bouton droit le modèle est ignoré lors du clic, et avec le bouton gauche on sélectionnera des pièces du modèle si l'on ne clique pas sur l'arrière plan.
Le dernier contrôle de la caméra est le zoom, qui déterminera la partie du modèle entrant dans la vue à un moment donné. Le contrôle du zoom est effectué en faisant tourner la molette de la souris. Les mouvements vers l'avant effectueront un zoom avant et vers l'arrière effectueront un zoom arrière. Vous pouvez inverser cela si nécessaire en utilisant le menu "Prefs / Editing / Inverse mouse wheel". Maintenez la touche Ctrl enfoncée pendant le zoom pour utiliser des pas plus petits. Et pour adapter le modèle entier à l'intérieur de la vue directement, vous pouvez également appuyer sur le raccourci "Z" (Zoom).
Pendant le zoom, vous remarquerez également que l'emplacement de la souris influence les choses, car par défaut, tout ce qui se trouve sous la souris restera sous la souris, peu importe où vous la pointez. Ceci est appelé "Zoom au curseur" pour donner à l'utilisateur plus de contrôle sur le zoom, vous pouvez aussi (mal) utiliser ceci pour faire des mouvements de caméra, par exemple zoom avant à gauche de l'écran directement suivi d'un zoom arrière sur le côté droit. Cela va déplacer la vue vers la droite. Si vous n'aimez pas la fonction zoom au curseur, vous pouvez sélectionner un type de zoom différent en utilisant le menu "Prefs / Editing / Zoom to".
Tout ce qui vient d'être dit est peut être beaucoup de choses à s'habituer, alors n'hésitez pas à jouer avec la caméra pendant un certain temps. Une fois que vous êtes à l'aise avec ces commandes, continuez à construire la petite maison ci-dessous.
Avant de pouvoir ajouter une deuxième brique au modèle, nous devons nous assurer que le plan d'édition est actuellement défini sur "Haut/Bas". Assurez-vous que l'épingle pointe vers le haut en faisant pivoter la caméra ou en utilisant la touche de raccourci "T" (Haut).
Maintenant, nous pouvons ajouter une seconde brique 1x4 près de la première pour créer un coin à notre maison. Alors, faisons-la glisser dans la zone d'édition graphique à partir du panneau pièces, comme précédemment. Placez-la quelque part près de la brique existante. Ensuite, nous devons faire pivoter cette brique avant de l'aligner avec la précédente. Cela peut être fait en utilisant le mode de rotation de l'épingle. Comme il s'agit du mode actuel, cliquez n'importe où sur son disque, et tout en maintenant la souris enfoncée déplacez la souris. Cela entraînera la rotation de la sélection comme indiqué par une petite étiquette contenant l'angle de rotation actuel. Déplacez-le pour qu'il indique "90 deg" (ou "-90 deg"), puis relâchez-le.
La brique va maintenant être orientée comme nous le voulons mais c'est toujours au mauvais endroit. Vous pouvez la déplacer en cliquant dessus et en la faisant glisser d'une façon très similaire à l'ajout d'une nouvelle brique. Vous pouvez également utiliser l'épingle en "mode déplacement" pour des mouvements plus précis. Vous mettez l'épingle en mode déplacement en cliquant sur le cube centrale "croix" au-dessus du disque. Cela remplacera le disque par une croix fléchée.
L'épingle en "mode déplacement" peut être utilisée pour déplacer la sélection de deux manières différentes sur le plan d'édition en cours. En cliquant sur le centre de la croix et en maintenant la touche de la souris enfoncée, vous la déplacez librement, mais en cliquant sur l'une des flèches et en maintenant la touche de la souris enfoncée, vous la déplacez dans une seule des directions. Utilisez le centre de la croix pour déplacer la brique afin qu'elle fasse un coin avec l'autre brique. Essayez de positionner la brique comme indiqué sur l'image ci-dessous.
Comme vous aurez besoin de tourner et de déplacer beaucoup de choses, il y a des raccourcis clavier pour choisir l'un ou l'autre mode, à savoir "R" (Rotation) et "M" (Déplacer).
Vous avez peut-être remarqué que l'épingle a un troisième cube/mode. Ce mode est utilisé pour changer le centre (de rotation) de la sélection en cours. Ce qui peut être nécessaire lors de la rotation de quelque-chose par rapport à quelque-chose d'autre ou autour d'une origine alternative. Ailleurs dans la documentation ce mode sera très utile mais pour l'instant nous n'en aurons pas besoin, donc vous pouvez l'ignorer pour l'instant.
Une alternative à ce qui précède, plus facile, est de faire pivoter la nouvelle brique avant de la placer en utilisant les touches Fléchées, PageHaut et PageBas. Utilisons cette méthode pour ajouter une troisième brique à la maison. Glissons-en une nouvelle dans la zone d'édition, mais ne la lâchez pas encore. Comme vous pouvez le voir la nouvelle brique a la même orientation que celle précédemment placée. Donc, nous pourrions continuer le mur dans la même direction, mais cela ne fonctionnera pas pour une démonstration de rotation, donc nous allons plutôt l'ajouter à la direction de la première brique.
Tout en maintenant la nouvelle pièce, ou une nouvelle sélection, "en l'air", les touches fléchées les font pivoter par pas de 90 degrés. L'axe autour duquel elles tournent dépend de la vue actuelle de la caméra de telle sorte que la rotation Gauche/Droite tourne dans une direction logique. Donc si votre vue sur la pièce est principalement de l'avant, les boutons gauche/droite la fera tourner vers la gauche ou la droite autour de son axe vertical (ou UP).
Dans cette situation, les flèches Haut/Bas tourneront autour de l'axe horizontal et si nécessaire, vous pouvez utiliser les touches PageHaut/PageBas pour tourner autour de l'axe en profondeur. Si vous maintenez la touche Ctrl enfoncée pendant l'utilisation de l'une de ces touches, la rotation utilisera des pas de 45 degrés au lieu de 90.
Vous pouvez utiliser la touche "Home" pour réinitialiser l'orientation de la nouvelle brique à son état de base. Il est recommandé de le faire de temps en temps (en particulier lors de l'utilisation de l'accrochage de pièces), même si cela n'est pas nécessaire, car cela permet également d'éviter les erreurs d'arrondi dans les (très) grands projets. Ces "erreurs" sont visibles dans le panneau source discuté ailleurs.
Essayez de faire pivoter la brique afin qu'elle se connecte à la première brique placée et une fois que vous l'avez orientée comme vous le souhaitez, mettez-la à l'emplacement voulu. Cela devrait vous donner quelque chose comme l'image ci-dessous.
Encore plus facile que d'utiliser les touches fléchées est de sélectionner d'abord une brique déjà dans l'orientation désirée avant d'ajouter la nouvelle brique. C'est parce que LDCad utilisera toujours la dernière orientation utilisée (et la couleur) pour les pièces nouvellement ajoutées. Vous sélectionnez une brique simplement en cliquant dessus. Ses bords changent de couleur, et l'épingle s'y accroche. Vous pouvez la désélectionner en cliquant dessus à nouveau ou en utilisant la touche Echap lorsqu'une sélection est active.
Une fois sélectionnée, vous pouvez faire glisser la brique suivante dans le modèle, mais si cette brique suivante est également une 1x4, il est beaucoup plus facile (et plus facile pour les poignets) d'utiliser la touche Inser à la place. Cela va insérer une nouvelle brique du même type que la dernière utilisée. La dernière brique utilisée, en l'occurrence celle que nous venons de sélectionner, s'appelle la "pièce courante" ou "pièce active". Vous pouvez également changer de pièce active en sélectionnant (et en ne faisant pas glisser) une pièce dans le panneau pièce. Elle est indiquée par le rectangle vert qui l'encadre.
Il est également utile de savoir comment supprimer une brique de votre modèle, ce qui est fait en utilisant la touche Suppr lorsque la brique indésirable est sélectionnée. Si vous voulez supprimer une brique parce que vous avez ajouté une mauvaise, il pourrait également être utile de la remplacer tout en continuant à utiliser l'emplacement et l'orientation actuelle. Cela peut être fait en double-cliquant sur une brique différente dans le panneau pièce.
Utilisez l'une des techniques ci-dessus et essayez de continuer le modèle de la maison jusqu'à ce qu'elle ressemble à l'image ci-dessous. Cela complètera le premier niveau de briques. Notez les deux briques 1x2 pour faire de la place pour la porte.
Une couche de brique complète est souvent la fin d'une étape de construction dans les manuels officiels. Commençons donc une nouvelle étape de construction à l'intérieur de notre modèle. Cela peut être fait de plusieurs façons, le plus simple est d'utiliser le raccourci Ctrl+Inser ou le bouton de la barre d'outils. Après avoir utilisé la touche de raccourci ou cliqué sur le bouton, le panneau en haut à gauche passera de "Step 1/1" à "Step 2/2". Cela indique que vous travaillez maintenant dans l'étape 2 sur 2. Ci-dessous, je vais passer les étapes de construction un peu plus rapidement, car nous aurons plus d'étapes d'ici là.
Jusqu'à présent, nous avons construit au même niveau en utilisant le plan d'édition "Haut/Bas". Mais avec ces fondations de la maison terminées, nous devons commencer une deuxième couche. Ceci est fait en sélectionnant le mode d'édition "Côtés" ou "Avant/Arrière" en utilisant leur raccourci clavier ("S" ou "B"), ou tournez simplement la scène jusqu'à ce que le programme le sélectionne pour vous.
Commençons la deuxième couche en ajoutant une brique 1x1 à gauche de l'ouverture de la porte pendant que le plan d'édition est réglé sur "Avant/Arrière". Pour vous assurer qu'une nouvelle brique est ajoutée à la même profondeur, vous devez d'abord sélectionner la brique 2x2 existante car LDCad utilisera la dernière "coordonnée morte" utilisée pour une brique nouvellement ajoutée. Faites glisser une brique 1x1 hors du panneau pièce et essayez de la placer au-dessus de la brique 1x2. Comme vous pouvez le voir, la grille est maintenant orientée verticalement dans le prolongement de la brique inférieure 1x2 comme dans l'image ci-dessous.
Ensuite, nous ajoutons une autre brique 1x1 sur le côté droit de la porte et une autre 1x4 à côté de celle-ci. Pour la 1x4 vous pouvez "copier" en utilisant des Inser celle qui se trouve en-dessous. Remplissez la deuxième couche par vous-même. N'oubliez pas de choisir le plan d'édition, et sélectionnez la brique courante à bon escient. Notez également qu'une fois que vous avez mis une brique 1x2 et une brique 1x4 au deuxième niveau, vous avez la possibilité de retourner au plan d'édition "Haut/Bas" et d'ajouter les briques restantes en les utilisant comme pièce courante / orientation / coordonnées mortes. Si nécessaire, vous pouvez toujours les faire pivoter à l'aide des touches fléchées.
Vous pouvez également copier plusieurs briques à l'aide de la touche Inser en sélectionnant plus d'une brique à la fois. Ceci est fait en maintenant la touche Ctrl enfoncée tout en cliquant avec le bouton gauche de la souris sur des briques supplémentaires. Ctrl peut également être utilisé pour enlever des briques de la sélection en sélectionnant celles qui sont déjà dans la sélection. Par exemple, vous pouvez l'utiliser pour copier le mur gauche sur le côté droit tout en utilisant le plan d'édition "Haut/bas".
Pendant le "clonage" d'une sélection multiple, cette sélection peut également être pivotée comme n'importe quelle pièce normale. Cela vous donne l'option de faire pivoter les briques copiées latérales gauche de 180 degrés avant de les placer sur le côté droit. Ceci pour créer une meilleure disposition de "couture". Tout cela devrait vous donner quelque chose comme l'image ci-dessous.
Ceci termine la deuxième couche, donc ajoutons une nouvelle étape de construction en utilisant Ctrl+Inser, cela changera le panneau en haut à gauche en "Step 3/3".
À ce stade, nous mettrons en pause la construction du bâtiment pendant un certain temps pour vous mettre au courant de l'utilisation générique des "étapes de construction" et de "l'épingle d'édition".
Une chose très importante à comprendre est que dans LDraw, les étapes de construction indiquent la fin d'une étape et non le début. Ceci parce que tous les modèles ont au moins une étape, même si elle n'inclut pas encore les commandes d'étape. Donc, alors que nous avons seulement ajouté deux étapes afin de séparer les couches de brique, notre maison a maintenant trois étapes de construction.
Les étapes de construction ont des options supplémentaires qui peuvent être utilisées pour faire pivoter le modèle. Cela peut être utilisé pour s'assurer que les nouvelles pièces ajoutées dans cette étape sont visibles par quelqu'un suivant les instructions. Voir aussi l'option "NSR" discutée ci-dessous dans le chapitre sur la boussole d'édition.
Les nouvelles briques sont toujours ajoutées à l'étape en cours, comme indiqué dans le panneau en haut à gauche.
Les raccourcis associés à l'étape de construction sont :
Vous pouvez également naviguer dans les étapes en utilisant les boutons d'étape de construction de la barre d'outils. En cliquant sur le panneau "Step 3/3" en haut à gauche, vous ouvrez le menu "Stepping" contenant les mêmes actions, et d'autres plus avancées dont nous n'avons pas besoin maintenant. Au bas du menu, vous trouverez la liste de toutes les étapes en tant qu'éléments uniques, vous permettant d'aller directement sur une étape particulière.
Il existe de nombreuses façons de réorganiser les étapes et les façons de les ajouter aux modèles existants, elles seront abordées plus loin dans cette documentation. En pratique, il est toujours plus facile d'ajouter des étapes de construction lors de la construction du modèle, même si ce n'est qu'une indication approximative que vous affinerez plus tard. N'hésitez pas à jouer à naviguer avec les étapes pendant un certain temps, assurez-vous juste de vous mettre sur la troisième avant de continuer.
Notez que la troisième étape est vide car nous n'y avons pas encore ajouté des briques. Le modèle final aura plus d'étapes pour jouer avec.
Jusqu'à présent, j'ai essayé de vous familiariser avec une chose à la fois en utilisant seulement le comportement par défaut des choses. Ce faisant, j'ai complètement ignoré la boussole d'édition dans le coin inférieur gauche, brièvement discutée. La boussole est sans doute le contrôle le plus important dans LDCad, il est donc très important que vous compreniez parfaitement son but et son fonctionnement interne.
Vous accédez à la boussole en déplaçant votre souris sur la petite grille avec les flèches tricolores dans le panneau point de vue, du coin inférieur gauche. En conséquence, cela zoomera sur une version plus grande comme indiqué ci-dessous. Cela vous donnera un accès direct à un certain nombre de paramètres de grille et plan d'édition souvent utilisés et affiche leur état actuel.
Au centre de la boussole, vous trouverez une croix rouge, verte et bleue. Ces lignes indiquent l'orientation monde/caméra. Rouge indique gauche/droite ou largeur, vert indique haut/bas ou hauteur (notez que LDraw utilise une hauteur négative indiquée par la flèche verte pointant vers le bas) et bleu indique avant/arrière ou profondeur.
Parallèlement à deux des trois lignes principales, vous verrez l'orientation actuelle du plan d'édition au moyen d'une grille grise. Dans les coins de cette grille sont quatre icônes que vous pouvez utiliser pour déplacer la caméra dans une direction (flèche) ou deux (croix) à la fois.
À l'intérieur du panneau, vous pouvez également faire pivoter la caméra en utilisant l'arrière-plan de la boussole. Idem pour le mouvement de la caméra en utilisant Maj ou Ctrl+Maj. Tout se comportera comme dans la zone d'édition, à l'exception du zoom qui n'utilisera plus "zoom au curseur" mais un "zoom au centre".
Allons-y pour passer en revue toutes les options de contrôle organisées autour de la bordure de la boussole agrandie.
Dans le coin supérieur gauche du panneau point de vue, vous voyez le texte "10 8 10" (si vous êtes en vue de dessus). Cela indique les pas de grille utilisés dans le plan d'édition en cours. Il utilise les couleurs Rouge/Vert/Bleu pour indiquer les axes X, Y et Z correspondants. En cliquant sur l'un des nombres on ouvre le menu grille (Grid). L'utilisation principale de ce menu consiste à sélectionner une grille différente et/ou un pas de rotation. Ceci est nécessaire si le placement des briques semble "sauter" l'endroit où vous voulez qu'elles se rendent à cause d'une grille utilisant un pas trop grand.
En haut à droite du panneau point de vue, vous voyez le texte "15 DEG" qui indique le pas de rotation en cours. Cliquer sur cette étiquette ouvrira également le menu grille (Grid). Notez que les pas des deux catégories "Position" et "Rotation" ont des raccourcis clavier configurés. Il est préférable de les utiliser à la place du menu le plus rapidement possible car cela vous fera gagner beaucoup de temps.
Au-dessous du pas de rotation, le texte "NSR" ("No Step Rotation" ou Pas d'étape de rotation) est affiché, ceci indique l'état actuel de la "Rotation de l'étape de construction". Ceci contrôle les rotations automatiques de la caméra pendant la navigation dans les étapes de construction, comme nous l'avons vu dans le chapitre sur les étapes de construction ci-dessus. Il est désactivé par défaut, en cliquant dessus, il sera activé et change le texte en "ASR" ("Auto Step Rotation" ou Etape de rotation automatique). Un message peut apparaître si le contrôle de la caméra de rotation est actif car cela limite la liberté de rotation comme indiqué ci-dessous.
Dans la partie inférieure droite du panneau point de vue, vous voyez d'abord le texte "TBL", ce qui indique que le système de caméra actuel est "Trackball". En cliquant sur cette étiquette, vous passerez au mode "contrôle de rotation" brièvement mentionné ci-dessus. Cela changera le texte en "SPN". N'hésitez pas à l'essayer et voyez vous-même la différence avec le mode trackball.
Passer du mode trackball au mode spin peut provoquer un petit saut dans l'orientation de la caméra car le contrôle en mode spin a moins de liberté. Il peut également déclencher un message d'avertissement si la fonction de rotation d'étape est actuellement activée, car cette fonctionnalité nécessite une liberté de rotation totale.
Après avoir essayé le mode spin pendant un certain temps, n'hésitez pas à le laisser activé, ou revenez au mode trackball si vous préférez maîtriser ce mode à la place. Vous pouvez changer le mode de la caméra à tout moment.
En dessous du mode caméra, le mode de d'épingle d'édition actuel est affiché en utilisant une étiquette "MOV", "ROT" ou "CEN". En cliquant dessus, vous basculerez entre les états. Vous n'utiliserez probablement jamais cela car les raccourcis clavier sont beaucoup plus efficaces à utiliser.
En dernier dans le coin inférieur droit, est indiqué "3D", c'est le mode de projection de la caméra actuelle également connu sous le nom de projection "Perspective". En cliquant dessus, vous basculerez la vue d'édition en mode de projection "2D" ou "Orthogonal". Cela changera aussi légèrement les visuels de la boussole, car un gros cube apparaît. Alors que dans ce mode, la profondeur sera sans signification, ce qui signifie que les pièces à l'arrière de votre modèle seront dessinées à la même taille que celles à l'avant. Dans ce mode, le plan d'édition actuel est également beaucoup plus apparent lorsque la caméra est verrouillée. Vous pouvez uniquement faire pivoter une vue 2D à l'aide du cube de la boussole. Il indique les 6 côtés du modèle individuel (Gauche (Left) / Droite (Right) / Haut (Top) / Bas (Bottom) / Avant (Front) / Arrière (Back) ). Chacun de ces côtés peut également être tourné dans le sens horaire ou antihoraire par pas de 90 degrés. Il en résulte 24 vues différentes possibles sur votre modèle. Nous n'avons pas vraiment besoin du mode 2D dans notre petit modèle de maison alors revenons à la projection 3D pour le moment. Le mode 2D sera utilisé dans un exemple réel plus tard dans la documentation.
Dans la partie inférieure gauche du panneau point de vue, vous trouverez le texte "AEP" (Automatic Editing Plane ou Plan d'édition automatique). Cela signifie que la fonction de sélection du plan d'édition est basée automatiquement sur la caméra. Cliquer sur le texte la désactivera en le changeant en "MEP" (Manual Editing Plane ou Plan d'édition manuel). En mode manuel, les rotations de caméra ne provoquent plus de changements dans l'orientation du plan d'édition. Le centre de la boussole zoomée affiche le plan d'édition en cours et vous pouvez également l'utiliser pour le modifier. Ceci est fait en cliquant sur les petits triangles gris/vert au milieu de sa grille. Mais comme avec la plupart des choses, il est probablement plus facile d'utiliser simplement les raccourcis clavier.
Ensuite en bas à gauche, le texte "GS" est affiché, cela indique le mode d'accrochage actuel. GS signifie "Grid Snapping" (accrochage sur la grille), cliquer dessus activera l'accrochage de pièce indiqué par le passage du texte en "PS". Bien que l'accrochage de pièces soit activé, l'ajout et le déplacement de pièces se comporteront différemment. Nous en dirons davantage plus loin.
En haut à gauche en dessous des valeurs de grille, vous trouverez le label "ABS", ceci indique que la grille est actuellement en absolue. En cliquant dessus, vous activez une grille relative basée sur la sélection en cours. Si aucune sélection n'est active, rien ne se passera. Si une grille relative est active, elle sera indiquée par un texte "REL" au lieu de "ABS". Cliquer sur le texte "REL" revient toujours à "ABS", quel que soit l'état de la sélection. Vous en apprendrez plus sur la grille relative ci-dessous.
Comme vous pouvez le voir, les commandes ou états de la boussole indiquent tous les aspects du comportement d'édition discuté jusqu'à présent. Cela devrait être le premier endroit où aller quand vous avez besoin de changer un paramètre ou si vous voulez en connaître l'état actuel.
Jusqu'à présent, nous avons ajouté des nouvelles briques à la scène en utilisant exclusivement des grilles 2D. Il existe cependant un moyen plus simple d'ajouter des briques à un modèle en utilisant l'attirance pièce.
Vous pourriez vous demander pourquoi j'ai perdu votre temps à vous apprendre la méthode grille alors que l'attirance est disponible. La principale raison à cela : Toutes les pièces LDraw ne disposent pas des informations supplémentaires nécessaires pour l'attirance pièce. Cela signifie que certaines pièces doivent encore être placées en utilisant la méthode grille. Donc, pour pouvoir utiliser toutes les pièces LDraw, il est préférable d'utiliser les deux méthodes. Et en combinant les deux méthodes, vous êtes en mesure de construire des modèles encore plus rapidement, car elles peuvent être utilisées pour se compléter l'une l'autre.
Pour utiliser l'attirance pièce, vous devez d'abord l'activer en utilisant la boussole d'édition. Ceci est fait en s'assurant qu'il montre "PS" comme deuxième texte en bas à gauche, comme discuté dans le chapitre précédent. Personnellement, je désactive également la fonction d'orientation automatique du plan d'édition ("AEP") lors de l'utilisation de l'attirance pièce. Ceci parce que vous voulez généralement le mode Haut/Bas tout le temps, peu importe l'angle de vue. Donc, assurez-vous que la boussole indique "MEP" et "PS" dans le coin inférieur gauche puis de mettre le plan d'édition en mode Haut/Bas si ce n'est déjà fait.
Maintenant, en utilisant l'attirance pièce, cela permet d'ajouter une troisième couche de brique en utilisant la même disposition que la première couche. Sélectionnez une brique 1x4 et appuyez sur Inser (ou faites-en glisser une du panneau pièce). Vous remarquerez que la nouvelle brique "colle" aux briques voisines d'une manière plus réelle que lorsque vous utilisez le mode grille. La grille est toujours là mais elle ne sera affichée que si aucune "connexion" n'a été trouvée dans les environs immédiats de l'emplacement actuel de la souris.
L'attirance pièce dans LDCad a toujours besoin d'une assistance pour une orientation correcte ou "proche de", en particulier pour les pièces très symétriques comme les briques. Ainsi, tout en vous déplaçant, vous pouvez toujours faire pivoter la nouvelle brique à l'aide des touches fléchées. Placez la brique dans un endroit approprié (par exemple sur le mur arrière gauche). Ensuite, essayez de compléter la couche en utilisant l'attirance pièce. La principale chose à retenir lors de l'attirance pièce est d'avoir toujours une vue débloquée à l'emplacement que vous souhaitez aligner, et il est généralement préférable de construire d'arrière en avant.
Dans les situations où vous travaillez avec des pièces non orientées à 90 degrés, les choses peuvent devenir un peu plus difficiles, ceci sera traité dans le chapitre ci-dessous sur les grilles relatives. La maison, cependant, est extrêmement rectangulaire, donc vous ne devriez pas avoir de vrais problèmes en utilisant l'attirance pièce pour ce modèle à partir de maintenant.
Si une pièce ne "va pas où vous le voulez", essayez de tourner légèrement la caméra. Ceci est possible en maintenant une nouvelle pièce "en l'air" en utilisant le bouton droit de la souris, maintenez simplement le bouton gauche de la souris enfoncé aussi. Il est également possible d'attirer plusieurs nouvelles pièces lorsque vous utilisez des Inser sur une sélection multiple (par exemple pour copier le côté gauche sur le mur latéral droit).
L'attirance pièce peut être désactivée "en cours d'ajout" ou à tout autre moment en utilisant le raccourci Maj+P si nécessaire. Cela peut être nécessaire si la nouvelle pièce que vous souhaitez ajouter ne s'accroche pas correctement en raison d'informations d'accrochage manquantes dans ses définitions. Heureusement, toutes les pièces utilisées dans ce modèle de maison ont des informations complètes, donc vous ne devrez pas vous en inquiéter pour l'instant. Mais si vous avez besoin d'une pièce sans information complète, vous pouvez toujours vous rabattre sur les compétences d'édition grille que vous avez apprises ci-dessus.
Une fois que vous avez terminé le nouveau niveau, il devrait ressembler à la première image de la séquence ci-dessous. Terminez-le en ajoutant une nouvelle étape (Ctrl+Inser) et essayez de compléter les deux étapes suivantes en utilisant les deux autres images ci-dessous comme référence. N'oubliez pas d'ajouter également des étapes après avoir terminé chaque niveau.
Les fenêtres blanches apportent un bon changement de rythme car nous n'avons utilisé que des briques rouges jusqu'à présent. Vous les trouverez dans la l'onglet 4 du panneau pièces que nous avons préparé au début du chapitre. Sélectionnez simplement le blanc en utilisant la roue chromatique du panneau couleur et si vous avez du mal à trouver les fenêtres tapez "1x4x2" alors que le curseur de votre souris est à l'intérieur du rectangle du "filtre des pièces". Cela limitera l'affichage à 5 éléments dont 3 sont des variantes de la pièce fenêtre utilisée. J'ai utilisé la première, mais cela n'a pas vraiment d'importance dans notre cas. Cliquez sur l'icône de droite ou appuyez sur "Echap" pendant que le curseur se trouve à l'intérieur du rectangle de texte pour effacer le filtre actuel et filtrer "1x6x2" pour trouver les fenêtres plus larges utilisées dans les murs latéraux.
Après avoir terminé ce petit exercice, votre modèle de maison devrait avoir six étapes de construction dont les cinq premiers couvrent une seule couche de brique. Avant de continuer sur la couche suivante, il faut d'abord ajouter une plaque de base au modèle. La seule raison pour laquelle je n'ai pas commencé par elle, c'est que cela aurait rendu l'introduction de l'édition basée sur la grille un peu plus compliquée. Mais il n'y a aucune raison de ne pas le faire maintenant. Cela nous donne aussi une bonne excuse pour procéder à une réorganisation des étapes de construction, car nous devons insérer une nouvelle étape avant la première étape actuelle.
Il est très facile d'insérer une étape avant une étape existante. Utilisez "Ctrl+Page haut" pour accéder à la première étape et cliquez sur le panneau "Step 1/6" dans le coin supérieur gauche pour ouvrir le menu des étapes (Stepping). Dans ce menu, cliquez sur "Insert". Cela ajoutera une nouvelle étape avant celle en cours, augmentant le numéro de toutes les autres étapes d'une unité. La nouvelle étape 1 (Step 1) sera vide, elle affichera donc une zone d'édition vide car les premières briques sont maintenant à l'étape 2.
Utilisons l'onglet 6 du panneau pièces pour localiser la bonne plaque de base. Les plaques de base ont leur propre groupe, mais comme nous en avons besoin d'une seule, il est tout aussi rapide d'utiliser le groupe de recherche générique que nous avons préparé dans l'onglet 6. Tapez "16x16" dans la zone du filtre de recherche pour obtenir une vue d'ensemble des pièces de cette taille, composées uniquement de plaques de base. Nous avons besoin d'une plaque dont deux sont apparemment identiques. Dans ce cas, c'est parce que l'une d'elle est une "pièce alias" également reconnaissable par le "=" débutant sa désignation comme indiqué dans la barre d'état. Cela signifie que cette pièce particulière a plusieurs numéros de pièces dans le monde réel. Vous voulez généralement celle sans le "=" dans sa description car cela est considéré comme une modélisation plus propre lors de l'utilisation de LDraw.
Vous pouvez exclure ces pièces alias spéciales à l'aide de la boîte de dialogue de filtrage avancé. C'est pratique si vous ne prévoyez pas de les utiliser. Vous l'ouvrez en cliquant sur la zone de texte du filtre ou en appuyant sur F3 alors que la souris se trouve dans le panneau pièces. Ceci ouvre la boîte de dialogue montrée dans l'image ci-dessous. Utilisez-la pour décocher l'élément "Alias parts" à droite. Beaucoup de gens veulent également exclure les "pièces colorées" qui sont des pièces avec une couleur prédéfinie, alors n'hésitez pas à décocher aussi "Color parts".
Lorsque vous avez terminé d'ajuster les paramètres, vous devez les appliquer à tous les autres panneaux pièces et en faire le réglage par défaut ou il ne sera utilisé que pour ce seul panneau pièce tant que vous l'utilisez ou que vous redémarriez LDCad. Vous en faites la valeur par défaut en cliquant sur le bouton "Options" qui ouvre un menu contextuel. Dans ce menu, cliquez sur "Apply to all and use as default" (Appliquer à tous et utiliser par défaut) pour les rendre permanents. Ensuite, vous pouvez fermer la boîte de dialogue en cliquant sur "Accept".
Reprenons en ajoutant la plaque de base 16x16. Faites-la glisser dans la zone d'édition vide et parce qu'il n'y a rien à accrocher, il suffit de le placer n'importe où dans le centre de la vue pour le moment. Ensuite, accédez à l'étape 2 de la construction, rendant la première couche de brique visible à nouveau.
La plaque de base est maintenant visible mais au mauvais endroit, sauf si vous avez beaucoup de chance ou si vous trichez en utilisant le panneau coordonnées. Heureusement, vous pouvez déplacer n'importe quelle pièce, quelle que soit l'étape dans laquelle elle se trouve. Saisissez la plaque de base de façon à la "déconnecter" de nouveau, cette fois-ci elle sera accrochée à la base de la première couche. Positionnez-la de manière à ce que les côtés gauche, droit et arrière débordent de deux tenons au-delà des briques. Cela fait, revenez à la dernière étape de construction (maintenant la 7) en utilisant "Ctrl+Page bas". Cela devrait ressembler à l'image ci-dessous.
À ce stade, je pense que vous êtes probablement assez familier avec les bases de l'édition pour terminer le reste de la maison en faisant correspondre les captures d'écran des étapes de construction ci-dessous. N'oubliez pas d'ajouter une nouvelle étape avant de commencer l'image suivante. Lorsque vous avez terminé, vous devriez avoir 17 étapes (vous n'avez pas à ajouter une étape après avoir placé la pièce finale).
Si, pour une raison quelconque, vous avez oublié une étape ou ajouté des pièces dans la mauvaise étape, ne vous inquiétez pas à ce sujet, vous pouvez le corriger plus tard, comme expliqué dans le chapitre "Base de la gestion des étapes de construction".
Le seul piège dans ces images pourrait être les pièces de la porte et son encadrement, car nous n'avons pas préparé d'onglet pour ces pièces la. Vous pouvez utiliser l'onglet inutilisé 5 pour naviguer vers les "Bodywork/Door" (carrosseries/portes) ou rediriger l'onglet 4 "Windows" (fenêtres) vers celle-ci montant d'un niveau puis en entrant dans le groupe des portes. Une fois à l'intérieur du groupe porte, filtrez-le sur "1x4x6" et vous ne devriez avoir aucune difficulté à trouver les pièces nécessaires. Assurez-vous simplement de sélectionner la variante d'encadrement ("Door ... Frame") avec les petits trous à gauche. Vous pouvez également utiliser l'onglet 6 pour filtrer sur "1x4x6", mais elle affichera plus de pièces, non liées directement aux portes.
Maintenant, il y a 17 étapes de construction, il est plus intéressant de naviguer à travers ces étapes en utilisant les raccourcis "Page haut" et "Page bas" car vous pouvez les maintenir pour faire une petite animation. Mais comme il s'agit de votre tout premier modèle, il est probable que vous vous êtes trompé dans une ou deux étapes. Ces erreurs peuvent être cependant corrigées de plusieurs façons. La principale est d'utiliser le menu des étapes ("Stepping") que vous pouvez ouvrir en cliquant sur le panneau "Step 17/17" dans le coin en haut à gauche.
Nous avons déjà expérimenté l'insertion d'une étape, donc si vous en avez manqué une, naviguez vers celle qui devrait être la suivante et utilisez la commande "Insert" du menu. Si vous avez manqué plusieurs étapes, il est préférable de les ajouter en premier pour les étapes inférieures, car cela corrige les numéros d'étapes les plus élevées au fur et à mesure. Après avoir inséré chaque nouvelle étape, naviguez jusqu'à la dernière étape. Les briques que nous voulons déplacer sont actuellement visibles. De cette façon, il devrait être plus facile de les sélectionner avec "Ctrl. Une fois qu'elles sont toutes sélectionnées, vous pouvez les déplacer à l'étape correcte en utilisant le sous-menu "Move to step" (Déplacer vers l'étape) dans le menu "Stepping". Si, par exemple, vous avez oublié l'étape 9 et que vous avez sélectionné toutes les briques de cette étape, cliquez simplement sur l'élément "Step 9" du sous-menu "Move to step" et cela sera corrigé. Vous pouvez le faire pour n'importe quelle brique actuellement dans la mauvaise étape.
Une alternative à ce qui précède pourrait être l'utilisation de "Selection insert" du menu, cela insérera une nouvelle séparation d'étape avant la pièce actuellement sélectionnée. C'est pratique lorsque vous savez que vous avez ajouté des pièces dans le bon ordre, mais que vous avez oublié d'ajouter l'étape elle-même. Dans ce cas, vous pouvez sélectionner la première pièce de cette étape oubliée et cliquer sur "Selection insert". Cela divise l'étape actuelle de telle sorte que la pièce sélectionnée devienne la première pièce de l'étape d'origine. Toutes les briques qui précèdent seront déplacées dans une nouvelle étape.
Vous pourriez également avoir ajouté une étape deux fois sans le remarquer, jusqu'à ce que de nouvelles briques aient été placées. Cela peut être corrigé en naviguant vers l'étape vide, puis en cliquant sur "Delete" (Supprimer) cela va fusionner l'étape en cours avec la suivante en en conséquence la supprimer.
Les méthodes ci-dessus peuvent également être utilisées pour ajouter des étapes à un modèle existant qui n'en a pas actuellement. Mais cela peut demander beaucoup de travail car la sélection de toutes les pièces d'une certaine étape peut être très fastidieuse en raison d'un manque d'accès ou visibilité, etc. Dans ce cas, vous voudrez probablement maîtriser le panneau source comme exploré dans une autre section de la documentation.
Le modèle de la maison, maintenant terminé, est très rectangulaire. Ce n'est pas si étrange que cela car la plupart des modèles officiels le sont. Ce n'est pas le cas pour tous les modèles, il est donc également possible de construire suivant n'importe quel angle en utilisant LDCad. Pour ce faire, un certain nombre d'outils sont en place pour vous aider à le faire.
Pour illustrer le problème principal, ajoutons quelque chose avec un angle au modèle de la maison. Peut-être un petit arbre par exemple. Pendant que vous utilisez (encore) l'accrochage pièce, construisez le tronc comme indiqué sur l'image ci-dessous. Ensuite, désactivez l'accrochage pièce un moment car cela rend le problème que nous traitons plus facile à expliquer. Pour ce faire, utilisez la boussole ou le raccourci "Maj+P".
Maintenant, en utilisant toutes vos compétences en édition grille, essayez de finir l'arbre comme indiqué dans l'image ci-dessous en utilisant une brique 1x3 et trois 1x1. Même si les nouvelles briques utilisent la même orientation que la plate (si elle est ajoutée en dernier), les pièces ne vont toujours pas aux bords de la plate car ces endroits sont hors grille. Vous pouvez désactiver le pas de grille ou le régler à un pas très fin pour s'en rapprocher. Mais il sera très improbable d'être précis, si cela se fait, en regardant de près.
Le problème principal ici est que la plate est "de travers" par rapport à la grille. C'est parce que la grille sépare ce qui est gauche/droite, haut/bas et avant/arrière en mode édition globale (référentiel absolu). Pour ajouter des choses à la plate, nous aurions besoin de règles différentes pour cette direction. Vous réaliserez peut-être que l'utilisation de l'accrochage de pièce permettra de résoudre le problème d'angle dans ce cas (mais seulement si vous avez cliqué sur la plate en diagonale en dernier). Parce que la fonction d'accrochage saute les parties inconfortables hors grille pour vous. Bien que cela fonctionne dans ce cas, elle ne viendra pas à la rescousse dans tous les cas, même en excluant les pièces avec des informations d'attirance incomplètes.
La manière globalement correcte pour faire ce genre de construction angulaire est d'utiliser un sous-modèle (traité ailleurs) ou en utilisant une grille relative. Explorons cette méthode de grille relative. Elle est activée simplement en appuyant sur le texte "ABS" dans la boussole alors que la plate verte (orientée) est sélectionnée. Le texte changera en "REL" indiquant que la grille est maintenant relative. Vous pouvez également utiliser la touche de raccourci "O" (Origine).
Une fois la grille relative active, sa couleur dans la boussole deviendra orange (comme indiqué sur l'image ci-dessous). La boussole montrera également deux ensembles d'axes de référentiel. Parmi ceux-ci, les plus épais sont les relatifs et les plus minces et foncés sont les absolus originaux. Vous pouvez désactiver les absolus dans le menu "Prefs / Editing / Show abs axises in compass" si cela vous dérange.
Dans le nouvel état de la grille, il est soudainement facile d'ajouter une brique à l'un des tenons de la plate. Ceci parce que maintenant le "monde" est à nouveau rectangulaire, il l'est juste par rapport à la plate verte. Essayez de compléter l'arbre comme indiqué dans l'image un peu plus haut.
Une fois que vous avez terminé la construction à cet angle particulier, appuyez sur le texte "REL" dans la boussole ou utilisez le raccourci "O" alors que rien n'est sélectionné.
Ce qui précède est tout ce dont vous avez besoin pour commencer à modéliser avec LDCad. Comme pour la plupart des choses, il faudra de la pratique pour aller vraiment de l'avant. Une façon de s'entraîner consiste à déterrer quelques vieux livrets d'instructions officiels (ou à en trouver quelques-uns sur le net) afin d'essayer d'en recréer numériquement les modèles. Pour les débutants, il est généralement préférable d'utiliser pour cela au début de petits sets "City" ou "Creator".
Une fois que vous êtes à l'aise avec les bases de l'édition, n'hésitez pas à continuer sur le chapitre suivant : Edition avancée, dans laquelle nous explorerons les sous-modèles, les pièces dynamiques (flexibles), et plus encore.
Une fois que vous avez sous contrôle les bases, il serait peut-être temps de débloquer certaines des fonctionnalités plus avancées du système LDraw et du programme LDCad.
LDraw est un format récursif, ce qui signifie que vous pouvez utiliser vos modèles à l'intérieur d'autres modèles comme s'ils n'étaient plus que de grosses ou énormes briques. En plus, le format LDraw peut prendre en charge plusieurs modèles à l'intérieur d'un seul fichier (MPD). Les fichiers MPD prennent en charge complètement la nature récursive de LDraw en vous permettant de concevoir vos modèles de façon modulaire tout en mettant soigneusement le tout dans un seul fichier.
LDCad supporte pleinement l'utilisation de modèles récursifs, y compris le format MPD. Pour mieux comprendre cette fonctionnalité, il est préférable d'essayer et de créer un simple modèle MPD. Pour cela ouvrir un nouveau fichier comme d'habitude, mais ne pas l'enregistrer sur le disque tout de suite. Ensuite, vous pouvez ajouter quelque chose comme vous avez déjà appris, mais comme je veux vous expliquer l'utilisation des sous-modèles, limitez-vous à une petite plaque de base ou quelque chose de similaire, juste pour avoir une base pour placer ensuite dessus les sous-modèles.
Ensuite, nous ajoutons un nouveau sous-modèle au fichier en cliquant sur l'icône de la barre d'outils. Ceci vide la zone graphique et ouvre la boîte de dialogue familière "Edit header" (édition entête). La différence est que c'est l'entête d'un modèle supplémentaire (deuxième) à l'intérieur du nouveau fichier, sur lequel nous travaillons. Une autre petite différence est que vous êtes autorisé à modifier le nom du fichier pour ce modèle, ce qui n'est autorisée que pour les modèles à l'intérieur d'un fichier MPD (le fichier est passé de l'extension ldr à mpd dès que vous avez ajouté un second modèle à l'intérieur). N'hésitez pas à utiliser la boîte de dialogue comme d'habitude, mais pour cet exemple nous allons dessiner un petit arbre, alors remplaçons "subModel-1.ldr" par "arbre.ldr". Après avoir accepté les changements, c'est maintenant une bonne idée d'enregistrer le fichier sur le disque. Il est généralement préférable de reporter l'enregistrement d'un fichier MPD après avoir ajouté un deuxième modèle, car la boite de dialogue sauvegardera automatiquement le fichier avec l'extension .mpd au lieu de .ldr selon la convention d'usage officielle LDraw.
Il n'y a pas de limitations sur ce que vous pouvez dessiner dans un sous-modèle, mais dans cet exemple, pour rester simple, il suffit juste de dessiner comme objet un arbre simple. Peut-être quelque chose comme sur l'image ci-contre, mais n'hésitez pas à le faire suivant votre propre goût. Quand c'est fini, le sous-modèle peut être utilisé dans le modèle principal (ou n'importe quel autre sous-modèle) du fichier MPD comme s'il s'agissait d'une brique normale. Vous pouvez même l'utiliser plusieurs fois et/ou avec différentes couleurs (nous verrons cela plus tard). |
Pour ajouter le sous-modèle à un autre modèle du fichier, vous devez d'abord revenir sur le modèle de base,
ce qui peut être fait en appuyant sur la touche "Fin", lorsque la souris est à l'intérieur de la zone graphique
car cette touche ramène le précédent modèle utilisé au premier plan. Mais comme vous en aurez ensuite besoin,
vous pouvez aussi utiliser le panneau pièces pour naviguer entre le modèle de base et les sous-modèles.
Sélectionnez sur le panneau pièces un onglet inutilisé ou peu utilisé et naviguez si besoin jusqu'à la racine en cliquant
sur la grosse flèche vers le haut jusqu'à ce qu'elle disparaisse. Ensuite, vous cliquez sur la séquence suivante
des cellules du panneau :
Cela ouvre le groupe d'objets "File content" (contenu du fichier). Ce groupe affiche tous les modèles
contenus dans le fichier courant, il doit donc ressembler à l'image ci-contre. Ce groupe permet de sélectionner
le modèle de base ou le sous-modèle que vous souhaitez ensuite modifier. Cela se fait en pointant la souris en bas
à droite de la cellule contenant le modèle cible. Une icône de "clé plate" s'affiche. En cliquant dessus vous
éditez le modèle concerné.
En plus de naviguer entre les sous-modèles du fichier MPD, ce groupe est également utilisé pour ajouter l'un des modèles à un autre modèle comme s'ils étaient des pièces normales. Cela se fait exactement de la même façon qu'avec n'importe quelle autre pièce en le faisant glisser du panneau pièces vers la zone graphique ou en le sélectionnant et en appuyant sur la touche "Inser". Astuce : Désactivez l'accrochage pièce lorsque vous ajoutez de grands sous-modèles car actuellement cette fonction de LDCad n'est pas optimisé pour ce type d'opération et pourrait entraîner une réaction très lente. Mais ici, le petit arbre ne devrait pas poser de problèmes. |
Ajoutez quelques arbres à la plaque de base. Puis, essayez de créer un deuxième sous-modèle (par exemple un rocher) et ajoutez-en également quelques-uns au modèle principal. Si vous avez réussi, vous devriez vous retrouver avec quelque chose qui ressemble à l'image ci-dessous.
Vous vous demandez peut-être comment j'ai réussi à ajouter des rochers colorés différemment en utilisant un seul sous-modèle. Ceci est possible en utilisant la couleur LDraw spéciale numéro 16. Cette couleur 16 signifie "utiliser la couleur parent". Tout ce qui utilise la couleur 16 dans votre sous-modèle sera de la couleur attribuée au sous-modèle lors de son placement, tout comme avec des briques LDraw normales. Vous pouvez assigner à n'importe quel ensemble de pièces la couleur 16, ainsi vous pourriez par exemple assigner la couleur 16 aux briques vertes du haut de l'arbre, et ainsi affecter différentes teintes de vert aux arbres qui auront par contre tous un tronc brun. Vous trouverez la couleur 16 dans le groupe "Special" du panneau couleurs. Il faut juste être sûr d'utiliser la couleur 16 et non la couleur 24 qui a une utilisation légèrement différente.
Ce qui précède est l'essentiel pour être productif avec les sous-modèles. La seule chose qui reste à dire à mon humble avis est quand utiliser les sous-modèles. Il ne faut pas limiter son utilisation aux choses que vous allez à priori utiliser plusieurs fois dans un modèle. Il est tout à fait normal de mettre des choses utilisées une seul fois dans un sous-modèle. Les principales raisons de cet usage sont habituellement la simplification de l'assemblage et/ou une conception modulaire. Mais il pourrait aussi être nécessaire pour limiter la taille de la section sur laquelle vous travaillez afin de ne pas effondrer votre carte graphique.
Une autre bonne raison d'utiliser un sous-modèle est la construction inclinée ou tournée suivant un angle quelconque. Au lieu de placer toutes les pièces une à une suivant un tel angle, envisagez la création d'un sous-modèle avec un assemblage "à plat" normal, puis placez ce sous-modèle au bon angle d'un seul coup. Cela permettra un ajustement plus facile de cet angle dans l'avenir. Cela empêchera également des erreurs d'arrondi et/ou des problèmes d'alignement.
Vous pourriez être un peu accablé par ces "règles", mais ne vous inquiétez pas, vous n'avez pas à planifier tous ces sous-modèles au préalable. LDCad vous propose plusieurs outils pour réorganiser les choses par la suite. Par exemple vous pouvez facilement déplacer la sélection courante dans un nouveau sous-modèle en utilisant le menu "Reorganize" (réorganise) qui est accessible par un clic droit dans la zone graphique lorsqu'une sélection est active. Ceci ouvre le menu "Selection" (sélection), menu à l'intérieur duquel vous cliquez sur "Reorganize", puis sur "Move to submodel" (déplace vers un sous-modèle). Cela ouvre la boîte de dialogue suivante qui propose quelques options que vous n'avez généralement pas besoin de changer.
Après avoir cliqué sur le bouton "Accept" un nouveau sous-modèle sera créé, la sélection y sera déplacé, suivi par le remplacement de cette sélection par une référence au nouveau sous-modèle. Cela ouvre ensuite la boîte de dialogue d'édition de l'en-tête du nouveau sous-modèle, afin que vous puissiez ajouter son nom de fichier, etc, ... Après avoir fermé cette boîte de dialogue, rien ne semble avoir changé et le modèle est visuellement le même. Mais, comme la sélection est maintenant un unique sous-modèle vous pouvez l'utiliser comme un autre sous-modèle. Il y a d'autres outils associés aux fichiers MPD disponibles dans le menu "Reorganize", mais ils seront expliqués dans un des prochains chapitres.
L'utilisation des sous-modèles est extrêmement utile, mais a un inconvénient majeur. Cela limite la façon dont vous pouvez changer les pièces mises en sous-modèles si vous êtes en train de modifier le modèle principal lui-même. Cela vous oblige à basculer en permanence entre ces modèles pour les éditer. Egalement, cela limite votre compréhension du modèle assemblé dans son ensemble. Ce problème est encore plus évident lors de l'utilisation de la grille (sans accrochage pièce) comme approche de construction, en voulant sélectionner une pièce dans une orientation similaire à celle que vous voulez ajouter. Mais cette pièce ne peut pas être individuellement sélectionnée parce qu'elle est dans un sous-modèle. Heureusement, LDCad offre une fonctionnalité unique qui supprime complètement cette lacune d'utilisation des sous-modèles, ça s'appelle le mode édition imbriquée.
Une édition imbriquée signifie que toutes les pièces des sous-modèles utilisés dans le modèle actif vont se comporter comme si elles étaient placées directement dans le modèle actif lui-même. En conséquence toutes les informations de position et orientation de ces pièces sont données dans le système de coordonnées du modèle actif. Le seul inconvénient de l'édition imbriquée est que vous perdez le contrôle des références des sous-modèles eux-mêmes, mais ceci est résolu simplement en basculant en mode édition normale lorsque c'est nécessaire ou en utilisant les exclusions (Voir explications plus loin). Evidemment le mode édition imbriquée n'est utile que lorsque vous travaillez sur un modèle contenant des sous-modèles.
Vous pouvez modifier le mode d'édition courant avec le panneau en haut à droite de l'écran graphique qui devient visible lorsque vous déplacez le curseur de votre souris sur le nom du fichier affiché normalement à cet endroit. Pour activer l'édition imbriquée, cliquez simplement sur l'onglet "Nested" et sur l'onglet "Normal" pour revenir en mode édition normale. Le panneau session offre également d'autres options sur la session courante, mais nous verrons cela plus tard.
La meilleure façon de comprendre le mode édition imbriquée est de l'utiliser sur un fichier MPD de taille moyenne. Par exemple, ouvrez le fichier 5510.mpd fourni avec LDCad (en utilisant le menu "File / Example"). Déplacez la souris sur le modèle et vous remarquerez que le pare-choc avant gris et l'arceau noir au-dessus des sièges sont des sous-modèles (leurs noms s'affichent dans la barre de statut). Maintenant passez en mode édition imbriquée et déplacez à nouveau la souris sur ces zones. Cette fois les briques individuelles seront en surbrillance comme n'importe quelle autre brique "normale" du modèle principal. Vous pouvez également les sélectionner et les déplacer comme des briques "normales".
En mode édition imbriquée toutes les nouvelles briques ajoutés seront par défaut ajoutées au modèle actif, peu importe où vous les placez. Mais il est également possible d'ajouter de nouvelles briques à l'un des sous-modèles au lieu du modèle principal actif. Cela se fait en cliquant sur le texte "Insert into" du panneau session, alors qu'une pièce du modèle cible est sélectionnée. Par exemple, si vous sélectionnez la "Plate 1x8" du pare-chocs avant, puis cliquez sur le texte "Insert into", alors toutes les nouvelles pièces seront ajoutées au sous-modèle "frontBumper.ldr". Vous pouvez le vérifier en affichant ce sous-modèle dans l'éditeur. Pour revenir à l'ajout de pièce dans le modèle principal, assurez-vous que rien n'est sélectionné et cliquez à nouveau sur "Insert into". De façon alternative, une bascule entre mode imbriqué et mode normal réinitialisera également la cible des pièces insérées.
Une chose qui pourrait être un peu confus, en utilisant le mode édition imbriquée, est de travailler avec des modèles qui utilisent un ou des sous-modèles plusieurs fois (comme l'arbre dans l'exemple du chapitre précédent). Ceci parce que leurs pièces individuelles seront surlignées pour toutes les instances quelque soit la copie sélectionnée (Voir ci-dessous). C'est parce que vous manipulez la brique (unique) originale qui est affichée à plusieurs endroits dans le modèle principal. Déplacer ces pièces individuelles peut être un peu déroutant selon l'orientation des références du sous-modèle. Cela vaut également pour l'ajout de briques alors que le modèle cible est un sous-modèle utilisé plusieurs fois, car ces briques ajoutées apparaîtront également sur toutes les autres instances.
En mode édition imbriquée ce n'est pas sans importance si le modèle utilise un sous-modèle unique ou plusieurs dizaines de sous-modèles, qui eux-mêmes utilisent des sous-modèles. L'ensemble de ces modèles et leurs relations les uns avec les autres s'appelle l'arbre du modèle. Dans cet "arbre" le modèle principal correspond au tronc, les sous-modèles aux branches, et les pièces sont les feuilles. Il y a des moments ou vous souhaiteriez travailler avec un sous-modèle "branche" comme un ensemble tout en conservant le comportement des "feuilles" pour d'autres branches. C'est possible en utilisant "Nesting exclusion". Cette fonctionnalité peut fondamentalement "promouvoir" n'importe quelle feuille en la branche de l'arbre qui l'utilise.
Par exemple, essayez de déplacer un arbre spécifique dans notre petit exemple de forêt en mode imbriqué et vous trouverez que ce n'est pas possible. On a besoin d'une bascule vers le mode édition normale, qui dans ce cas n'est pas si mal que ça. Mais il y a des moments ou vous souhaiteriez manipuler un sous-modèle dans son ensemble sans quitter le mode imbriqué (par exemple lors de la création de groupes compliqués, ce que nous verrons plus tard). Dans ce cas il vous suffit de sélectionner une brique de l'instance de l'arbre que vous souhaitez déplacer et appuyez sur la touche "E" du clavier ou faire un clic droit pour ouvrir le menu "Selection" et sélectionner "Nesting exclusions / Exclude selection". La brique se désélectionnera mais il vous sera maintenant possible de sélectionner l'arbre dans son ensemble alors que tous les autres arbres utilisent toujours le comportement imbriqué.
Pour retourner à un arbre totalement imbriqué, assurez-vous que l'arbre est toujours sélectionné et appuyez sur Ctrl+E, ou utilisez "Include selection" dans le menu. Pour effacer toutes les exclusions en une seule fois appuyez sur Maj+Ctrl+E, ou utilisez "Clear exclusions" dans le menu.
Dernière chose que vous devez maintenant savoir sur l'imbrication est la fonction "Move to current level" (Déplacer vers le niveau courant), accessible depuis le menu "Selection / Reorganize". Cela vous aidera à passer des trucs d'un sous-modèle (utilisé une fois) à un autre sous-modèle (utilisé une fois) sans modifier visuellement le modèle dans son ensemble. Pour faire cela, sélectionnez par exemple la "Plate 1x8" du pare-chocs avant en mode édition imbriquée dans l'exemple 5510.mpd. Puis faites un clic droit dans zone graphique pour ouvrir le menu "Selection" et choisissez "Reorganize / Move to current level". Ceci déplacera la Plate du sous-modèle frontBumper.ldr vers le modèle main.ldr. Vous pouvez vérifier cela en revenant en mode édition normale et en inspectant le modèle frontBumper.ldr. Le niveau courant référencé dans le menu est le modèle actif de "Insert into" que vous avez défini à l'aide du panneau session. Essayez de replacer la Plate 1x8 dans son sous-modèle d'origine en changeant le sous-modèle dans "Insert into" et en réutilisant la fonction "Move to current level".
Ce qui précède devrait vous éclairer assez sur le mode édition imbriquée de LDCad pour vous mettre à l'aise avec ce mode, mais, comme toujours, il est préférable d'essayer et jouer avec cette fonctionnalité pour la comprendre et la maîtriser complètement.
La bibliothèque LDraw officielle vous propose des milliers de pièces LEGO et elle continue de croître chaque année. Il y a bien une lacune sur certaines de ces pièces, c'est leur représentation statique, non pliable, des pièces dynamiques comme dans la réalité. Cela signifie que des pièces comme les élastiques ne s'étirent pas, qu'on ne peut plier les tuyaux pneumatiques ou compresser les amortisseurs etc. Il y a plusieurs solutions à ce problème, qui se résument généralement à générer des composants personnalisés à l'aide d'outils tiers (souvent très compliqués).
Pour éviter d'avoir à utiliser ces outils compliqués, LDCad vous propose une collection de générateurs de pièces dynamiques intégrés, qui peuvent être utilisés en temps réel lors de l'édition. Cela signifie que vous pouvez guider par exemple un tuyau pneumatique flexible dans votre modèle tout en visualisant la progression et le résultat en temps réel. Un autre avantage des pièces dynamiques générées par LDCad, c'est qu'elles seront utilisables et visibles dans n'importe quel autre programme de rendu LDraw sans avoir à installer des bibliothèques de composants supplémentaires.
Il existe actuellement deux types de pièces dynamiques dans LDCad, soit Chemin (Path), soit Ressort (Spring). Il est possible de créer des pièces dynamiques à partir de zéro, mais dans la plupart des cas, il sera préférable d'utiliser un des modèles ou gabarits fournis (Template). Ces gabarits contiennent une situation de départ (un élastique par exemple) que vous pouvez modifier suivant la forme requise par la suite. Chaque pièce dynamique est gérée dans un sous-modèle dédié, donc si jamais vous faites glisser un gabarit dans votre modèle il créera automatiquement un nouveau sous-modèle (dans un fichier MPD par défaut). Par la suite vous pouvez faire ce que vous voulez avec ce sous-modèle car c'est une copie du gabarit original.
Pour voir de quoi je parle, assemblez en premier un simple support avec des roues techniques,
auxquelles vous voudriez ajouter un élastique autour (Voir image à gauche). Ensuite, recherchez le groupe
principal des gabarits dans le panneau pièces (par exemple en utilisant son onglet dédié).
Pour faire cela
accédez à la racine du panneau, puis sélectionnez le sous-groupe "Templates". A l'intérieur vous trouverez
une collection de sous-groupes dédiés à certaines catégories générales (comme les pièces pneumatiques ou
les amortisseurs etc.). Comme nous avons besoin d'un élastique, choisissez le sous-groupe "Rubber band"
représenté par un simple anneau rond (en caoutchouc). |
|
Pour ajouter un élastique à notre modèle vous le faites simplement glisser du panneau pièces,
comme n'importe qu'elle autre pièce. Mais, comme l'élastique ne peut pas s'accrocher automatiquement sur
les roues, vous devrez utiliser le mode grille pour le placer au bon endroit. Dans notre cas vous le faites
en sélectionnant l'une des roues et en définissant la grille pour être dans le plan de la roue comme sur
l'image ci-contre.
Avant de placer l'élastique vous devez également sélectionner une couleur "caoutchouc" dans le panneau couleurs. Vous pouvez le faire à partir du groupe de couleurs "Rubber" (caoutchouc), qui permet d'utiliser la couleur caoutchouc rouge. |
|
Maintenant, vous faites glisser l'élastique rond dans le modèle, en le plaçant autour d'une des roues. Ne vous inquiétez pas s'il est trop petit ou trop grand. Lorsque vous le relâchez, la boite de dialogue ci-contre apparaîtra. Elle demande si vous souhaitez ajouter la nouvelle pièce dynamique comme faisant partie du fichier actuel (MPD) ou faisant partie d'un nouveau fichier. Généralement, vous voulez utiliser l'option MPD par défaut, alors appuyez directement sur le bouton "Select". |
|
Il en résulte une autre boite de dialogue. Il s'agit d'éditer l'en-tête du nouveau sous-fichier. Vous devez maintenant être familiarisé avec cette boîte de dialogue et renseignez-la comme d'habitude. Quand vous fermez la boite avec le bouton "Ok", le modèle devrait ressembler à l'image de gauche. | |
Maintenant que l'élastique est placé, nous pouvons commencer le façonnage de sorte qu'il contourne
les trois roues de manière réaliste. Pour ce faire vous devez basculer en mode édition imbriquée. Ceci
est nécessaire car nous voulons manipuler les éléments de l'élastique et pas sa localisation globale.
Une fois le mode imbriqué actif, vous verrez un grand changement dans la manière dont la bande élastique
est affichée, car des "leviers" de contrôle sont maintenant visibles. Pour l'instant l'élastique
est sur un "guide" circulaire unique dont vous pouvez contrôler le rayon en faisant glisser l'une des
sphères jaunes. Essayez d'agrandir le rayon pour voir ce que je veux dire.
Lors du redimensionnement du cercle, le rayon courant s'affiche dans la barre de statut. Essayez de le fixer à 30.5 pour le rendre parfaitement conforme à la dimension de la roue. Ensuite nous devons ajouter deux cercles supplémentaires au chemin de la courroie, pour passer autour des deux autres roues. Pour cela, vous devez d'abord sélectionner le cercle guide actuel vers son centre, cependant c'est actuellement un problème car ce centre est caché par la roue elle-même. Vous pouvez résoudre ce problème en masquant temporairement la roue (Hide) ou en éditant la courroie elle-même (à partir du groupe MPD "File content" du panneau pièces discuté ci-dessus). Profitons de cette situation pour introduire la fonction masquage de pièce, car elle est très facile à utiliser. Sélectionnez la roue et appuyez sur la touche "H", cela permet de masquer la roue et de faire apparaître la partie centrale du cercle guide. |
|
Maintenant vous pouvez le sélectionner et ajouter un nouveau
cercle guide en appuyant sur la touche "Inser" dans la fenêtre graphique (Assurez-vous que la grille est
encore définie correctement).
Cela fera apparaître un deuxième cercle que vous placez au centre de la seconde petite roue,
puis redimensionnez-la à un rayon de 30.5. Une fois cela fait appuyez de nouveau sur
"Inser" et placez le troisième cercle au milieu de la grande roue. Comme elle est plus grande,
vous avez besoin de définir le rayon à 47. Vous devriez maintenant avoir quelque chose comme
l'image à droite.
Nota : Si la courroie se croise, il faut retourner le cercle guide, soit avec l'outil de manipulation en mode rotation, soit avec le menu contextuel "Selection / Properties" et en changeant le sens dans le champ "Direction". |
|
Nous avons fini d'ajouter des cercles, alors il faut faire réapparaître la première roue masquée en appuyant sur Ctrl+H pour annuler la dernière action de masquage. C'est tout et votre courroie est prête pour l'inspection à son état neutre en passant en mode édition normale pour cacher les outils de contrôle du chemin, comme dans l'image à gauche. |
Comme vous pouvez le voir ajouter un élastique à un modèle n'est pas si difficile. Il en va de même pour toutes les autres pièces dynamiques qui suivent un "chemin". Elles sont appelés "pièces à chemin" car elles sont toutes composées d'un élément qui suit un chemin passant autour ou à travers un certain nombre de points de contrôle. L'exemple de la courroie, sur laquelle nous avons travaillé utilise uniquement les points de contrôle circulaires, mais travailler par exemple avec un tuyau pneumatique est très similaire. La seule différence est que les leviers de contrôle dans cette pièce sont utilisés pour modeler la courbe du tube entre deux points. Pour mieux comprendre cela créez un modèle pneumatique très simple, quelque chose comme le modèle à gauche. | |
Quand c'est fait, affectez par exemple la couleur caoutchouc noir comme couleur courante et ajoutez un nouveau tuyau pneumatique en sélectionnant son gabarit dans le groupe des modèles "Pneumatic" (un niveau vers le haut du groupe "Rubber band"). Tandis que l'accrochage pièce est activé, les extrémités du tuyau du gabarit seront alignées sur les tiges des connecteurs pneumatiques (Vous devrez peut-être faire pivoter tout d'abord le tuyau à l'aide des touches fléchées). Utilisez l'accrochage pièce pour connecter l'extrémité du tuyau le plus proche de votre curseur de la souris sur le connecteur supérieur. Quand c'est fait relâchez le bouton de la souris, ce qui va déclencher à nouveau l'apparition de la boite de dialogue de sous-modèle. Choisissez à nouveau l'option MPD et renseignez la boîte de dialogue suivante de l'en-tête des nouveaux sous-fichiers comme d'habitude. Une fois le tuyau placé, se mettre en mode imbriqué. Cela rendra les leviers de contrôle visibles et vous serez en mesure d'acheminer le tuyau vers le deuxième connecteur pneumatique sur son arrière. Pour faire cela, il suffit tout d'abord de prendre l'extrémité libre du tuyau et de la glisser vers le connecteur à gauche, quand il s'enclenche dans le connecteur relâchez la souris et cela provoquera la régénération du tuyau en forme de "S". C'était assez facile, mais le tuyau semble utiliser des angles très aigus, quelque chose qui n'arrivera pas dans la vie réelle. Pour améliorer cela prenez simplement les leviers de contrôle qui sortent de leurs extrémités puis les allonger afin de donner plus d'ampleur aux plis du tuyau. Vous devriez vous retrouver avec quelque chose comme l'image à gauche. Le chemin entre deux points de contrôle suit une courbe de Bézier, et les sphères rouges et vertes des points de contrôle servent à influencer le lissage du coude afin d'améliorer la forme. Vous devez simplement les déplacer jusqu'à ce que les choses soient à votre goût. Vous devriez retrouver quelque chose ressemblant à l'image de gauche. |
|
Passons maintenant à quelque chose de plus compliqué, pour acheminer le tuyau dans le trou
de la brique Technic 1x2. Cela peut être fait en ajoutant un ou deux points de contrôle supplémentaires.
Vous pourriez ajouter un seul point dans le centre du trou ou en mettre un de chaque côté du trou.
La dernière solution permettra des cassures plus nettes sans avoir à vous soucier du tuyau passant
dans la partie solide de la brique. Donc ajoutons-en deux car ce n'est vraiment pas beaucoup plus de travail.
Tout en restant en mode imbriqué, sélectionnez l'extrémité supérieure du tuyau. Assurez-vous que la grille d'édition est réglée en vue de dessus afin que nous puissions déplacer le point à côté de celui sélectionné. Maintenant, appuyez sur la touche "Inser". Cela va ajouter un nouveau point de contrôle pour le tuyau, le mettre quelque part à gauche et devant celui sélectionné. Le tuyau peut sembler un peu "froissé", mais ne vous en inquiétez pas. Il semble froissé car le point a le même sens que celui que vous avez utilisé pour l'ajouter (il guide le tuyau vers vous), alors que le prochain point est de l'autre côté. Pour éviter cela nous devons changer la direction du nouveau point de contrôle pour que le tuyau s'éloigne de vous. Cela s'effectue simplement en le tournant de 180 degrés. Après cela, vous devriez avoir quelque chose qui ressemble à l'image de gauche. Vous avez peut-être remarqué que la direction d'un point de contrôle est indiquée par les deux sphères et que le tuyau est toujours tangent à cette direction en passant du rouge au vert. |
|
C'est bien d'avoir un point de contrôle flottant en l'air, ce qui est excellent pour
la mise en forme d'un tuyau en général, mais dans notre cas il faut le faire passer dans le trou.
Pour cela nous avons besoin de placer le point de contrôle exactement en face de l'orifice
en utilisant une grille d'édition. Une telle situation se prête
également pour le mode de projection orthogonal (2D). J'en ai un peu parlé dans le chapitre
édition de base. La caméra 2D permet une précision de positionnement beaucoup plus simple.
Tout d'abord, fixez la grille pour avoir l'axe de l'épingle parallèle au levier rouge du nouveau point de contrôle. Puis on passe en caméra 2D en appuyant sur Maj+V (le "Maj" de cette commande s'assure que le point de vue 2D est au plus près du point de vue 3D courant). Les choses ressembleront à l'image ci-contre. L'épingle aura disparu, mais à sa place un "rectangle d'édition" est maintenant disponible. Ce rectangle peut être utilisé pour déplacer et faire pivoter la sélection de façon similaire à l'épingle. La plus grande différence est qu'il sera toujours affiché au-dessus de tout le reste, même si la sélection est masquée par d'autres pièces. |
|
Ensuite, il faut passer en grille fine en cliquant sur le texte "10 8" en haut à gauche de la boussole et en sélectionnant "Fine (1;1;1;1)" dans son menu. Ceci est nécessaire car le centre du trou de la brique Technic est hors grille avec la grille par défaut. Ayant fait cela vous pouvez saisir le rectangle d'édition et déplacer le point de contrôle du tuyau, pour qu'il se trouve exactement à l'intérieur du trou de la brique 1x2 comme sur l'image ci-contre. Pour faire cela vous pouvez utiliser la croix centrale du point de contrôle pour vous guider en utilisant un très gros zoom sur la brique. Cela permet de se caler sur la forme polygonale du trou de la brique. | |
Les déplacements ci-dessus mettent le point à son emplacement pour 2 des 3 coordonnées mais est encore en dehors pour sa "profondeur". Changeons de vue en mode 2D pour corriger la troisième coordonnée. Pour cela nous avons besoin d'avoir le modèle en vue de dessus (Top). Cela se fait avec la boussole en tournant le gros cube jusqu'à ce que le mot "Top" devienne jaune. Il suffit de saisir le cube avec le bouton gauche de la souris et de faire glisser la souris comme vous contrôlez la caméra en mode "trackball" en vue d'édition 3D. Vous devriez vous retrouver avec une vue comme sur l'image de gauche. | |
Avec ce point de vue du modèle, nous pouvons facilement déplacer le point de contrôle vers la plaque jaune pour l'aligner avec le trou en dessous. Comme nous avons seulement besoin de déplacer le point dans un seul sens, au lieu de saisir l'intérieur du rectangle comme précédemment, essayez d'attraper son bord supérieure, cela limitera le mouvement dans une seule direction comme le font les flèches de l'outil de manipulation en vue 3D. Lorsque cela est fait vous pouvez retourner en mode 3D en appuyant sur "V". Les choses doivent maintenant ressembler à l'image ci-contre. | |
Nous avons terminé avec le placement de précision, restaurez la grille par défaut en sélectionnant "Normal (10;8;10;10)" dans le menu "Grid" (ou appuyez simplement sur "3" alors que la souris se trouve à l'intérieur de la zone d'édition ou la boussole). Ajouter un deuxième point de contrôle à l'arrière de la brique 1x2 sera beaucoup plus facile maintenant, la première étant placée correctement. Il suffit de changer de point de vue sur le modèle pour que le dessous soit bien visible. Puis mettre la grille en mode haut/bas et appuyez sur "Inser", tandis que le dernier point ajouté est toujours sélectionné. Cela le dupliquera et vous pourrez placer le nouveau point de l'autre côté du trou. Cela doit ressembler à la photo à gauche. | |
Vous avez maintenant fini le cheminement du tuyau. Une seule chose reste à faire, c'est de lisser ses courbes en ajustant la longueur des leviers vert ou rouge jusqu'à ce que la forme générale et la longueur du tuyau soient bonnes. Ensuite, en mode édition normal, il devrait ressembler à l'image ci-contre. |
En utilisant les techniques de manipulation, vus dans ces deux derniers chapitres, vous serez en mesure d'acheminer tout type de tuyau dans vos modèles. Ceci parce que ces techniques ne s'appliquent pas seulement aux tuyaux pneumatiques, elles fonctionneront avec n'importe lequel des gabarits ayant une fonction chemin. Vous pouvez même combiner les points de contrôle circulaires de l'élastique et les points de passage de ce chapitre si nécessaire. Cela peut être fait en changeant le type de point à l'aide de la boîte de dialogue des propriétés du point. Vous l'ouvrez en appuyant sur "Entrée", tandis qu'un point est sélectionné, ou en cliquant sur le petit panneau coordonnées.
Une dernière chose que je voudrais ajouter en conclusion, est de toujours garder un œil sur les petits référentiels au centre des points de contrôle car ils ont une certaine importance. Il suffit de juste regarder de plus près l'un d'entre eux, et vous remarquerez qu'ils sont en fait composés de deux flèches. Les flèches indiquent le "roulis" ou torsion transversale que vous devez garder similaire au précédent point du chemin. Si la différence de torsion entre deux points est trop grande, cela peut provoquer des sauts bizarres ou torsions disgracieuses dans l'apparence du tuyau.
C'est tout pour la fonction chemin des pièces dynamiques, ne vous inquiétez pas si certaines choses sont encore floues, vous en saurez de plus en plus juste en utilisant cet exemple. Vous pouvez aussi pratiquer un peu plus avec d'autres modèles simples, en essayant d'acheminer des tuyaux de différentes façons autour ou à travers eux.
Les pièces dynamiques discutées précédemment sont toutes basées sur un chemin, mais LDCad offre aussi celles basées sur la fonction ressort. Par rapport aux pièces à chemin ces pièces ressort sont beaucoup plus faciles à former. Pour démontrer cela, utilisons une pièce ressort dans un exemple réel. Comme les ressorts servent souvent combinés aux amortisseurs Technic, configurons un système minimaliste de suspension semblable à celle utilisée dans le modèle exemple 8845.mpd.
Tout d'abord, permettez-moi de dire, qu'il n'est pas toujours nécessaire d'utiliser dans vos modèles des amortisseurs dynamiques, de nombreux modèles seront très bien en utilisant les pièces statiques officielles tant qu'elles peuvent être utilisées avec leur longueur prédéfinie. Mais quand vous avez besoin d'un amortisseur en position légèrement compressée (résultant par exemple de poids du modèle) il est bon de savoir que les pièces dynamiques sont là pour être utilisées à travers une sélection de gabarits. Naviguez vers le groupe des gabarits amortisseurs dans le panneau pièces en cliquant à partir de la racine sur les sous-groupes "Templates" et "Shocks" dans l'onglet de votre choix.
Ensuite, construisons une structure simple pour montrer comment ajouter un amortisseur un peu compressé à ce modèle. Quelque chose comme l'image à gauche doit être suffisamment claire. Elle utilise deux barres (Technic Beam) à 7 trous et celle du bas a une rotation de 15 degrés en commençant par sélectionner la goupille extrême et avec un Ctrl+Clic de la souris sur la barre et la goupille centrale, ce qui assure d'avoir la première goupille comme point de rotation pour toutes les pièces de la sélection. | |
Maintenant, nous ajoutons un amortisseur 6.5 L gris à l'aide de son gabarit. Vous pouvez sélectionner d'abord la goupille ou la barre du haut pour s'assurer que l'orientation de la nouvelle pièce sera neutre. De façon alternative, vous pouvez également appuyer sur la touche "Début" (home) tout en faisant glisser l'amortisseur dans le modèle. Placez le nouvel amortisseur de façon à avoir son côté gris connecté à la goupille supérieure comme sur la photo ci-contre. | |
Le problème suivant à résoudre est de pointer l'amortisseur vers la deuxième goupille tout en ignorant sa longueur pour l'instant. Pour ce faire, vous devrez trouver le bon angle pour faire pivoter l'amortisseur. Alors qu'à l'école vous aviez peut-être pensé quand aurais-je le besoin de ce truc de trigonométrie, bien deviner quoi... ça y est c'est maintenant :). Heureusement, LDCad propose des outils pour vous aider à faire les calculs nécessaires. Pour ce faire vous avez besoin d'une assistance en ajoutant une goupille temporaire à l'autre extrémité de l'amortisseur. Dans la pratique, il est préférable d'utiliser des pièces bizarrement colorées dans de tels cas, par exemple en rose, donc elles seront facilement reconnaissables comme étant temporaires. | |
Ensuite, nous utilisons la fonction "Selection info" (info sur la sélection) pour obtenir tous les angles d'un triangle fait à partir de ces trois axes. Pour faire ceci sélectionnez les trois goupilles en commençant par la rose dans le sens horaire ou antihoraire en utilisant le Ctrl+Clic à la souris. Si l'épingle d'édition vous gêne lors de la sélection, vous pouvez la désactiver en appuyant sur "P". Après cela, cliquez sur le bouton droit de la souris pour ouvrir le menu "Selection" puis "Selection info", puis vérifiez ou changez pour avoir "Show info" sur "(Yes)", "Show distance" sur "(No)" et "Show angles" sur "(Yes)". Tout cela se traduira par quelque chose comme l'image ci-contre. Comme vous pouvez le constater facilement vous obtenez l'angle nécessaire (12,99 degrés) pour aligner l'amortisseur avec l'axe de la goupille cible. Vous pouvez utiliser cet angle comme affiché, mais étant un perfectionniste, moi je préfère utiliser la valeur avec davantage de chiffres pour éviter un décalage minuscule par la suite. Pour obtenir la valeur exacte, cliquez sur l'étiquette affichant la valeur de 12.99 pour mettre la valeur calculée réelle dans le presse-papier et pouvoir la coller ultérieurement (au préalable, vous pouvez épingler le menu précédent pour l'empêcher de se fermer). Maintenant, que nous avons l'angle, recliquez sur "Show info" pour le passer à "(No)" et l'affichage revient à la normale. Fermez le menu, supprimez la goupille rose et éventuellement réactivez l'épingle d'édition en appuyant à nouveau sur "P". |
|
C'est génial, nous avons maintenant l'angle de rotation, mais il est impossible
d'utiliser directement le disque de rotation de l'épingle. Vous devez entrer l'angle manuellement pour
faire une rotation de précision. Cela peut être fait à l'aide de la boîte de dialogue "Manual rotation"
(rotation manuelle) qui peut être ouvert en cliquant sur l'icône
alors que l'amortisseur
est sélectionné. Alternativement, vous pouvez également utiliser le bouton central de la souris
pour cliquer sur le disque de rotation de l'épingle. De toute façon cela ouvrira la boîte de dialogue
ci-contre.
Cette boîte de dialogue vous permet de faire pivoter la sélection à l'aide de plusieurs méthodes (angle de rotation normale, vecteur de rotation, matrice de rotation, etc.). La méthode de rotation peut être sélectionnée avec le menu déroulant en haut de la boite de dialogue. Mais, pour cette rotation, la méthode par défaut sera très bien. Entrez -12.99420 (ou utilisez le collé du presse-papier en ajoutant le signe moins) dans le champ "Angle" et appuyez sur "Entrée" ou cliquez sur "Accept". Ceci alignera parfaitement l'amortisseur. Vous devez utiliser -12.99420 et non 12.99420 à cause de la grille qui est antihoraire lorsque l'axe perpendiculaire à la grille pointe vers vous comme l'axe rouge (X+) le fait dans notre cas sur la boussole. C'est peut-être un peu confus, donc en pratique essayez l'angle tel quel et si cela s'avère faux, annulez avec Ctrl+Z et essayez à nouveau avec la même valeur en négatif. |
|
Maintenant que l'amortisseur est aligné avec l'axe de la goupille cible,
il n'est pas encore connecté avec elle car il est encore trop long. Donc la prochaine étape
que nous devons faire c'est de le mettre à la bonne longueur. Pour ce faire nous devons tout
d'abord revenir mode imbriqué pour pouvoir manipuler les extrémités du ressort individuellement.
Une fois le modèle en mode imbriqué et l'accrochage pièce actif, vous pouvez vous
"saisir" de l'extrémité noire de la "clipser" sur la goupille du bas. Mais cela pas toujours
possible selon les pièces utilisées, donc voyons aussi la manière sans accrochage.
Si vous avez déjà utilisé la méthode accrochage, il suffit de l'annuler en appuyant sur Ctrl+Z.
Mettre l'amortisseur dans la bonne position en utilisant juste la grille par défaut semble très compliqué, car il est actuellement hors pas de la grille, et il est impossible de le déplacer en ligne droite suivant son axe. A la suite d'un tel déplacement l'amortisseur va sembler cassé de manière irréaliste. Essayez juste de la faire (avec les flèches de l'épingle d'édition afin d'éviter l'accrochage pièce) pour voir ce que je veux dire. Ne vous inquiétez pas, vous pouvez annuler (Ctrl+Z) à nouveau par la suite. Cela devrait être un problème familier si vous vous souvenez de la section du chapitre édition de base sur l'utilisation de la grille relative. Heureusement la grille relative peut également être utilisée combinée avec le mode imbriqué. Sélectionnez donc l'extrémité grise de l'amortisseur et appuyez sur "O" pour changer l'orientation de la grille. Cela entraînera l'épingle d'édition à basculer sur le côté car l'orientation des amortisseurs est très différente. Il suffit de compenser cela en changeant le sens de la grille dans la boussole de façon à ce que l'axe pointe à nouveau vers vous. Nous devons déplacer l'extrémité noire de l'amortisseur, donc sélectionnez-la et changez l'épingle pour passer en mode déplacement (flèches). Également, à la suite du passage en grille relative, le trou du haut de l'amortisseur et la goupille seront désormais le point d'origine (0,0,0) de la grille, ce qui signifie que la valeur Y sur le panneau coordonnées X,Y,Z est identique à la longueur de l'amortisseur. Par conséquent, tout ce que nous avons besoin maintenant est la longueur exacte de l'amortisseur compressé. Ceci peut être obtenu en utilisant "Selection info" encore une fois. Pour cela, sélectionnez les deux goupilles beiges auxquelles l'amortisseur se connecte, puis rouvrir le menu "Selection info". Mais, cette fois mettre "Show distance" sur "(Yes)" pour afficher la distance et "Show angles" sur "No" pour réduire l'encombrement (même si ici cela ne sert à rien). Ceci vous donne une longueur utile de 98.04. Cliquez sur l'étiquette pour enregistrer la valeur exacte et arrêtez à nouveau l'affichage des infos sur la sélection avec "Show info" sur "(No)". |
|
Au lieu d'utiliser les infos de la sélection, vous pourriez également juste sélectionner la goupille inférieure dans ce cas particulier pour obtenir sa coordonnée "Y" (comme illustré dans l'image à gauche) correspondant à la bonne distance, car elle est déjà à la bonne place, et en raison de l'origine de la grille relative active et la configuration de l'amortisseur lui-même. La seule différence serait la précision, mais cela compterai moins sur des manipulations de déplacement. | |
Maintenant que vous savez la longueur requise de 98.04 environ, sélectionnez la partie noire de
l'amortisseur et ouvrez la boite de dialogue de déplacement manuel à l'aide de l'icône
ou avec le bouton central de la souris
en cliquant sur les flèches de l'épingle d'édition. Ceci ouvrira la boite de dialogue ci-contre.
Utilisez cette boîte de dialogue pour changer la coordonnée Y de l'extrémité de l'amortisseur manuellement à 98.04, ou plus exactement à 98.03790 avec Ctrl+V puis appuyez sur la touche "Entrée" ou cliquez sur le bouton "Accept" de la boite. |
|
Cela régénérera le ressort et ainsi tout s'aligne correctement. Cela marque également la fin de l'ajout d'un amortisseur au modèle, la seule chose restant à faire est de nettoyer l'espace de travail. Pour cela, désélectionnez tout à l'aide de la touche "Echap" et appuyez sur "O" pour remettre la grille dans l'espace absolu. Vous pouvez également revenir en mode édition normale afin de voir la version "propre" de l'amortisseur. Les choses doivent ressembler à l'image ci-contre. |
Ce tutoriel est la traduction du message de Trevor Sandy sur le forum LDraw.org : Generate custom LDCad set part bin.
Ce tutoriel montre comment générer un panneau pièce personnalisé pour LDCad en utilisant mon (dixit l'auteur) utilitaire BrickUtils.
Vous pouvez télécharger BrickUtils2.5.exe ou l'archive BrickUtils2.5.jar BrickUtils.
Un ensemble est défini comme l'ensemble des pièces nécessaires pour numériser un modèle.
Un panneau pièce d'ensemble contiendra les pièces de l'ensemble Lego et éventuellement la quantité de chaque pièce.
Cette exemple utilise l'ensemble Technic Lego 42046 - La voiture du fuyard.
Vous pouvez également télécharger l'archive de l'exemple 42046-01.zip.
Télécharger le fichier xml de l'ensemble sur Bricklink Set.
Aller sur la recherche d'images de Google.
Importer 42046-01.xml dans BrickUtils.
Liste des numéros de pièce LDraw manquants.
Générer le fichier du panneau pièce de l'ensemble (.pbg).
Nota : La syntaxe .pbg pour ajouter des pièces "template" s'écrit :
- wheel_15038+44771.ldr:[sourceInv=templates] [color=0]
- path\technicFlexAxle.ldr:[sourceInv=templates] [color=0]
- shortcut\hinge_2429+2430.ldr:[sourceInv=templates] [color=72]
Créer votre modèle LDraw sous LDCad en suivant l'ordre de montage du manuel (papier ou numérique).
Ce tutoriel est la traduction du message d'Orion Pobursky sur le forum LDraw.org : LDCad Set Inventory PBG file generator.
Je (dixit l'auteur) me suis ennuyé et codé un générateur pour faire un fichier .pbg à partir d'un inventaire BrickLink.
C'est très basique. Il convertit les couleurs BL en couleurs LDraw, mais ne fait pas la validation des numéros de pièces. Je peux l'améliorer et dans ce cas je le mettrais sur le site LDraw.org.
Vous pouvez trouver le convertisseur en ligne ici :
http://www.pobursky.com/pbggen/pbggen.html
Vous pouvez télécharger les inventaires des ensembles sur BrickLink ici :
https://www.bricklink.com/catalogDownload.asp
Nota : Mon générateur fonctionne uniquement avec les fichiers comportant des tabulations comme séparateurs ("Tab-Delimited File" dans le champ "Download Format" de la page BrickLink), et non avec les fichiers XML.
Nota 2 : Voir le tutoriel précédent (dixit l'auteur de cette page) pour installer et utiliser le fichier .pbg généré, après l'avoir édité pour valider son contenu.
Voici un petit tutoriel de Philo (Philippe Hurbain), suite à une demande de Jaco van der Molen, pour orienter des poutres Technic et ainsi fermer un triangle. Voir origine du message : Calculate Angles (in LDCad) (en Anglais).
Voici un autre tutoriel de N. W. Perry, qui offre une solution alternative du même problème en utilisant le calcul. Voir origine du message : Calculate Angles (in LDCad) (en Anglais).
N. W. Perry : Il existe un autre moyen pour résoudre le problème en recherchant l'intersection de deux cercles. Cela peut être pratique si vous devez le faire dans un programme qui n'a pas la fonction de calcul de triangle de LDCad (ou si, comme je l'ai fait, vous avez oublié cette fonction et avez passé une heure à la découvrir vous-même, en vous croyant malin).
.
Pour illustrer cela, j'ai construit le même modèle dans LDCad. J'ai ajouté quelques chemins circulaires pour montrer les cercles (ici en rose), mais vous n'en avez réellement pas besoin. Il ne vous reste plus qu'à calculer l'intersection utile (il y en a en réalité deux) des deux cercles (celle cerclée de jaune). | |
Il s'avère que c'est un calcul assez simple (pour un ordinateur) si vous connaissez la position X, Y du centre de chaque cercle (pour cela sélectionner les goupilles) et son rayon (nous pouvons le savoir en utilisant les informations de sélection de LDCad, ou dans ce cas, il suffit de compter les trous de goupille et de multiplier par 20). Vous pouvez rechercher la formule mathématique si vous le souhaitez, mais il est beaucoup plus rapide d'utiliser une calculatrice en ligne. J'ai trouvé celle-ci qui fonctionne parfaitement : planetcalc : Intersection of two circles. Entrons donc les valeurs que nous connaissons : Nous avons besoin des coordonnées X et Y des goupilles sélectionnées (nous pouvons ignorer le Z), ainsi que les rayons (distance aux goupilles extrêmes : 140 et 80). | |
Et après avoir cliqué sur le bouton "Calculate", le résultat s'affiche,
complété par un petit graphique des deux cercles. Notez que le graphique est une image miroir des cercles de notre projet, en raison de l'orientation opposée de l'axe Y de LDraw. Mais les nombres eux-mêmes sont corrects. | |
Parmi les deux intersections trouvées, choisissez celle que vous souhaitez utiliser. Dans notre cas c'est la deuxième. Insérez une nouvelle pièce d'aide et placez-la aux coordonnées X, Y, puis utilisez les informations de sélection (d'accord, je suppose que vous avez toujours besoin de LDCad pour cela...) afin de trouver l'angle de rotation de la première poutre dont vous avez besoin. | |
Répétez l'opération pour l'autre poutre, appliquez les rotations aux deux pièces
et vous avez terminé ! Enfin presque, car il faut tout de même supprimer les pièces d'aide (goupilles) en trop. |
Nota : Pour un travail en local, il est possible de remplacer planetcalc par :
Voici un petit tutoriel de Roland Melkert amélioré par Jaco van der Molen, pour créer un terrain 3D. Voir origine du message sur le forum LDraw.org : Heightmap to brick converter? (en Anglais).
Tableau 3x3 mis dans le script | |
Résultat |
Utiliser en premier le tableau Excel "genHeightMap.xlsx" pour
entrer les hauteurs de chaque parcelle du terrain. L'exemple donne un terrain de 9x9 tenons.
Copier le tableau "ARRAY" dans le script "generate.lua", une première fois pour la hauteur et une seconde fois pour la couleur de chaque parcelle.
Placer le script "generate.lua" dans le dossier "scripts / tchang / global".
Nota : suivant votre version de programme le dossier "scripts" se trouve
dans le dossier d'installation de LDCad ou dans votre dossier personnel. Voir : .
Naturellement le sous-dossier "tchang" peut être remplacé par tout nom à votre convenance.
Lancer le script dans un modèle vide avec le menu "scripts / generate / Gen Heightmap".
Le résultat s'affiche :
Mettre "landscape.lua" dans le dossier "scripts/tchang/global" et "heightmap.lua" dans "scripts/default/modules".
Nota : Le fichier "heightmap.lua" a été développé par (C) Marc Lepage en 2011 et modifié par Roland Melkert en 2018 pour l'adapter au langage lua v5.3. Pour la méthode utilisée, voir : Algorithme Diamant-Carré.
Modifier "config/main.cfg" en mettant la valeur 2000 au paramètre "maxExecTime" (C'est la valeur maximale acceptée en version 1.6. Cette limite sera supprimée dans la prochaine version).
Ouvrir un fichier vierge dans LDCad, puis lancer le script avec le menu : "Scripts / landscape / Deph map".
Résultat avec un ordinateur rapide. Sur mon ordinateur le script s'arrête un peu avant la fin.
On peut modifier les paramètres de "hMap.create" dans "landscape.lua" pour changer la taille du terrain carré. La valeur du côté doit être une puissance de 2.
Voici un petit tutoriel sur une demande de Jaco van der Molen pour générer un pavage pseudo-aléatoire
d'une plate 8x8, et la proposition de script de Roland Melkert amélioré par Philippe Hurbain [philo].
Voir origine du message sur le forum LDraw.org :
Script to generate random parts in LDCad (en Anglais).
N'ayant pas de nom officiel j'ai nommé, de façon personnelle, ce script : landscape2.lua.
Exemple d'exécution du script de philo. A droite la sélection des pièces définissant le modèle et la couleur
des pavés 1x1 (ici déplacé), à gauche le résultat du pavage aléatoire généré par le script.
Voici une succession de tutoriels et scripts, avec leur évolution, écrits par David Manley et traduits et mis en page librement par Tchang, permettant des alignements de pièces et des animations.
Voici un premier tutoriel de David Manley, qui permet des alignements de quatre barres formant un quadrilatère déformable.
Voir l'origine du message : RE: Seeking a ldcad animation script method (en Anglais).
Vous pouvez télécharger le fichier zip contenant la dernière version du script et des exemples LDraw sur le site bricksafe.com : linkage.zip.
A1- Première version, barres non croisées J'ai écrit un script (dixit l'auteur) pour animer une liaison à quatre barres. Voir ci-contre la vidéo (faite rapidement et sans prétentions) illustrant comment utiliser le script. Il s'agit d'une version préliminaire du script publié le 28-09-2021. Il devrait fonctionner avec des barres non croisées (Voir : 2016_Bookmatter_FundamentalsOfMachineTheoryAnd.pdf) mais ne gère pas encore les barres croisées. Je vais prochainement jeter un œil sur la gestion des barres croisées. | |
David Manley : Hmmm, quelque chose ne va pas... avec cette première version. ;-)
Roland Melkert : Cela à l'air amusant, ... bien qu'avec un grand sourire. | |
Corrigé avec un peu de codage en mode sparadrap (29-09-2021). Je veux rendre le correctif un peu moins compliqué et incorporer également la possibilité d'animer des liaisons croisées à quatre barres. Une fois que j'aurai fait cela, je publierai une mise à jour. | |
A2- Seconde version, avec liaisons non croisées et croisées J'ai mis à jour le fichier zip (03-10-2021). Le script Lua qu'il contient devrait maintenant traiter à la fois les configurations de liaisons non croisées et croisées. Le fichier zip contient également des exemples de fichiers LDR utilisés pour tester le script. Si vous rencontrez des problèmes lors de l'exécution du script, veuillez publier les détails dans ce fil de discussion (forum LDraw.org). Ci-contre un exemple de liaison "croisée". | |
Seconde version, marche à suivre Vous devez identifier explicitement si le modèle animé est une configuration non croisée ou croisée. Cela se fait via la macro "scripts / linkages / Rotation Parameters". La macro vous demandera une série de paramètres différents (Voir l'image ci-contre). La boîte de dialogue entourée en rouge est celle dans laquelle la configuration du modèle de liaison est identifiée (par défaut, les scripts supposent un modèle non croisé). Je suis sûr qu'il devrait y avoir un moyen pour le script de calculer si un modèle est non croisé ou croisé. Quelque chose basé sur atan2. J'ai essayé de le résoudre, mais à la fin, je n'ai pas pu, alors j'en ai fait une valeur que l'utilisateur doit identifier. | |
A3- Troisième version, configuration "croisée" ou "non croisée" automatique J'ai mis à jour (08-10-2021) le fichier zip avec un nouveau script Lua. Les principales différences visibles sont :
|
Cela a été un exercice utile pour moi. J'ai appris beaucoup plus sur les scripts Lua de LDCad et j'ai pu
exercer mon cerveau en trigonométrie, utilisé pour la dernière fois il y a de nombreuses années !
Mes remerciements à Roland pour ses messages utiles et ses conseils qui m'ont aidé à améliorer le script.
Salutations,
David
PS : Je n'avais réalisé que plus tôt dans la journée que vous pouviez rendre l'animation plus lente/rapide en cliquant plusieurs fois sur le bouton d'animation lente/rapide. Vous vivez et apprenez !
Voici un second tutoriel de David Manley, paru le 10-10-2021, qui permet une rotation de pièces vers une connexion connue. Il s'agit d'une exploration des possibilités de Lua.
Voir l'origine du message : RE: Lua - prompt and wait for selection? (en Anglais).
Vous pouvez télécharger le fichier zip contenant le script Lua et l'exemple LDraw sur le site bricksafe.com : rotate_part_sample.zip.
Rotation de pièce J'explore (dixit l'auteur) si je peux intégrer l'exécution d'une animation dans le cadre de l'exécution d'une macro et de la capture d'une réponse de l'utilisateur à l'animation. Le fichier zip contient un modèle LDraw et son script Lua. Noter que cet exemple est délibérément simple. L'objectif à plus long terme est pour des cas plus complexes mais il est plus facile d'utiliser un cas simple pour poser les questions suivantes. Voir ci-contre le modèle dans le fichier zip.
| |
Rotation de pièce, suite 1 David Manley : L'intention est que la macro prenne quatre pièces sélectionnées et (pour cet exemple), tourne la goupille de couleur beige, le bras de levage vert et la goupille verte autour de la goupille beige de sorte que la goupille verte soit positionnée sur la goupille d'axe bleue. Mais je veux pouvoir donner à l'utilisateur un aperçu de la rotation et la possibilité d'accepter ou de refuser la rotation. La prévision que j'avais était que je pouvais créer des animations pour montrer la conséquence d'une rotation potentielle, puis inviter l'utilisateur à accepter ou à rejeter la rotation. Voici donc mes défis :
| |
Rotation de pièce, suite 2 David Manley : Après y avoir réfléchi pendant la nuit, je me rends compte que la résolution de ce que j'essaie de faire est de ne pas utiliser d'animation. Si je prends la logique de base du script d'image d'animation dans une fonction distincte et que j'invoque la fonction à partir de la macro, je n'ai plus besoin d'utiliser l'animation pour réaliser ce que j'essaie de faire. La fonction avec la logique de base peut être invoquée par le script d'animation de toute façon, donc je ne vais pas me retrouver avec une duplication de code indésirable.
| |
Rotation de pièce, suite 3 Roland Melkert : Avant le démarrage d'une animation, toutes les matrices actuelles du modèle sont placées sur une pile. Ces matrices sont restaurées une fois l'animation arrêtée. Mais il existe un moyen d'appliquer les matrices actuelles pendant qu'une animation est en pause. Cela se fait à l'aide de l'option "Apply animation posOri" du menu d'animation (clic droit en mode animation).
|
Voici un autre tutoriel de David Manley, qui permet des alignements de pièces (16-12-2021). Voir origine du message : LDCad Aligning parts using rotation scripts (en Anglais).
Il y a quelques mois, j'ai écrit un script Lua pour LDCad pour animer la rotation d'une liaison de 4 (ou 3) barres, en postant le script sur le forum LDraw (en Anglais).
L'écriture de ce script m'a fait penser à écrire un autre script qui déterminerait le point de jonction de deux pièces, chacune étant tournée autour de son propre point de rotation désigné. J'ai maintenant écrit une première version de ce script. Cet article décrit comment utiliser le script et fournit des détails sur son téléchargement et son installation.
Le but du script est de fournir un mécanisme pointer-cliquer pour faire pivoter les pièces dans LDCad.
Conceptuellement, les pièces servent à des fins différentes :
- Certaines sont identifiées comme une origine de rotation,
- Certaines sont identifiées comme étant alignées sur une autre pièce; et
- Certaines pièces sont celles qui sont en rotation.
Bien que cet article ait tendance à utiliser le terme pièce, le script peut également être utilisé avec des sous-fichiers.
Le script fournit des solutions pour deux scénarios différents :
- Rotation d'une seule pièce vers un point d'alignement désigné.
- Rotation de deux pièces vers un point de jonction commun aux deux pièces.
Les images d'un modèle incomplet de l'ensemble 9748-1 (un travail en cours) illustrent les capacités du script.
Figure 1 – Référence de rotation d'une seule pièce. |
Rotation d'une seule pièce ou sous-fichier Noter que la fonctionnalité décrite dans cette section peut être obtenue en utilisant des capacités équivalentes qui existent déjà dans LDCad, bien qu'avec une approche légèrement différente. Cette fonctionnalité a été ajoutée pour fournir une approche pointer-cliquer légèrement plus simple. Description
|
Figure 2 – Sélection initiale des pièces. |
Approche LDCad existante Jusqu'à récemment, l'approche que j'utilisais dans LDCad (dixit l'auteur) consistait à ajouter temporairement trois pièces supplémentaires (Technic Pin), aux positions correspondant à 1, 2 et 3, puis à sélectionner ces trois pièces en séquence. Via un clic droit de la souris sur la première pièce, je choisis ensuite l'option de menu "Selection info / Show info" comme illustré à la Figure 2 ci-contre (Nota : toutes les autres pièces/sous-fichiers sont masqués par souci de clarté...). |
Figure 3 – Affichage des angles. |
Approche LDCad existante, suite 1 ... pour basculer l'élément de menu "Show info (No)" à "Show info (Yes)" (Montrer les infos de "Non" à "Oui"). Voir Figure 3 ci-contre. Une fois les angles affichés, l'angle significatif (mis en évidence ici par la case rouge) peut être copié dans le presse-papiers en cliquant simplement sur cet angle. |
Figure 4 – Rotation manuelle de la pièce. |
Approche LDCad existante, suite 2 L'étape suivante consiste à appliquer l'angle de rotation à la pièce ou sous-fichier approprié. Dans notre cas (illustré à la Figure 4 ci-contre), la première pièce et la quatrième pièce/sous-fichier sont sélectionnées et la boîte de dialogue "Manual rotation" (Rotation manuelle) appelée via sa touche de raccourci (généralement CTRL+R). La sélection de la première pièce ainsi que de la quatrième partie permet de s'assurer que la quatrième partie (sous-fichier) est tournée en fonction de l'origine de la première pièce plutôt que de l'origine de la quatrième partie. |
Figure 5 – Alignement souhaité des pièces. |
Approche LDCad existante, suite 3 Maintenant, le moment oups. J'oublie souvent dans quel sens la valeur positive et négative de l'angle de rotation provoque une rotation dans le sens antihoraire ou dans le sens horaire des pièces dans LDCad. Dans notre cas, la saisie d'une valeur de 19.58 a entraîné la rotation de la pièce dans le mauvais sens, donc une annulation rapide avec CTRL+Z suivie de CTRL+R et de remettre l'angle avec CTRL+V en ajoutant un signe négatif (c'est-à-dire -19.58) donne l'alignement souhaité (Voir Figure 5). |
Figure 6 – Sélection de l'axe de rotation. |
Approche de rotation d'une pièce par script Les scripts de rotation client fournissent une solution équivalente pour la rotation d'une pièce. Les scripts de ce tutoriel sont accessibles via le menu "Scripts / align parts" (Voir ce chapitre pour les instructions d'installation : C6- Installation). La première étape de la fonctionnalité d'alignement consiste à identifier l'axe de rotation. Ceci est réalisé via le menu "Scripts / align parts / Rotation Parameters" (Voir Figure 6). L'axe de rotation sera par défaut l'axe Y, donc si l'axe autour duquel il faut tourner pour aligner les pièces est l'axe X ou Z, les scripts d'alignement doivent être notifiés. Dans la Figure 6, les pièces doivent être tournées autour de l'axe Z, d'où l'exécution du script "Rotation Parameters" (Paramètres de rotation). Une fois sélectionné dans la boite de dialogue "Choice" et validé par "Select", l'axe de rotation restera le même jusqu'à ce que le script soit ré-exécuté et qu'un axe de rotation différent soit sélectionné. |
Figure 7 – Rotation d'une seule pièce : Sélection de pièces. |
Approche de rotation d'une pièce par script, suite 1 Sur la Figure 6, les "Technic Pin" (goupilles) supplémentaires qui sont visibles sur la Figure 3 peuvent être vues facilement. Elles sont colorées en rouge pour mieux les distinguer des pièces et sous-fichiers qui font réellement partie du modèle. Pour utiliser le script de rotation d'une seule pièce, les quatre pièces pertinentes doivent être sélectionnées dans l'ordre illustré à la Figure 1. La Figure 7 illustre les quatre pièces (les trois goupilles supplémentaires et le sous-fichier qui contient la jambe) sélectionnées en vue de l'exécution du script. |
Figure 8 – Menu "align parts". |
Approche de rotation d'une pièce par script, suite 2 Une fois les pièces sélectionnées, ouvrir le menu "Scripts / align parts" (Figure 8), puis sélectionner le sous-menu "Rotate one part" (Rotation d'une pièce) (Figure 9). Si un nombre autre que quatre pièces a été sélectionné, une fenêtre de dialogue s'affiche et vous demande les exigences de sélection de pièces pour exécuter le script. |
Figure 9 – Rotation d'une seule pièce : Boite de dialogue de fin d'exécution. |
Approche de rotation d'une pièce par script, suite 3 Une fois le script exécuté, les pièces seront pivotées et une boîte de dialogue s'affichera pour permettre d'accepter ("Yes") ou de rejeter ("No") la rotation (Figure 9). |
Figure 10 – Modèle après la rotation d'une pièce par script. |
Approche de rotation d'une pièce par script, suite 4 La fermeture de la boîte de dialogue en cliquant sur "Yes" (Oui) entraîne l'application de la rotation au modèle (Figure 10). A ce stade, l'utilisateur doit supprimer manuellement toutes les pièces supplémentaires utilisées uniquement pour obtenir la rotation souhaitée. En soi, le script de Rotation d'une pièce n'est pas très différent de l'utilisation de l'approche décrite précédemment dans le chapitre : Approche LDCad existante. La principale différence est de ne pas avoir à établir et à spécifier l'angle de rotation. Cependant, le code utilisé pour faire tourner une pièce est disponible pour être réutilisé lors d'une tentative d'alignement par rotation de deux pièces du chapitre suivant. |
Figure 11 – Références de rotation de deux pièces. |
Rotation de deux pièces Le script d'alignement par rotation peut également être utilisé pour faire pivoter deux pièces et identifier les points auxquels les pièces peuvent être connectées. Ce scénario était le principal moteur d'écriture de ces scripts. La rotation d'une seule pièce est la conséquence de la mise en œuvre de la rotation de deux pièces.
Description
|
Figure 12 – Rotation de deux pièces : Sélection des pièces de rotation et d'alignement. |
Rotation de deux pièces, suite 1 Les pièces utilisées pour la rotation et l'alignement sont sélectionnées en premier (Figure 12). La sélection de ces pièces en premier est qu'il y a moins de "bruit" provenant des pièces sélectionnées en surbrillance que si les pièces à faire pivoter étaient sélectionnées en premier (ce qui pourrait rendre plus difficile la sélection ultérieure des pièces de rotation et d'alignement). |
Figure 13 – Rotation de deux pièces : Menu "Rotate two parts". |
Rotation de deux pièces, suite 2 Une fois les pièces à faire pivoter sélectionnées, le menu "Scripts / align parts / Rotate two parts" est sélectionné (Figure 13) ... |
Figure 14 – Rotation de deux pièces : Choisir la position d'alignement. |
Rotation de deux pièces, suite 3 ... et les pièces seront immédiatement tournées. Il existe généralement deux points potentiels auxquels les pièces peuvent être jointes. Par conséquent, une pièce sera tournée vers l'une des positions et l'autre pièce sera tournée vers la deuxième position (Figure 14). |
Figure 15 – Rotation de deux pièces : Première position sélectionnée. |
Rotation de deux pièces, suite 4 Figure 15 et Figure 16 illustrent la différence entre la sélection de la première et de la deuxième position pour cet exemple de modèle. |
Figure 16 – Rotation de deux pièces : Seconde position sélectionnée. |
Rotation de deux pièces, suite 5 Figure 15 et Figure 16 illustrent la différence entre la sélection de la première et de la deuxième position pour cet exemple de modèle. Une fois les pièces tournées dans la position souhaitée, toutes les pièces de rotation ou d'alignement qui sont excédentaires par rapport aux exigences peuvent être supprimées. En clair, ce qui n'appartient pas au modèle final :-) |
Première version, décrite dans les chapitres 1 à 7
Les scripts Lua qui fournissent la logique pour réaliser la rotation des pièces sont mis à disposition et utilisables pour tous dans ce fichier : part_alignment_rotation.zip.
En supposant que vous avez extrait les scripts du fichier zip téléchargé, le processus d'installation suggéré est le suivant :
Seconde version, décrite dans le chapitre 8
Les scripts appropriés peuvent se télécharger ici : part_rotation_n2.zip à partir de BrickSafe et installés conformément à la description d'origine, bien que l'installation installe également le script "linkages.lua" dans le sous-dossier nommé "global".
En supposant que vous avez téléchargé et extrait les scripts du fichier zip, le processus d'installation suggéré est le suivant :
Il y a un degré raisonnable de similitude entre le code contenu dans ces scripts et le code de linkages.lua. C'est délibéré. Quelque part sur ma liste de tâches se trouve une action pour réécrire les scripts linkages.lua afin qu'il utilise ce code dans compound_rotation.lua.
Je pense que la logique d'alignement des pièces fonctionne pour tous les cas. Cependant, si vous rencontrez une situation dans laquelle ils ne semblent pas fonctionner comme prévu, veuillez poster sur ce fil et je verrai si je peux identifier le problème.
Ceci est ma deuxième tentative d'écriture de scripts Lua. Il semble probable que certains aspects des scripts puissent être améliorés. Les commentaires constructifs sont les bienvenus.
Roland, vous êtes plus que bienvenu pour inclure/distribuer ces scripts dans le cadre de LDCad, si vous le souhaitez. N'hésitez pas à les plier, les mutiler ou les embrocher en cas de besoin.
Salutations,
David
Ceci est une suite des chapitres précédents (C1 à C7) pour fournir des informations sur les scripts révisés pour l'alignement des pièces et l'animation des liaisons.
Les scripts révisés peuvent être téléchargés et installés comme indiqué au chapitre : Seconde version, décrite dans le chapitre 8.
Figure 24 – Option de rotation autour du plan de vue. |
Aligner les pièces / Rotation autour du plan de vue actuel Les seules modifications liées à l'alignement des pièces sont les modifications apportées à la boîte de dialogue "align parts / Rotation Parameters" (Aligner les pièces / Paramètres de rotation). Deux boîtes de dialogue "Choice" (Choix) existent maintenant. La première (Voir Figure 24) permet d'aligner les pièces selon le plan de vue actuellement actif. Noter que si l'option de plan de vue actuel est sélectionnée, s'assurer que lorsqu'un script d'alignement de pièce est invoqué, le plan de vue approprié est actif. Sinon, vos résultats pourraient ne pas être ceux attendus. |
Figure 26 – "linkages" (Liens) ajouté au menu "Global" de "Scripts". |
Modifications de l'animation de liaison L'animation de liaison a été modifiée de plusieurs façons. Tout d'abord (et, espérons-le, invisible pour quiconque), les animations utilisent désormais le même module de code "compound rotation.lua" que celui utilisé par les scripts d'alignement de pièces. Il y a un certain nombre d'autres changements et ajouts qui sont peut-être plus visibles. Si vous installez le module de liaisons en tant que script personnalisé/global, la structure de votre menu LDCad ressemblera à celle illustrée à la Figure 26. |
Le script d'animation de bras de manivelle est téléchargé en même temps que les autres au chapitre : Seconde version, décrite dans le chapitre 8.
Figure 30 – Séquence de sélection des pièces par défaut du bras de manivelle. |
Animation de bras de manivelle Du code a été ajouté pour l'animation d'un mécanisme de type bielle-manivelle. La séquence de sélection des pièces par défaut est illustrée à la Figure 30. Les axes ont été mis en surbrillance dans la capture d'écran pour illustrer quel axe sera utilisé lorsque l'animation est exécutée en utilisant le plan de vue actuel comme axe de rotation. Le modèle utilisé dans cette animation a été créé par Walt White et est disponible sur : rebrickable.com. |
Animation de bras de manivelle, suite 1 Le résultat de l'exécution de l'animation est affiché ci-contre. |
|
Mises en garde concernant l'animation du bras de manivelle Deux mises en garde s'appliquent à l'animation "Crank Slider" :
|
David Manley : N'importe qui est invité à triturer et modifier ces scripts selon ses propres besoins.
Si quelqu'un veut élaborer la logique nécessaire pour calculer le déplacement horizontal lié à l'animation du bras de manivelle, s'il vous plaît, faites-le !
S'il vous plaît faites-moi savoir si vous rencontrez des problèmes avec les scripts en postant sur ce fil de discussion : [LDCad] Aligning parts using rotation scripts.
Salutations,
David
Voici un script de Michael Carrabine [Mike C] permettant la création de lettres par assemblage de pièces Duplo ou Lego. Le script gère les lettres uniques, l'alphabet, les mots.
Voir l'origine du message et le téléchargement du script : LDCad Duplo or Lego Alphabet Script (en Anglais).
Le script téléchargé (changer simplement .txt en .lua) vous permet d'écrire des mots dans une police Duplo ou Lego.
Modifier simplement les variables "part" et "factor" dans "function addLetter" pour obtenir les différentes versions.
Par souci de brièveté, les lettres sont définies en utilisant les positions par tenons et hauteur de brique et sont multipliées par le facteur pour obtenir les coordonnées. En tant que tels, ils fonctionneront pour n'importe quelle brique de 2 tenons de large avec une hauteur de 1 brique.
Exemple extrait du fichier :
function addLetter(color, studOffset, letter) -- Duplo -- local part = '3437.dat' -- local factor = ldc.vector(40, -48, 40) -- Lego local part = '3003.dat' local factor = ldc.vector(20, -24, 20)
Question : Est-il possible d'ajouter un groupe dans un script LDCad ?
J'aimerais ajouter les pièces de chaque lettre dans un groupe, puis ajouter
un groupe pour le mot entier. Le meilleur exemple que j'ai vu est dans le script
exemple "Add Wall", mais cela ajoute simplement les nouvelles pièces à la sélection.
Réponse : Cela ne semble pas possible pour l'instant.
Nota : Le script ne semble pas fonctionner correctement dans la version actuelle ou demande des explications sur son usage.
Ce chapitre est basé sur un message de N. W. Perry sur le forum LDraw.org et les réponses apportées. Il s'agit plus d'une discussion pour orienter une pièce biscornue et la poser sur une pièce plane que d'offrir une solution clef en main.
Voir l'origine du message : Advanced rotation techniques (en Anglais).
J'ai l'impression [dixit N. W. Perry] de sous-utiliser les capacités de rotation avancées de LDCad. Mais au lieu d'une question, je pense qu'il est plus facile de donner un exemple et une sorte de défi.
Dans le fichier de test ci-joint j'ai une pièce de forme bizarre que je souhaite poser au sol, ici représentée par une belle grosse tuile.
Cette pièce a quatre extrémités inférieures, toutes avec des valeurs Y différentes, et pour être réaliste, elle devrait reposer sur les trois plus basses d'entre elles. Quelle est la meilleure façon de le faire en utilisant LDCad ?
Fichier LDraw servant d'exemple : test.ldr (173 octets).
Voici comment je l'aborderais :
Ce serait encore mieux si vous pouviez sélectionner les trois points en une fois et les utiliser pour définir un plan, puis définir la rotation absolue de la pièce une seule fois afin que ce plan corresponde au plan du sol. Cela pourrait probablement être scénarisé, mais il y a toujours le problème de la sélection des points en premier lieu.
Existe-t-il un meilleur moyen ? Comment aborderiez-vous ce problème ?
Avec la version 1.7 Alpha 2, vous pouvez utiliser un script pour trouver les coordonnées "inférieures". Ensuite, utilisez-les pour créer un plan, qui peut ensuite être utilisé pour construire une matrice d'orientation. Le seul vrai problème est de trouver ces points dans la liste des points uniques du maillage.
En effet, ce serait vraiment astucieux si nous pouvions accéder directement aux points de maillage !
Mais en supposant que je connaisse quelques points, existe-t-il un moyen de trouver le vecteur entre eux via l'interface graphique ? Je suppose via les informations de sélection (en prenant les valeurs d'angle de chacune des vues orthogonales) ?
Les niveaux (3 éléments) de la sélection dans le script ci-joint.
Noyau du script :
for i=1,3 do
ref[i]=sel:getRef(i)
pos[i]=ref[i]:getPos()
end
local xx=(pos[2]-pos[1]):getNormalized()
local zzTmp=(pos[3]-pos[1]):getNormalized()
local yy=xx:getCross(zzTmp)
local zz=xx:getCross(yy)
local ori=ldc.matrix()
ori:setOriCols(xx, yy, zz)
Le script prend 3 éléments de la sélection et les utilise pour obtenir un plan normal. Ensuite, il utilise l'un des 2 vecteurs du triangle formé comme axe X pour construire une matrice d'orientation.
Vous devrez ensuite le faire pivoter autour de Y pour le placer à sa place finale.
La chose vraiment cool serait d'analyser le maillage (possible en v1.7 Alpha 2a) pour obtenir ces 3 points automatiquement.
Fichiers : levelItems.zip (862 octets).
Contient l'exemple levelItems.ldr et le script levelItems.lua.
Génial ! Donc, le processus devient :
Ce chapitre est basé sur un message de Michael Carrabine [Mike C] sur le forum LDraw.org.
Voir l'origine du message : [LDCad] Script to Recolor Model from Inventory Parts (en Anglais).
Bonjour à tous [dixit Mike C]. C'est la première fois que je poste sur ce forum et également la première fois que j'utilise le langage script Lua, mais peut-être que cela sera utile ou amusant pour quelqu'un d'autre.
LDraw et LDCad ont été de merveilleuses ressources pour nous rendre tous les deux heureux. En coloriant mes conceptions dans LDCad, je peux avoir un plan pour commencer une construction avec mon jeune partenaire parfois impatient.
Les pièces jointes (dans le message d'origine sur le forum) sont ma tentative d'utiliser Lua pour me permettre de construire dans LDCad sans me soucier de la couleur, puis de recolorer l'ensemble du modèle en un clic à partir des pièces que nous possédons réellement.
À l'origine, j'ai écrit ceci pour attribuer une couleur aux pièces dans l'ordre de leur valeur Y. Mais ensuite, j'ai lu la très utile documentation LDCad de Roland sur http://www.melkert.net/LDCad/docs/scriptAPI où j'ai vu la fonction getComp et j'ai réalisé que je pouvais la paramétrer pour trier facilement selon différents axes (par exemple : XYZ, ZYX, etc.).
Si quelqu'un a des idées ou des suggestions, merci de les partager, car je suis clairement nouveau dans ce domaine.
Ensuite, je prévois de travailler sur des scripts pour construire des murs en utilisant les pièces de mon inventaire.
Menu "Scripts / MJC-recolor" :
Macros : Macros :
Exemple d'exécution :
Origine, sans coloration. | Après recoloration, en YZX. |
Ce chapitre est basé sur un message de Stefan Frenz sur le forum LDraw.org.
Voir l'origine du message : LDCad script integration of LDInspector's collision detection (en Anglais).
Salut tout le monde [dixit Stefan Frenz]. Inspiré et motivé par ce fil de discussion : LDCad Idea for an LDCad script, j'ai essayé de porter l'algorithme de détection de collision de LDInspector vers LDCad en langage Lua. Grâce à Roland (Roland Melkert) et à son soutien massif, j'ai une première version qui tourne et ne semble pas planter immédiatement. :-)
Si vous êtes intéressé par le script colldet.lua encore en version très-bêta-preuve-de-concept, il est
joint
en tant que fichier txt - renommez-le simplement en lua et copiez-le dans le dossier :
LDCad/scripts/default/global/
Nota : Une nouvelle version v0.2 peut être téléchargé
ici.
Vous aurez besoin de LDCad version 1.7 Alpha 2 ou une version ultérieure - merci encore à Roland pour avoir fourni toutes les fonctions nécessaires :-).
Veuillez ne pas exécuter la détection de collision avec trop de pièces car le temps augmentera suivant le carré du nombre de pièces.
L'exécution de ce petit exemple avec 15 pièces nécessite déjà 32 ms sur ma machine et la durée d'exécution maximale par défaut des macros est de 250 ms, ce qui conduit à un maximum d'environ 40 pièces sans prolonger le temps d'exécution des macros (voir plus bas).
Macros : Macros :
Animations : Animations :
Les 6 menus principaux s'affichent en haut à gauche de l'écran. Les autres menus sont généralement accessibles dans leur arborescence ou dans des menus contextuels. Les menus contextuels dépendent de l'endroit ou se trouve le curseur et du mode courant, et s'affichent en cliquant avec le bouton droit de la souris.
Dans les menus une commande peut s'afficher en jaune lorsque c'est la commande active.
Dans les menus s'affiche à droite en vert le raccourci clavier correspondant à la commande. Une flèche verte s'affiche lorsque la commande ouvre un sous-menu.
En dehors des menus affichés par défaut dans la barre de menus, il est possible d'en ajouter ou d'en enlever, voir le chapitre "Paramétrage des menus".
Dans chaque menu, vous pouvez utiliser les boutons :
Ce menu s'affiche en cliquant sur le bouton "menu principal" des autres menus.
Ce menu s'affiche en cliquant sur le menu "File".
Ce menu s'affiche en cliquant sur le menu "File / Recent".
Ce menu s'affiche en cliquant sur le menu "File / Example".
Ce menu s'affiche en cliquant sur le menu "Session".
Ce menu s'affiche en cliquant sur le menu "Session / Change current session", ou sur le nom du modèle affiché (en haut à droite).
Sélectionner un modèle principal ({M}) ou un sous-modèle dans la liste pour le visualiser et l'éditer. Le nom en jaune dans la liste est le modèle actif.
Ce menu s'affiche en cliquant sur le menu "Session / Grid".
Position : Pas de positionnement en LDU (X;Y;Z;Echelle).
Rotation : Pas de rotation.
Nota : D'autres grilles de position ou de rotation peuvent apparaître dans le menu, s'ils ont été ajoutés dans la fenêtre de configuration "Grid stepping".
Ce menu s'affiche en cliquant sur le menu "Session / Interaction", ou dans le panneau session avec le bouton droit de la souris.
Ce menu s'affiche en cliquant sur le menu "Session / Interaction / Select animation".
Global : Animations globales.
Ce menu s'affiche en cliquant sur le menu "Session / Session settings".
Ce menu s'affiche en cliquant sur le menu "Session / Scripting".
Ce menu s'affiche en cliquant sur le menu "Session / Animation".
Ce menu s'affiche en cliquant sur le menu "View".
Ce menu s'affiche en cliquant sur le menu "View / Editing views".
Base edit mode : Mode d'édition de base.
Ce menu s'affiche en cliquant sur le menu "View / Editing views / Editing plane".
Edit plane : Plan d'édition.
Ce menu s'affiche en cliquant sur le menu "View / Editing views / View angle".
2D : Vues 2D :
3D : Vues 3D :
Ce menu s'affiche en cliquant sur le menu "View / Editing views / Split".
Ce menu s'affiche en cliquant sur le menu "File / Export" ou "View / Editing views / Export".
Ce menu s'affiche en cliquant sur le menu "Select", ou avec le bouton droit de la souris dans la zone graphique avec "Edit / Select".
Ce menu s'affiche en cliquant sur le menu "Scripts".
Global : Global :
Local : Global :
Ce menu s'affiche en cliquant sur le menu "Scripts / misc".
Macros : Macros :
Ce menu s'affiche en cliquant sur le menu "Scripts / mlcad". Simule le comportement de certaines méta-commandes du programme MLCad.
Macros : Macros :
Ce menu s'affiche en cliquant sur le menu "Scripts / samples".
Macros : Macros :
Animations : Animations :
Ce menu s'affiche en cliquant sur le menu "Scripts / steps".
Macros : Macros :
Ce menu s'affiche en cliquant sur le menu "Scripts / technic".
Macros : Macros :
Ce menu s'affiche en cliquant sur le menu "Scripts / (sous Local) 8248 (par exemple)".
Animations : Animations :
Ce menu s'affiche en cliquant sur le menu "Prefs".
Ce menu s'affiche en cliquant sur le menu "Prefs / LDraw".
Files : Fichiers.
Colors : Couleurs.
Part prepping : Présentation pièce.
Edges : Bords.
Rendering : Rendu.
Ce menu s'affiche en cliquant sur le menu "Prefs / OpenGL".
Ce menu s'affiche en cliquant sur le menu "Prefs / Editing".
Advanced options : Options avancées.
Ce menu s'affiche en cliquant sur le menu "Prefs / Editing / Part editing".
Ce menu s'affiche en cliquant sur le menu "Prefs / Animation".
Ce menu s'affiche en cliquant sur le menu "Prefs / System".
Ce menu s'affiche en cliquant sur le menu "Prefs / GUI".
Hot tracking : Met en surbrillance l'objet survolé par le curseur.
Ce menu s'affiche en cliquant sur le menu "Prefs / GUI / GUI Template".
Ce menu s'affiche en cliquant sur le menu "Main menu / Color bin", ou avec le bouton droit de la souris dans la zone de sélection des couleurs.
Favorites : Favoris.
History : Historique.
Ce menu s'affiche en cliquant sur le menu "Main menu / Part bin", ou avec le bouton droit de la souris dans la zone de sélection des pièces.
Cells : Cellules.
Options : Options.
Filter : Filtre.
Favorites : Favoris.
History : Historique.
Rotation : Rotation des pièces
Ce menu s'affiche en cliquant sur le menu "Main menu / Source", ou avec le bouton droit de la souris dans la zone d'affichage du code source.
Options : Options.
Ce menu s'affiche en cliquant sur le menu "Main menu / Edit", ou avec le bouton droit de la souris dans la zone graphique.
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces, ou hors sélection avec "Edit / Selection".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Placement", ou hors sélection avec "Edit / Selection / Placement".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Selection center", ou hors sélection avec "Edit / Selection / Selection center".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans le panneau étapes de la zone graphique. Egalement en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Stepping", ou hors sélection avec "Edit / Selection / Stepping".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Stepping / Move to step", ou hors sélection avec "Edit / Selection / Stepping / Move to step".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Reorganize", ou hors sélection avec "Edit / Selection / Reorganize".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Grouping", ou hors sélection avec "Edit / Selection / Grouping".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Grouping / Grouping layer", ou hors sélection avec "Edit / Selection / Grouping / Grouping layer".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Ghosting", ou hors sélection avec "Edit / Selection / Ghosting".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces et "Selection / Nesting exclusions", ou hors sélection avec "Edit / Selection / Nesting exclusions".
Ce menu s'affiche en cliquant avec le bouton droit de la souris dans la zone graphique après sélection de pièces, avec "Selection / Selection info" ou hors sélection avec "Edit / Selection / Selection info".
La barre d'outils s'affiche en haut de la fenêtre et permet d'accéder directement aux principales fonctions de LDCad.
Nota : Les boutons de la barre d'outils décrits ci-dessous sont ceux affichés par défaut. Il y a de nombreux autres boutons disponibles, voir le chapitre "Paramétrage de la barre d'outils" pour les ajouter.
Globales :
Session :
Menus :
Boites de dialogue :
Panneau couleurs :
Menu.
Camembert.
Favoris.
Historique des couleurs.
Panneau pièces :
Menu.
Recherche.
Favoris.
Cellule.
Fenêtre d'édition graphique :
Sélection.
Edition.
Mode local.
Visualisation.
Plan de travail.
Outil de manipulation des pièces.
Grille.
Attirance.
Déplacement.
Rotation.
Modèle.
Pièce dynamique.
Propriété.
Cacher pièces.
Etape.
Groupe.
Animation.
Ce sont des lignes de commandes spécifiques à LDCad qui sont ajoutées dans le fichier LDraw pour un usage spécifique à LDCad et qui sont interprétées généralement comme commentaires par les autres programmes utilisant le système LDraw.
Voir la page : LDCad metas (en Anglais), pour avoir la syntaxe complète de ces méta-commandes.
La valeur des options peut avoir de nombreux types.
Type | Défaut | Description |
---|---|---|
float | 0.0 | Nombre non entier utilisant toujours le caractère "." comme séparateur décimal, quelque soit le réglage du pays dans le système. |
integer | 0 | Nombre entier. |
boolean | false | Doit être true (vrai) ou false (faux). |
string | texte libre. Accepte tout caractère sauf les sauts de ligne et les caractères "[" et "]". | |
enum | Doit être l'une des courtes chaines de caractères de la collection dépendant de la méta-commande l'utilisant. | |
ldrawRef | Référence à un autre fichier LDraw utilisant la méthode de recherche/emplacement LDraw normale. LDCad convertira automatiquement les caractères "\" ou "/" du chemin du fichier, suivant le système utilisé, mais il est toujours préférable d'utiliser le caractère "\". | |
ldrawColNr | 16 | Entier non signé sur 32 bits indiquant le numéro d'une couleur LDraw. |
relFileName | Un nom de fichier relatif à l'emplacement du fichier LDraw le contenant. LDCad convertira automatiquement les caractères "\" ou "/" du chemin du fichier, suivant le système utilisé. Une variante spécifique pourrait être forcée cependant à la sauvegarde (par exemple pour les fichiers LDraw). | |
unit | 0 | Flottant avec indication optionnelle d'unité. Si aucune unité n'est spécifiée, l'unité LDraw est utilisée
sauf indication contraire. Les unités supportées sont : |
typeName array | n type par défaut | Nombre N de valeurs séparées par un espace " ". Les tableaux sont souvent utilisés pour charger un nombre fixe d'options en une seule fois. L'ordre des valeurs peut donc être très précis. |
typeName list | n type par défaut | Nombre N de valeurs séparées par une virgule ",". Pas de réelle différence avec les valeurs des tableaux précédents, sauf que chaque valeur dans la séquence est considérée comme un enregistrement indépendant, ainsi la suppression de toute valeur ne change pas la signification de la valeur combinée. |
LDraw matrix | 0 0 0 1 0 0 0 1 0 0 0 1 | Notation de position LDraw et matrice de transformation 3x3 utilisé pour construire une matrice 4x4. |
3x3 matrix | 1 0 0 0 1 0 0 0 1 | Matrice de transformation 3x3 dans le même ordre que les neuf derniers nombre d'une référence LDraw (la matrice de transformation gère l'orientation, l'échelle, la symétrie et la déformation). |
vector | 0 0 0 | Valeurs flottantes X, Y et Z utilisées comme vecteur. |
Les marqueurs peuvent être utilisés pour aider à aligner des choses de formes bizarres. Vous pouvez également les utiliser pour vous aider dans la rotation d'une sélection.
Exemple
0 !LDCAD MARKER [posOri=-50 -24 0 1 0 0 0 1 0 0 0 1] [lengths=30 30 30 30 30 30]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
posOri | LDraw matrix | Matrice de position et transformation | |
lengths | integer array | 30 30 30 30 30 30 | nég x, pos x, nég y, pos y, nég z et pos z des longueurs d'axe. |
isTemp | boolean | false | si vrai (true) le marqueur sera automatiquement supprimé lors de la prochaine sauvegarde. |
name | string | Nom optionnel pour ce marqueur. |
LDCad supporte le groupement d'entités LDraw imbriqué de façon récursive. Cela signifie que vous pouvez créer des groupes de pièces et d'autres groupes, même si elles sont réparties entre plusieurs fichiers LDraw (utilisés de manière récursive). Pour rendre cela possible, LDCad utilise plusieurs méta-commandes de regroupement dans les modèles utilisant des groupes.
Cette méta-commande définit la présence d'un groupe à l'intérieur d'un fichier LDraw. Chaque groupe doit avoir une méta-commande de définition dans chaque fichier LDraw contenant des éléments membres du groupe. Cette méta-commande doit être utilisée uniquement dans l'entête des fichiers LDraw.
Exemple
0 !LDCAD GROUP_DEF [topLevel=true] [LID=0] [GID=EjSe9B4luQa] [name=Group 1] [center=0 12 0]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
topLevel | boolean | true | Indique si c'est, ou non, un groupe de premier niveau du fichier LDraw. |
LID | integer | 0 | Nombre entier pour identifier de façon unique cette définition de groupe dans le fichier LDraw. Il est utilisé pour garder une référence courte aux objets (par exemple dans les lignes GROUP_NXT) et éviter d'utiliser l'identifiant GID complet de nombreuses fois. |
GID | string | Pseudo identifiant unique global du groupe LDCad défini par cette méta-commande. Cet identifiant doit être globalement unique sachant que les groupes peuvent être répartis entre plusieurs fichiers. | |
name | string | Group n | L'utilisateur fourni le nom du groupe, qui doit être unique parmi tous les groupes de premier niveau dans le fichier LDraw. Par défaut il sera généré comme "Group 1", "Group 2", etc. Utilisé uniquement si topLevel est déclaré "true". |
center | vector | Centre relatif à utiliser pour ce groupe. Utilisé uniquement si topLevel est déclaré "true". |
Cette méta-commande est utilisée pour indiquer que la ligne LDraw qui suit cette méta-commande doit être ajoutée à un ou plusieurs groupes LDCad. Si la ligne suivante n'est pas prise en charge par un groupe LDCad cette méta-commande sera ignorée.
Exemple
0 !LDCAD GROUP_NXT [ids=0] [nrs=2]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ids | integer list | Référence LID pour la définition du groupe local dont la ligne qui suit est membre. | |
nrs | integer list | L'index de cet item à l'intérieur de la liste des membres du groupe référencé pour chaque valeur de cette liste. Ces index sont seulement utilisés pour le tri durant le chargement, de sorte que les nombres utilisés peuvent être différents à la prochaine sauvegarde. Devrait avoir le même nombre d'éléments que la propriété "id". |
La méta-commande objet de groupe est utilisée pour grouper le contenu spécifique LDCad non sauvegardé (comme par exemple les points de début et de fin de chemin). Il est presque identique à la méta-commande GROUP_NXT mais ne doit être utilisée que dans l'entête des fichiers LDraw.
Exemple
0 !LDCAD GROUP_OBJ [ids=0] [nrs=2] [refName=Path start]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ids | integer list | Voir : GROUP_NXT | |
nrs | integer list | Voir : GROUP_NXT | |
refName | enum | Nom de l'objet référencé. |
LDCad maintient un certain nombre de méta-commandes pour garder une trace des informations spécifiques à LDCad à l'intérieur du fichier LDraw.
La méta-commande de script est utilisée pour lier un fichier script lua dans un fichier LDraw. Cette méta-commande ne doit être utilisée que dans l'entête du fichier ou d'un sous-fichier, et actuellement une seule instance est autorisée par sous-fichier.
Exemple
0 !LDCAD SCRIPT [source=5580.lua]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
source | relFileName | Nom de fichier relatif du fichier script lua que vous souhaitez utiliser avec ce modèle. |
La méta-commande de contenu est utilisée pour informer LDCad qu'il doit traiter le contenu du sous-fichier LDraw d'une manière spéciale, non graphique. Cette méta-commande liste les propriétés dépendantes du type de contenu, indiqué par la propriété type. Elle doit être utilisée dans l'entête.
Exemple
0 !LDCAD CONTENT [type=path] [addFallBack=default] [looped=false] [displayKind=mm] [curveStep=0] [displayLenCor=0]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
type | enum | Le type de contenu doit être path ou spring. | |
addFallBack | enum |
Doit être une des valeurs suivantes : |
|
Propriétés spécifiques de chemin (Path) | |||
looped | boolean | false | Indique si le chemin forme une boucle ou garde un point de départ et un point d'arrivée. |
displayKind | enum | mm |
Utilisé pour définir l'unité d'affichage, doit être une des valeurs suivantes : |
curveStep | float | 0.0 | Utilisé pour définir la résolution de la courbe interne. La modification de cette valeur
est seulement utile lors de la construction de choses faites de segments statiques non pliables,
par exemple, une chaîne technique. Dans ce cas, la définition de cette valeur à la longueur du
segment de pièce se traduira par un positionnement parfait, par exemple, les maillons de la chaîne.
Sinon, vous pourriez voir des problèmes de placement car le générateur interne arrondit tout à n fois
la longueur de la résolution qui pourrait légèrement différer de la longueur de la courbe du segment. 0.0 indique que la résolution par défaut doit être utilisée. |
displayLenCor | integer | 0 | Correction à appliquer lors du calcul de la longueur totale du chemin. Doit être donné dans l'unité displayKind. Pourrait être utilisé par exemple pour ajouter la longueur des pièces d'extrémités à la longueur du chemin générée. |
Propriétés spécifiques de ressort (Spring) | |||
cRes | integer | 16 | Résolution cylindrique de la spire à utiliser pour le rendu (OpenGL). |
cResLD | integer | 16 | Résolution cylindrique de la spire à utiliser pour le maillage LDraw généré. |
cDia | unit | 8.0 | Diamètre interne de la spire. |
cRoll | float | 0.0 | Enroulement autour de l'axe Y à appliquer à la spire en degrés. |
wRes | integer | 8 | Résolution cylindrique du fil à utiliser pour le rendu (OpenGL). |
wResLD | integer | 8 | Résolution cylindrique du fil à utiliser pour le maillage LDraw généré. |
wDia | unit | 2.0 | Diamètre du fil. |
wCol | ldrawColNr | 16 | Couleur du fil. |
sepMesh | boolean | false | Indique si le fil doit être séparé du contenu du ressort principal, même s'il utilise la couleur 16. Si faux (false), il sera séparé uniquement si une couleur différente de 16 est utilisée. |
La méta-commande de génération est utilisée pour informer que tout le contenu qui suit est maintenu par un des générateurs de LDCad. Cela signifie que la section entière du code LDraw pourrait être remplacé ou supprimé au moment de la sauvegarde par LDCad. Il n'est donc pas recommandé de modifier manuellement son contenu.
Exemple
0 !LDCAD GENERATED [generator=LDCad 1.4b]
Ou en variante
0 !LDCAD GENERATED [generator=LDCad 1.4b] [master=pump.ldr]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
generator | string | Version du programme qui a créé en dernier le contenu qui suit. La chaîne de caractères est juste pour information, car elle n'est actuellement pas utilisée pendant le chargement du contenu. | |
master | ldrawRef | Si ce bloc généré est nécessaire pour un autre bloc généré (par exemple le maillage d'un ressort faisant partie du contenu d'un amortisseur) une référence au contenu principal doit être donnée dans ce paramètre. Si le contenu principal est réglé tout ce sous-fichier sera géré par le générateur de contenu du gestionnaire, ce qui signifie qu'il pourrait être complètement supprimé, y compris toutes les lignes (jusqu'à et y compris 0 FILE) au-dessus de la méta-commande du générateur elle même. Le contenu principal doit être dans le même fichier MPD. |
Les méta-commandes de contenu de chemin sont utilisées pour définir les pièces dynamiques à l'intérieur d'un sous-fichier dédié. Basé sur une collection de lignes 0! LDCAD PATH_, LDCad sera en mesure de générer de nombreux types de pièces flexibles pour une utilisation dans vos modèles. Afin de voir également correctement ces modèles dans d'autres programmes de visualisation ou d'édition LDraw une méta-commande de génération peut être utilisée pour ajouter au code LDraw du sous-fichier les éléments de la pièce dynamique figés au moment de la sauvegarde.
La méta-commande de point de chemin est utilisé pour définir un point de passage. Le chemin généré utilisera ce point d'une certaine façon. S'il y a plusieurs points, le chemin suit l'ordre de ces points. Elles doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD PATH_POINT [type=bezier] [posOri=-110 0 0 1 0 0 0 1 0 0 0 1] [prevCPDist=25] [nextCPDist=25] [cirR=25] [cirDir=xyCW] [prevYRoll=0] [nextYRoll=0]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
type | enum | bezier |
Fixe le type de point, doit être bezier ou circle. |
posOri | LDraw matrix | Position et orientation du point. La partie orientation est très importante car elle définit la direction du chemin en utilisant son axe Y local. | |
prevCPDist | float | 25.0 | Définit le point de contrôle "avant" ce point en fixant la distance (sur l'axe Y local) avec lui. Le point de contrôle "avant" de ce point sera utilisé par le point de contrôle "après" du point de chemin précédent, afin de faire les calculs de Bézier pour le segment de ligne entre les deux. |
nextCPDist | float | 25.0 | Définit le point de contrôle "après" ce point en fixant la distance (sur l'axe Y local) avec lui. Le point de contrôle "après" de ce point sera utilisé par le point de contrôle "avant" du point de chemin suivant, afin de faire les calculs de Bézier pour le segment de ligne entre les deux. |
cirR | float | 25.0 | Fixe le rayon du cercle de guidage du chemin. Utilisé seulement si le type de point est circle. |
cirDir | enum | xyCW |
Utilisé pour sélectionner le plan 2D et le sens d'enroulement de ce point de chemin cercle.
Doit être utilisé pour guider le chemin autour de son centre. Doit être une des valeurs suivantes : |
prevYRoll | float | 0.0 | Fixe l'enroulement (en degrés) autour de l'axe Y du chemin, le chemin donneur est nécessaire pour avoir l'arc de cercle local "avant". Utilisé lorsque par exemple vous travaillez avec un élastique de section carrée pour le guider d'une roue à gorge (beveled wheel) à une bague (bush). Utilisé seulement si le type de point est circle. |
nextYRoll | float | 0.0 | Fixe l'enroulement (en degrés) autour de l'axe Y du chemin, le chemin donneur est nécessaire pour avoir l'arc de cercle local "après". Utilisé lorsque par exemple vous travaillez avec un élastique de section carrée pour le guider d'une bague (bush) à une roue à gorge (beveled wheel). Utilisé seulement si le type de point est circle. |
La méta-commande d'extrémité de chemin est utilisé pour ajouter une partie statique (pièce ou sous-fichier) à une pièce dynamique. C'est habituellement réservé aux parties d'extrémités extérieures à la pièce dynamique générée. Par exemple les tenons moulés aux extrémités de certains cordages. Elles doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD PATH_CAP [group=start] [color=16] [posOri=-170 8 0 1 0 0 0 1 0 0 0 1] [part=165.dat] [extraLen=0mm]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
group | enum |
Groupe est utilisé pour attribuer cette extrémité à l'un des groupes automatiques LDCad disponible
pour cette pièce flexible. Doit être une des valeurs suivantes : |
|
color | ldrawColNr | 16 | Couleur à utiliser, donnée par la pièce LDraw. |
posOri | ldraw matrix | Position et orientation de l'extrémité de la pièce. | |
part | ldrawRef | Pièce LDraw à utiliser pour pièce d'extrémité. | |
extraLen | unit | 0mm | Peut être utilisé pour indiquer la longueur des pièces d'extrémité, ou pour corriger la longueur totale du chemin lorsque les pièces d'extrémité comprennent par exemple une partie de la structure dynamique. |
La méta-commande d'ancrage de chemin est éventuellement utilisé pour forcer un centre personnalisé utilisant le groupe de contenu de chemin automatique. Ceci peut être nécessaire pour les groupes de début et de fin si la méta-commande d'extrémité ou de point de chemin n'est pas adapté ou logique. Il ne peut y avoir qu'une méta-commande d'ancrage par type de groupe dans un sous-fichier de chemin. Elles doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD PATH_ANCHOR [group=start] [posOri=-110 24 0 1 0 0 0 1 0 0 0 1]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
group | enum |
Groupe est utilisé pour attribuer cet ancrage à l'un des groupes automatiques LDCad disponible pour cette pièce flexible.
Doit être une des valeurs suivantes : |
|
posOri | ldraw matrix | Position et orientation de l'ancrage. |
La méta-commande d'apparence de chemin est utilisée pour définir la façon de remplir ou afficher la partie du chemin emprunté par un point donné. Il devrait y avoir au moins une méta-commande d'apparence dans chaque sous-fichier de pièce dynamique. Il est autorisé d'utiliser plusieurs méta-commandes d'apparence. La longueur totale du chemin sera divisé suivant les multiples méta-commandes en fonction des propriétés liées à leurs segments (SEG*). Les méta-commandes d'apparence doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD PATH_SKIN [donCol=16] [donOri=1 0 0 0 1 0 0 0 1] [donPart=3001.dat] [donYSize=100%] [donCen=absCen] [donCenYOfs=0] [donFinScale=fitDon2Seg] [donPlace=refsDyn] [donYAlign=0] [donInline=false] [segSize=100%] [segSizeTol=5%] [segsCnt=0] [segsGrp=0] [segsMaxMerge=1] [segsMrgAng=0] [segsEdgeDelKind=keepFirstLeft]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
donCol | ldrawColNr | 16 | Couleur à utiliser avec la pièce donneur. |
donOri | 3x3 matrix | Rotation de la pièce donneur. donOri agit comme correction de la propre orientation du donneur afin de rendre l'axe Y de la pièce orienté. Ceci parce que la pièce donneur sera "trainée" le long du chemin dans sa direction Y locale (après cette correction). | |
donPart | ldrawRef | Fichier LDraw à utiliser pour remplir le chemin. Tout fichier LDraw est autorisé ici, mais en pratique il est préférable de se limiter à des pièces simples. | |
donYSize | unit | 100% | Utilisé pour fixer la taille de base du donneur dans sa direction Y. Si par exemple la pièce donneur est une section de tube avec une hauteur de 2 LDU, elle pourrait être étirée (Axe Y seulement) en utilisant cette option en morceaux de 8 LDU par exemple, soit 4 fois plus avec une valeur de 400%. |
donCen | enum | absCen |
Utilisé pour choisir le centre de travail de la pièce donneur. Cette option utilise le donneur comme il est
après les corrections d'orientation. Doit être une des valeurs suivantes : |
donCenYOfs | float | 0.0 | Définit un décalage additionnel en Y pièce du donneur (après corrections donOri, donYSize et donCen) à utiliser. |
donFinScale | enum | fitDon2Seg |
Contrôle la façon dont le donneur est mis à l'échelle avant placement d'un segment.
Doit être une des valeurs suivantes : |
donPlace | enum | refsDyn |
Sélectionne la méthode de placement ou génération. Doit être une des valeurs suivantes : |
donYAlign | integer | 0 | Fixe une correction d'alignement à utiliser sur le centre du donneur calculé avant de placer un donneur sur le segment du chemin. Un nombre négatif décalera le donneur vers la gauche par multiples de sa longueur en Y. Donc -1 le déplacera d'une longueur entière vers la gauche. Un nombre positif fera la même chose vers la droite. 0 signifie qu'aucun changement ne sera effectué. |
donInline | boolean | false | Détermine si le générateur va essayer de décomposer le fichier donneur au lieu d'y faire directement référence tout en créant le code de retour du segment. Décomposer le fichier donneur supprime sa dépendance et pourrait augmenter la portabilité du code de retour. Le donneur sera décomposé uniquement s'il est composé entièrement de lignes de type 1. |
segSize | unit | 100% | Contrôle la longueur des segments individuels le long du chemin résultant. Chaque segment sur le chemin sera rempli avec une seule instance de pièce donneur. Fixer la taille des segments contrôle donc combien de fois le donneur peut être utilisé pour remplir le chemin. Soyez prudent lorsque vous réglez la taille du segment tout en utilisant la méthode de déformation car cela va influer grandement la taille du fichier résultant. Vous pouvez fournir la taille du segment en ldu, mm, ou en pourcentage de donYSize. |
segSizeTol | unit | 5% | Contrôle le niveau d'agrandissement autorisé sur les segments afin de remplir l'espace restant. Si par exemple la taille des segments est 10 et le chemin complet a une longueur de 111, il en résulte 11 segments, la longueur restante de 1 sera étalée sur les 11 segments par une légère mise à l'échelle. Utilisez cette option pour limiter la quantité de mises à l'échelle pour éviter par exemple des distorsions notables de la pièce donneur. La tolérance peut être donnée en statique ldu, mm ou en pourcentage de la taille du segment calculé lui même. |
segsCnt | integer | 0 | Utilisé pour définir éventuellement un nombre fixe de segments. 0 signifie qu'un nombre illimité de segments peut être utilisé pour construire le chemin. Si une valeur non nulle est donnée, seulement une partie du chemin sera rempli en utilisant les options de la méta-commande d'apparence. Cette option peut être utilisée pour limiter la longueur visible de la pièce flexible et faire de la place pour une autre méta-commande d'apparence sur le chemin. |
segsGrp | integer | 0 | Utilisé pour grouper les segments résultants des différentes méta-commandes d'apparence. Si fixé à 0 aucun groupement ne sera effectué et chaque méta-commande d'apparence remplira son espace attribué dans l'ordre des lignes des méta-commandes d'apparence. Si la valeur est non nulle, les méta-commandes d'apparence utiliseront le même numéro de groupe et leurs segments se succèderons (compressés ensemble) rendant possible, par exemple, les motifs colorés. |
segsMaxMerge | integer | 1 | Afin de tenter de réduire le code alternatif des segments qui sont en ligne droite à la suite d'un autre segment, il pourrait éventuellement être joint en un seul segment, pour placer moins de donneurs. Cette option est utile uniquement lorsque le donneur utilise l'échelle finale sinon vous allez vous retrouver avec des trous (grands) dans votre chemin. |
segsMrgAng | float | 0.0 | Permet éventuellement de définir l'angle maximal (en degrés) entre deux segments afin de les estimer alignés. 0.0 indique de prendre la valeur par défaut. Cette valeur interne est codée en dur dans le programme (dépendant de la version). Utilisez cette option dans le cas ou un grand angle provoque des problèmes d'alignement. |
segsEdgeDelKind | enum | keepFirstLeft |
Contrôle quoi faire avec le chevauchement des lignes conditionnelles tout en utilisant la méthode
de placement par déformation. Doit être une des valeurs suivantes : |
La méta-commande de longueur de chemin est utilisée pour limiter la longueur ou pour définir un nombre réel de pièces pour la longueur maximum. Lorsqu'il y a plusieurs méta-commandes de longueur, celle la plus proche de la longueur réelle du chemin sera appliquée, par exemple dans le but de correspondre au chemin statique contenu dans des fichiers LDraw. La longueur totale du chemin sera divisé suivant les multiples méta-commandes en fonction des propriétés liées à leurs segments (SEG*). Les méta-commandes de longueur doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD PATH_LENGTH [lenTarget=50mm] [lenMargin=2%] [partName=some.dat] [partDescr=50 mm pneuhose]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
lenTarget | unit | 0 | La longueur maximale autorisée pour le chemin. |
lenMargin | unit | 0 | La longueur totale du chemin peut différer en fonctions des vraies contraintes afin de se qualifier encore. Cela permet d'éviter les exclusions indésirables et compense pour les pièces extensibles (par exemple les bandes caoutchouc). La marge peut être donnée en ldu, mm ou un pourcentage de la valeur lenTarget. |
partName | ldrawRef | La pièce LDraw qui représente la version statique du chemin qui correspond aux contraintes de cette méta-commande. Actuellement cette référence n'est jamais chargée de sorte qu'elle n'est pas obligée d'exister. Dans de futures versions, LDCad pourrait l'utiliser, par exemple en aperçu d'utilisation de la pièce, etc. | |
partDescr | string | Description à utiliser pour la partName donnée. Actuellement on ne fait rien avec cette valeur, mais dans de futures versions de LDCad il pourrait l'utiliser, par exemple lorsque le fichier LDraw de partName ne peut être trouvé (c'est virtuel). |
Les méta-commandes de contenu de ressort sont utilisées pour définir les pièces qui comprennent un ressort mobile à l'intérieur d'un sous-fichier dédié. Basé sur une collection de lignes 0 !LDCAD SPRING_*, LDCad sera en mesure de générer de nombreux types de ressorts pour une utilisation dans vos modèles. Afin de voir également correctement ces modèles dans d'autres programmes de visualisation ou d'édition LDraw une méta-commande de génération peut être utilisée pour ajouter au code LDraw du sous-fichier les éléments de la pièce dynamique figés au moment de la sauvegarde.
La méta-commande de point de ressort est utilisée pour définir au plus deux points, en utilisant différents paramètres du groupe. Ce sont les points de connexion du ressort généré en utilisant une ou plusieurs méta-commandes de section. Les méta-commandes de point de ressort doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD SPRING_POINT [group=start] [posOri=0 24 0 1 0 0 0 1 0 0 0 1]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
group | enum |
Groupe est utilisé pour attribuer ce point à l'un des groupes automatiques LDCad
disponible pour la pièce ressort. Doit être une des valeurs suivantes : |
|
posOri | LDraw matrix | Position et orientation de ce point de ressort. |
La méta-commande d'extrémité de ressort est utilisée pour ajouter une partie statique (pièce ou sous-fichier) au début et à la fin de la partie ressort.
Exemple
0 !LDCAD SPRING_CAP [group=start] [color=16] [posOri=0 24 0 1 0 0 0 1 0 0 0 1] [part=3005.dat]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
group | enum |
Groupe est utilisé pour attribuer cette extrémité à l'un des groupes automatiques LDCad
disponible pour la pièce ressort. Doit être une des valeurs suivantes : |
|
color | ldrawColNr | 16 | Couleur à utiliser pour cette pièce d'extrémité. |
posOri | LDraw matrix | Position et orientation de cette pièce d'extrémité. | |
part | ldrawRef | Pièce LDraw à utiliser pour cette pièce d'extrémité. Peut être rien, mais en pratique, devrait être une pièce LDraw unitaire, car sinon cela pourrait nuire aux performances de rendu. |
La méta-commande d'ancrage de ressort est utilisée pour forcer un centre et une orientation personnalisée pour le groupe des ressorts. Il ne peut y avoir qu'une méta-commande d'ancrage par type de groupe dans un sous-fichier de ressort. Elle doit être utilisée uniquement dans l'entête, et éventuellement maintenu groupée.
Exemple
0 !LDCAD SPRING_ANCHOR [group=start] [posOri=0 48 0 1 0 0 0 1 0 0 0 1]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
group | enum |
Groupe est utilisé pour attribuer cet ancrage à l'un des groupes automatiques LDCad
disponible pour la pièce ressort. Doit être une des valeurs suivantes : |
|
posOri | LDraw matrix | Position et orientation de cet ancrage. |
La méta-commande de section de ressort est utilisée pour définir l'apparence du fil du ressort, reliant les deux extrémités. Il doit y avoir au moins une méta-commande de section. Lorsque plusieurs méta-commandes de section sont présentes, la longueur disponible du ressort sera divisée entre eux suivant la propriété proportion. Elles doivent être utilisées uniquement dans l'entête, et éventuellement maintenu groupées.
Exemple
0 !LDCAD SPRING_SECTION [windingCnt=5] [proportion=1]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
windingCnt | float | 5.0 | Nombre d'enroulements autour de l'axe Y que devra faire le ressort pour couvrir la longueur disponible. |
proportion | integer | 1 | Définit la partie de la longueur totale du ressort que cette section contrôle. Si fixé à 0
le fil sera bien enroulé et la longueur de cette section dépendra du nombre d'enroulements et
de l'épaisseur du fil. Si la valeur est non nulle, la longueur disponible sera calculée en
prenant la longueur restante (longueur du ressort moins la longueur utilisé par les sections
à proportion nulle) divisé par la somme de toutes les valeurs de proportion multiplié par
la valeur de proportion de cette méta-commande. |
Les méta-commandes d'accrochage pièce sont actuellement utilisées exclusivement combinés avec les fichiers de la bibliothèque fantôme afin d'ajouter des informations supplémentaires aux pièces de la bibliothèque LDraw. Cette information est utilisée par LDCad pour calculer automatiquement les positions de placement possible des pièces entre-elles.
Ces méta-commandes décrivent essentiellement les points remarquables et leurs formes qui seront ensuite utilisés pour tester une à une chaque position lors de l'ajout d'une nouvelle pièce dans le modèle en cours. Cela sera fait pour toutes les informations d'accrochage à la fois sur la brique courante d'ajout et toutes celles présentes dans le modèle afin de trouver le meilleur point d'accrochage ou la solution la plus proche, par exemple une goupille dans le trou d'une poutre.
La méta-commande d'effacement est utilisée pour vider la totalité ou une partie des informations d'accrochage héritées, recueillies jusqu'ici pour le fichier de la pièce courante. Cette méta-commande pourrait être nécessaire pour remplacer les informations héritées afin de l'étendre ou d'augmenter ses détails. Par exemple les informations obtenues à partir d'une primitive d'axe, car cette primitive est utilisée comme forme plus grande à l'intérieur d'un fichier de pièce.
Exemple
0 !LDCAD SNAP_CLEAR [id=axleHole]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
id | string | Utilisé pour effacer uniquement l'information d'accrochage obtenue en utilisant l'identifiant donné (id). Laissez-le vide pour effacer toutes les informations pour la pièce courante. |
La méta-commande d'ajout est utilisée pour ajouter une information d'accrochage dans cette pièce à partir d'une autre bibliothèque fantôme. Ceci est fait de façon non récursive.
Exemple
0 !LDCAD SNAP_INCL [ref=connhole.dat] [pos=-50 10 0] [ori=0 -1 0 0 0 -1 1 0 0] [grid=C 1 C 3 20 20]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ID | string | Identifieur facultatif qui peut être utilisé dans les méta-commandes d'effacement (clear) pour éventuellement déposer cette information à un niveau supérieur dans les pièces qui l'utilise. | |
pos | vector | Position de l'information ou objet inclus. | |
ori | 3x3 matrix | Transformation de l'orientation à appliquer sur l'information ou objet inclus. | |
scale | vector | Vecteur facultatif de mise à l'échelle à appliquer sur l'information ou objet inclus. | |
ref | ldrawRef | Référence du fichier de la bibliothèque fantôme source. Doit utiliser uniquement des références de pièces locales. | |
grid | mixed array |
Définit un modèle de grille à utiliser pour un placement multiple ou une inclusion du fichier référencé.
La grille utilise l'orientation indiquée dans le paramètre ori. Comme les données de pièce LDraw sont
orientés suivant l'axe Y, seules les valeurs de pas de grille en X et Z doivent être données comme ceci : |
La méta-commande d'accrochage de cylindre est la pièce maîtresse des informations d'accrochage, car elle décrit les trous et les tenons qui sont le fondement de Lego. Si vous jetez un regard attentionné à quelques briques Lego, vous remarquerez que toutes ont des trous et des tenons d'accrochage similaires. La seule vraie différence entre elles sont le diamètre et le motif des formes de trous ou tenons (comme le côté d'une clef). Ce sont ces informations que la méta-commande d'accrochage sur cylindre tente de capturer pour appairer les pièces.
Exemple
0 !LDCAD SNAP_CYL [id=connhole] [gender=F] [caps=none] [secs=R 8 2 R 6 16 R 8 2] [center=true] [slide=true] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ID | string | Identifieur facultatif qui peut être utilisé dans les méta-commandes d'effacement (clear) pour éventuellement déposer cette information à un niveau supérieur dans les pièces qui l'utilise. | |
group | string | Identifieur de groupe facultatif. Peut être utilisé pour limiter les correspondances possibles aux seules informations d'accrochage qui possèdent le même identifieur de groupe. Peut être utilisé pour prévenir les correspondances indésirables lorsque des formes très complexes sont impliquées, par exemple des trous de rotation à cliquet, etc. | |
pos | vector | Position de cette forme. | |
ori | 3x3 matrix | Orientation de cette forme. | |
scale | enum | none |
Définit comment les références mises à l'échelle dans la pièce (officielle) principale doivent
manipuler judicieusement l'information d'héritage. Doit être une des valeurs suivantes : |
mirror | enum | cor |
Définit comment les références symétrisées dans la pièce (officielle) principale doivent
manipuler judicieusement l'information d'héritage. Doit être une des valeurs suivantes : |
gender | enum | male | Fixe le genre de la forme du cylindre : M pour male (goujon) et F pour femelle (trou). |
secs | mixed array |
Décrit la forme du trou (le long de l'axe Y négatif) ou du goujon par une séquence de variantes de forme,
de rayon et de longueur. L'information doit être donnée dans des blocs de : shapeVariant radius length
ou shapeVariant doit être une des valeurs suivantes : |
|
caps | enum | one |
Définit les extrémités de la forme, doit être une des valeurs suivantes : |
grid | mixed array |
Définit un motif de grille à utiliser pour le placement multiple de cette forme cylindrique. La grille
utilise l'orientation indiquée dans le paramètre ori. Comme toutes les information d'attirance
est orienté suivant l'axe Y seules les valeurs en X et Z du pas de la grille doivent être données
comme ceci : | |
center | boolean | false | Indique si cette forme cylindrique doit être centrée sur sa position ou non. |
slide | boolean | false |
Indique si cette forme cylindrique doit être considérée assez "lisse" pour faire glisser de potentielles
pièces correspondantes. Si chaque pièce de la paire des pièces correspondantes ont l'option slide
fixé à true (vrai) dans leurs méta-commandes d'information d'attirance, l'utilisateur sera en
mesure de les faire glisser l'une sur l'autre. Sinon elles seront juste "attirées". |
La méta-commande d'accrochage sur clip est utilisée pour décrire tout ce qui a une forme de clip. Les clips sont toujours du genre féminin et seront testés pour s'appairer avec les formes cylindriques mâles.
Exemple
0 !LDCAD SNAP_CLP [radius=4] [length=8] [pos=0 0 0] [ori=1 0 0 0 1 0 0 0 1] [center=true]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ID | string | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
pos | vector | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
ori | 3x3 matrix | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
radius | float | 4.0 | Rayon intérieur du clip au repos. |
length | float | 8.0 | Longueur ou largeur du trou (partiel) du clip. |
center | boolean | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
slide | boolean | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
scale | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
mirror | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
La méta-commande d'accrochage sur doigt est utilisée pour décrire tout les formes de doigts pouvant se verrouiller. Les formes de doigts sont toujours testées parmi eux-mêmes.
Exemple
0 !LDCAD SNAP_FGR [group=lckHng] [genderOfs=M] [seq=4.5 8 4.5] [radius=6] [center=true] [pos=-30 10 0] [ori=1 0 0 0 0 1 0 -1 0]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ID | string | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
group | string | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
pos | vector | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
ori | 3x3 matrix | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
genderOfs | enum | male | Indique le genre du premier doigt de la forme, doit être soit M pour male soit F pour femelle. |
seq | float array | Définit la largeur de chaque doigt par une séquence de valeurs flottantes. | |
radius | float | Rayon extérieur du doigt (extrémité). Il est généralement biseauté et donc le paramètre d'accrochage principal. | |
center | boolean | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
scale | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
mirror | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
La méta-commande d'accrochage générique est utilisée pour décrire des choses ayant des formes irrégulières qui dans la pratique ne disposent que de quelques pièces sur laquelle elles peuvent s'assembler. Des choses par exemple comme les prises électriques ou les vitres de fenêtres.
La correspondance est faite seulement parmi les méta-commandes d'accrochage génériques elles-mêmes, basé sur le nom unique du groupe. Mais l'information "bounding" va influencer le meilleur candidat sélectionné lorsque plusieurs paires sont très proches.
Exemple
0 !LDCAD SNAP_GEN [group=nxtc] [gender=M] [pos=0 -1.5 1.5] [ori=1 0 0 0 0 1 0 -1 0] [bounding=box 12.5 16.5 8]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ID | string | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
group | string | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
pos | vector | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
ori | 3x3 matrix | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
gender | enum | male | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
bounding | mixed array |
Définit la forme englobante qui sera utilisée dans les calculs de la
"meilleure paire candidate". C'est nécessaire car sinon le positionnement
unitaire pourrait provoquer des correspondances indésirables. Il existe
plusieurs types de formes englobantes, à savoir : |
|
scale | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
mirror | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
La méta-commande d'accrochage sur sphère est utilisée pour décrire un objet sphérique comme une rotule. Bien que les paires aient une orientation adaptée, elles seront accrochées ensemble en utilisant leur orientation actuelle dans l'éditeur puisque des choses comme les rotules tournent librement. Les versions futures de cette méta-commande pourraient éventuellement limiter cette liberté.
Nota : Depuis LDCad v1.5, cette méta-commande est remplacée par la méta générique, car dans cette version de nouveaux paramètres à la méta d'accrochage générique rend la méta d'accrochage de sphère redondante.
Exemple
0 !LDCAD SNAP_SPH [gender=M] [radius=4]
Propriétés
Propriété | Type | Défaut | Description |
---|---|---|---|
ID | string | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
pos | vector | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
ori | 3x3 matrix | Voir méta-commande d'accrochage de cylindre SNAP_CYL. | |
gender | enum | male | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
radius | float | Rayon de la sphère. | |
scale | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. Mais seuls none et ROnly sont autorisés. |
mirror | enum | none | Voir méta-commande d'accrochage de cylindre SNAP_CYL. |
Il est possible de configurer LDCad au niveau de son apparence ou pour paramétrer son utilisation. C'est possible à partir de fichiers en mode texte pour l'apparence ou à travers son interface pour paramétrer son utilisation.
Les fichiers de configuration sont situés dans un dossier ou un de ses sous-dossiers :
Voir également : Où LDCad conserve-t-il ses fichiers de configuration ?
LDCad maintient un certain nombre de fichiers de configuration. Ce sont tous des fichiers texte similaires à des fichiers ".ini" qu'il est possible d'éditer manuellement si besoin lorsque le programme est fermé.
Le fichier "main.cfg" se trouve dans le dossier "LDCad/config" et sert à stocker tous les paramètres modifiables par exemple à travers le menu "Prefs" (Préférences). Il maintient également l'état général en cours du programme (taille et position des fenêtres, etc).
Il abrite aussi quelques options de bas niveau réservées aux experts qui ne peuvent être modifiées à travers l'interface. L'auteur précise qu'il ne pense pas que ce soit nécessaire de décrire actuellement ces options, mais si vous avez besoin d'informations à leur sujet vous pouvez toujours le contacter.
Voir également : Comment réinitialiser la configuration LDCad ?
Le fichier "seeds.cfg" se trouve dans le dossier "LDCad/config" et est utilisé pour garder une trace de la synchronisation entre fichiers source et leur emplacement cible. Par exemple le contenu du dossier partBin provient du fichier seeds/partBin.sf.
Actuellement il est préférable de laisser ce fichier tel quel, car cela pourrait briser le processus de mise à niveau de LDCad s'il était mal employé.
Ce fichier optionnel sera lu uniquement s'il est présent dans le même dossier que l'exécutable LDCad.exe. Il est utilisé pour configurer l'environnement interne de LDCad et donne l'emplacement de sauvegarde des fichiers de données et quels sont les dossiers par défaut à utiliser pour certaines fonctions de base.
Le contenu par défaut, utilisé lorsqu'aucun fichier n'est trouvé, est (v1.5 Alpha 3 ou supérieur) :
[paths]
logDir=
Pour en savoir plus sur la description du contenu, voir : http://www.melkert.net/LDCad/tech/config (en Anglais).
Presque toutes les couleurs, images et polices de caractères utilisées dans l'interface graphique OpenGL de LDCad sont modifiables en modifiant le modèle GUI. Il est toutefois recommandé d'apporter des modifications sur une copie du modèle par défaut. Ceci parce que les mises à jour du programme vont écraser vos modifications.
Les modèles GUI se trouvent dans le dossier de configuration "gui". A l'intérieur, vous trouverez un readme.txt et un dossier "default". Pour créer un modèle personnalisé, copier le dossier par défaut et renommez-le par exemple en "monGUI" ou quelque chose à votre convenance. Ensuite, après être sorti de LDCad, vous devrez définir ce modèle comme modèle à utiliser en éditant le fichier "main.cfg" du dossier "config".
Dans "main.cfg" recherchez la ligne "[guiTemplate]", et juste en dessous changez "name=default" par "name=monGUI" (ou comme vous avez nommé votre copie du dossier). Après avoir enregistré le fichier LDCad sera configuré pour utiliser votre modèle alternatif plutôt que celui par défaut. Mais comme il est actuellement identique vous ne noterez aucune différence.
Le dossier des modèles GUI contient principalement des images png. Ce sont toutes les textures et symboles utilisées pour afficher les boutons, les icônes, etc. Un sous-dossier "menuBar" contient plus particulièrement des images utilisées par la barre d'outils et "partBinItems" pour celles du panneau pièces.
Une façon de personnaliser LDCad est de remplacer ces images par vos propres versions. Il existe certaines règles pour bien le faire. Dans la pratique, il est préférable d'utiliser les mêmes dimensions autant que possible, car certaines d'entre elles sont semi-codées en dur ou présumés d'une certaine dimension pour forcer certaines mises en page. Il est également préférable d'appliquer la transparence chaque fois que l'original l'utilise.
Quelques images seront automatiquement forcées à être transparentes si elles ne le sont pas. Ceci est fait en utilisant le pixel supérieur gauche comme couleur d'arrière-plan. A cet effet, il est recommandé de s'assurer de que ce pixel est quelque chose d'utile dans la plupart des cas.
Le fichier "main.gui" se trouve parmi les images et devrait être présent dans tous les dossiers de modèle GUI. Le fichier sert à définir toutes les couleurs et polices utilisées et est probablement des plus faciles à régler.
"main.gui" est en fait un fichier ini ordinaire qui contient deux sections, à savoir : options et fonts.
La section options ne détient actuellement que des définitions de couleur formatées comme suit :
colorName=R G B
Où R, G et B sont des nombres compris entre 0 et 1 qui indiquent les valeurs du composant rouge, vert et bleu de la couleur indiquée.
La plupart des noms de couleur devraient facilement vous aider à comprendre où ils sont utilisés (pour ceux qui ont des notions d'anglais). Juste s'assurer d'avoir les couleurs d'arrière-plan et de premier plan contrastées pour rester visibles.
La section des polices vous permet de définir le nom de la police de caractères et sa taille pour afficher tous les textes dans l'interface graphique OpenGL. Ceci est fait en utilisant le format suivant :
itemName=fontName1, fontName2, fontName3, ...., fontSize
fontName est le nom du fichier d'une police se trouvant dans le dossier des polices du système (OS). LDCad utilise ce nom pour rechercher un fichier .ttf ou .ttc en utilisant les emplacements de recherche de polices.
Les emplacements de recherche de polices par défaut diffèrent suivant le système (l'info exact est donnée dans les fichiers journaux), mais LDCad cherchera en premier à l'intérieur du dossier des gabarits. Alors, vous pouvez mettre le fichier ttf ou ttc là-dedans.
Si nécessaire vous pouvez également étendre les emplacements de recherche de police en modifiant la section userFontLocations du fichier main.cfg, mais cela entraînera que votre configuration soit non portable.
Si le premier nom de police n'est pas trouvé ou est non valide, le second est pris en compte et ainsi de suite. Lorsque vous créez un modèle universel n'oubliez pas de fournir des noms de polices distinctes pour Windows et Linux, car il y a très peu de polices disponibles à la fois sur les deux plates-formes.
Une autre chose à garder à l'esprit est le fait qu'une police soit à espaces constant ou non. Si un élément utilise ce type d'espacement dans le modèle par défaut il est probablement préférable de faire la même chose dans votre propre modèle. Ceci parce que LDCad pourrait le supposer, en tout cas dans certains endroits.
Et comme note finale, il pourrait être important de garder un œil sur le sous-ensemble Unicode qu'une police prend en charge. LDCad peut afficher tout caractère unicode 16 bits, mais ne sera en mesure de le faire que si la police donnée possède les informations nécessaires.
fontSize définit la taille en pixels (px) pour afficher la police. Veillez à ce que la police sélectionnée prenne en charge cette taille et soit également lisible.
S'il vous plaît, notez que pour l'instant, toutes les polices ne se dimensionneront pas parfaitement dans tous les cas, en utilisant des types de polices de dimensions (très) différentes, cela sera amélioré dans une future version de LDCad.
Il y a actuellement trois types de fichiers qui contrôlent le contenu du panneau couleurs :
Ce fichier est situé dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/config", ou de façon générique "%appdata%/LDCad/config".
Il contient vos couleurs favorites, sans ordre particulier. Les couleurs favorites peuvent être rendues visibles dans le panneau couleurs en configurant les groupes du panneau couleurs du genre "favorite".
Il n'est pas bon d'éditer ce fichier en dehors de LDCad. Vous pouvez cependant le supprimer, une fois LDCad fermé, pour effacer toutes les couleurs favorites. Le fichier sera récréé au prochain démarrage du programme.
Ce fichier est situé dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/config", ou de façon générique "%appdata%/LDCad/config".
Il contient l'historique des couleurs utilisées. Les couleurs utilisées peuvent être rendues visibles dans le panneau couleurs en configurant les groupes du panneau couleurs du genre "history".
Il n'est pas bon d'éditer ce fichier en dehors de LDCad. Vous pouvez cependant le supprimer, une fois LDCad fermé, pour effacer l'historique des couleurs utilisées. Le fichier sera récréé au prochain démarrage du programme.
Ces fichiers sont situés dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/colorBin", ou de façon générique "%appdata%/LDCad/config".
Ces fichiers sont utilisés pour configurer le contenu du panneau couleurs dans LDCad. Cela se fait en fournissant un fichier .cbg pour chaque menu ou camembert de l'arborescence du panneau couleurs.
Le fichier "sysRoot.cbg" se situe au même endroit.
Le sous-dossier "default" contient les fichiers .cbg officiels (par défaut) de LDCad. Il n'est pas bon d'éditer les fichiers de ce sous-dossier.
Si vous voulez ajouter ou créer des groupes personnalisés au panneau couleur, vous devez le faire en ajoutant un second sous-dossier en plus de celui par défaut. Par exemple en copiant et renommant le sous-dossier "default". Tout ce dossier est automatiquement traité et ajouté au panneau s'il contient un fichier "root.cbg".
Après avoir ajouté le second sous-dossier, votre nouvelle configuration deviendra visible dans le panneau couleurs en allant à la racine du panneau (Main group) qui affiche la liste des sous-dossiers au lieu de la liste de la configuration par défaut. Ce comportement ne s'applique que s'il y a plusieurs sous-dossiers dans le dossier colorBin (???). Sinon, il y aura le contenu unique du sous-dossier par défaut.
Les fichiers .cbg sont de simples fichiers texte qui contiennent une collection d'options et éléments. Pour en savoir plus sur leur structure voir : http://www.melkert.net/LDCad/tech/colBin (en Anglais).
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / LDraw / Configuration files".
LDraw configuration files : Fichiers de configuration LDraw (Fournis de base avec la bibliothèque LDraw) :
Nota : Les changements seront actifs au prochain lancement de LDCad.
Il y a actuellement cinq types de fichiers qui contrôlent le contenu du panneau pièces :
Ce fichier est situé dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/config", ou de façon générique "%appdata%/LDCad/config".
Il contient vos pièces favorites, sans ordre particulier. Les pièces favorites peuvent être rendues visibles dans le panneau pièces en configurant les groupes du panneau pièce du genre "favorite".
Il n'est pas bon d'éditer ce fichier en dehors de LDCad. Vous pouvez cependant le supprimer, une fois LDCad fermé, pour effacer toutes les pièces favorites. Le fichier sera récréé au prochain démarrage du programme.
Ce fichier est situé dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/config", ou de façon générique "%appdata%/LDCad/config".
Il contient l'historique des pièces utilisées. Les pièces utilisées peuvent être rendues visibles dans le panneau pièces en configurant les groupes du panneau pièces du genre "history".
Il n'est pas bon d'éditer ce fichier en dehors de LDCad. Vous pouvez cependant le supprimer, une fois LDCad fermé, pour effacer l'historique des pièces utilisées. Le fichier sera récréé au prochain démarrage du programme.
Ce fichier est situé dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/config", ou de façon générique "%appdata%/LDCad/config".
Ce fichier est un fichier de cache utilisé pour garder l'arbre du panneau pièces à jour par rapport avec ses sources pbg.
Ne PAS éditer ce fichier, car il est maintenu par LDCad. Vous pouvez cependant le supprimer en cas de besoin. LDCad le régénérera au prochain démarrage du programme. Il en résultera un message "updating content..." (mise-à-jour du contenu) dans le panneau pièces.
Ces fichiers sont situés dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/config", ou de façon générique "%appdata%/LDCad/config".
Ces fichiers sont essentiellement des fichiers cache contenant des données de l'entête de tous les fichiers des bibliothèques LDraw (Officielle et Non officielle) actuellement disponibles dans LDCad.
Ne PAS éditer ces fichiers, car ils sont maintenus par LDCad. Vous pouvez cependant les supprimer en cas de besoin. LDCad le régénérera au prochain démarrage du programme. Il en résultera un message "updating content..." (mise-à-jour du contenu) dans le panneau pièces.
Ces fichiers sont situés dans le dossier "C:/Users/tchang/AppData/Roaming/LDCad/partBin", ou de façon générique "%appdata%/LDCad/partBin".
Ces fichiers sont utilisés pour configurer le contenu du panneau pièces dans LDCad. Cela se fait en fournissant un fichier .pbg pour chaque groupe de l'arborescence du panneau pièces.
Le fichier "sysRoot.pbg" se situe au même endroit.
Le sous-dossier "default" contient les fichiers officiels de configuration (par défaut) de LDCad. Il n'est pas bon d'éditer les fichiers de ce sous-dossier.
Si vous voulez ajouter ou créer des groupes personnalisés au panneau pièces, vous devez le faire en ajoutant un second sous-dossier en plus de celui par défaut. Par exemple en copiant et renommant le sous-dossier "default". Tout nouveau dossier est automatiquement traité et ajouté au panneau s'il contient un fichier "root.pbg".
Après avoir ajouté le second sous-dossier, votre nouvelle configuration deviendra visible dans le panneau pièces en allant à la racine du panneau (Main group) qui affiche la liste des sous-dossiers au lieu de la liste de la configuration par défaut. Ce comportement ne s'applique que s'il y a plusieurs sous-dossiers dans le dossier partBin (???). Sinon, il y aura le contenu unique du sous-dossier par défaut.
Les fichiers .pbg sont de simples fichiers texte qui contiennent une collection d'options et éléments. Pour en savoir plus sur leur structure voir : http://www.melkert.net/LDCad/tech/partBin (en Anglais).
Dans le sous-dossier "LDCad/partBin/default/sets" se trouvent les fichiers .pbg listant les pièces contenues dans un ensemble référencé et une image .png de 256x256 pixels de chaque ensemble.
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / LDraw / Search (library) paths".
Current item properties : Propriétés de l'item courant (sélectionné dans la liste en dessous) :
Search order : Ordre de recherche :
Accept : Valide les modifications.
Discard : Annule les modifications.
Nota : Les changements seront actifs au prochain lancement de LDCad.
Voir également : Comment changer l'emplacement de la bibliothèque LDraw ?
Une bibliothèque fantôme LDCad (shadow library) est une collection de fichiers LDraw (pièces) organisés de façon identique aux fichiers la bibliothèque LDraw officielle. Ces fichiers peuvent être placés soit dans un dossier soit compressés dans un fichier zip renommé en .csl.
Lorsqu'une bibliothèque fantôme est affectée à un emplacement de bibliothèque existante (à l'aide de la boîte de dialogue "LDraw search paths" du menu "Prefs / LDraw / Search (library) paths") elle sera chargée chaque fois qu'un élément de la bibliothèque correspondante est chargé.
Par exemple, si la pièce 3001.dat est chargée à partir du dossier des pièces de la bibliothèque officielle, LDCad vérifiera s'il y a également un fichier 3001.dat à l'intérieur du dossier des pièces de la bibliothèque fantôme. Dans l'affirmative il chargera également ce fichier. Ensuite, il va ajouter toutes les informations utiles (comme une méta-commande !LDCAD snap) aux données en mémoire de la pièce 3001.dat officielle.
La bibliothèque fantôme officielle est principalement utilisée pour ajouter des informations d'accrochage pièce à un groupe croissant de pièces officielles en utilisant le fichier de bibliothèque fantôme par défaut offLibShadow.csl.
Elle donne également les numéros des pièces symétriques.
Si vous souhaitez modifier la bibliothèque fantôme par défaut (par exemple pour ajouter des informations d'accrochage pièce ou faire une correction/modification mineure dans une pièce particulière), vous devrez tout d'abord copier/renommer le fichier en .zip, puis le décompresser à l'aide de n'importe utilitaire gérant le format ZIP (par défaut l'explorateur Windows). Pour pouvoir utiliser la bibliothèque fantôme modifiée, vous devrez également mettre à jour l'emplacement de recherche LDraw pour cette bibliothèque. La boîte de dialogue vous permettra de choisir soit un dossier normal (folder) soit un fichier compressé .CSL (archive).
Editer la version fantôme des fichiers .dat peut se faire à l'aide de n'importe quel éditeur de texte brut. Avant d'apporter des modifications, vous pourriez vouloir parcourir quelques-uns des fichiers .dat existants (parmi les plus grands) et lire le fichier ruleInfo.txt inclus pour commencer.
La manière de définir l'attraction pièce se trouve dans le chapitre sur les méta-commandes LDCad.
Lorsque vous avez terminé de travailler sur une bibliothèque fantôme, vous pouvez la compresser à nouveau en .ZIP et la renommer en .CSL car le traitement de la version compressée sera plus rapide pendant le chargement des modèles.
Partager vos modifications : Si vous ajoutez et/ou corrigez des choses dans la bibliothèque fantôme officielle, veuillez le signaler à l'auteur du programme en écrivant un message (en anglais) sur mailing it to author. De cette façon il pourra examiner vos modifications ou ajouts pour une future mise-à-jour et en faire bénéficier tous les utilisateurs.
Emplacement des mises à jour : Roland Melkert a prévu un emplacement disponible sur GitHub pour mettre à disposition les fichiers modifiés : https://github.com/RolandMelkert/LDCadShadowLibrary. Mais cette bibliothèque étant mise à jour manuellement peut prendre du retard.
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / LDraw / User templates".
User template locations : Emplacements des gabarits utilisateur :
Nota : Les changements seront actifs au prochain lancement de LDCad.
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / Editing / Copy paste defaults".
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / Editing / Grid stepping".
Move stepping : Pas de déplacement en unité LDraw.
Rotation stepping : Pas de rotation en degrés.
Nota : Le pas d'une grille et de rotation peut être configuré avec une valeur décimale.
Nota : En v1.7 Alpha 2 : Prise en charge de la notation numérique alternative à utiliser dans les valeurs de pas de rotation. Actuellement, vous pouvez utiliser "asin X", "acos X" ou "X/Y".
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / GUI / Menubar config", onglet "Submenus", ou "Clic droit dans la barre menus + outils / GUI / Menubar config".
Submenus : Sous-menus disponibles
Liste de gauche = Liste des menus non utilisés, Liste de droite = Liste des menus affichés dans le programme.
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / GUI / Menubar config", onglet "Toolbuttons", ou "Clic droit dans la barre menus + outils / GUI / Menubar config".
Toolbuttons : Boutons de la barre d'outils disponibles
Liste de gauche = Liste des boutons non utilisés, Liste de droite = Liste des boutons affichés dans le programme.
Cette boite de dialogue s'affiche en cliquant sur le menu "Prefs / GUI / Hotkey config".
Si le programme ne fonctionne pas ou vous avez trouvé un "bug" s'il vous plaît postez-moi un courriel (dixit l'auteur), avec les détails en mettant en fichier joint un fichier listant les commandes effectuées (logFile) dans la session ou a eu lieu le problème (les fichiers logs sont dans le sous-dossier "logs" du dossier d'installation du programme). Egalement donnez une description de votre matériel (cpu, vga, os) et si c'est lié à un modèle ou un fichier envoyez une copie du fichier en question.
Cela devrait maintenant être suffisant, si quelque chose n'est pas auto-explicatif comme je le pensais ou l'espérais n'hésitez pas à poster.
TOUTES questions/suggestions/commentaires/réflexions sont bienvenus.
Vous trouverez ici des réponses aux questions que plusieurs personnes ont posées à l'auteur du programme ou jugées par lui utiles ou intéressantes.
La configuration installe-t-elle d'autres programmes ?
Comme je déteste les programmes fournis par lots plus ou moins cachés (merde), l'installation de LDCad n'installe aucun outil ou logiciel tiers. Il n'installe que les éléments réellement nécessaires à LDCad lui-même.
J'ai trouvé une configuration tierce prétendant inclure LDCad est-elle sûre à utiliser ?
Vous trouverez ci-dessous tous les outils ou installateurs tiers qui incluent LDCad et sont connus et approuvés. Tout autre site prétendant offrir une configuration contenant LDCad ne peut pas être de confiance car il aurait pu créer un programme d'installation alternatif qui pousse l'installation de tous les types d'adwares (publicités indésirables) et/ou de logiciels malveillants comme les crapwares (installé inutilement par le constructeur de l'ordinateur). Veuillez me faire (à l'auteur du programme) savoir où vous l'avez trouvé dans de tels cas.
Installateur tout-en-un LDraw : LDraw All in one installer (AIOI)
Il s'agit du package de démarrage officiel géré par LDraw.org pour le système Windows. Il comprend la bibliothèque LDraw elle-même et de nombreux outils LDraw, y compris une version récente de LDCad. L'énorme programme d'installation évite d'avoir à rassembler tous ces outils d'origines diverses pour aider les nouveaux utilisateurs à démarrer rapidement.
LDCad orienté VEX IQ par "Philo" : VEX IQ orientated LDCad by 'Philo'
Il s'agit d'une version de LDCad reconditionnée et optimisée pour fonctionner avec des pièces VEX au format LDraw au lieu de la bibliothèque LDraw par défaut orientée pièces LEGO. Cela a été fait en fournissant des fichiers de support et de configuration alternatifs. L'exécutable principal de LDCad est identique à celui trouvé sur mon site.
Quelle(s) clé(s) LDCad utilise-t-il dans le registre Windows ?
LDCad lui-même n'utilise pas du tout le registre Windows, seulement des fichiers de configuration. La configuration utilisera certaines clés de registre pour garder une trace de l'emplacement d'installation, etc., mais c'est un comportement normal et attendu de tout programme d'installation.
Qu'est-ce qui se passe avec l'interface bizarre / démodée / laide / etc ?
La raison principale est que je l'aime moi-même. La deuxième raison, plus technique : tout est dessiné manuellement par mes propres routines gui OpenGL. Ce que je choisis de garder simple pour le moment. J'ai également un plan à long terme pour rendre le programme utilisable en plein écran OpenGL (comme un jeu), à ce moment-là même les dialogues seront gérés en utilisant mes propres routines.
Utiliser également un pur OpenGL comme interface principale limite les dépendances du système d'exploitation en s'assurant que le programme ressemble et agit exactement de la même manière sur n'importe quelle plate-forme (il suffit de comparer la version Windows et Linux pour voir ce que je veux dire).
Dans quel langage est écrit LDCad et quels outils utilise-t-il ?
LDCad est écrit en C++ simple et compilé avec GCC (sous minGW sous Windows). Depuis la version 1.4, il utilise les bibliothèques tierces suivantes :
Generic, l'interface graphique générique (non OpenGL) est gérée par wxWidgets, mais j'essaie de minimiser les dépendances de LDCad à ce sujet afin qu'une migration vers des alternatives ne soit pas très importante à l'avenir. Cela me permet de continuer à prendre en charge des plates-formes supplémentaires.
Les en-têtes GLEW sont utilisés pour parler avec OpenGL.
Boost est également utilisé, mais pour le moment je n'utilise que ses trucs pour threading / mutex.
Moteur de script LUA, pour le script :)
Rendu des polices freeType afin de rendre le texte d'aspect professionnel en utilisant OpenGL.
Et actuellement, j'utilise code::blocks comme éditeur principal pendant le développement.
Pourquoi LDCad n'est-il pas open source ?
C'est principalement un choix personnel car je veux vraiment (pour le moment) garder un contrôle total sur les fonctionnalités et les "secrets" internes. Mais si jamais je perds de l'intérêt pour ce projet, je le rendrai open source et/ou je donnerai le code à LDraw.org.
Comment activer l'attirance aux pièces ?
L'attirance ou accrochage aux pièces est désactivé par défaut car il n'est pas disponible pour toutes les pièces ce qui peut prêter à confusion pour les nouveaux utilisateurs LDraw. Vous pouvez cependant l'activer à tout moment à l'aide de la boussole en bas à gauche. Elle affichera (entre autres) une étiquette "GS" en rouge. Cela signifie "attirance à la grille", si vous cliquez dessus, elle se transformera en "PS" en vert signifiant "attirance aux pièces".
L'attirance aux pièces agit bizarrement, les choses semblent mal s'accrocher et/ou s'accrocher partiellement
L'attirance pièces est une chose très compliquée à faire et à implémenter. Même l'implémentation la plus avancée ne se comportera pas parfaitement ou comme prévu dans toutes les situations. Compte tenu de cela, j'ai décidé de n'implémenter que l'attirance de base.
La fonction n'est donc utilisée que pour effectuer le placement initial de nouvelles pièces. Cela doit être fait à l'aide de la grille active (relative) réglée sur une orientation appropriée. Après le placement initial, vous pouvez toujours faire quelques ajustements manuels en utilisant par exemple l'outil de manipulation.
Cela semble être un moyen "bon marché", mais en pratique, cela peut en fait être une meilleure façon de faire les choses, car vous n'aurez pas à combattre le "système" pour mettre les choses en place que les implémentations plus complexes ne permettront pas.
Certaines améliorations sont cependant prévues, mais le système restera toujours optionnel et donc essentiellement un outil d'aide uniquement.
Voir la correction de certaines pièces sur le forum LDraw : [LDCad] Part Snapping missing/errors
Je n'aime pas la façon dont l'appareil photo (point de vue) tourne, peut-on faire quelque chose à ce sujet ?
Par défaut, LDCad utilise le mécanisme de rotation "Trackball" (boule de commande) comme contrôle de la caméra. Cette méthode permet une liberté de rotation totale. Pour les utilisateurs non CAO, cela pourrait être un peu étrange. Pour ces utilisateurs, LDCad offre un contrôle de rotation "Spin" plus commun, qui agit essentiellement comme si votre modèle était posé sur une plaque tournante.
Vous avez activé le contrôle de la caméra à partir du panneau point de vue dans le coin inférieur gauche de la zone d'édition. Il affichera "TBL" en jaune en bas à droite de ce panneau si vous êtes en mode boule de commande. Cliquez dessus pour le changer en "SPN" pour activer le mode de caméra plaque tournante.
Comment puis-je rechercher une pièce par numéro de pièce ?
Vous pouvez rechercher n'importe quelle pièce dans la bibliothèque à l'aide de la case spéciale de recherche indiquée par l'icône de la figurine tenant une loupe du panneau pièces.
Pendant que ce groupe est actif, vous pouvez rechercher des pièces en tapant un ou plusieurs mots-clés pendant que le curseur de la souris est à l'intérieur du rectangle affichant par défaut "[no filter]". C'est la même chose que pour n'importe quel autre groupe, mais au lieu de limiter la recherche au contenu du groupe, le groupe de recherche spécial affichera toutes les pièces de la bibliothèque correspondant aux mots-clés fournis.
Par défaut, le filtre recherche uniquement dans les descriptions des pièces. Pour rechercher également sur le numéro des pièces, vous devez modifier la configuration du filtre du panneau pièces.
Pour ce faire, ouvrez la boîte de dialogue du filtre en cliquant sur la zone de filtre affichant normalement "[no filter]".
Dans la boîte de dialogue du filtre, cochez "Name" (Nom) dans la zone "Match on" (Recherche sur) et cliquez sur le bouton en bas à droite "Options ...". Dans le menu résultant, sélectionnez "Apply to all and use as default" (Applique à tous les filtres et utilise par défaut). Enfin, cliquez sur "Ok" pour fermer la boîte de dialogue.
A partir de maintenant, tout texte que vous tapez dans le champ de filtre sera également vérifié par rapport aux numéros de pièce, alias noms de pièce (noms de fichier).
Comment (dés)ancrer de (nouveaux) panneaux ?
Vous pouvez ancrer n'importe quel panneau (par exemple un panneau de pièces, un panneau de couleurs ou un panneau code source) en maintenant la touche Ctrl enfoncée tout en faisant glisser le panneau par sa barre supérieure. Pour désancrer un panneau, saisissez-le n'importe où dans son espace "mort" et commencez à le faire glisser. Pour éviter le désancrage indésirable ou accidentel, utilisez les options de verrouillage dans le menu "Prefs / GUI".
Où LDCad conserve-t-il ses fichiers de configuration ?
Si vous avez installé LDCad à l'aide de la procédure d'installation standard ou de l'AIOI de LDraw, tous les fichiers de configuration se trouveront à l'emplacement courant des données utilisateurs de Windows. Il s'agit généralement de quelque chose comme "C:\Users\Roland\AppData\Roaming\LDCad" (remplacez "Roland" par votre propre nom d'utilisateur). Pour être sûr de l'emplacement, ouvrir l'explorateur de fichiers Windows, et de taper "%appdata%\LDCad" dans la barre d'emplacement.
Si vous avez utilisé la version archive pour Windows (.7z) ou Linux (.bz2), les fichiers de configuration seront situés dans des dossiers à l'intérieur du dossier LDCad principal, assurez-vous de ne PAS supprimer les dossiers "docs", "resources" et "seeds" car ils font partie de l'installation de base de LDCad.
Comment réinitialiser la configuration LDCad ?
Vous pouvez réinitialiser une partie des paramètres de LDCad en supprimant ses fichiers de configuration. Si vous souhaitez uniquement réinitialiser les options principales, la suppression du fichier "config\main.cfg" sera suffisante, assurez-vous de fermer LDCad avant de supprimer les fichiers.
Voir aussi le chapitre "Où LDCad conserve-t-il ses fichiers de configuration ?" ci-dessus.
Comment changer l'emplacement de la bibliothèque LDraw ?
Vous pouvez modifier n'importe quel emplacement de recherche LDraw à l'aide de la boîte de dialogue "Search (library) paths..." accessible via le menu "Prefs / LDraw". N'oubliez pas de mettre également à jour l'emplacement de LDConfig.ldr car il se trouve généralement au même endroit que la bibliothèque officielle. La modification de l'emplacement de LDConfig.ldr se fait via "Configuration files..." du même menu "Prefs / LDraw".
Une alternative (plus simple) serait de supprimer la configuration de LDCad (fichier main.cfg), afin de forcer une nouvelle demande de l'emplacement de la bibliothèque LDraw au prochain démarrage de LDCad.
Comment utiliser des pièces non officielles ?
LDCad peut être configuré pour utiliser plusieurs bibliothèques LDraw à la fois, y compris les bibliothèques non officielles. Pour l'utiliser, téléchargez la bibliothèque LDraw non officielle complète et placez-la dans un endroit approprié (par exemple à côté de la bibliothèque officielle).
Lorsque vous avez terminé de télécharger la bibliothèque non officielle, ouvrez le menu "Prefs" de la barre d'outils en haut à gauche de la fenêtre LDCad. Ensuite, choisissez "LDraw" la première ligne du menu, suivi à nouveau de la première ligne "Search (library) paths...".
Cela ouvrira une boîte de dialogue répertoriant les chemins de recherche LDraw. Par défaut, elle n'affichera que deux lignes. Cliquez sur la première, de type "Official" (officiel), suivi d'un clic sur le bouton "New". Cela va dupliquer la ligne et l'ajouter à la liste.
Maintenant, configurez cette nouvelle ligne pour qu'elle pointe vers la nouvelle bibliothèque, en changeant son type en "Unofficial library" (Bibliothèque non officielle) et changez son emplacement pour pointer vers le fichier ldrawunf.zip téléchargé, vous le faites en cliquant sur le bouton "Browse archive" (Parcourir l'archive) à côté de la "Location" (localisation) actuelle. Cela ouvrira une boîte de dialogue de navigateur de fichiers que vous pouvez utiliser pour localiser le fichier zip.
Une fois terminé, fermez toutes les boîtes de dialogue en utilisant les boutons "Ok" ou "Accept" et redémarrez LDCad. Au redémarrage, LDCad aura besoin d'un certain temps pour analyser à nouveau les bibliothèques. Une fois terminé, toutes les pièces non officielles seront utilisables. Elles seront mélangées dans le panneau pièces parmi les officielles dans leur ensemble.
Pourquoi les modèles contenant des pièces flexibles sont-ils si gros ?
La taille du fichier pour les modèles contenant des pièces flexibles dites pièces dynamiques (par exemple des flexibles pneumatiques) peut facilement être de quelques mégaoctets car la plupart des modèles de pièces flexibles utilisent par défaut la méthode de haute qualité de déformation (HQ) pour générer la forme de la pièce. Cela signifie que LDCad fournit dans le fichier le détail de la géométrie de la pièce. C'est à dire un code LDraw de bas niveau.
Sur les disques durs modernes cela ne devrait pas être un gros problème, mais si vous voulez vraiment ou avez besoin de fichiers plus petits, vous pouvez toujours utiliser les versions LQ de certaines pièces flexibles ou reconfigurer les pièces existantes HQ en LQ dans votre modèle. Cela n'est pas une tâche facile, alors assurez-vous de choisir le bon type dès le départ.
LDCad se bloque et l'une des dernières lignes du journal mentionne un "vertex shader" de ligne conditionnelle.
Ceci est presque certainement (surtout si la version OpenGL est inférieure à 2.0) causé par un support d'ombrage insuffisant ou bogué par le pilote OpenGL ou VGA.
La solution de contournement actuelle consiste à désactiver tous les ombrages en remplaçant l'option "shadingEnabled=true" (sous "[rendu]") par "shadingEnabled=false" dans le fichier main.cfg (situé dans le dossier config).
Si le fichier main.cfg n'est pas encore présent, vous devez créer un nouveau fichier appelé "main.cfg" dans le dossier config (qui sera présent car forcé au démarrage). Lors de la création du fichier, assurez-vous que son contenu indique :
[rendering] shadingEnabled=false
Si vous avez besoin d'aide supplémentaire, n'hésitez pas à envoyer un e-mail à l'auteur du programme.
Chaque fois que je charge un modèle, je ne vois que des croix rouges, de quoi s'agit-il ?
LDCad est soit mal configuré en ce qui concerne l'emplacement de la bibliothèque LDraw ou l'emplacement donné n'est pas disponible et/ou lisible du tout. Assurez-vous que la dernière bibliothèque LDraw est installée. Si c'est le cas, validez/modifiez les paramètres LDCad afin qu'ils pointent vers l'emplacement correct.
Une alternative (plus simple) serait de supprimer la configuration (main.cfg) LDCad afin de forcer la nouvelle demande de la bibliothèque LDraw au prochain démarrage.
Les pièces ne sont pas entièrement dessinées ou apparaissent "à l'envers" / corrompues.
Cela peut être dû au pilote "Open Source Readeon Linux". Le pilote propriétaire de AMD n'a pas ce problème. Les versions plus récentes du pilote "oss" pourraient le corriger à l'avenir, je suis également toujours à la recherche de solution à ce problème.
Dans toutes les autres situations, la mise à niveau vers la dernière version du pilote peut résoudre le problème.
Nota 02-2023 : Un problème similaire peut se produire si la configuration ne pointe pas sur la bonne bibliothèque de pièce (Location) ou n'est pas en officielle (Official library) par défaut. Voir : Bibliothèque de pièces.
Les arêtes des pièces ne sont pas (entièrement) visibles sous certains angles (et/ou en mode ortho).
Cela peut être dû au pilote "Open Source Readeon Linux". Le pilote propriétaire de AMD n'a pas ce problème. Les versions plus récentes du pilote "oss" pourraient le corriger à l'avenir, je suis également toujours à la recherche de solution à ce problème.
Dans toutes les autres situations, la mise à niveau vers la dernière version du pilote peut résoudre le problème.
L'écran se corrompt (semble se réduire ou monter) à chaque réaffichage.
Cela est dû à l'option "reuse front buffer" (réutiliser le tampon avant). Cette option est en quelque sorte un "hack" et ne se comportera donc pas toujours comme prévu.
Sélectionnez une méthode de rendu d'image différente dans le menu des préférences OpenGL. A la ligne "Frame render method" sélectionnez "FBO" qui est la valeur préférentielle. Si cela entraîne également des problèmes, définissez-la sur "basic".
Si cela est impossible, car vous ne pouvez pas voir ce que vous faites, et/ou si "FBO" ne fonctionne pas, essayez le correctif de problème lié à FBO ci-dessous.
L'écran est vide ou partiellement dessiné.
Lorsque vous utilisez une version OpenGL basic, la prise en charge de la fonction FBO peut être insuffisante. Cela pourrait être résolu en le désactivant. Cela peut cependant être un problème car vous ne voyez pas ce que vous faites.
Heureusement, vous pouvez également modifier les options en modifiant manuellement le fichier de configuration. Avant de procéder, assurez-vous de fermer d'abord LDCad. Ouvrez ensuite le fichier main.cfg (situé dans le dossier config), et recherchez une ligne commençant par "frameRenderMethod=". Modifiez cette ligne en "frameRenderMethod=basic" (le tout sans les guillemets).
Après avoir enregistré le fichier, redémarrez LDCad pour voir s'il affiche maintenant un écran normal. Si c'est le cas, ce sera beaucoup plus lent mais cela est mieux que rien :). S'il ne s'affiche toujours pas correctement ou si rien d'autre n'est en jeu, n'hésitez pas à envoyer un e-mail à l'auteur dans un tel cas.
Certaines images apparaissent sous forme de croix blanches.
Cela se produit lorsque l'image de texture nécessaire au rendu de l'image est introuvable ou ne peut être chargée. Veuillez vous assurer que LDCad est installé correctement et dispose d'un accès complet en lecture à ses emplacements de configuration.
Cela peut également être dû à des pilotes OpenGL très obsolètes (version basic) qui pourraient ne pas être en mesure de gérer la taille et/ou les dimensions de l'image.
Consultez le fichier journal de LDCad pour connaître la raison exacte de l'échec.
Les modèles utilisant la mise en miroir ou la mise à l'échelle ne s'affichent pas correctement.
Cela est dû à un manque d'informations sur les normales et/ou d'information BFC. Dans la pratique, il est préférable de ne pas utiliser du tout la mise en miroir car cela provoque une utilisation "irréaliste" (par exemple, on ne peut pas le faire avec de vraies pièces Lego). Sinon, ce n'est pas vraiment un problème à part la qualité du rendu dégradée.
Voici une liste des impressions suite aux tests effectués de la version 1.5 Beta 1b à la version 1.6 Alpha 4, ainsi que les améliorations souhaitables ou à envisager qui amélioreraient les possibilités du programme et sa facilité d'utilisation.
Le programme LDCad est développé par Roland Melkert. Vous pouvez le retrouver sur sa page : http://www.melkert.net/LDCad (en Anglais).
Cette page en français est basée sur les tests de la version 1.6 Alpha 4 et la documentation de l'auteur.
Traduction et Adaptation : J.C. Tchang.