Aller au contenu

probleme avec lisp legende


Messages recommandés

Posté(e)

bonjour,

Voila j’utilise un lisp pour faire mes légendes

Mais depuis que je suis passé en 2008,

J’ai un problème sur la première ligne elle n'est pas comptabiliser.

Je suis juste utilisateur et pas programmeur.

 

Merci d’avance pour votre aide

 

voici le lisp que j'utilise

 

 

(if col

(vlax-for i (vla-get-Blocks

(vla-get-activedocument (vlax-get-acad-object))

)

(if (and (/= (substr (vla-get-name i) 1 1) "*")

(= :vlax-false (vla-get-IsXref i))

)

(setq libloc (append libloc (list (vla-get-name i)))

liidbloc (append liidbloc (list (vla-get-ObjectID i)))

)

)

)

(setq libloc (remove_doubles liref)

liidbloc (mapcar

'(lambda (x)

(vla-get-ObjectID

(vla-item

(vla-get-Blocks

(vla-get-activedocument

(vlax-get-acad-object)

)

)

x

)

)

)

libloc

)

)

)

(initget 1)

(setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0))

(setq tableVL (vla-addtable

(vla-get-modelspace

(vla-get-activedocument (vlax-get-acad-object))

)

(vlax-3d-point ptins)

(length libloc)

3

20

100

)

)

(vla-put-TitleSuppressed tableVL :vlax-true)

(setq cont -1)

(repeat (vla-get-Rows tableVL)

(vla-settext

tableVL

(setq cont (1+ cont))

0

(nth cont libloc)

)

(vla-settext

tableVL

cont

1

(length (vl-remove-if-not

'(lambda (n) (= n (nth cont libloc)))

liref

)

)

)

(vla-SetBlockTableRecordId

tableVL

cont

2

(nth cont liidbloc)

:vlax-true

)

(vla-setcellalignment tableVL cont 0 5)

(vla-setcellalignment tableVL cont 1 5)

)

(princ)

)

 

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste

 

(defun REMOVE_DOUBLES (lst)

(cond

((atom lst) lst)

(T

(cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))

)

)

)

 

 

[Edité le 18/7/2008 par defrai]

Posté(e)

ok

 

(if col

(vlax-for i (vla-get-Blocks

(vla-get-activedocument (vlax-get-acad-object))

)

(if (and (/= (substr (vla-get-name i) 1 1) "*")

(= :vlax-false (vla-get-IsXref i))

)

(setq libloc (append libloc (list (vla-get-name i)))

liidbloc (append liidbloc (list (vla-get-ObjectID i)))

)

)

)

(setq libloc (remove_doubles liref)

liidbloc (mapcar

'(lambda (x)

(vla-get-ObjectID

(vla-item

(vla-get-Blocks

(vla-get-activedocument

(vlax-get-acad-object)

)

)

x

)

)

)

libloc

)

)

)

(initget 1)

(setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0))

(setq tableVL (vla-addtable

(vla-get-modelspace

(vla-get-activedocument (vlax-get-acad-object))

)

(vlax-3d-point ptins)

(length libloc)

3

20

100

)

)

(vla-put-TitleSuppressed tableVL :vlax-true)

(setq cont -1)

(repeat (vla-get-Rows tableVL)

(vla-settext

tableVL

(setq cont (1+ cont))

0

(nth cont libloc)

)

(vla-settext

tableVL

cont

1

(length (vl-remove-if-not

'(lambda (n) (= n (nth cont libloc)))

liref

)

)

)

(vla-SetBlockTableRecordId

tableVL

cont

2

(nth cont liidbloc)

:vlax-true

)

(vla-setcellalignment tableVL cont 0 5)

(vla-setcellalignment tableVL cont 1 5)

)

(princ)

)

 

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste

 

(defun REMOVE_DOUBLES (lst)

(cond

((atom lst) lst)

(T

(cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))

)

)

)

Posté(e)

Pour plus de précision la première ligne du tableau comprend qu’une colonne.

Je ne comprends pas car avec la 2007 ca fonctionnais très bien.

 

[Edité le 18/7/2008 par defrai]

Posté(e)

Re,

 

Après quelques recherches, car cette fois-ci, il manque le début du lisp, tu as pris le lisp de (gile) ici

 

Sauf si quelqu'un répond car je n'ai qu'une 2006 actuellement sous la main, je regarde cela ce soir.

 

@+

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

Posté(e)

Oui, il y a un souci avec les v2008 et 2009, en fait, le premier bloc apparait Sur la 1ere ligne, celle où est indiqué...légende :casstet:

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

Salut,

 

Je ne peux pas vraiment tester, je n'ai qu'une 2007.

 

Il y a eu plusieurs versions de Tabloblo (LISP de Tramber que je n'ai fait qu'adapter).

 

Une première, dans sa version la plus aboutie ici, qui est sensée supprimer la ligne de titre.

Une seconde ici, qui fait suite à une demande "ducrabe" pour avoir la ligne de titre, la ligne de sous-titres et la taille des symboles un peu réduite par rapport à la cellule.

 

Est-ce qu'aucune de ces versions ne fonctionne sur les désormais "fameuses" versions 2008/2009 ?

 

Si aucune ne fonctionne, serait-il possible d'entrer à la ligne de commande l'expression LISP suivante, de sélectionner un tableau et de poster le résultat ?

 

(vlax-dump-object (vlax-ename->vla-object (car (entsel)))) 

 

 

[Edité le 19/7/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut

 

Appararement, on ne peux plus supprimer le titre sur les A2008 et A2009

 

Pour contourner le problème, il suffit de changer

 

(vlax-3d-point ptins)
(length libloc)
3
20
100
)
)
;(vla-put-TitleSuppressed tableVL :vlax-true)
(setq cont -1)
(repeat (vla-get-Rows tableVL)
(vla-settext
tableVL
(setq cont (1+ cont))
0
(nth cont libloc)
)
(vla-settext
tableVL
cont
1
(length (vl-remove-if-not
'(lambda (n) (= n (nth cont libloc)))
liref
)
)
)
(vla-SetBlockTableRecordId
tableVL
cont
2
(nth cont liidbloc)
:vlax-true
)

par

(vlax-3d-point ptins)
(1+ (length libloc))
3
20
100
)
)
;(vla-put-TitleSuppressed tableVL :vlax-true)
(setq cont -1)
(repeat (vla-get-Rows tableVL)
(vla-settext
tableVL
(1+ (setq cont (1+ cont)))
0
(nth cont libloc)
)
(vla-settext
tableVL
(1+ cont)
1
(length (vl-remove-if-not
'(lambda (n) (= n (nth cont libloc)))
liref
)
)
)
(vla-SetBlockTableRecordId
tableVL
(1+ cont)
2
(nth cont liidbloc)
:vlax-true
)

 

@+

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

Posté(e)

Merci PHILPHIL, mais c'était sur un tableau que j'aurais aimé avoir la liste.

 

ou encore, toujours sur un tableau :

 

(vlax-property-available-p (vlax-ename->vla-object (car (entsel))) 'TitleSuppressed T) 

 

et

 

(vlax-property-available-p (vlax-ename->vla-object (car (entsel))) 'HeaderSuppressed T)

 

Mais Patrick_35 semble avoir trouvé une solution et je suggérais d'utiliser la seconde version.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Re (gile)

 

Je n'avais pas vu la seconder version.

Elle fonctionne parfaitement avec une A2009.

 

La propriété TitleSuppressed existe sur A2009, mais ne semble pas fonctionner.

J'ai essayé en vla-..., vlax-... et aussi avec 0,-1 et vlax-false, vlax-true, que nenni :casstet:

C'est comme si Autodesk avait oublié cette fonction :o

 

Je viens aussi de tomber deux truc :

Le premier est qu' on dirait qu'Autocad ne sait pas gérer une sélection de plus de 256 éléments d'une liste (la variable d'un multiple_select d'une BD)

Le second est qu'autocad se sait pas traduire en vlisp le bit 131072 du code dxf 90 d'un viewport.

 

Arriverait-on aux limites d'autocad ;)

 

@+

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

Posté(e)

hello patrick_35, gile et les autres

 

sur une version AA2009

voila la réponse gile sur un tableau

 

 Commande: (vlax-property-available-p (vlax-ename->vla-object (car (entsel))) 
'TitleSuppressed T)
Choix de l'objet: T

 

 Commande: (vlax-property-available-p (vlax-ename->vla-object (car (entsel))) 
'HeaderSuppressed T)
Choix de l'objet: T

 

bon a force de test et manip sur autocad mes réponses arrivent apres la bataille

 

 

si on selectionne des objets

 

les deux LISp fonctionnent

 

premiere version :

la case 1 A/B/C est bien vide

 

deuxieme version :

la case 1 A/B/C est bien remplit par "block" a toi de remplacer dans le LISp block par autre chose "

case 1/a "Nom"

case 1/b "Nombre"

case 1/c "Symbole"

 

   (VLA-SETTEXT TABLEVL 0 0 "LEGENDE DES BLOCKS")	; Titre
 (VLA-SETTEXT TABLEVL 1 0 "Nom")	; Titre colonne 1
 (VLA-SETTEXT TABLEVL 1 1 "Nombre")	; Titre colonne 2
 (VLA-SETTEXT TABLEVL 1 2 "Symbole")	; Titre colonne 3

 

 

 

par contre si on fait ca sur les deux versions , ca bug

 

 Commande: tabloblo 
Sélectionnez les blocs à lister ou < Tous >
Choix des objets:  [surligneur] tout[/surligneur]
686 trouvé(s)

Choix des objets:
*Annuler*
Erreur Automation Identificateur d’objet nul

 

phil

 

[Edité le 20/7/2008 par PHILPHIL]

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)
par contre si on fait ca sur les deux versions , ca bug

 

 Commande: tabloblo 
Sélectionnez les blocs à lister ou 
Choix des objets:  [surligneur] tout[/surligneur]
686 trouvé(s)

Choix des objets:
*Annuler*
Erreur Automation Identificateur d’objet nul

 

phil

 

C'est normal, j'essaye de respecter la syntaxe des invites de commandes d'AutoCAD :

 

"Sélectionnez les blocs à lister ou : " Tous est la valeur par défaut qu'on valide en faisant Entrée, Espace ou clic droit.

 

Quand c'est une option à entrer au clavier elle est placée entre crochets :

"Sélectionnez les blocs à lister ou [Tous] : "

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

hello gile

 

sur aa2009

 

si tu valides en appuyant sur "Entrée" par défault ca bug

 

 Commande: tabloblo2
Sélectionnez les blocs à lister ou < Tous >
Choix des objets:
*Annuler*
Erreur Automation Identificateur d’objet nul

 

si je selectionne des objets en ecrivant "tout"

 

 Commande:
TABLOBLO
Sélectionnez les blocs à lister ou < Tous >
Choix des objets: tout
686 trouvé(s)

Choix des objets:
*Annuler*
Erreur Automation Identificateur d’objet nul

 

tabloblo ==> premiere version du lisp

tabloblo2 ==> deuxieme version du lisp

 

phil

 

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

PHILPHIL,

 

Au vu de réponse données par Patrick_35, c'est la seconde version qu'il faut utiliser avec 2008/2009.

 

Je ne comprends pas le pourquoi du *Annuler* dans tes messages.

 

 

Petite précision :

- l'option "Tous" validée par Entrée, Espace ou clic droit liste toute la collection de blocs du dessin.

- Entrer "Tout" à la ligne de commande revient à sélectionner tous les blocs insérés dans le dessin.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

hello

 

ok ca marche

 

ca demandait un "CONTROL" de mes fichiers test pour eradiquer les erreurs

 

et une régénérations des fichiers FAS

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Cela fonctionne également sur 2009

Merci bicoup... :P

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

Vu le succès que semble avoir cette version, j'y apporte quelque amélioration :

Les xrefs et les blocs qu'elles peuvent contenir ne sont pas pris en compte quelque soit l'option retenue.

 

;; TABLOBLO (Tramber)
;; Crée un tableau qui liste les blocs insérés (sélectionnés ou toute la collection)

(defun c:tabloblo
      (/ libloc liidbloc ss col liref ptins tableVL cont row)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (prompt "\nSélectionnez les blocs à lister ou [b]")
 (or (setq ss (ssget '((0 . "INSERT"))))
     (setq ss	(ssget "_X" '((0 . "INSERT")))
    col	T
     )
 )
 (if ss
   (progn
     (vlax-for	x
	(setq
	  ss (vla-get-ActiveSelectionSet *acdoc*)
	)
(or (vlax-property-available-p x 'Path)
  (setq	liref
	 (cons
	   (if (vlax-property-available-p x 'EffectiveName)
	     (vla-get-EffectiveName x)
	     (vla-get-Name x)
	   )
	   liref
	 )
  )
)
     )
     (vla-delete ss)
   )
 )
 (if col
   (vlax-for i	(vla-get-Blocks *acdoc*)
     (if (and (not (wcmatch (setq name (vla-get-Name i)) "`**,*|*"))
       (= :vlax-false (vla-get-IsXref i))
  )
(setq libloc   (append libloc (list (vla-get-name i)))
      liidbloc (append liidbloc (list (vla-get-ObjectID i)))
)
     )
   )
   (setq libloc   (remove_doubles liref)
  liidbloc (mapcar
	     '(lambda (x)
		(vla-get-ObjectID
		  (vla-item
		    (vla-get-Blocks *acdoc*)
		    x
		  )
		)
	      )
	     libloc
	   )
   )
 )
 (initget 1)
 (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0))
 (setq	tableVL	(vla-addtable
	  (vla-get-modelspace
	    (vla-get-activedocument (vlax-get-acad-object))
	  )
	  (vlax-3d-point ptins)
	  (+ 2 (length libloc))
	  3
	  20			; Hauteur cellule
	  80			; Largeur cellule
	)
 )
 (vla-put-VertCellMargin tableVL 4.0)	; Marge verticale
 (vla-put-TitleSuppressed tableVL :vlax-false)
 (vla-put-HeaderSuppressed tableVL :vlax-false)
 (vla-setText tableVL 0 0 "Blocs")	; Titre
 (vla-setText tableVL 1 0 "Nom")	; Titre colonne 1
 (vla-setText tableVL 1 1 "Nombre")	; Titre colonne 2
 (vla-setText tableVL 1 2 "Symbole")	; Titre colonne 3
 (setq	cont -1
row 1
 )
 (repeat (- (vla-get-Rows tableVL) 2)
   (vla-settext
     tableVL
     (setq row (1+ row))
     0
     (nth (setq cont (1+ cont)) libloc)
   )
   (vla-settext
     tableVL
     row
     1
     (length (vl-remove-if-not
	'(lambda (n) (= n (nth cont libloc)))
	liref
      )
     )
   )
   (vla-SetBlockTableRecordId
     tableVL
     row
     2
     (nth cont liidbloc)
     :vlax-true
   )
   (vla-setcellalignment tableVL row 0 5)
   (vla-setcellalignment tableVL row 1 5)
 )
 (princ)
)

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste

(defun REMOVE_DOUBLES (lst)
 (if lst
   (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))
 )
) 

 

[Edité le 22/7/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

 

Hello

 

Un petit grain de sel !

 

Cette version sera t-elle fonctionnelle depuis "disons"

AutoCAD 2004 jusqu'à AutoCAD 2009 ?

 

Le Decapode "chiant"

 

Autodesk Expert Elite Team

Posté(e)

Encore mieux, merci Ô grand maitre... :P ;)

Fonctionne sur V2009 :D

 

[Edité le 22/7/2008 par Oli553]

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

  • 1 an après...
Posté(e)

Merci pour ce LISP !

Une aide précieuse...

je vais avoir encore plus de temps pour aller fouiner sur CADxp.

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

  • 2 semaines après...
Posté(e)

Salut tout le monde!!

sur 2004 j'ai : no function definition: VLA-ADDTABLE

cela se passe juste apres la demande du point d'insertion...

comment définir cette fonction?

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é