Aller au contenu

[Résolu] Masque arrière plan pour les Textes multiples


Curlygoth

Messages recommandés

hello

le lisp ne date pas d'hier

(vl-load-com)

(vlr-command-reactor "Masque texte" '((:vlr-commandEnded . EndMtextMleader)))





(defun EndMtextMleader (calling-reactor endcommandInfo / thecommandend enam elst obj d)

  (setq thecommandend (nth 0 endcommandInfo))

  (setq enam (entlast))

  (setq obj (vlax-ename->vla-object enam))

  (setq d 1.15)  ;; valeur de l'offset

  (cond

    ((= thecommandend "MTEXT")

      (if (eq (vla-get-backgroundfill obj) :vlax-false)

        (progn

          ;; changer backgroundfill à vrai

          (vla-put-backgroundfill obj :vlax-true)

          ;; entmod offset

          (setq elst (entget enam))

          (entmod 

            (subst (cons 45 d)

              (assoc 45 elst)

              elst

            ) ;_ subst

          ) ;_ entmod

        ) ;_ progn

      ) ;_ if

    )

    ((= thecommandend "MLEADER")

      (if (eq (vla-get-TextBackgroundFill obj) :vlax-false)

        (progn

          ;; changer backgroundfill à vrai

          (vla-put-TextBackgroundFill obj :vlax-true)

          ;; entmod offset

          (setq elst (entget enam))

          (entmod

            (subst (cons 141 d)

              (assoc 141 elst)

              elst

            ) ;_ subst

          ) ;_ entmod

        ) ;_ progn

      ) ;_ if

    )

  ) ;_ cond

) 

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

1 hour ago, Curlygoth said:

Auriez-vous un possibilité en lisp :

Pour activer le masque d’arrière plan

avec une valeur disons 1 pour le facteur de décalage de bordure,

et affecter une couleur de remplissage ou non ?

 

Ce que tu demandes est possible, mais il faudrait préciser ce que tu appelles "un possibilité".

 

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

Lien vers le commentaire
Partager sur d’autres sites

ok je reformule :

Auriez-vous une possibilité pour activer le masque d’arrière plan et mettre une valeur pour le facteur de décalage de bordure à 1 ou autre,

Affecter une couleur de remplissage ou conserver la couleur de l'arrière plan.

a savoir que le texte que je génère a besoin parfois d'un masque d'arriere plan à 1 (ou autre) avec une couleur définis (7,1,2,3,etc...) suivant un nombre de paramètre que je ne détaillerais pas ici...XD

Le tout pouvant être appeller via VBA pour agir directement dessus via son handle ou via la collection ou autre ... peu importe...

je vais regarder ton code @philsogood

d'ailleurs la command pour le lancer c'est bien ça :

EndMtextMleader
Lien vers le commentaire
Partager sur d’autres sites

Hello

Et voici la routine "MBlank" tiree de mon stock de 3001 routines ...

; ;   This will set the color to match the background

;; (entmod (append dxf_ent '((90 . 3) (63 . 256) (45 . 1.1) (441 . 0))))

La Sante, Bye, lecrabe (triste & fatigue)

 

 
;; 
;; http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/mtext-background-mask-settings-lisp/td-p/5998702
;; 
;; Routine: MBlank for MTEXT  - Add/Modify Background Mask
;; 
;; Background Color = 9  ou 61 ou xxx 
;; 
;; Border = 1.3   ( Default = 1.5 )
;; 

(defun c:MBlank ( / js n dxf_ent)
	(setq js (ssget '((0 . "MTEXT"))))
	(cond
		(js
			(repeat (setq n (sslength js))
				(setq dxf_ent (entget (ssname js (setq n (1- n)))))
				(entmod (append dxf_ent '( (90 . 1)  (63 . 61)  (45 . 1.3)  (441 . 0) )))
			)
		)
	)
)

 

  • Like 1

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Ça devrait répondre à ta demande.

;; setBackground
;; Masque d'arrière plan de texte multiligne
;;
;; Arguments
;; handle : handle du mtext
;; fill	  : type de remplissage 1 ou 3 (1 pour la couleur spécifiée ; 3 pour la couleur de l'arrière plan
;; color  : couleur de l'index entre 1 et 255
;; scale  : facteur d'achelle du masque
;;
;; Exemple : (setBackground "2AE9" 1 31 1.2)
(defun setBackground (handle fill color scale / l)
  (setq l (entget (handent handle)))
  (entmod
    (append
      (vl-remove-if
	(function
	  (lambda (x) (member (car x) '(90 63 421 431 45 441)))
	)
	l
      )
      (list
	(cons 90 fill)
	(cons 63 color)
	(cons 45 scale)
      )
    )
  )
)

 

  • Like 1

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

Lien vers le commentaire
Partager sur d’autres sites

Ce n'est pas une commande. C'est une fonction LISP avec arguments (lis les commentaires).

Tu dis vouloir paramétrer la couleur et/ou le décalage, il faut bien passer ces paramètres en argument.

Dans ta macro VBA, pour mettre un masque en couleur 31 avec un décalage de 1.2 sur un MTEXT dont le handle est assigné à la variable 'handle', ça devrait être un truc comme ça :
ThisDrawing.SendCommand("(setBackground & Chr34 & handle & Chr34 & "1 31 1.2)")

ThisDrawing.SendCommand("(setBackground & Chr34 & handle & Chr34 & "1 31 1.2)")

 

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

Lien vers le commentaire
Partager sur d’autres sites

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é