Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Lisp récupérer attribut ALT

12 RÉPONSES 12
RÉSOLU
Répondre
Message 1 sur 13
lauren.tubertTEJ25
1056 Visites, 12 Réponses

Lisp récupérer attribut ALT

Bonjour, 

 

Pour travailler sur un topographie, j'ai récupéré un lisp pour extraire des altimétries ALT et les réinjecter dans le Z autocad. Cependant quand je fais le commande ALTZ, j'ai le message d'erreaur suivant qui apaprait : 
error: bad argument type: VLA-OBJECT nil

Comment réparer l'erreur ?

 

Voici le lisp en question : 

 

(defun c:altz(/ doc ent pts sel)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc)
(and (ssget "x" (list (cons 0 "insert") (cons 2 "points") (cons 66 1)))
(progn
(vlax-for ent (setq sel (vla-get-activeselectionset doc))
(setq pts (vlax-get ent 'insertionpoint))
(vlax-put ent 'insertionpoint (list (car pts) (cadr pts) (atof (vla-get-textstring (nth 1 (vlax-invoke ent 'getattributes))))))
)
(vla-delete sel)
)
)
(vla-endundomark doc)
(princ)
)

 

 

Merci d'avance

Balises (3)
Étiquettes (1)
12 RÉPONSES 12
Message 2 sur 13
-didier-
en réponse à: lauren.tubertTEJ25

Bonjour @lauren.tubertTEJ25 

 

  1. Une lecture rapide du LSP me fait dire que
    Soit il n'y a pas de bloc "points" dans le dessin
  2. Soit l'attribut n'est pas une valeur numérique

par exemple si c'est écrit z=32.12 ça peut pas marcher
Envoyez sur le site un extrait du dessin, je vais regarder ça de plus près

 

Amicalement

 

Éternel débutant.. my site for learning : Programmer dans AutoCAD

Didier Aveline

EESignature

Message 3 sur 13
_gile
en réponse à: -didier-

Ou encore que le bloc ne contient qu'un attribut (le LISP cherche le second).



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 4 sur 13
lauren.tubertTEJ25
en réponse à: -didier-

Bonjour Didier,

L'attribut ALT est une valeur numérique sous la forme : 25.69

Je vous joins mon fichier autocad, 

 

Merci 🙂 

 

Message 5 sur 13
lauren.tubertTEJ25
en réponse à: _gile

Bonjour @_gile

J'ai bien deux attributs, le premier est MAT le second et ALT.. 

Message 6 sur 13
_gile
en réponse à: lauren.tubertTEJ25

Dans le fichier attaché, 25 blocs n'ont pas d'attribut ALT.

J'ai réécris une routine plus robuste avec une gestion d'erreur qui permet de ne pas bloquer en cas d'erreur et qui met les blocs incriminés en couleur orange (30). Une sélection rapide en filtrant sur la couleur permet de les retrouver.

(defun c:altz (/ doc ss i try)
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  (if
    (setq
      ss (ssget	"x"
		(list (cons 0 "insert") (cons 2 "points") (cons 66 1))
	 )
    )
     (repeat (setq i (sslength ss))
       (setq try
	      (vl-catch-all-apply
		'(lambda (/ ent pt)
		   (setq ent (ssname ss (setq i (1- i)))
			 pt  (getpropertyvalue ent "Position")
		   )
		   (setpropertyvalue
		     ent
		     "Position"
		     (list (car pt)
			   (cadr pt)
			   (atof (getpropertyvalue ent "ALT"))
		     )
		   )
		 )
	      )
       )
       (if (vl-catch-all-error-p try)
	 (setpropertyvalue ent "Color" 30)
       )
     )
  )
  (vla-endundomark doc)
  (princ)
)


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 7 sur 13
-didier-
en réponse à: lauren.tubertTEJ25

Bonjour

 

Grillé par (gile), j'aurais dû l'en douter

Toutefois j'en suis arrivé aux mêmes conclusions

J'ai lu la réponse de (gile) mais je suis surpris de recevoir

; erreur: Demande ADS erronée

Je ne vois pas dans les lignes de code la raison...

 

Amicalement

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

Didier Aveline

EESignature

Message 8 sur 13
lauren.tubertTEJ25
en réponse à: _gile

En effet !! Merci pour ce lisp !

En revanche je n'ai pas réussi à faire apparaitre les points incriminés en orange; et d'autre par comme dis @-didier-  j'ai l'erreur : Demande ADS erronée qui apparaît ..

 

Merci d'avance

Message 9 sur 13
-didier-
en réponse à: lauren.tubertTEJ25

Bonjour @lauren.tubertTEJ25 

 

Il y avait deux blocs de même nom,
Un avec un seul attribut MAT et l'autre avec deux attributs MAT et ALT

Après la synchronisation le message d'erreur disparaît.

 

La programmation ne peut pas grand-chose avec des dessins contenant des aberrations

Le programme peut avoir prévu plein de contrôle, mais l'imagination des utilisateurs est sans limite, et il m'arrive souvent d'écrire des programmes ne prévoyant pas tous les cas qui se présentent, c'est, entre autre, à ça qu'on détecte le "développeur".

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

Didier Aveline

EESignature

Message 10 sur 13
_gile
en réponse à: -didier-

Toutes mes excuses je me suis embrouillé les pinceaux et n'avais posté la bonne version.

(defun c:altz (/ doc ss i ent pt try)
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  (if
    (setq
      ss (ssget	"x"
		(list (cons 0 "insert") (cons 2 "points") (cons 66 1))
	 )
    )
     (repeat (setq i (sslength ss))
       (setq ent (ssname ss (setq i (1- i)))
	     pt	 (getpropertyvalue ent "Position")
       )
       (setq try
	      (vl-catch-all-apply
		'(lambda ()
		   (setpropertyvalue
		     ent
		     "Position"
		     (list (car pt)
			   (cadr pt)
			   (atof (getpropertyvalue ent "ALT"))
		     )
		   )
		 )
	      )
       )
       (if (vl-catch-all-error-p try)
	 (setpropertyvalue ent "Color" 30)
       )
     )
  )
  (vla-endundomark doc)
  (princ)
)

 



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 11 sur 13
_gile
en réponse à: _gile

@-didier-  ; erreur: Demande ADS erronée est le message laconique renvoyé par les fonctions getpropertyvalue et sepropertyvalue quelle que soit l'erreur.

Il ont dû penser que c'était bien suffisant pour les utilisateurs de MAC...



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 12 sur 13
-didier-
en réponse à: _gile

Bonjour @_gile 

 

Je te remercie de ta réponse,
le message est laconique pour une marque commerciale iconique

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

Didier Aveline

EESignature

Message 13 sur 13

Bonjour @lauren.tubertTEJ25 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report