Aller au contenu

OrionLG

Membres
  • Compteur de contenus

    9
  • Inscription

  • Dernière visite

Visiteurs récents du profil

251 visualisations du profil

OrionLG's Achievements

Rookie

Rookie (2/14)

  • First Post Rare
  • Conversation Starter Rare
  • Week One Done Rare
  • One Month Later Rare
  • One Year In Rare

Recent Badges

0

Réputation sur la communauté

  1. Merci beaucoup pour ces réponses rapides et complètes. C'est parfait. En ajoutant ce code c'est nikel pour la manip que j'ai à faire : (entmod (append en (list '(420 . 16711680)))) Je vais creuser tout ce que tu m'as fournit @Luna pour approfondir. Merci
  2. Bonjour @Luna Tu utilises le code suivant pour supprimer les codes DXF facultatifs. (setq en (vl-remove-if '(lambda (x) (member (car x) '(420 430))) en)) Je peine à trouver l'inverse. Je souhaiterai, pour un autre bout de script, ajouter le code 420 avec la couleur RGB 255,0,0. Ça donnerai la paire (420. 16711680). Si j'ai bien compris, je ne peux pas utiliser (entmod (subst (cons 62 256) (assoc 62 en) en)) car si la référence 420 n'existe pas ça plante. J'ai essayé plusieurs syntaxes en vain. Je vois comment créer la paire dans un nouvelle objet avec entmake, mais pas comment ajouter une paire sur un objet existant. Auriez-vous une idée s'il vous plait ?
  3. Merci beaucoup Luna !!!! 🥳 Je suspectais en effet les entnext de poser problèmes. Je me suis aidé de codes existant (d'où l'erreur de choix des commandes) et du cours de Gilles. Et grâce avec ta version épurée je comprend mieux. J'ai été trop loin dans l'entité j'ai l'impression Bien que je maitrise d'autres langages de programmation, le LISP me perturbe facilement 🤪. Je vais tout de suite essayer de modifier la boucle avec l'incrément de variable. Merci encore de ton aide. OrionLG
  4. Bonjour à tous Je vous contact car je sèche sur un bout de script. Le but est de sélectionner tous les objets d'un calque choisi par l'utilisateur et ensuite de supprimer les couleurs personnalisées de chaque objet pour qu'il récupère la couleur du calque. La sélection est bonne mais je n'arrive pas à modifier les objets. Je pense que je m'embrouille dans la récupération des éléments des entités et attribut DXF 😢 et dans le parcours du jeu de sélection. Quelqu'un pourrait-il me dire où ? J'ai un comportement aléatoire de mon côté. (setq nomcalc (getstring T "\nNom du calque: ")) (setq ss (ssget "_X" (list (cons 8 nomcalc)))) (sssetfirst nil ss) ; Pour afficher le jeu de sélection ; Si ss non nil (if ss (progn (repeat (sslength ss) ; Répéter autant de fois que d'entités dans ss (setq ent (ssname ss 0)) ; ent = nom de l'entité (setq en (entget ent)) ; en = liste DXF de l'entité (setq nameent (entnext ent)) ; nameent = Nom de l'entité (setq suben (entget nameent)) ; suben = liste dxf de l'attribut (entmod (subst (cons 62 256) (assoc 62 suben) suben)) (setq nameent (entnext nameent)) (entupd ent) (ssdel ent ss) ) ) ) Je joins un ficher de test dans lequel les objets du calque "1" sont forcés en jaune. Si on applique le script au calque "1", ils doivent devenir rouge. Merci d'avance OrionLG Dessin1.dwg
  5. Coucou 😃 Merci encore pour ton retour. En effet, ça va plus vite en intégrant (66 . 1) dans le filtre 😄👍 Malheureusement le nom des blocs où il faut changer les facteurs de largeur ne sont pas toujours identiques. Je les scanne donc tous. Mais ça va vite car on n'a jamais énormément d'entités. Par contre je garde précieusement tes conseils pour un prochain script. J'en ai un en cours où ils me seront utiles. Concernant la déclaration des variables je vais creuser ça. J'ai découvert la dernière fois le site de @didier. Et j'ai depuis un moment à côté de moi en papier et sur mon PC l'excellent PDF "Introduction à AutoLISP" de @(gile) ainsi que ses scripts 😄. OrionLG
  6. Bonjour à tous. Merci beaucoup @Luna pour ton retour. Je ne l'avais pas vu 😥 car j'étais en arrêt quelques temps. En fait je préfère le LISP. J'avais copié une routine en Visual LISP sans trop avoir saisir la différence. Mais je préfère continuer en LISP (même si j'aime beaucoup le VB... mais pas pour le moment pour AutoCAD). Je viens de finir mon script en LISP et il fonctionne...normalement. Je me suis aidé de l'excellent script "REPSTRING" que nous utilisons très souvent. Pour répondre à ta question, les blocs ne sont pas dynamiques. J'ai en effet opté pour l'option "ssget", bien vu 👍. Ci-joint le code. Ça pourra peu-être servir à d'autres. Il faut encore que je l'optimise je pense mais il est fonctionnel (defun ChangLargAttrib (string factor) (setq ss (ssget "X" (list (cons 0 "INSERT")))) ; Si ss non nil (if ss (progn (repeat (sslength ss) ; Répéter autant de fois que d'entités dans ss (setq ent (ssname ss 0)) ; ent = nom de l'entité (setq en (entget ent)) ; en = liste DXF de l'entité (setq etype (cdr (Assoc 0 en))) ; etype = Type d'entité (INSERT dans le cas présent) *** À supprimer *** (if (assoc 66 en) ; Test si la variable 66 (Drapeau "entité suivent") est à 1 (progn (setq textattrib (entnext ent)) (while (= (cdr (assoc 0 (entget textattrib))) "attrib") ; test si entité est un attribut (setq suben (entget textattrib)) ; suben = liste dxf de l'attribut (setq stg (cdr (assoc 1 suben))) (if (= stg string) (progn (setq fact (cdr (assoc 41 suben))) (entmod (subst (cons 41 factor) (assoc 41 suben) suben)) ) ) (setq textattrib (entnext textattrib)) ) (entupd ent) ) ) (ssdel ent ss) ) ) ) ) (defun c:ChLargAttrib () (SETQ STRING (GETSTRING T "\nTEXTE À REDIMENSIONNER : ")) (SETQ FACTOR (GETREAL "\nFACTEUR DE LARGEUR : ")) (ChangLargAttrib STRING FACTOR) ) L'avantage est qu'on peut l'exécuter via un script .scr du genre : OUVRIR "chemin du fichier" ChLargAttrib Texte_à_modifier 0.9 ; Nouveau facteur _qsave FERMER OUVRIR "chemin du fichier" ChLargAttrib Texte_à_modifier 0.9 ; Nouveau facteur _qsave FERMER Merci encore pour votre aide. Amicalement OrionLG
  7. Merci pour le conseil et pour l'accueil. Je vais faire ça. Le jeu de sélection me parle, je l'avais oublié. 😃Je vais refaire le script en LISP (et non VLISP) et repartir sur de bonnes bases Cordialement
  8. Merci beaucoup @Luna pour ta réponse et l'explication. Merci aussi pour la différence entre Visual LISP et LISP. Je ne comprenais pas pourquoi certaines fonctions étaient écrites avec "vla" devant 🤦‍♂️. Malheureusement le but de ce LISP est d'être utilisé dans un script SCR pour appliquer la modification dans un certains nombre de fichiers DWG. Je ne peux donc pas utiliser la sélection manuelle (ou alors il faudra cliquer sur le bloc à chaque page 🤔). Je pense que tout pourrait être géré en LISP mais je n'ai pas assez de connaissance pour le programmer pour le moment 😥. Je vais continuer de creuser. OrionLG
  9. Bonjour à tous J'utilise depuis longtemps AutoCAD et je me lance dans le LISP quelques temps 😬. Je trouve énormément d'aide sur ce forum et je profite de ma demande pour remercier tout le monde 😄. Malheureusement là je me heurte à un problème que je ne comprend pas et je ne trouve pas la solution malgré toutes mes recherches. Le but final de mon script est de changer le facteur de largeur des attribut donc la valeurs (le texte affiché) correspond au texte entré en argument du script. J'arrive à changer le facteur de largeur d'attribut sans problème mais je suis incapable de récupérer la valeur de l'attribut...😶. Quand j'utilise la fonction "vla-get-TextString" je lis la valeur par défaut et non la valeur actuelle. Idem si j'utilise "vla-put-TextString", je modifie uniquement la valeur par défaut et non la valeur actuelle. (defun test ($text / blocks bo eo ao) ;;$text : Étiquette de l'attribut (vl-load-com) (setq blocks (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-for bo blocks (vlax-for eo bo (if (and(= (vla-get-ObjectName eo) "AcDbAttributeDefinition") (= (vla-get-TagString eo) $text) ) ; end of and (progn ;(vla-put-ScaleFactor eo 1) (princ "Étiquette : ") (princ (vla-get-tagString eo)) (princ " - Valeur : ") (princ (vla-get-TextString eo)) (terpri) ) ) ) ) ) Auriez-vous une idée d'où pourrait venir l'erreur ??? Je vous remercie d'avance pour votre aide.
×
×
  • 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é