Aller au contenu

[Résolu] Nombre de caractères limité dans un mleader...


Messages recommandés

Posté(e)

Bonjour

 

Je butte dans lisp où je remplis un mleader.

 

Le nombre de caractère est limité à 134...

 

134 caractères, çà passe...

(command "_.mleader" "p" pause pause (strcat "xxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxx") "")

 

135 caractères, çà casse...

(command "_.mleader" "p" pause pause (strcat "xxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxxxxxxx" "\nxxxxxxxxxxxxxxx") "")

 

Y a-t-il moyen de changer cette limite?

 

Merci d'avance

 

... et ben, j'ai mis un moment pour trouver la façon de mettre [Résolu]...

 

un petit bouton serait sympa!!!

 

Bon week-end

Posté(e)

Bonjour,

 

Pour un MLEADER tu retombe dans la même configuration d'un MTEXT

Au delà de 250 caractères la chaine est stockée dans un ou plusieurs groupes de code DXF 3 par tranche de 250 caractères.

Les dernier restant (ou si inférieur à 250) sont stocké dans le code groupe 1 (comme pour un TEXT classique).

 

Pour moi la solution de facilité est d'utiliser les fonctions vla- qui gèrent très bien cette limitation sans te casser la tête.

 

Un exemple tiré de l'aide en reprenant ton désidérata.

 

(defun c:Example_AddMLeader()
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))

;; Define the leader points
(setq points (vlax-make-safearray vlax-vbDouble '(0 . 5)))
(vlax-safearray-fill points (append (getpoint "\n1er point :") (getpoint "\n2ème point: ")))
(setq i 0)

;; Add the mleader object to model space
(setq modelSpace (vla-get-ModelSpace doc))
(setq mLeader (vla-AddMLeader modelSpace points i))
(mapcar
	'(lambda (pr val)
		(vlax-put mLeader pr val)
	)
	(list 'TextString 'StyleName 'Layer)
	(list 
		(strcat
			"xxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
			"\nxxxxxxxxxxxxxxxxxxxx"
		)
		"Standard"
		"0"
	)
)
)

  • Upvote 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut,

 

Je pense que le problème vient de l'appel de la commande en LISP qui limite le nombre de caractères à 128 caractères imprimables.

Une solution de contournement est d'utiliser command pour dessiner une ligne de repère multiple avec un texte vide et de le remplir ensuite avec entmod.

 

;; on récupère l'identifiant de la dernière entité
(setq lastEnt (entlast))
;; on lance la commande
(command "_.mleader" "_head" pause pause "" "")
;; si la commande a abouti, la dernière entité est différente de lastEnt
(if (/= lastEnt (entlast))
 (entmod (subst
           (cons 304
                 (strcat "xxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                         "\nxxxxxxxxxxxxxxxxxxxx"
                        )
           )
           '(304 . "")
           (entget (entlast))
         )
 )
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci infiniment pour ton aide.

J'étais resté sur le lisp avec "lrepere", qui marchait très bien.

Je ne pense pas toujours au vla... qu'il faut bien dire, je ne maîtrise pas assez.

Posté(e)

... pour compléter, il faut encore changer l'orientation du texte (+ 360°) par une fonction vla-

 

(vla-put-textrotation (vlax-ename->vla-object (entlast)) (* 2 pi))

 

Salut

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é