lecrabe Posté(e) le 27 avril 2018 Posté(e) le 27 avril 2018 Hello Vaillants PROs du Lisp/VLisp SVP je cherche une routine pour re-organiser les Blocs (Classiques ou Dynamiques) au niveau du calque de certains attributs (ou TOUS, si ils sont TOUS sur le meme calque) !? ... Je n'ai pas trouve ... En fait transferer TOUS les Attributs d'un certain Calque PRECIS (qui pourrait etre le calque ZERO ou autre) VERS un Autre calque PRECIS (qui pourrait etre le calque ZERO ou autre) pour TOUS les Blocs trouves dans une Selection classique AutoCAD OU pour TOUS les Blocs du DWG (Aucune selection) Donc j'imagine un truc du genre : 1) Question : TOUS les Blocs (Classiques ou Dynamiques) du DWG ou Selection classique et ne retenir que les Blocs ... 2) Quel est le nom du calque concerne / depart (qui pourrait etre le calque ZERO) ? Avec cela on trouve TOUS les Attributs concernes de TOUS les Blocs de la selection (ou TOUT le DWG) Si calque INEXISTANT ou ZERO Attribut ou calque verrouille : STOP (avec si possible message correspondant) ! 3) Quel est le nom du calque concerne / arrivee (qui pourrait etre le calque ZERO) ? Si calque INEXISTANT ou meme calque que le calque Depart : STOP (avec si possible message correspondant) ! 4) ACTION ... 5) Si possible: 2 petits compteurs indiquant le Nbr de Blocs concernes et le nombre total d'Attributs traites ... Me suis je bien fait comprendre ?? Si j'avais seulement 2/3 Blocs a traiter dans le DWG, je pourrais le faire avec l'Editeur de Blocs ... Merci d'avance, Bon WE, Bye, lecrabe Autodesk Expert Elite Team
didier Posté(e) le 27 avril 2018 Posté(e) le 27 avril 2018 Coucou J'ai fait du "simple", je l'ai écrit cet AM pour Sa Majesté Lecrabe (hihi)En simple AutoLispSi tu es intéressé on peut développer, mettre du DCL et autres joyeusetésEn ligne de commande :Tu choisis le calque de départ, là où sont les blocs à traiter puis le calque d'arrivée des attributs (qui sera créé s'il n'existe pas)Et c'est tout... Amicalement (setq calquedep (getstring "\nCalque à traiter ?\n")) (setq jeublocs (ssget "x" (list (cons 0 "INSERT") (cons 66 1) (cons 8 calquedep) ) ) ) (alert (strcat (itoa (sslength jeublocs)) "\n Blocs trouvés dans le Calque : " calquedep)) (setq calquearr (getstring "\nCalque de destination des attributs ?\n")) (setq n 0 nbatt 0) (repeat (sslength jeublocs) (setq ent (ssname jeublocs n)) (while (/= "SEQEND" (cdr (assoc 0 (entget (entnext ent))))) (setq att (subst (cons 8 calquearr) (assoc 8 (entget (entnext ent))) (entget (entnext ent)) ) ) (entmod att) (entupd ent) (setq nbatt (+ 1 nbatt)) (setq ent (entnext ent)) ) (setq n (+ 1 n)) ) (alert (strcat (itoa nbatt) "\n attributs sont passés dans le calque : " calquearr)) Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 27 avril 2018 Auteur Posté(e) le 27 avril 2018 Hello 1) MERCI 2) Par un simple Copier / Coller, j'ai une tonne d'erreur 3) Et si j'embarque le TOUT dans un defun ... Ajout de la Ligne au debut : (defun C:Attr2NewLayer () Et Ajout a la fin : ) Alors >>> Commande: ATTR2NEWLAYER Calque à traiter ?att_ecl; erreur: type d'argument incorrect: lselsetp nil 4) Je suis une Quiche en Lisp ! Bye, Bon WE, lecrabe (Decapodiquement Votre Devoue Admirateur) Autodesk Expert Elite Team
didier Posté(e) le 28 avril 2018 Posté(e) le 28 avril 2018 Coucou Ayant pris contact en direct avec notre très cher décapode ... Voici la version qui lui sied, que ne ferait-on pas pour lui seoir ?(il est trop beau ce verbe)Les premiers soucis venaient du fait que certains attributs étaient définis en couleur "dubloc"Si ça peut servir d'exemple à quelqu'un c'est avec plaisir que je colle le résultat iciJe pense le mettre aussi en exemple plus décortiqué pour apprentissage sur da-code (Defun C:Change_Att_Calque (/ calquedep jeublocs calquearr n att ent nbatt) (setq calquedep (getstring "\nNom du Calque des Blocs à traiter ? ")) (setq calqueatt (strcase (getstring "\nCalque des Attributs à traiter ? "))) (setq calquearr (getstring "\nCalque de Destination des Attributs ? ")) (setq jeublocs (ssget "x" (list (cons 0 "INSERT") (cons 66 1) (cons 8 calquedep) ) ;_ Fin de list ) ;_ Fin de ssget ) ;_ Fin de setq (setq n 0 nbatt 0 ) ;_ Fin de setq (repeat (sslength jeublocs) (setq ent (ssname jeublocs n)) (while ;(and (/= "SEQEND" (cdr (assoc 0 (entget (entnext ent))))) (if (= calqueatt (cdr (assoc 8 (entget (entnext ent))))) (progn (setq att (subst (cons 8 calquearr) (assoc 8 (entget (entnext ent))) (entget (entnext ent)) ) ;_ Fin de subst ) ;_ Fin de setq (entmod att) (entupd ent) (setq att (subst (cons 62 256) (assoc 62 (entget (entnext ent))) (entget (entnext ent)) ) ;_ Fin de subst ) ;_ Fin de setq (entmod att) (entupd ent) (setq nbatt (+ 1 nbatt)) ) ;_ Fin de progn ) ;_ Fin de if (setq ent (entnext ent)) ) ;_ Fin de while (setq n (+ 1 n)) ) ;_ Fin de repeat (princ "\n ---- Résultats de la Routine Lisp ---- \n" ) (princ (strcat (itoa (sslength jeublocs)) " Blocs trouvés dans le Calque " calquedep "\n" ) ) (princ (strcat (itoa nbatt) " Attributs ont été transferés dans le Calque " calquearr ) ) (princ) ) ;fin defun Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 28 avril 2018 Auteur Posté(e) le 28 avril 2018 Hello Mr Diplodocus Mr Dinosaure te remercie ! Decapodiquement, Bon WE, Bye, lecrabe Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 28 avril 2018 Posté(e) le 28 avril 2018 Bonjour, Hormis le cas particulier du calque 0, tu dois pouvoir t'en sortir avec un Covadis:- inactive tous les calques sauf le calque 0 et le calque à traiter => tu ne devrais avoir que les attributs concernés de visible- Covadis Edtion / Attribut / modifier calque - tu sélectionnes ce qu'il y a de visible à l'écran- tu dois confirmer par * ou tout pour indiquer les étiquettes à traiter (pas de covadis sous la main pour confirmer)- tu indiques le calque de destination de tes attributs Olivier
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