Aller au contenu

Modifications dans les blocs bloquées


Messages recommandés

Posté(e)

Bonjour,

 

Depuis quelques semaine il m'arrive un truc etrange. :casstet:

 

Quand je veux modifier un texte dans un bloc grace a une routine (remplacer texte ou convertir des champs en texte par exemple)

 

ecrite en lisp ou V-lisp (j'ai du essayer presque toutes celles qui existent sur le net)

 

Le texte est soit ignoré (pas de selection) ou copié a l'exterieur du bloc comme nested object.

 

Ce sont des textes simples (pas des attributs) contenant ou non des champs.

 

Les codes ne sont pas en cause.

 

Donc cela vient de mon poste.

 

Une variable ?

 

Quelqu'un a t'il deja eu ce probleme ?

 

 

Posté(e)

Comme je l'ai expliquer plus haut cela ne depend pas du code

 

je peux en donner si tu veux par exemple (j'ai choisi des routines presentent sur le forum et sont ici incomplete)

 

Lisp :

 


(setq ss (ssget "_X" '((0 . "TEXT,MTEXT,INSERT")(410 . "Model"))))
      (setq n 0)
      (while (setq txt (ssname ss n))
 (setq elst (entget txt))
 (if (= (cdr (assoc 0 elst)) "INSERT")
   (progn
     (setq ent (entnext txt))
     (while 
                   (and ent
		 (/= (cdr (assoc 0 (setq elst (entget ent)))) "SEQEND")
	    )
       (if (member (cdr (assoc 0 elst))
		   '("TEXT"
		     "MTEXT"
		     "ATTRIB"
		    )
	   )
	 (Action elst)                 ;Action represente une fonction qui modifie la liste elst
       )
       (setq ent (entnext ent))
     )
   )
   (Action elst)
 )
 (setq n (1+ n))
      )
 )

 

ou

 

Vlisp

 

 
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
 (vlax-for lt (vla-get-layouts adoc)
   (vlax-for obj (vla-get-block lt)
     (if (eq "AcDbText" (vla-get-objectname obj))
(while (vl-string-search Old$ (vla-get-textstring obj))
  (vla-put-textstring
    obj
    (vl-string-subst New$ Old$ (vla-get-textstring obj))
  )
)
     )
   )
 )
)

 

je pourrai donner d'autre exemple mais cela n'aurais pas d'interet

je n'arrive pas a modifier les objets d'un bloc par l'intermediaire du lisp.

 

exemple: _Find fonctionne tres bien, mais en lisp pas du tout

 

et il n'y a pas de blocs particulier jai tester sur un bloc composé seulement d'un texte

sa marche pas plus que sur des blocs complexes

 

en plus cela fonctionnais avant (jetais peut etre sur 2009 maintenant qu j'y pense)

 

Voila

 

Et merci de vous interessé a mon petit probleme sans importance :P

 

 

Posté(e)

Si c'etait un probleme de lisp

 

j'aurai posté dans le bon forum

 

C'est un probleme autocad 2010 lier a la modification des objets (notament les textes) contenu dans des blocs par l'intermediaire de lisp quel qu'il soit.....

 

je pensais etre clair

 

je suis désolé de m'etre mal exprimé.

 

 

Posté(e)

ah bah oui

 

tient voici un lisp cencé supprimer tout les champs

 

 

;;; FIELD2TXT (gile)
;;; Transforme les champs dans les textes, mtextes et attributs en texte

(defun c:Field2Txt (/ *error* ss)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
     )
 
 (defun *error* (msg) (vla-EndUndoMark *acdoc*) (princ))

 (princ "\nSélectionnez les objets à traiter ou : ")
 (if (or (ssget '((0 . "INSERT,MTEXT,TEXT")))
  (ssget "_X" '((0 . "INSERT,MTEXT,TEXT")))
     )
   (progn
     (vla-StartUndoMark *acdoc*)
     (vlax-for	obj (setq ss (vla-get-ActiveSelectionSet *acdoc*))
(if (= (vla-get-ObjectName obj) "AcDbBlockReference")
  (if (= (vla-get-HasAttributes obj) :vlax-true)
    (foreach att (vlax-invoke obj 'GetAttributes)
      (RemoveField att)
    )
  )
  (RemoveField obj)
)
     )
     (vla-delete ss)
     (vla-EndUndoMark *acdoc*)
   )
 )
 (princ)
)

(defun RemoveField (obj)
 ((lambda (str)
    (or (vl-catch-all-error-p
   (vl-catch-all-apply
     'vla-remove
     (list (vla-getExtensionDictionary obj) "ACAD_FIELD")
   )
 )
    )
    (vla-put-TextString obj str)
  )
   (vla-get-TextString obj)
 )
) 


 

sa marche tres bien sur les attributs, mais chez moi pas sur les textes...

Posté(e)

Re,

 

Je viens de tester sur ma 2008 =>

 

Commande: FIELD2TXT

Sélectionnez les objets à traiter ou :

Choix des objets: Spécifiez le coin opposé: 1 trouvé(s)

 

Aucune action sur l'attribut !

Ok sur les TextDyn et Mtext

 

Sur ma v2011

 

Exactement pareil !

 

donc chez moi, c'est l'inverse, :o

 

Marche parfaitement sur text et Mtext avec champs mais pas les attributs (testé que sur un bloc avec un champ de ce type =>

%%).Length \f "%lu2%pr0">% 

)

 

Désolé, pas de V 2010 pour tester,...

 

 

Civil 3D 2025 - COVADIS_18.3b

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

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é