Aller au contenu

ID d\'un Mtext dans un Tableau


Patrick_35

Messages recommandés

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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 tableau

exemple:

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

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonsoir

Donc, 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é