Aller au contenu

Renseigner automatiquement des attributs


Messages recommandés

Posté(e)

Bonjour,

 

Malgré mes recherches, je ne parviens pas à trouver mes réponses.

 

Je souhaiterai renseigner automatiquement des attributs X et Y de blocs depuis les propriétés de l'objet, puisqu'Autocad le renseigne automatiquement.

 

Par exemple, j'ai un bloc bouche à clé avec des attributs(COMMUNE, ADRESSE, DIAMETRE....X, Y..) et je souhaiterai renseigner ces champs X et Y en une manipulation sans passer par le copier coller depuis Position X et Position Y disponible dans la géométrie de l'objet.

 

Est ce que qqn saurait comment faire svp?

 

Je mets une illustration pour que se soit plus clair.

Posté(e)

Bonjour,

 

Malgré mes recherches, je ne parviens pas à trouver mes réponses.

 

Je souhaiterai renseigner automatiquement des attributs X et Y de blocs depuis les propriétés de l'objet, puisqu'Autocad le renseigne automatiquement.

 

Par exemple, j'ai un bloc bouche à clé avec des attributs(COMMUNE, ADRESSE, DIAMETRE....X, Y..) et je souhaiterai renseigner ces champs X et Y en une manipulation sans passer par le copier coller depuis Position X et Position Y disponible dans la géométrie de l'objet.

 

Est ce que qqn saurait comment faire svp?

 

Je mets une illustration pour que se soit plus clair.

Bonjour

d'après ce que j'ai compris,

là ou tu veux le texte tu fais un clic droit insérer un champs.

catégories de champs, tu choisis objet. tu cliques sur choix objet, tu sélectionnes ton bloc,

puis dans propriétés tu choisis position, et à droite tu peux cocher ou décocher la position x y ou z au choix

+++

 

si tu veux utiliser l'attribut, tu choisis toujours objet et tu cliques sur ton attribut et dans proprietés tu choisis "valeur"

Posté(e)

Merci pour la réponse mais je n'ai pas 'insérer un champ' avec le clic droit, je souhaite juste remplir les champs X et Y automatiquement en fait (en bleu dans l'image)

de quelle image parles tu ?

Posté(e)

c'est pas mon image, j'espère que cela va marcher,

c'est comme si j'avais des attributs sous la partie 'Avancé' et je souhaite le remplir avec le champ Position Xhttp://exchange.autodesk.com/autocadarchitecture/fra/online-help/ARCHDESK/2012/FRA/attachments/detail_components_cmu_property_palette_design_tab.png

Posté(e)

Bonjour,

 

En m'appuyant sur l'extrait de dessin joint, ceci devrait faire l'affaire...

((lambda ( / js ent pt)
 (setq js (ssget '((0 . "INSERT") (2 . "AEP_VENTOUSE") (8 . "AEP_VENTOUSE"))))
 (repeat (setq n (sslength js))
   (setq
     ent (ssname js (setq n (1- n)))
     pt (cdr (assoc 10 (entget ent)))
   )
   (ade_odsetfield ent "EQUIPEMENT" "X" 0 (car pt))
   (ade_odsetfield ent "EQUIPEMENT" "Y" 0 (cadr pt))
 )
))

A copier-coller directement en ligne de commande de ton dessin.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Super !!! Ça marche .... Merci beaucoup !!

 

En effet ça va plus vite ... ;-)

 

Le code est programmé pour un bloc précis, je ferais la modif pour le lancer sur les autres blocs ...

 

Merci beaucoup pour votre aide, je vais pouvoir me lancer dedans .. ;-)

 

Merci

  • 8 ans après...
Posté(e)
Le 10/09/2015 à 23:14, bonuscad a dit :

En m'appuyant sur l'extrait de dessin joint, ceci devrait faire l'affaire...

((lambda ( / js ent pt)
 (setq js (ssget '((0 . "INSERT") (2 . "AEP_VENTOUSE") (8 . "AEP_VENTOUSE"))))
 (repeat (setq n (sslength js))
   (setq
     ent (ssname js (setq n (1- n)))
     pt (cdr (assoc 10 (entget ent)))
   )
   (ade_odsetfield ent "EQUIPEMENT" "X" 0 (car pt))
   (ade_odsetfield ent "EQUIPEMENT" "Y" 0 (cadr pt))
 )
))

A copier-coller directement en ligne de commande de ton dessin.

Hello Bonuscad

J'ai réussi à appliquer ta formule sur certains de mes blocs mais pas sur d'autres... je n'arrive pas à déchiffrer tes lignes de code et à appliquer ça sur certains blocs.

J'aurai aimé pouvoir en plus de mes X et Y compléter les Z également mais je ne connait pas le langage de programmation!

Est ce que tu pourrais me faire une "traduction" que je remplisse ça ensuite de moi même ?

J'ai réussi à remplir ma ligne OD "Z" mais pas avec les données du champs "Z" correspondant à l'alti de mon bloc dans le dessin... "car" pour "X", "cadr" pour "Y" mais je ne sais pas quoi mettre pour avoir le "Z".

En espérant pouvoir rapidement avoir tes réponses!

A bientôt et merci d'avance!

Posté(e)

Coucou @CT_Ko,
Le Z correspond ici à (caddr) ou bien (last).
Pour l'explication (car) récupère le premier élément d'une liste et (cdr) renvoie la liste sans le premier élément. Par exemple

(setq pt '(12.5 16.8 11.7))
(car pt) -> 12.5
(cdr pt) -> (16.8 11.7)

On peut ensuite combiner ces deux fonctions (jusqu'à 4 combinaisons max) en utilisant le 'a' pour (car) et le 'd' pour (cdr). Les caractères 'c' et 'r' respectivement au début et la fin restent inchangés et uniques :

(cadr) -> (car) + (cdr)   : Donc le premier élément de la liste sans le premier élément (= le second élément)
(cdar) -> (cdr) + (car)   : Donc la liste sans le premier élément du premier élément de la liste (= si le premier élément est une liste, alors retourne cette liste sans le premier élément de celle-ci, sinon retourne rien)
(caddr) -> (car) + (cdr) + (cdr)   : Donc le premier élément de la liste sans le premier élément de la liste sans le premier élément (= le troisième élément)
(cddddr) -> (cdr) + (cdr) + (cdr) + (cdr)   : Donc la liste sans les 4 premiers éléments
...

L'ordre des lettres est important donc. Mais pour ce qui te concerne :

(car) -> Premier élément de la liste des coordonnées d'un point (= X)
(cadr) -> Second élément de la liste des coordonnées d'un point (= Y)
(caddr) -> Troisième élément de la liste des coordonnées d'un point (= Z)
(last) -> Dernier élément de la liste des coordonnées d'un point (= Z si coordonnées 3D, Y si coordonnées 2D)
Comme ta liste représente ici un point 3D, tu as 3 éléments uniquement dans la liste, c'est pourquoi
(caddr) ET (last) renvoient toutes deux le même résultat

En espérant que cela aura pu t'aider 🙂

Bisous,
Luna

  • Like 1
Posté(e)

Hello Luna!

Mille mercis c'est limpide grâce à tes explications!

Je suis complètement novice dans le langage LISP mais ça a l'air d'être un langage incontournable sous Autocad (surtout quand on doit traiter des plans énormes)!

As-tu des tutos ou bien des sites qui me permettraient d'accéder à cette compétence?!

Encore un grand merci tu m'épargnes un copié-collé sur 5238 éléments!!

Avec toute ma reconnaissance!

Korentin

Posté(e)

Coucou,

Je te conseille de consulter ces 2 sites francophones qui sont très bien fait et très intéressant :
  • 
https://www.da-code.fr/ par Didier
  • https://programmation.developpez.com/tutoriels/autolisp/introduction-autolisp/ par Gilles Chanteau

Déjà avec chat tu pourras beaucoup apprendre ! Ensuite, rien de mieux que d'ouvrir un AutoCAD, l'aide AutoCAD également et de tester les fonctions que tu apprends au fur et à mesure. Toujours y aller étape par étape, à la vitesse qui te convient et éviter de voir trop gros dès le début 😉

Bisous,
Luna

  • Like 1
Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é