PHILPHIL Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 Bonjour c'est pas du visual LISp pas de boite de dialogue mais ca marcheet plus rapide que la boite des proprietes l'alignement est incremente sur X ou Y ou XY si la valeur de decalage est different de zero phil --------------------------------------------------- ; ALIGNEMENT DES TEXT MTEXT AVEC POSSIBILITE DE COPIE ; --------------------------------------------------- (defun C:ALT (/ ENTX) (setvar "cmdecho" 0) (setq COPIETEXT (getcfg "APPDATA/COPIETEXT")) (setq TYPEALGN (getcfg "APPDATA/TYPEALGN")) (setq DALTX (atof (getcfg "APPDATA/DALTX"))) (setq DALTY (atof (getcfg "APPDATA/DALTY"))) (initget "X Y XY") (setq TMP (getkword (strcat "\nENTRER LE PLAN DE PROJECTION (X) (Y) (XY) ACTUELLEMENT <" TYPEALGN "> : "))) (if TMP (setq TYPEALGN TMP) ) (setq TMP1 (getdist (strcat "\nENTRER LA VALEUR DU DECALAGE DE TEXTE SUR X DESIRE <" (rtos DALTX 2 8) ">: "))) (if TMP1 (setq DALTX TMP1) ) (setq TMP1 (getdist (strcat "\nENTRER LA VALEUR DU DECALAGE DE TEXTE SUR Y DESIRE <" (rtos DALTY 2 8) ">: "))) (if TMP1 (setq DALTY TMP1) ) (initget "oui OUI non NON") (setq TMP (getkword (strcat "\nVOULEZ VOUS FAIRE DES COPIES DU TEXTE OU MTEXT ( OUI / NON ) <" COPIETEXT "> : ") ) ) (if TMP (setq COPIETEXT TMP) ) (setq ENTX NIL) (prompt "\nSELECTIONNER LE(S) TEXTE(S) A MODIFIER :") (while (null ENTX) (setq ENTX (ssget (list (cons -4 "")))) ) (setq POINTREF (getpoint (strcat "\nENTRER LE POINT DE REFERENCE POUR L'ALIGNEMENT : "))) (setq XPOINTREF (car POINTREF)) (setq YPOINTREF (cadr POINTREF)) (if (or (= COPIETEXT "oui") (= COPIETEXT "OUI")) (command "COPIER" ENTX "" "0,0" "0,0") ) (setq COMPT 0) (setq COM (sslength ENTX)) (while (< COMPT COM) (progn (setq ENT (entget (ssname ENTX COMPT))) (if (= (cdr (assoc 0 ENT)) "TEXT") (setq CLEF72 (cdr (assoc 72 ENT)) CLEF73 (cdr (assoc 73 ENT)) ) (setq CLEF72 0 CLEF73 0 ) ) (if (and (= CLEF72 0) (= CLEF73 0)) (progn (if (= TYPEALGN "X") (if (= DALTX 0) (setq ENT (subst (cons 10 (list (car (cdr (assoc 10 ENT))) YPOINTREF 0)) (assoc 10 ENT) ENT)) (setq ENT (subst (cons 10 (list (+ XPOINTREF (* COMPT DALTX)) YPOINTREF 0)) (assoc 10 ENT) ENT)) ) ) (if (= TYPEALGN "Y") (if (= DALTY 0) (setq ENT (subst (cons 10 (list XPOINTREF (cadr (cdr (assoc 10 ENT))) 0)) (assoc 10 ENT) ENT)) (setq ENT (subst (cons 10 (list XPOINTREF (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 10 ENT) ENT)) ) ) (if (= TYPEALGN "XY") (setq ENT (subst (cons 10 (list (+ XPOINTREF (* COMPT DALTX)) (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 10 ENT) ENT ) ) ) ) (progn (if (= TYPEALGN "X") (if (= DALTX 0) (setq ENT (subst (cons 11 (list (car (cdr (assoc 11 ENT))) YPOINTREF 0)) (assoc 11 ENT) ENT)) (setq ENT (subst (cons 11 (list (+ XPOINTREF (* COMPT DALTX)) YPOINTREF 0)) (assoc 11 ENT) ENT)) ) ) (if (= TYPEALGN "Y") (if (= DALTY 0) (setq ENT (subst (cons 11 (list XPOINTREF (cadr (cdr (assoc 11 ENT))) 0)) (assoc 11 ENT) ENT)) (setq ENT (subst (cons 11 (list XPOINTREF (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 11 ENT) ENT)) ) ) (if (= TYPEALGN "XY") (setq ENT (subst (cons 11 (list (+ XPOINTREF (* COMPT DALTX)) (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 11 ENT) ENT ) ) ) ) ) (entmod ENT) (setq COMPT (1+ COMPT)) ) ) (setcfg "APPDATA/COPIETEXT" COPIETEXT) (setcfg "APPDATA/TYPEALGN" TYPEALGN) (setcfg "APPDATA/DALTX" (rtos DALTX 2 8)) (setcfg "APPDATA/DALTY" (rtos DALTY 2 8)) (princ) ) [Edité le 16/11/2007 par PHILPHIL] FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
lili2006 Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 Bonjour à tous et tous, PHILPHIL,j'ai testé ta routine et voilà ce que AutoCAD me renvoi : Commande: _appload ALT.LSP correctement chargé(s)Commande: ; erreur: structure incorrecte de la chaîne en entréeCommande: Merci d'avnce. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lovecraft Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 bonjour, ; ALIGNEMENT DES TEXT MTEXT AVEC POSSIBILITE DE COPIE ; --------------------------------------------------- (defun C:ALT (/ ENTX) (setvar "cmdecho" 0) (setq COPIETEXT (getcfg "APPDATA/COPIETEXT")) (setq TYPEALGN (getcfg "APPDATA/TYPEALGN")) (setq DALTX (atof (getcfg "APPDATA/DALTX"))) (setq DALTY (atof (getcfg "APPDATA/DALTY"))) (initget "X Y XY") (setq TMP (getkword (strcat "\nENTRER LE PLAN DE PROJECTION (X) (Y) (XY) ACTUELLEMENT : "))) (if TMP (setq TYPEALGN TMP) ) (setq TMP1 (getdist (strcat "\nENTRER LA VALEUR DU DECALAGE DE TEXTE SUR X DESIRE : "))) (if TMP1 (setq DALTX TMP1) ) (setq TMP1 (getdist (strcat "\nENTRER LA VALEUR DU DECALAGE DE TEXTE SUR Y DESIRE : "))) (if TMP1 (setq DALTY TMP1) ) (initget "oui OUI non NON") (setq TMP (getkword (strcat "\nVOULEZ VOUS FAIRE DES COPIES DU TEXTE OU MTEXT ( OUI / NON ) : ") ) ) (if TMP (setq COPIETEXT TMP) ) (setq ENTX NIL) (prompt "\nSELECTIONNER LE(S) TEXTE(S) A MODIFIER :") (while (null ENTX) [surligneur] (setq ENTX (ssget (list (cons -4 " [b] il manque qqes choses?) [/b][b] )))[/b][/surligneur] (setq POINTREF (getpoint (strcat "\nENTRER LE POINT DE REFERENCE POUR L'ALIGNEMENT : "))) (setq XPOINTREF (car POINTREF)) (setq YPOINTREF (cadr POINTREF)) (if (or (= COPIETEXT "oui") (= COPIETEXT "OUI")) (command "COPIER" ENTX "" "0,0" "0,0") ) (setq COMPT 0) (setq COM (sslength ENTX)) (while ((progn (setq ENT (entget (ssname ENTX COMPT))) (if (= (cdr (assoc 0 ENT)) "TEXT") (setq CLEF72 (cdr (assoc 72 ENT)) CLEF73 (cdr (assoc 73 ENT)) ) (setq CLEF72 0 CLEF73 0 ) ) (if (and (= CLEF72 0) (= CLEF73 0)) (progn (if (= TYPEALGN "X") (if (= DALTX 0) (setq ENT (subst (cons 10 (list (car (cdr (assoc 10 ENT))) YPOINTREF 0)) (assoc 10 ENT) ENT)) (setq ENT (subst (cons 10 (list (+ XPOINTREF (* COMPT DALTX)) YPOINTREF 0)) (assoc 10 ENT) ENT)) ) ) (if (= TYPEALGN "Y") (if (= DALTY 0) (setq ENT (subst (cons 10 (list XPOINTREF (cadr (cdr (assoc 10 ENT))) 0)) (assoc 10 ENT) ENT)) (setq ENT (subst (cons 10 (list XPOINTREF (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 10 ENT) ENT)) ) ) (if (= TYPEALGN "XY") (setq ENT (subst (cons 10 (list (+ XPOINTREF (* COMPT DALTX)) (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 10 ENT) ENT ) ) ) ) (progn (if (= TYPEALGN "X") (if (= DALTX 0) (setq ENT (subst (cons 11 (list (car (cdr (assoc 11 ENT))) YPOINTREF 0)) (assoc 11 ENT) ENT)) (setq ENT (subst (cons 11 (list (+ XPOINTREF (* COMPT DALTX)) YPOINTREF 0)) (assoc 11 ENT) ENT)) ) ) (if (= TYPEALGN "Y") (if (= DALTY 0) (setq ENT (subst (cons 11 (list XPOINTREF (cadr (cdr (assoc 11 ENT))) 0)) (assoc 11 ENT) ENT)) (setq ENT (subst (cons 11 (list XPOINTREF (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 11 ENT) ENT)) ) ) (if (= TYPEALGN "XY") (setq ENT (subst (cons 11 (list (+ XPOINTREF (* COMPT DALTX)) (- YPOINTREF (* COMPT DALTY)) 0)) (assoc 11 ENT) ENT ) ) ) ) ) (entmod ENT) (setq COMPT (1+ COMPT)) ) ) (setcfg "APPDATA/COPIETEXT" COPIETEXT) (setcfg "APPDATA/TYPEALGN" TYPEALGN) (setcfg "APPDATA/DALTX" (rtos DALTX 2 8)) (setcfg "APPDATA/DALTY" (rtos DALTY 2 8)) (princ) ) Voila j'ai trouvé l'erreur mais je ne sais pas la corriger. @plus http://www.youtube.com/user/CADMINATOR?feature=mhee
PHILPHIL Posté(e) le 16 novembre 2007 Auteur Posté(e) le 16 novembre 2007 bonjour est ce que ton texte ou mtext est "annotative " ?? car avec ca j'ai des problemesca reduit les textes est ce que tu arrives a ces questions la ?? Commande: altENTRER LE PLAN DE PROJECTION (X) (Y) (XY) ACTUELLEMENT :ENTRER LA VALEUR DU DECALAGE DE TEXTE SUR X DESIRE <0.00000000>:ENTRER LA VALEUR DU DECALAGE DE TEXTE SUR Y DESIRE <0.00000000>: VOULEZ VOUS FAIRE DES COPIES DU TEXTE OU MTEXT ( OUI / NON ) :SELECTIONNER LE(S) TEXTE(S) A MODIFIER :Choix des objets: Spécifiez le coin opposé: 6 trouvé(s)Choix des objets:ENTRER LE POINT DE REFERENCE POUR L'ALIGNEMENT : as tu acces au fichier AutoCAD.cfg par autocad ?? au acad2008.cfg acad2007.cfg a+ phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 Salut, Lovecraft a bien trouvé un erreur : si des caractères alphabétiques suivent le signe inférieur ( (setq ENTX (ssget (list (cons -4 "")))) -> la liste de filtre n'est pas valide. (setq ENTX (ssget (list (cons -4 " (cons 0 "TEXT") (cons 0 "MTEXT") (cons -4 "or>") ) ) ) Solutions : - Pour celui qui poste : soit mettre un espace après le - Pour celui qui copie, si les astuces ci dessus n'ont pas été utilisée, passer par Citer (en bas du message) pour avoir le code original. PS pour PHILPHIL : tu peux aussi écrire simplement : (setq ENTX (ssget '((0 . "MTEXT,TEXT")))) ou encore (setq ENTX (ssget '((0 . "*TEXT")))) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 Re, Pour moi, toujours même message : Commande: _appload ALT.LSP correctement chargé(s)ALT.LSP correctement chargé(s)Commande: ; erreur: structure incorrecte de la chaîne en entréeCommande: ; erreur: structure incorrecte de la chaîne en entréeCommande:Commande: ALTCommande inconnue "ALT". Appuyez sur F1 pour obtenir de l'aide. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
PHILPHIL Posté(e) le 16 novembre 2007 Auteur Posté(e) le 16 novembre 2007 ok gileca devrait marcher j ai fait la simplification / variante de gileet ca devrait regler le probleme du "<" gile tu avais une autre solution plus visualisp ??? pour ce qui est des données perso elle s'enregistre a la fin donc pas de souci si personne ne les a au debut ; --------------------------------------------------- ; ALIGNEMENT DES TEXT MTEXT AVEC POSSIBILITE DE COPIE ; --------------------------------------------------- (defun C:ALT (/ ENTX) (command "scu" "") (setvar "cmdecho" 0) (setq COPIETEXT (getcfg "APPDATA/COPIETEXT")) (setq TYPEALGN (getcfg "APPDATA/TYPEALGN")) (setq DALTX (atof (getcfg "APPDATA/DALTX"))) (setq DALTY (atof (getcfg "APPDATA/DALTY"))) (initget "X Y XY") (setq TMP (getkword (strcat "\nENTRER LE PLAN DE PROJECTION (X) (Y) (XY) ACTUELLEMENT <" TYPEALGN "> : " ) ) ) (if TMP (setq TYPEALGN TMP) ) (setq TMP1 (getdist (strcat "\nENTRER LA VALEUR DU DECALAGE DE TEXTE SUR X DESIRE <" (rtos DALTX 2 8) ">: " ) ) ) (if TMP1 (setq DALTX TMP1) ) (setq TMP1 (getdist (strcat "\nENTRER LA VALEUR DU DECALAGE DE TEXTE SUR Y DESIRE <" (rtos DALTY 2 8) ">: " ) ) ) (if TMP1 (setq DALTY TMP1) ) (initget "oui OUI o O non NON n N") (setq TMP (getkword (strcat "\nVOULEZ VOUS FAIRE DES COPIES DU TEXTE OU MTEXT ( O(UI) / N(ON) ) <" COPIETEXT "> : " ) ) ) (if TMP (setq COPIETEXT TMP) ) (setq ENTX NIL) (prompt "\nSELECTIONNER LE(S) TEXTE(S) A MODIFIER :") (while (null ENTX) (setq ENTX (ssget '((0 . "*TEXT")))) ) (setq POINTREF (getpoint (strcat "\nENTRER LE POINT DE REFERENCE POUR L'ALIGNEMENT : ") ) ) (setq XPOINTREF (car POINTREF)) (setq YPOINTREF (cadr POINTREF)) (if (or (= COPIETEXT "oui") (= COPIETEXT "OUI")) (command "COPIER" ENTX "" "0,0" "0,0") ) (setq COMPT 0) (setq COM (sslength ENTX)) (while (< COMPT COM) (progn (setq ENT (entget (ssname ENTX COMPT))) (if (= (cdr (assoc 0 ENT)) "TEXT") (setq CLEF72 (cdr (assoc 72 ENT)) CLEF73 (cdr (assoc 73 ENT)) ) (setq CLEF72 0 CLEF73 0 ) ) (if (and (= CLEF72 0) (= CLEF73 0)) (progn (if (= TYPEALGN "X") (if (= DALTX 0) (setq ENT (subst (cons 10 (list (car (cdr (assoc 10 ENT))) YPOINTREF 0) ) (assoc 10 ENT) ENT ) ) (setq ENT (subst (cons 10 (list (+ XPOINTREF (* COMPT DALTX)) YPOINTREF 0 ) ) (assoc 10 ENT) ENT ) ) ) ) (if (= TYPEALGN "Y") (if (= DALTY 0) (setq ENT (subst (cons 10 (list XPOINTREF (cadr (cdr (assoc 10 ENT))) 0) ) (assoc 10 ENT) ENT ) ) (setq ENT (subst (cons 10 (list XPOINTREF (- YPOINTREF (* COMPT DALTY)) 0 ) ) (assoc 10 ENT) ENT ) ) ) ) (if (= TYPEALGN "XY") (setq ENT (subst (cons 10 (list (+ XPOINTREF (* COMPT DALTX)) (- YPOINTREF (* COMPT DALTY)) 0 ) ) (assoc 10 ENT) ENT ) ) ) ) (progn (if (= TYPEALGN "X") (if (= DALTX 0) (setq ENT (subst (cons 11 (list (car (cdr (assoc 11 ENT))) YPOINTREF 0) ) (assoc 11 ENT) ENT ) ) (setq ENT (subst (cons 11 (list (+ XPOINTREF (* COMPT DALTX)) YPOINTREF 0 ) ) (assoc 11 ENT) ENT ) ) ) ) (if (= TYPEALGN "Y") (if (= DALTY 0) (setq ENT (subst (cons 11 (list XPOINTREF (cadr (cdr (assoc 11 ENT))) 0) ) (assoc 11 ENT) ENT ) ) (setq ENT (subst (cons 11 (list XPOINTREF (- YPOINTREF (* COMPT DALTY)) 0 ) ) (assoc 11 ENT) ENT ) ) ) ) (if (= TYPEALGN "XY") (setq ENT (subst (cons 11 (list (+ XPOINTREF (* COMPT DALTX)) (- YPOINTREF (* COMPT DALTY)) 0 ) ) (assoc 11 ENT) ENT ) ) ) ) ) (entmod ENT) (setq COMPT (1+ COMPT)) ) ) (command "scu" "p") (setcfg "APPDATA/COPIETEXT" COPIETEXT) (setcfg "APPDATA/TYPEALGN" TYPEALGN) (setcfg "APPDATA/DALTX" (rtos DALTX 2 8)) (setcfg "APPDATA/DALTY" (rtos DALTY 2 8)) (princ) ) [Edité le 16/11/2007 par PHILPHIL] FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 gile tu avais une autre solution plus visualisp ??? À mon avis ça ne change pas grand chose, les gros intérêts de Visual LISP sont d'eviter les command* et d'accéder à des propriétés ou méthodes inaccessibles en AutoLISP. les entmake, entmod, etc... sont plus compatibles. * tu peux éviter le (command "COPIER" ENTX "" "0,0" "0,0") en faisant (entmake (entget entx)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 16 novembre 2007 Posté(e) le 16 novembre 2007 Re, PHILPHIL, tout fonctionne chez moi aussi. Merci de ce partage. @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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