Patrick_35 Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 Bonjour Tout est dans le sujet.Comment récuperer l'ID d'un Mtext dans un tableau. :casstet: Je touve la valeur du texte, la hauteur de la cellule, même la couleur du fond, mais rien sur l'ID :( Merci d'avance @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 Salut,Je vais pas t'aider, mais,Comment récuperer l'ID d'un Mtext dans un tableau. Es-tu sûr que c'est un Mtext ? (c'est ce qu'il est pensé de croire quand on veux le modifier et que l'editeur s'ouvre, mais bon....) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 J'ai pas trouvé non plus, pourtant avec nentsel on peut récupérer l'objet mtext. :casstet: Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 nentsel m'a donné une idée : nentselp (setq tab (vlax-ename->vla-object (car (entsel)))) (setq pt (vlax-invoke tab 'GetAttachmentPoint 0 0)) ; rangée 1 colonne 1 (vla-get-ObjectID (vlax-ename->vla-object (car (nentselp pt)))) [Edité le 7/12/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 nentsel m'a donné une idée : nentselpça m'avais fait penser à entnext, moi... (setq Ent (nentsel "\nTableau: ") ID (vla-get-ObjectID (vlax-ename->vla-object (cdr (assoc -1 (entget (entnext (car ent)))))))) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 Salut Bred, je crois que Patrick veut récupérer l'ID du texte "en aveugle" sans sélection à l'écran. Sinon, il suffit de faire : (vla-get-ObjectID (vlax-ename->vla-object (car (nentsel "\nSélectionner le texte: ")))) En tout cas, je crois que c'est la première fois que Patrick_35 pose une question en vlisp et que c'est pas lui qui y répond. :D Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 7 décembre 2007 Posté(e) le 7 décembre 2007 Salut Bred, je crois que Patrick veut récupérer l'ID du texte "en aveugle" sans sélection à l'écran. Sinon, il suffit de faire : (vla-get-ObjectID (vlax-ename->vla-object (car (nentsel "\nSélectionner le texte: "))))Ah ben oui... merci.... :calim: En tout cas, je crois que c'est la première fois que Patrick_35 pose une question en vlisp et que c'est pas lui qui y répond.Et non, c'est toi, et ça ne m'ettones pas ! ;) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 7 décembre 2007 Auteur Posté(e) le 7 décembre 2007 Merci à vous deux et particulièrement à (gile) qui me donne la solution tout cuite et qui a bien compris le sens de ma question (comme quoi il est bon).Je n'aurai jamais, mais alors jamais pensé au nentselp :cool: En tout cas, je crois que c'est la première fois que Patrick_35 pose une question en vlisp et que c'est pas lui qui y répond. :D Comme quoi je suis loin de tout connaitre. Et ce n'est pas la première fois ;) @+ 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 7 décembre 2007 Posté(e) le 7 décembre 2007 Et ce n'est pas la première fois Ah oui, mais avoue que souvent tu finis par répondre toi même aux questions que tu poses ;) Dommage que Didier-AD ne soit pas plus présent sur les forums. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lovecraft Posté(e) le 8 décembre 2007 Posté(e) le 8 décembre 2007 bonjour, j'ai une p'tite question concernant les tableaux sous autocad. Est il possible de mettre un valeur dans cellule que l'on veut dans un tableauexemple:j'ai un tableau de trois colonnes sur trois rangées.je voudrais pouvoir mettre une valeur dans la colonne deux rangée deux.Et tout ca en lisp ou vlisp. Merci http://www.youtube.com/user/CADMINATOR?feature=mhee
(gile) Posté(e) le 8 décembre 2007 Posté(e) le 8 décembre 2007 Salut, Ici l'utilisation du vlisp est beaucoup plus simple avec la fonction vla-SetCellValue la syntaxe est (vla-SetCellValue objet indice_rangée indice_colonne valeur)où objet est le tableau (vla-object) et où les indices démarrent à 0. ;; soit tab le nom d'entité du tableau ([i]ename[/i]) (setq tab (car (entsel "\nSélectionner un tableau: "))) ;; convertion du [i]ename[/i] en [i]vla-object[/i] (setq tab (vlax-ename->vla-object tab)) ;; attribution d'une valeur à la cellule R2C2 (vla-SetCellValue tab 1 1 "B2") ;; attribution d'une valeur à la cellule R1C3 (vla-SetCellValue tab 0 2 "C1") [Edité le 8/12/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 25 février 2008 Auteur Posté(e) le 25 février 2008 Salut Je reviens à la charge, car je viens de constater que si j'ai un zoom trop petit, le (nentselp pt) me retourne nil, et donc me retrouve plus l'id :(La solution est un zoom total, mais si on pouvais s'en passer pour que le lisp reste transparent ;) Merci @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 11 mars 2008 Auteur Posté(e) le 11 mars 2008 BonsoirDonc, la solution (defun IdMtextTable(tab / col ent fus id lig lst) (setq ent (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (cdr (assoc 2 (entget tab))))) (vlax-map-collection ent '(lambda (x) (and (vlax-property-available-p x 'AttachmentPoint) (setq lst (cons x lst))))) (setq lst (reverse lst) lig 0 tab (vlax-ename->vla-object tab)) (while (< lig (vla-get-rows tab)) (setq col 0) (while (< col (vla-get-columns tab)) (or (eq (vla-ismergedcell tab lig col 0 0 0 0) :vlax-false) (eq lig 0) (eq (vla-ismergedcell tab (1- lig) col 0 0 0 0) :vlax-false) (not (eq (cadr (vlax-invoke tab 'GetAttachmentPoint lig col))(cadr (vlax-invoke tab 'GetAttachmentPoint (1- lig) col)))) (setq fus T) ) (or (eq (vla-ismergedcell tab lig col 0 0 0 0) :vlax-false) (eq col 0) (eq (vla-ismergedcell tab lig (1- col) 0 0 0 0) :vlax-false) (not (eq (car (vlax-invoke tab 'GetAttachmentPoint lig col))(car (vlax-invoke tab 'GetAttachmentPoint lig (1- col))))) (setq fus T) ) (or fus (eq (vla-gettext tab lig col) "") (setq id (cons (list lig col (car lst)) id) lst (cdr lst) ) ) (setq col (1+ col) fus nil) ) (setq lig (1+ lig)) ) (reverse id) ) Sélection d'une table(setq id (IdMtextTable (car (entsel)))) Pour trouver le Mtext et donc l'id à la ligne 4, colonne 1(setq ent (mapcar 'caddr (vl-remove-if-not '(lambda (x) (and (eq (car x) [b]4[/b]) (eq (cadr x) [b]1[/b]))) id))) (vla-get-objectid (car ent)) @+ [Edité le 12/3/2008 par Patrick_35] 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 11 mars 2008 Posté(e) le 11 mars 2008 Merci de partager aussi en français ;) Une petite suggestion :remplacer : (setq id (cons (list lig col (car lst)) id))par : (setq id (cons (cons (strcat (num2alpha (1+ col)) (itoa (1+ lig))) (car lst)) id))avec la routine Num2Alpha* Ceci ferait retourner une liste d'association du type :(("A1" . #) ("A2" . #) ...) Et, permettrait, pour récupérer le mtexte de la cellule, d'utiliser un code plus habituel :(cdr (assoc "A1" id)) *;; NUM2ALPHA Convertit un entier en caractères alphabétiques (majuscules) ;; (num2alpha 1) -> "A" ;; (num2alpha 26) -> "Z" ;; (num2alpha 27) -> "AA" ;; (num2alpha 703) -> "AAA" (defun num2alpha (num) (if ( (chr (+ 64 num)) (if (zerop (rem num 26)) (strcat (num2alpha (1- (/ num 26))) "Z") (strcat (num2alpha (/ num 26)) (chr (+ 64 (rem num 26))) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 12 mars 2008 Auteur Posté(e) le 12 mars 2008 Salut (gile) On fréquente les mêmes lieux ;) Je n'avais pas pensé à ta solution, elles est plus pratique pour rechercher dans la liste.Mais je voulais aussi conserver sans algorithme, le numéro de ligne et de colonne afin de rechercher directement la cellule dans un tableau. Merci de ta solution @+ ps : correction d'un bug dans le lisp Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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