Fraid Posté(e) le 3 novembre 2010 Posté(e) le 3 novembre 2010 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 ? https://github.com/Fraiddd
lili2006 Posté(e) le 3 novembre 2010 Posté(e) le 3 novembre 2010 Bonjour à toutes et tous, Il serait plus facile d'avoir une idée avec le lisp en question est un fichier test, non ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Fraid Posté(e) le 3 novembre 2010 Auteur Posté(e) le 3 novembre 2010 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'interetje 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 https://github.com/Fraiddd
lili2006 Posté(e) le 3 novembre 2010 Posté(e) le 3 novembre 2010 Re, C'est un pb lisp et/ou vlisp ou AutoCAD 2010 ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Fraid Posté(e) le 3 novembre 2010 Auteur Posté(e) le 3 novembre 2010 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é. https://github.com/Fraiddd
lili2006 Posté(e) le 3 novembre 2010 Posté(e) le 3 novembre 2010 Re, je pensais etre clair Oui oui, c'est le cas, c'est juste que je ne sais pas comment tester,... C'est à mon tour d'être désolé, ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Fraid Posté(e) le 3 novembre 2010 Auteur Posté(e) le 3 novembre 2010 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... https://github.com/Fraiddd
lili2006 Posté(e) le 3 novembre 2010 Posté(e) le 3 novembre 2010 Re, Je viens de tester sur ma 2008 => Commande: FIELD2TXTSé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/
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