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 d'un point et coller un bloc avec cette valeur d'attribut

4 RÉPONSES 4
RÉSOLU
Répondre
Message 1 sur 5
l_LECOZE
156 Visites, 4 Réponses

Lisp - Récupérer attribut d'un point et coller un bloc avec cette valeur d'attribut

Bonjour,

 

J'ai besoin de vos lumières pour un lisp.

Mon but est de coller un bloc (alti) sur un point topo (TCPOINT) qui m'affiche la valeur de l'attribut ALT de ce dernier.

 

J'ai, avec mon niveau de méga débutant, réussi à mettre au point un Lisp fonctionnant de la manière suivante.

Je dois sélectionner l'attribut que je souhaite dupliquer (ALT du bloc TCPOINT), puis sélectionner un point d'insertion (celui de mon bloc TCPOINT) pour que mon bloc "alti" se colle et affiche la bonne valeur d'attribut

 

Mon lisp fonctionne mais je souhaite l'améliorer.

 

Je souhaite, dans l'idéal ne pas avoir à cliquer sur l'attribut, mais seulement sélectionner mon bloc TCPOINT, puis que mon bloc alti arrive au bon endroit avec la bonne valeur d'attribut.

 

J'ai essayé plusieurs choses mais sans réussir à obtenir quelque chose de fonctionnel.

Quelqu'un à une idée à me donner ?

Merci d'avance !

 

Je vous laisse un DWG avec les blocs

Mon lisp actuel :

 

(defun c:Getatt (/ ptbase z sel nombloc attreq attdia ALT)

(setq ptbase 0)
(setq attreq (getvar "ATTREQ")
attdia (getvar "ATTDIA"))

(setq z 0)
(setvar "ATTREQ" 1)
(setvar "ATTDIA" 0)


(setq z (cdr(assoc 1 (entget(car(nentsel "\nChoix de l'attribut a copier :"))))))
(setq ALT z)
(setq nombloc "alti")
(setq ptbase (getpoint "\nSélectionner le point de départ :"))

(command "_insert" nombloc ptbase 1 1 0 ALT)


(setvar "ATTREQ" attreq)
(setvar "ATTDIA" attdia)

(princ)
)

Étiquettes (2)
4 RÉPONSES 4
Message 2 sur 5
Y.AUBRY
en réponse à: l_LECOZE

Bonjour @l_LECOZE,

 

Ton bloc "alti" ayant exactement le même attribut "ALT" que le bloc "TCPOINT" je te suggère une méthode plus simple..

Ca va paraitre long comme ça vu le nombre d'imprime écran mais ça ne l'est pas en réalité.

 

 

Commande "MAPEXPORT", format shp, nommé "TCPOINT" (ou autre nommage)

 

YAUBRY_0-1689779769948.png

 

Dans l'onglet "Sélection" :

 

- Tu laisses le type d'objet "Point"

- Tu sélectionnes le calque contenant tes blocs attributaires 'TCPOINT' : en l'occurrence 'TOPOJIS_3D' dans ton exemple

YAUBRY_1-1689779884515.png

 

Dans l'onglet "Données"

- Cliques sur le bouton "Sélection des attributs" puis dans la partie "Blocs" de la nouvelle boite de dialogue , sélectionne ton bloc "TCPOINT" puis OK

YAUBRY_2-1689780056805.png

YAUBRY_4-1689780163914.png

Tu obtiens ceci

YAUBRY_5-1689780190154.png

 

Tu peux si tu le souhaites enregistrer ton format d'exportation pour pour l'utiliser plus rapidement la prochaine fois en cliquant sur le bouton "Enregistrer..."  et bien entendu "Charger..." lors de la prochaine utilisation mais attention, les calques et nom de blocs doivent être strictement identiques.

 

Puis clique sur le bouton "OK"

 

Ton fichier shape est réalisé

 

Ensuite tu utilises la commande "MAPIMPORT", tu pointes sur le fichier TCPOINT.shp que tu viens de réaliser

YAUBRY_6-1689780382119.png

 

Puis tu peux entrer un nom de calque dans la partie "Calque de dessin" ("ALTI" dans mon exemple ci-dessous) et dans la partie "Points" tu sélectionnes le bloc que tu veux importer (en l'occurrence ton bloc "alti")

Nota : j'ai purgé  ton dessin car il y avait un très grand nombre de blocs à l'origine

 

YAUBRY_7-1689780526516.png

 

Ensuite tu cliques sur le bouton avec les  "..."  à coté du nom de ton bloc à importer

YAUBRY_8-1689780713608.png

 

Puis tu coches la case "Obtenir valeurs attributs de champs" puis "OK"

 

YAUBRY_9-1689780782449.png

 

Tu peux également enregistrer le profil d'importation pour une prochaine utilisation

 

Il ne te reste plus qu'à appuyer sur le bouton "OK" pour importer tes blocs "alti"

 

A+ Yoan

 

 

 

Yoan AUBRY

EESignature

Message 3 sur 5
felix.corre
en réponse à: l_LECOZE

Bonjour,

Ci-après votre LISP où l'on récupère la valeur de l'attribut en sélectionnant le boc.

(defun c:Getatt (/ ptbase  Blksel ValAtt sel nombloc attreq attdia ALT)

(setq ptbase 0)
(setq attreq (getvar "ATTREQ")
attdia (getvar "ATTDIA"))

(setq z 0)
(setvar "ATTREQ" 1)
(setvar "ATTDIA" 0)


(setq Blksel (car(entsel "\nChoix de l'attribut a copier :")))
(setq ValAtt (getpropertyvalue Blksel "ALT"))

(setq nombloc "alti")
(setq ptbase (getpoint "\nSélectionner le point de départ :"))

(command "_insert" nombloc ptbase 1 1 0 ValAtt)


(setvar "ATTREQ" attreq)
(setvar "ATTDIA" attdia)

(princ)
)

 

Cordialement,

Félix.

Message 4 sur 5
l_LECOZE
en réponse à: Y.AUBRY

Merci pour cette astuce, ça fait effectivement un peu peur mais c'est pas bien compliqué finalement !

 

Bonne journée - Loïc

Message 5 sur 5
l_LECOZE
en réponse à: felix.corre

Merci pour ton aide également, ça fonctionne parfaitement.

 

J'ai finalement supprimé la partie demandant de sélectionner un point d'insertion en la remplaçant par (setq ptbase (getpropertyvalue Blksel "Position")), je pensais pas que ça pouvait être si simple pour récupérer les infos du bloc.

 

Bonne journée - Loïc

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