tyrese69_ Posté(e) le 3 septembre 2006 Posté(e) le 3 septembre 2006 Bonjour à tous, Aprés une insertion d'un bloc nommé "testatt", depuis un programme lisp (command "_.insert" "testatt" "0,0" (getvar "dimscale") "" "") Comment modifier la fonction suivante pour que seul le dernier bloc insérerpuisse être sélectionné , et ses attributs modifés ? Daniel OLIVES (defun MAJREP (REP / AncVal LstEnt NomEnt)(setq NomEnt (entnext))(while NomEnt (setq LstEnt (entget NomEnt)) (if (and (member '(0 . "ATTRIB") LstEnt) (member '(2 . "REP") LstEnt)) (progn (setq AncVal (cdr (assoc 1 LstEnt))) (setq LstEnt (subst (cons 1 REP) (cons 1 AncVal) LstEnt)) (entmod LstEnt) (entupd NomEnt) ) ; fin progn ) ; fin If (setq NomEnt (entnext NomEnt))) ; fin while(princ))
(gile) Posté(e) le 3 septembre 2006 Posté(e) le 3 septembre 2006 Salut, Je n'ai peut-être pas compris la question, mais si tu insères un bloc contenant des attributs à renseigner, tu peux les renseigner lors de l'insertion du bloc, plutôt que les modifier après. Il faut mettre la variable ATTDIA à 0 pour ne pas avoir de boite de dialogue : (setq old_dia (getvar "ATTDIA")) (setvar "ATTDIA" 0) (command "_.insert" "testatt" "0,0" (getvar "dimscale") "" "" "Valeur de l'attribut 1" "Valeur de l'attribut 2" "Valeur de l'attribut 3" ) (setvar "ATTDIA" old_dia) Sinon, pour pour récupérer la dernière entité créée on utilise la fonction (entlast) et on peut ensuite boucler sur les sous entités du bloc (attributs) pour en modifier la valeur. Tu peux voir, par exemple, ce sujet récent où la référence de bloc est sélectionnée. Tu peux donc remplacer : (setq BlocSelec (car (entsel)))par : (setq BlocSelec (entlast))et ensuite faire la boucle sur les attributs avec les nouvelles valeurs contenues dans des variables incrémentées.Pour la boucle, comme dit plus bas dans le sujet cité, je pense qu'il est préférable d'utiliser (repeat...) [Edité le 3/9/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
tyrese69_ Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 Bonjour Gile, C'est bien mon problème, mais j'obtiens en fin de command, ce message d'erreurlors de l'envoi des valeurs d'attribut ! (copie écran F2)Commande: insbloc_.insert Entrez le nom du bloc ou [?]: testatt Spécifiez le point d'insertion ou [PointdeBase/Echelle/X/Y/Z/Rotation/PEchelle/PX/PY/PZ/PRotation]: 0,0Entrez le facteur d'échelle en X, spécifiez le coin opposé ou [Coin/XYZ] <1>: 1.000000000000000 Entrez le facteur d'échelle en Y d'échelle en X>:Spécifiez l'angle de rotation <0>:Commande: _.insert Entrez le nom du bloc ou [?] : testatt Spécifiez le point d'insertion ou [PointdeBase/Echelle/X/Y/Z/Rotation/PEchelle/PX/PY/PZ/PRotation]: 0,0Entrez le facteur d'échelle en X, spécifiez le coin opposé ou [Coin/XYZ] <1>: 1.000000000000000 Entrez le facteur d'échelle en Y d'échelle en X>:Spécifiez l'angle de rotation <0>:Commande: Val att 1 Commande inconnue "VAL ATT 1". Appuyez sur F1 pour obtenir de l'aide. Commande: Val att 2 Commande inconnue "VAL ATT 2". Appuyez sur F1 pour obtenir de l'aide. Commande: Val att 3 Commande inconnue "VAL ATT 3". Appuyez sur F1 pour obtenir de l'aide. Commande: 0(defun c:insbloc ( / LstEnt LstEntIns) (command "_.insert" "testatt" "0,0" (getvar "dimscale") "" "") (setq old_dia (getvar "ATTDIA")) (setvar "ATTDIA" 0) (command "_.insert" "testatt" "0,0" (getvar "dimscale") "" "" "Val att 1" "Val att 2" "Val att 3" ) (setvar "ATTDIA" old_dia))[fin code] J'avais bien trouvé un exemple de ce type mais avec "AutoCAD 2006", il semble que j'ai qqs PB !C'est pour celà que j'essayais une autre méthode ! Daniel OLIVES
tyrese69_ Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 Re bonjour, juste une petite question de mise en page ! derrière [ texte code ] ma justification est à droite pourquoi ? daniel OLIVES [fin code]
tyrese69_ Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 Re aprés essai , c'est ma facons d'écrire : crochet code puis crochet qui à ouvert le mode "code" puis le second crochet fin code crochet à perturbé 'affichage ! Aprés lecture de l'aide j'ai compris l'utilisation du bouton "dièse" ! Il suffisait de lire l'aide ! Daniel Olivès
(gile) Posté(e) le 4 septembre 2006 Posté(e) le 4 septembre 2006 Salut, Le problème de mise en page n'est pas résolu, tu devrais éditer la réponse N°2 et fermer le code correctement. Sinon, dans le code que tu donnes tu insères 2 fois le bloc, en faisant comme je disais, ça devrait marcher (en tout cas ça marche chez moi) : (defun c:insbloc ( / old_dia) (setq old_dia (getvar "ATTDIA")) (setvar "ATTDIA" 0) (command "_.insert" "testatt" "0,0" (getvar "dimscale") "" "" "Val att 1" "Val att 2" "Val att 3" ) (setvar "ATTDIA" old_dia) ) Vérifie aussi la valeur de ATTREQ qui doit être à 1 [Edité le 4/9/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
tyrese69_ Posté(e) le 4 septembre 2006 Auteur Posté(e) le 4 septembre 2006 Re bonjour, Merci Gile la première ligne était due à un copié coller malheureux ! C'est "ATTREQ" qui me posait un problème ! Cà marche !Je vais pouvoir finir la routine d'insertion de bloc dans une polyligne pour y inscrirela surface et autres données propres au local concerné ! Daniel OLIVES
phil_vsd Posté(e) le 8 septembre 2006 Posté(e) le 8 septembre 2006 tyrese69_, Je me permet d'interférer dans ce sujet car moi aussi je me met au lisp. Gile m'a donné une petite routine qui ressemble à la tienne sauf qu'en plus la surface change automatiquement car c'est à base de "champs dynamiques". Va voir dans : Accueil du Forum > LISP et Visual LISP > Routines LISP > Bloc avec champ dynamique Je ne sais pas faire un lien vers un post. En espérant que cela puisse t'aider... "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
BIM G CO Posté(e) le 29 août 2007 Posté(e) le 29 août 2007 [/code] Résolution de page incorrect depuis la réponse N°2 [Edité le 29/8/2007 par Maximilien] Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
Patrick_35 Posté(e) le 29 août 2007 Posté(e) le 29 août 2007 SalutPense à la variable attreq @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant