Aller au contenu

Problème de l'utilisation d'un LISP avec une fonction if


Messages recommandés

Posté(e)

Bonjour,

J'ai actuellement un problème sur mon programme.
Je veux générer des conditions afin de modifier la visibilité de deux blocs.
Tout fonctionne parfaitement sauf au moment de ma condition if.
Savez-vous où est le problème ? Voici le moment où ça bloque :  ;; Condition correcte
  (if (and
        (= (type_rsx) "PROJET")
        (= (config_nom) "TE À 3 EMBOITEMENTS")
      )
    (progn
      (setpropertyvalue bloc1 "AcDbDynBlockPropertyVisibilité1" "Te à 3 emboitements")
      (setpropertyvalue bloc2 "AcDbDynBlockPropertyVisibilité1" "reseaux pour te  a 3 emboitements (PROJET)")
    )
  )

Dessin2.dwg pi lisp.LSP PI.DCL

Posté(e)

Bonjour,

 

type_rsx est une fonction ou une variable. SI on le met entre parenthèse, c'est une fonction, donc quelque part dans le code il y a une définition du type

(defun type_rsx 

Si c'est une variable, alors il faut écrire le code

 (if (and
        (= type_rsx "PROJET")
        (= config_nom "TE À 3 EMBOITEMENTS")
      )
    (progn
      (setpropertyvalue bloc1 "AcDbDynBlockPropertyVisibilité1" "Te à 3 emboitements")
      (setpropertyvalue bloc2 "AcDbDynBlockPropertyVisibilité1" "reseaux pour te  a 3 emboitements (PROJET)")
    )
  )

 

Posté(e)

Bonjour @Loïc MICHEL

Je n'ai aucune idée du rendu que vous attendez à la suite de ce programme.
Ça aiderait pour vous répondre, car je travaille dans le flou absolu.

Ce que je peux dire d'ores et déjà, c'est qu'en plus de la remarque d'Olivier dont il faut tenir compte en supprimant ces parenthèses superflues,
vous devriez être rigoureux sur la casse des chaines de caractères, on trouve de tout, des majuscules, des accents...
Quand on teste une égalité sur des strings accent, majuscules, espaces et autres fioritures sont à proscrire urgemment !

(= "Maison" "maison") renvoie nil
(= "maison" "maison") renvoie T

Vous testez des égalités marquées correctes en commentaire alors qu'elles ne le sont pas, ça renvoie nil à chaque passage à cause de la casse.

Vous nous faites un aperçu du rendu attendu s'il vous plaît…

Amicalement

 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)
il y a 20 minutes, didier a dit :

Bonjour @Loïc MICHEL

Je n'ai aucune idée du rendu que vous attendez à la suite de ce programme.
Ça aiderait pour vous répondre, car je travaille dans le flou absolu.

Ce que je peux dire d'ores et déjà, c'est qu'en plus de la remarque d'Olivier dont il faut tenir compte en supprimant ces parenthèses superflues,
vous devriez être rigoureux sur la casse des chaines de caractères, on trouve de tout, des majuscules, des accents...
Quand on teste une égalité sur des strings accent, majuscules, espaces et autres fioritures sont à proscrire urgemment !

(= "Maison" "maison") renvoie nil
(= "maison" "maison") renvoie T

Vous testez des égalités marquées correctes en commentaire alors qu'elles ne le sont pas, ça renvoie nil à chaque passage à cause de la casse.

Vous nous faites un aperçu du rendu attendu s'il vous plaît…

Amicalement

 

 

Je souhaite réaliser un raccordement à un poteau incendie sous la forme d'une liaison en T inversé, où je pourrai modifier les pièces présentes. Cela influencera la longueur des tuyaux sur l'éclaté, et selon les choix effectués, les blocs pourront se chevaucher de différentes manières. Il y a trois parties modifiables : le réseau de gauche, le réseau de droite, et le haut, qui représente la liaison au poteau incendie.

Pour le moment, je voudrais créer un aperçu dans lequel les deux blocs se chevauchent afin d'obtenir le résultat attendu.
Le bloc A est un bloc "pièce", tandis que le bloc B est un bloc "réseaux". J'ai séparé ces deux blocs pour limiter le nombre de combinaisons à gérer manuellement.

À l'origine, je ne pensais pas que cela prendrait autant de temps, mais finalement, c'est assez long.
En réalité, il pourrait y avoir plusieurs variantes, par exemple : un réseau en "projet" en partie haute, et de l'"existant" sur la partie gauche ou droite.

MAIS, il est vrai qu'à présent, j'hésite à ne faire cela que sur un seul bloc.

L'utilisation du Lisp permettrait surtout, en plus de l'insertion d'un bloc et de son état de visibilité, d'insérer des textes en fonction du point de base (pt1) pour définir le diamètre, la nature du tuyau et le numéro d'éclaté.

Cela pourrait grandement me faciliter la création des éclatés.

 

Posté(e)

Bonjour,

Désolé pour la confusion. Pour être plus précis, les lettres dans un cercle étaient simplement un exemple utilisé pour la légende d'un projet.

Pour l'instant, l'objectif était simplement de tester si l'ajustement fonctionnait correctement. À la fin du programme, je positionnerai tous les différents états de visibilité vers un même point et définirai ensuite le point de base du bloc.

Mon programme est conçu éditer des blocs en fonction des choix de l'utilisateur. Chaque état de bloc (selon les paramètres choisis) sera ajusté, et les textes seront ajoutés à des positions fixes par rapport à l'éclaté.

Merci pour votre compréhension.

Amicalement,

Posté(e)

Bonjour @Loïc MICHEL

Je comprends que tu sois un peu perdu avec tout ça, mais il y a des points que tu sembles ignorer. D'abord, concernant la casse des chaînes de caractères, Didier a parfaitement raison de souligner ce point, et je vais même en rajouter une couche. Si tu compares "PROJET" à "projet", par exemple, cela renverra nil à chaque fois, ce qui rendrait ta condition if incorrecte. Assure-toi donc de bien respecter la casse partout où tu utilises des chaînes de caractères. Je sais, c’est une petite chose, mais parfois même les plus simples semblent nous échapper quand on est un peu trop pressé.

Ensuite, pour la partie technique, il semble que tu n'aies pas bien saisi l’importance de définir correctement tes blocs avant de les manipuler dans AutoLISP. Si tu n’as pas les bons blocs définis, le programme échouera, peu importe la logique de ton if. C’est comme essayer de bâtir un château de cartes sans cartes, il ne tiendra pas debout. Didier a tout à fait raison là-dessus, et franchement, il n'y a pas de place pour l'improvisation ici.

Pour ta condition if, si type_rsx et config_nom sont des fonctions, assure-toi qu'elles renvoient bien les valeurs attendues avant de faire la comparaison. Si ce sont des variables, il faudra les appeler sans parenthèses. Et si la logique de ton if n’est pas bonne, eh bien, la condition ne sera jamais satisfaite, et là tu risques de tourner en rond sans avancer. Un petit peu d'attention, ça fait toute la différence !

Je te conseille donc de tester ta fonction type_rsx pour être sûr qu’elle renvoie bien "PROJET", comme tu t’y attends. Idem pour config_nom. Vraiment, il ne faut pas négliger ces détails, même si je sais qu’on aime parfois se dire "ça va passer", mais non, ça ne passe pas toujours. Comme Didier te l'a bien expliqué, rien ne sert de courir si tu n'as pas bien mis un pied devant l'autre.

Bon courage, et essaie de ne pas t'égarer dans les petits détails, parfois, ce sont eux qui font tout capoter !

Autocadement,

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é