Patrick_35 Posté(e) le 18 décembre 2014 Posté(e) le 18 décembre 2014 Bonjour Mettez le caractère spécial qui suit dans un texte --> ■Faites un (vla-get-textstring (vlax-ename->vla-object (car (entsel)))) sur le texte et le caractère se transforme en | :oFaites un (cdr (assoc 1 (entget (car (entsel))))) et vous aurez la bonne valeur. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 18 décembre 2014 Posté(e) le 18 décembre 2014 Bien vu, et j'ose même pas imaginer ce sur quoi tu t'exerçais pour trouver ça… ;) _$ (vla-get-textstring (vlax-ename->vla-object (car (entsel)))) "¦" _$ _$ (cdr (assoc 1 (entget (car (entsel))))) "\U+25A0" _$ Merci Apprendre => Prendre => Rendre
vincentp010 Posté(e) le 18 décembre 2014 Posté(e) le 18 décembre 2014 Salut, c'est un bug connu.Lee Mac a écrit une fonction pour remplacer (vla-get-textstring)http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/vla-get-textstring-u-symbols/m-p/4365391/highlight/true#M314323 ;; Get Textstring - Lee Mac ;; Returns the text content of Text, MText, Multileaders, Dimensions & Attributes (defun LM:gettextstring ( ent / enx itm str typ ) (setq enx (entget ent) typ (cdr (assoc 0 enx)) ) (cond ( (wcmatch typ "TEXT,*DIMENSION") (cdr (assoc 1 (reverse enx))) ) ( (and (= "MULTILEADER" typ) (= acmtextcontent (cdr (assoc 172 (reverse enx)))) ) (cdr (assoc 304 enx)) ) ( (wcmatch typ "ATTRIB,MTEXT") (setq str (cdr (assoc 1 (reverse enx)))) (while (setq itm (assoc 3 enx)) (setq str (strcat (cdr itm) str) enx (cdr (member itm enx)) ) ) str ) ) ) Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
Patrick_35 Posté(e) le 19 décembre 2014 Auteur Posté(e) le 19 décembre 2014 Bonjour Bien vu, et j'ose même pas imaginer ce sur quoi tu t'exerçais pour trouver ça… ;) On m'a contacté pour une demande spécifique et c'est lors des échanges que je me suis aperçu de ce problème. c'est un bug connu.Si tu en connais d'autres, je suis preneur.Merci pour le code et le lien. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 19 décembre 2014 Posté(e) le 19 décembre 2014 Salut, Si tu en connais d'autres, je suis preneur. Le problème va se poser avec toutes les fonctions vla* qui retournent une chaîne susceptible de contenir des caractères unicode.J'ai eu ce genre de problème avec des fichiers chinois, j'avais alors écrit des fonctions utilisant les listes DXF pour remplacer vla-get-Name, vla-get-EffectiveName et vla-get-Layer. ;; gc:GetName ;; Retourne le nom de l'objet. ;; Fonctionne avec les noms contenant des caractères unicode. ;; ;; Argument ;; obj : objet dont on cherche le nom (ENAME ou VLA-OBJECT) (defun gc:GetName (obj / elst) (or (= (type obj) 'ENAME) (setq obj (vlax-vla-object->ename obj)) ) (cond ((cdr (assoc 2 (entget obj)))) ((vla-get-Name (vlax-ename->vla-object obj))) ) ) ;; gc:GetEffectiveName ;; Retourne le nom de l'objet. ;; Fonctionne avec les noms contenant des caractères unicode. ;; ;; Argument ;; blkRef : référence de bloc (ENAME ou VLA-OBJECT) (defun gc:GetEffectiveName (blkRef / ent elst name) (setq ent (if (= (type blkRef) 'VLA-OBJECT) (setq blkRef (vlax-vla-object->ename blkRef)) blkRef ) ) (setq elst (entget ent) name (cdr (assoc 2 elst)) ) (if (wcmatch name "`*U*") (cdr (assoc 2 (entget (cdr (assoc 340 (entget (cdr (assoc 360 (entget (cdr (assoc 360 (entget (cdr (assoc 360 elst))) ) ) ) ) ) ) ) ) ) ) ) name ) ) ;; gc:GetLayer ;; Retourne le nom du calque de l'entité. ;; Fonctionne avec les nom contenant des caractères unicode. ;; ;; Argument ;; ent : entité dont on cherche le nom du calque (ENAME ou VLA-OBJECT) (defun gc:GetLayer (ent) (and (= (type ent) 'VLA-OBJECT) (setq ent (vlax-vla-object->ename ent)) ) (cdr (assoc 8 (entget ent))) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 19 décembre 2014 Auteur Posté(e) le 19 décembre 2014 Bonjour (gile) Merci pour l'info et le code.Tu as le même problème en .NET ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Goldorak44 Posté(e) le 19 décembre 2014 Posté(e) le 19 décembre 2014 Salut, Pour ton caractère spécial, je ne rencontre pas le problème en .net PIRO CharlesDeveloppeur Revit, RV/RA - Formateur RevitPIRO CIE
(gile) Posté(e) le 19 décembre 2014 Posté(e) le 19 décembre 2014 Tu as le même problème en .NET ? Non (comme le dit goldorak44) et ça ne m'étonnes pas, l'API .NET d'AutoCAD est très proche d'ObjectARX donc de la source même d'AutoCAD (comme les listes DXF). Mais curieusement, il n'y a pas de problème en utilisant l'interface COM depuis une commande .NET. [CommandMethod("TEST")] public void Test() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; PromptEntityResult per = ed.GetEntity("\nSélectionnez un texte: "); if (per.Status != PromptStatus.OK) return; using (DBText dbText = (DBText)per.ObjectId.Open(OpenMode.ForRead)) { AcadText acadText = (AcadText)dbText.AcadObject; ed.WriteMessage("\nNET: {0}\nCOM: {1}", dbText.TextString, acadText.TextString); } } Commande: TEST Sélectionnez un texte: NET: ■ COM: ■ Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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