Aller au contenu

Pour aller plus loin en LISP

Vous avez déjà écrit des programmes LISP? Vous souhaitez vous perfectionner? Vous butez sur un problème de programmation? Les termes de DCL, ActiveX, réacteur, compilation ne vous sont pas inconnus? Ce forum est pour vous.


1 362 sujets dans ce forum

  1. Les dictionnaires 1 2

    • 28 réponses
    • 25,6 k vues
  2. Ces listes qui n\'en sont pas

    • 9 réponses
    • 15,2 k vues
  3. Pourquoi Lisp?

    • 1 réponse
    • 9,9 k vues
    • 1 réponse
    • 78 vues
    • 2 réponses
    • 181 vues
    • 0 réponse
    • 199 vues
    • 3 réponses
    • 179 vues
    • 1 réponse
    • 143 vues
    • 1 réponse
    • 110 vues
    • 5 réponses
    • 292 vues
  4. TCASE en command

    • 2 réponses
    • 183 vues
    • 2 réponses
    • 272 vues
    • 6 réponses
    • 314 vues
    • 2 réponses
    • 222 vues
  5. Creer un nouveau fichier DWG

    • 7 réponses
    • 452 vues
  6. Remplissage des étiquettes

    • 0 réponse
    • 152 vues
    • 0 réponse
    • 197 vues
    • 0 réponse
    • 194 vues
    • 1 réponse
    • 249 vues
    • 10 réponses
    • 421 vues
    • 9 réponses
    • 329 vues
  7. Changement calque CN selon altitude

    • 0 réponse
    • 256 vues
    • 0 réponse
    • 238 vues
  8. ListBox

    • 4 réponses
    • 337 vues
    • 29 réponses
    • 1,3 k vues


  • Statistiques des forums

    • Total des sujets
      49,4 k
    • Total des messages
      299,4 k
  • Sujets

  • Messages

    • Encore merci Luna pour ton accompagnement.... Le fait d'échanger de la sorte sur la composition, le comportement, la modification de mon lisp me fait beaucoup progresser... J'ai fait la modification du getini en getkword Effectivement la liste des options disponibles est bien composée de mots clés (les noms de mes grues), mais la sélection d'un type de grue, que ce soit en cliquant sur le nom dans la bare des taches ou en le tapant au clavier ne "lance" pas la suite de la macro. Y'a t'il un autre endroit où il convient de modifier le getint ?  
    • Coucou, En me basant sur les lignes de codes suivantes : ;; ---------[ DEVELOPPER PARAMS ]--------- ;; ;; This section allows the developper to change quickly the parameters used by the program based on their need ;; Each parameters can be set as constants, ignored (= nil) or develop a full question if it needs to be set ;; by the user instead. (setq dimtxt nil ; Defines the text height (nil → use DIMTXT value instead) angtxt nil ; Defines the axis angle on which the text will be aligned on (nil → 0 (East)) algtxt nil ; Defines the text alignment mode (cd. MTEXT(DXF), code 71) (nil → 5 (Middle Center)) radiusPrec nil ; Defines the precision (number of decimal) for the crane boom length (nil → 2) weightPrec nil ; Defines the precision (number of decimal) for the weight (nil → 2) maskBoxScale 1.2 ; Defines the fill box scale value for the text background mask (nil → no mask) capacities ; Defines the different capacities based on the crane model and their length '( ;; ---------[ GRUE_DIAG219 ]--------- ;; (219 (25 (20 20) (25 8.4)) (30 (20 10) (25 8.6) (30 7)) (35 (21 10) (25 8.5) (30 6.9) (35 5.8)) (40 (20 10) (25 8.4) (30 6.9) (35 5.8) (40 5)) (45 (20 10) (25 8.3) (30 6.8) (35 5.7) (40 4.9) (45 4.3)) (50 (20 10) (25 8.3) (30 6.7) (35 5.6) (40 4.7) (45 4) (50 3.5)) (55 (20 10) (25 7.9) (30 6.4) (35 5.4) (40 4.5) (45 3.9) (50 3.3) (55 2.95)) (60 (20 9.4) (25 7.3) (30 6) (35 4.6) (40 4.2) (45 3.6) (50 3.1) (55 2.6) (60 2.2)) (65 (20 8.88) (25 6.9) (30 5.6) (35 4.6) (40 3.9) (45 3.3) (50 2.85) (55 2.4) (60 1.95) (65 1.6)) ) ; End GRUE_DIAG219 params ) ) ; End of DEVELOPPER PARAMS ;; You can change the default value below if needed also (setq dimtxt (cond (dimtxt) ((getvar "DIMTXT"))) angtxt (cond (angtxt) (0)) algtxt (cond (algtxt) (5)) radiusPrec (cond (radiusPrec) (2)) weightPrec (cond (weightPrec) (2)) ) ; End default params values Pour ajouter des nouveau modèles de grues, il suffit d'ajouter une liste comme ceci : ;; ---------[ GRUE_DIAG219 ]--------- ;; (219 (25 (20 20) (25 8.4)) (30 (20 10) (25 8.6) (30 7)) (35 (21 10) (25 8.5) (30 6.9) (35 5.8)) (40 (20 10) (25 8.4) (30 6.9) (35 5.8) (40 5)) (45 (20 10) (25 8.3) (30 6.8) (35 5.7) (40 4.9) (45 4.3)) (50 (20 10) (25 8.3) (30 6.7) (35 5.6) (40 4.7) (45 4) (50 3.5)) (55 (20 10) (25 7.9) (30 6.4) (35 5.4) (40 4.5) (45 3.9) (50 3.3) (55 2.95)) (60 (20 9.4) (25 7.3) (30 6) (35 4.6) (40 4.2) (45 3.6) (50 3.1) (55 2.6) (60 2.2)) (65 (20 8.88) (25 6.9) (30 5.6) (35 4.6) (40 3.9) (45 3.3) (50 2.85) (55 2.4) (60 1.95) (65 1.6)) ) ; End GRUE_DIAG219 params Le premier élément de la liste (ici 219) sert de clé. En l'état actuel j'ai considéré que les clés étaient de type integer mais cela peut se changer "relativement" facilement (il faut cependant modifier le code également un peu plus bas, ligne 88 du fichier : (getkdh (quote (getint msg)) ;; <-- line 88 "\nVeuillez sélectionner le type de grue" (list (apply 'strcat (mapcar '(lambda (x) (strcat (vl-princ-to-string (car x)) " ")) capacities))) ": " (caar capacities) "" ;You can add any help message for this question in order to guide the users on the options ) Remplacer (getint) par (getkword), comme ceci : (getkdh (quote (getkword msg)) "\nVeuillez sélectionner le type de grue" (list (apply 'strcat (mapcar '(lambda (x) (strcat (vl-princ-to-string (car x)) " ")) capacities))) ": " (caar capacities) "" ;You can add any help message for this question in order to guide the users on the options ) Pour l'explication (getint) ne permet que la saisie de nombres entiers, tandis que (getkword) attend la saisie de mots clés (vui c'est dans le nom ^^). Comme tu souhaites utiliser des clés sous forme de chaîne de caractères (offrant plus de libertés), la fonction (getkword) est plus adaptée. Et pour ce qui est de la fonction (getkdh), c'est une fonction que j'utilise absolument partout qui me permet de construire facilement des questions utilisateurs (de son nom complet GET-Keywords/Default/Help). C'est sûrement un peu (très beaucoup) compliqué à lire comme programme donc c'est juste un petit plus dont je ne peux plus me passer quand je programme. C'est à la suite de ta clé principale de la liste 'capacities'. Mais comme tu as trouvé, je suppose que tout va bien ! L'angle et la hauteur de texte sont défini au début dans les "Paramètres développeurs". Pour le style de police, il s'agit du code DXF 7 (cf. >>ici<<), par défaut AutoCAD considère "STANDARD" si non précisé. Pour l'ajouter, c'est ici à la fin de la (list) : (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") (cons 10 pt0txt) (cons 40 dimtxt) (cons 50 (- angtxt (/ pi 2.))) (cons 71 algtxt) (cons 1 (strcat (rtos radius 2 radiusPrec) "m - " (rtos weight 2 weightPrec) "t")) ; ← if you need to change the text output ; ex: "25.00m - 7.90t" (cons 7 "MyWonderfulFont") ; <-- Remplacer "MyWonderfulFont" par la police souhaitée, ou bien même une variable déclarée plus haut dans les params développeurs )   Le code DXF 8 permet de définir le calque d'un objet, si pas précisé il considère le calque courant. Si jamais c'est un calque connu et toujours le même, je dirais qu'il faut faire exactement comme pour le code DXF 7. Si c'est un choix utilisateur, ma solution préférée est (ListBox) développé par (gile) (cf. >>ici<< par exemple). Sinon libre à toi. Il faut cependant checker me semble-t-il si le calque existe (à vérifier). Attention à ajouter ce code DXF 8 aux deux types d'entités crées : MTEXT et CIRCLE ! Si tu ne veux pas t'embêter, le plus simple et juste de copier/coller le contenu de chaque fichier dans 1 seul et unique fichier à la suite (par exemple tu colles tous les fichiers "Ut..." à la suite dans le fichier "GRUE.lsp"). Si je comprends bien tu insères un bloc dynamique de grue (qui n'intègre pas les courbes de charge) et le LISP a pour but de créer une nouvelle définition de bloc (si pas déjà existante) puis d'insérer une référence de ce bloc au point d'insertion du bloc grue ? Dans ce cas j'ai plusieurs questions : Pourquoi ne pas intégrer les courbes de charge directement dans le bloc (dans un calque spécifique) et ainsi il suffit uniquement de geler/dégeler le calque pour voir les courbes momentanément ? Cela permettra notamment de gérer qu'un seul et unique bloc. (Bien que je reconnais que du coup, le bloc risque d'être un peu vénère) Est-ce qu'un simple groupe peut satisfaire le besoin ? j'avais une autre question mais j'ai un trou de mémoire, sorry... Bisous, Luna
    • Bonjour   dans ce cas la je fais un MNT du plan à 2% à partir de la tête de ton fossé qui dépasse largement ton talus à droite. Ensuite je fais une comparaison entre MNT TN et MNT PLAN 2% en faisant apparaitre la ligne d'intersection en 3D Puis il ne te reste plus qu'à créer le MNT Plateforme en récurant cette ligne et la ligne de la tête de fossé.
    • Bonjour à toutes et tous, Le carroyage est dynamique, tu trouveras, en cliquant dessus dans l'espace objet, la poignée de rotation en bas à gauche de mémoire,..
    • Bonjour, Merci pour ta réponse, mais j'ai déjà un peu fouillé cette rubrique sans succès.
  • Sujets

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité