Aller au contenu

Guillaume.A

Membres
  • Compteur de contenus

    7
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Guillaume.A

  1. Ah ok, j'avais pas compris ça ^^ ça allège un peu l'écriture, c'pas plus mal 🙂 Mais alors, quand est ce que la fonction (list) devient nécessaire ? et les opérateurs logique ?
  2. Ah bah oui, j'ai oublié de remettre la vérification ! C'est pourtant pour ça que j'étais venu au début 😂 Le final donne donc ça : (defun c:lineaire_rupteur (/ kw ent obj prop valnum i pt lg lgs jsel) (setq lg 0) (initget 1 "L9 L10") (setq kw (getkword "\nType de rupteur ? [L9/L10]: ")) (if ( = kw "L9") (setq jsel (ssget (list '(-4 . "<AND") '(0 . "INSERT") '(8 . "01 BA Rupteurs L9") '(-4 . "AND>")))) (setq jsel (ssget (list '(-4 . "<AND") '(0 . "INSERT") '(8 . "01 BA Rupteurs L10") '(-4 . "AND>")))) ) (setq i 0) (while (< i (sslength jsel)) (setq ent (ssname jsel i)) (if (and (= (cdr (assoc 0 (entget ent))) "INSERT") (= (getpropertyvalue ent "ClassName") "") (= (getpropertyvalue ent "BlockTableRecord/Name") "01_BA_Rupteur") ) (progn (setq obj (vlax-ename->vla-object ent)) (setq prop (vlax-invoke obj 'getdynamicblockproperties)) (setq valnum (vlax-variant-value (vlax-get-property (nth 0 prop) 'value))) (setq lg (+ lg valnum)) (setq i (1+ i)) ) (ssdel ent jsel) ) ) (setq lgs (strcat (rtos (/ lg 100.00) 2 1) " ml")) (setq pt (getpoint "\nPoint d'insertion texte : ")) (command "texte" pt "15" "0" lgs) ) Encore merci à vous, et à la prochaine 🙂
  3. Et re ! J'ai passé la dernière heure à décortiquer les infos que j'ai pu trouver sur les jeux de sélection ("Introduction à autoLISP de (gile) et da-code de Didier) et j'ai réussi à comprendre comment tout ça fonctionne 🙂 Donc j'ai complètement transformé ma routine pour me servir de ce fameux jeu de sélection et je suis arrivé à ça (et ça marche !) (defun c:lineaire_rupteur (/ kw ent obj prop valnum i pt lg lgs jsel) (setq lg 0) (initget 1 "L9 L10") (setq kw (getkword "\nType de rupteur ? [L9/L10]: ")) (if ( = kw "L9") (setq jsel (ssget (list '(-4 . "<AND") '(0 . "INSERT") '(8 . "01 BA Rupteurs L9") '(-4 . "AND>")))) (setq jsel (ssget (list '(-4 . "<AND") '(0 . "INSERT") '(8 . "01 BA Rupteurs L10") '(-4 . "AND>")))) ) (setq i 0) (while (< i (sslength jsel)) (progn (setq ent (ssname jsel i)) (setq obj (vlax-ename->vla-object ent)) (setq prop (vlax-invoke obj 'getdynamicblockproperties)) (setq valnum (vlax-variant-value (vlax-get-property (nth 0 prop) 'value))) (setq lg (+ lg valnum)) (setq i (1+ i)) ) ) (setq lgs (strcat (rtos (/ lg 100.00) 2 1) " ml")) (setq pt (getpoint "\nPoint d'insertion texte : ")) (command "texte" pt "15" "0" lgs) ) Pour ce qui est des bâtiments, suffit juste de faire une fenêtre de sélection uniquement autour du bâtiment qu'on étudie et l'affaire est plié ^^ Merci pour votre aide et vos idées, ça va aller beaucoup plus vite maintenant 🙂
  4. Super, merci à vous deux ! C'est vrai que j'avais pas pensé à filtrer avant de choper le nom de définition du bloc ... un peu bête ^^ J'aurais bien aimé, mais j'ai jamais compris comment fonctionnait les jeux de sélection sous lisp (ssget etc...) du coup, j'ai lâché l'affaire. De plus, au bureau on s'est pas embêté à créer un bloc par type de rupteur, et il peut arriver que sur un niveau d'un bâtiment, on ait à la fois des rupteurs en façade et des rupteurs en acrotère. Ces rupteurs étant différent, on a un linéaire de rupteur par type de rupteur (et si à ça, on rajoute le fait qu'un chantier peut être constitué de plusieurs bâtiments, on a en plus des linéaires par bâtiment ET par type). J'écris mais en même temps je me dis que je pourrais passer par des calques, et ainsi filtrer par calque et par nom de bloc mon jeu de sélection, mais faut d'abord que j'essaye de nouveau de saisir comment fonctionne les jeux de sélection ^^ Bref, je vais creuser ça de mon côté, mais en attendant j'ai pu résoudre mon soucis d'erreur ADS 🙂 Merci !
  5. Bonjour, Je déterre ce sujet que j'avais lancé car je me suis retrouvé récemment face à un problème que je ne sais pas gérer. Avec la routine que j'ai créé (voir fin de message), je dois sélectionner chaque bloc de rupteur les uns après les autres pour en extraire la donnée qui m'intéresse au fur et à mesure. Seulement, si je sélectionne une côte par exemple, AutoCAD me renvoie l'erreur "erreur: Demande ADS erronée" et ça m'annule la fonction. Je voulais donc savoir s'il est possible de gérer ce genre d'erreur et faire en sorte que ça n'annule pas la fonction (et ainsi que je sois pas obligé de tout recommencer, ce qui peut être lourd quand vous avez 40 blocs de rupteurs sur le plan). La routine : (defun c:lineaire_rupteur (/ lg lgs obj prop valnum pt rupt ent) (setvar "selectionpreview" 2) (vl-load-com) (setq lg 0) (while (setq rupt (entsel)) (setq ent (car rupt)) (if (= (getpropertyvalue ent "BlockTableRecord/Name") "01_BA_Rupteur") (progn (setq obj (vlax-ename->vla-object ent)) (setq prop (vlax-invoke obj 'getdynamicblockproperties)) (setq valnum (vlax-variant-value (vlax-get-property (nth 0 prop) 'value))) (setq lg (+ lg valnum)) ) (princ "\nMauvaise sélection") ) ) (setq lgs (strcat (rtos (/ lg 100.00) 2 1) " ml")) (setq pt (getpoint "\nPoint d'insertion texte : ")) (command "texte" pt "15" "0" lgs) (setvar "selectionpreview" 0) ) Merci d'avance pour votre retour ! Guillaume
  6. Merci beaucoup pour ton aide, j'ai pu faire ce que je voulais. J'ai pu intégrer une condition dans mon lisp :) (defun c:lineaire_rupteur (/ lg lgs obj prop valnum pt rupt ent) (vl-load-com) (setq lg 0) (while (setq rupt (entsel)) (setq ent (car rupt)) (if (= (getpropertyvalue ent "BlockTableRecord/Name") "01_BA_Rupteur") (progn (setq obj (vlax-ename->vla-object ent)) (setq prop (vlax-invoke obj 'getdynamicblockproperties)) (setq valnum (vlax-variant-value (vlax-get-property (nth 0 prop) 'value))) (setq lg (+ lg valnum)) ) (princ "\nMauvaise sélection") ) ) (setq lgs (strcat (rtos (/ lg 100.00) 2 1) " ml")) (setq pt (getpoint "\nPoint d'insertion texte : ")) (command "texte" pt "15" "0" lgs) )
  7. Bonjour à tous ! J'ai créé un lisp au sein de mon bureau nous permettant de récupérer une valeur d'un paramètre d'un bloc dynamique (en l'occurrence, il s'agit de blocs de rupteur thermique, et je récupère la longueur), afin de d'obtenir la longueur totale de rupteur sur le plan. Le bloc de rupteur qu'on utilisé s'appelle "01_BA_Rupteur". Je voulais savoir s'il était possible d'intégrer au lisp une condition, ou une gestion d'erreur (je ne sais pas par quoi passer) permettant de ne pas prendre en compte la sélection SI il ne s'agit pas d'un bloc nommé "01_BA_Rupteur". J'aurai pu passer par l'extraction de données, mais je trouvais ça un peu lourd personnellement, quoi que très efficace quand même Ci-dessous, le code : (defun c:lineaire_rupteur (/ lg lgs obj prop valnum pt rupt) (vl-load-com) (setq lg 0) (while (setq rupt (entsel)) (setq obj (vlax-ename->vla-object (car rupt))) (setq prop (vlax-invoke obj 'getdynamicblockproperties)) (setq valnum (vlax-variant-value (vlax-get-property (nth 0 prop) 'value))) (setq lg (+ lg valnum)) ) (setq lgs (strcat (rtos (/ lg 100.00) 2 1) " ml")) (setq pt (getpoint "\nPoint d'insertion texte : ")) (command "texte" pt "15" "0" lgs) ) Merci d'avance pour votre aide :) , Guillaume
×
×
  • 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é