Aller au contenu

Addition de la valeur d\'un attribut


Messages recommandés

Posté(e)

 

Hello

 

Je n'ai pas trouvé mon bonheur !

 

Je desire une routine Lisp ou V-Lisp qui me permette a partir d'une selection AutoCAD

classique (Fenetre, CP, Tout, etc)

 

Me demande de selectionner un bloc puis un nom d'attribut (Etiquette)

et fasse la somme numerique du contenu de l'attribut pour tous les blocs

contenus dans la selection !

 

Si le contenu de l'attribut est Non numerique, on le considere a ZERO !

 

Rappel: Les routines ADDATT/MULATT de Gilles sont Tip Top

mais elles modifient les contenus des attributs par une valeur numerique

 

Bien sur, je pourrais faire une extraction du contenu des attributs

puis un tableau et/ou un export vers Excel mais c trop long et "complique" !!!

 

Merci d'avance, Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

coucou,

 

je n'ai pas de pinces, mais j'ai tapé ça :

dans mes tests ça fonctionne, mais dans ton fichier ?

 

(setq blocgenre (entsel "\nchoix\n"))

(redraw (car blocgenre) 3)

(setq blocatt (nentsel "\nchoix\n"))

(setq nomatt (cdr (assoc 2 (entget (car blocatt)))))

(redraw (car blocgenre) 4)

 

(setq nombloc (cdr (assoc 2 (entget (car blocgenre)))))

(alert (strcat "Bloc Choisi : "

nombloc

"\nAttribut Choisi :"

nomatt

)

)

 

(setq jeubloc (ssget "x"

(list

(cons 0 "INSERT")

(cons 2 nombloc)

 

)

)

)

(setq lonjeubloc

(sslength jeubloc)

n 0

addition 0

)

 

(repeat lonjeubloc

(setq bloc (ssname jeubloc n))

(setq test (entnext bloc))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(while (/= (cdr (assoc 2 (entget test))) nomatt)

(setq test (entnext test))

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq addition (+ (atof (cdr (assoc 1 (entget test)))) addition))

(setq n (+ 1 n))

)

(alert (strcat " addition des attributs: "

nomatt

">>"

(rtos addition)

)

)

 

 

tu me tiendras au courant ?

 

amicalement

 

 

 

 

 

Posté(e)

coucou

 

comme je te l'ai dit, c'est vite

le principe :

 

tu choisis un bloc à l'écran

il se met en surbrillance,

tu choisis un attribut de ce bloc

une case ALERT t'indique le nom du bloc et l'étiquette de l'atribut

il n'y a pas de contrôle donc c'est juste une info

c'est améliorable

puis le dessin est scanné par un ssget qui cherche TOUS

les blocs nommés

dans ces blocs, tous les attributs de l'étiquette choisie

ensuite, je fais une addition de toutes les valeurs numériques trouvées

qui sont stockées dans la variable ADDITION.

 

amicalement

 

Posté(e)

 

Hello Didier

 

Désolé, mais je n'arrive pas à utiliser ton bout de Lisp ! :o

 

C' la grosse fatigue, mais heureusement je suis en vacs ce soir !

 

NeanmoinsSVP si qq'un pouvait me faire un Lisp sympa,

le retour de vacs s'annoncera "favorable" :)

 

Merci d'avance, Le Decapode "fatigué"

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Comme ça, ça va ?

 

On sélectionne d'abord l'attribut, ça permet de récupérer le nom du bloc pour filtrer la sélection

 

(defun c:addattval (/ att elst tag ss n tot blk)
 (and
   (setq att (car (nentsel "\nSélectionnez un attribut: ")))
   (setq elst (entget att))
   (= (cdr (assoc 0 elst)) "ATTRIB")
   (setq tag (cdr (assoc 2 elst)))
   (princ "\nSélectionnez les blocs ou [b]:")
   (or
     (setq ss
     (ssget
       (list
	 '(0 . "INSERT")
	 (assoc 2 (entget (cdr (assoc 330 elst))))
       )
     )
     )
     (setq ss
     (ssget "_X"
	    (list
	      '(0 . "INSERT")
	      (assoc 2 (entget (cdr (assoc 330 elst))))
	    )
     )
     )
   )
   (setq n -1)
   (setq tot 0)
   (while (setq blk (ssname ss (setq n (1+ n))))
     (setq att (entnext blk))
     (while (and att
	  (setq elst (entget att))
	  (/= (cdr (assoc 2 elst)) tag)
     )
(setq att (entnext att))
     )
     (if (setq val (distof (cdr (assoc 1 elst))))
(setq tot (+ tot val))
     )
   )
 )
 (alert (strcat "Total = " (vl-princ-to-string tot)))
 (princ)
) 

 

[Edité le 9/8/2008 par (gile)]

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

Posté(e)

Ben ... non ! :casstet:

Tout d'abord comment sélectionner un attribut dans un bloc ?

Je ne peux que sélectionner le bloc "constitué", si je ne m'abuse ....

Et puis le total donne toujours 1 à priori :o

Pas tout compris du fonctionnement

Posté(e)

Salut,

 

Tout d'abord comment sélectionner un attribut dans un bloc ?

Je ne peux que sélectionner le bloc "constitué", si je ne m'abuse ....

 

La fonction LISP nentsel (Nested ENTity SELection) permet de sélectionner une entité imbriquée, un attribut par exemple.

 

Commande: ADDATTVAL

Sélectionnez un attribut: cliquer sur l'attribut à additionner

Sélectionnez les blocs ou : faire une sélection ou Entrée, Espace ou clic droit pour sélectionner tous les blocs insérés

Choix des objets: Spécifiez le coin opposé: 4 trouvé(s)

 

Choix des objets: valider la sélection

Total = 22.0

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

Posté(e)

Re,

tout est clair et fonctionne correctement ...

J'avais simplement fait un bloc à plusieurs attributs dont un seul numérique

et je ne devais pas systématiquement cliquer dessus :cool:

ne connaissant pas la petite subtilité,

mais ta mise au point à fait tilt dans ma petite tête

Merçi

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

hello tous

 

gile est ce que ta routine lisp pourrait faire la meme chose en additionnant les "mtext" afficher des cotations

 

l'interet ???

 

simple routine de verifications de cotes :

celles qui sont existantes mais ne pointent plus réellement l'entite

ou celle qui sont forcées

 

merci

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é