Aller au contenu

ALIGNER SUR X Y XY TEXTE MTEXT


Messages recommandés

Posté(e)

Bonjour

 

c'est pas du visual LISp

pas de boite de dialogue

 

mais ca marche

et 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

Posté(e)

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

Posté(e)

bonjour

 

est ce que ton texte ou mtext est "annotative " ?? car avec ca j'ai des problemes

ca reduit les textes

 

est ce que tu arrives a ces questions la ??

 

Commande: alt

ENTRER 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

Posté(e)

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

Posté(e)

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ée

Commande: ; erreur: structure incorrecte de la chaîne en entrée

Commande:

Commande: ALT

Commande inconnue "ALT". Appuyez sur F1 pour obtenir de l'aide.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

ok gile

ca devrait marcher

 

j ai fait la simplification / variante de gile

et 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

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é