Aller au contenu

ACADISO derniere ligne droite


Guigues

Messages recommandés

Bonjour

 

J'avance toujours sur mon projet de creation d'iso sous autocad et de nomenclatures automatiques.

 

J'ai décidé de changer de portage sur la gestion des metrees et je voudrais savoir si un coup de pouce peut m etre donnée vis a vis de l exemple que je vais donner ci dessous :

 

Dans mon dessin DWG j'ai plusieurs Blocs identiques appelés "BLOC.Dwg" qui contiennent 2 attributs :

ATT1 = Designation (je le renseigne par du texte)

ATT2 = Métrée (je le renseigne par une valeur numerique)

 

La designation est la meme pour tous les blocs (qui portent le meme nom) et les valeurs de ATT2 different d'un bloc a l autre.

 

 

Dans mon dessin DWG j'ai également un Bloc qui appartient a mon gabarit vierge et donc présent des le debut, il s'appelle TOTAL.dwg (il est present qu'une fois) et il contient 2 attributs :

ATT1 = Designation

ATT2 = somme

 

 

Est-il possible de mettre en oeuvre un lisp qui copie la valeur de ATT1 de Bloc.dwg vers ATT1 de TOTAL.Dwg et qui recupere toutes les valeurs de ATT2 de Bloc.dwg, en fait la somme et copie cette valeur vers ATT2 de TOTAL.dwg ???

 

C'est la derniere piece du puzzle donc merci d'avance pour l'aide !!! :)

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Oui, avec un lisp

 

Est-il possible de mettre en oeuvre un lisp qui copie la valeur de ATT1 de Bloc.dwg vers ATT1 de TOTAL.Dwg et qui recupere toutes les valeurs de ATT2 de Bloc.dwg, en fait la somme et copie cette valeur vers ATT2 de TOTAL.dwg ???

Pourquoi ne pas se garder la possibilité d'avoir des Att1 différents et donc avoir plusieurs Total ?

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Je comptais utiliser x fois ce systeme avec des familles de blocs differentes pour chaque type de ligne que l'utilisateur importera ...

 

Mais si il est possible d'identifier les ATT1 differents et de faire 1 total des ATT2 pour chaque famille de ATT1 identiques alors cela allege le systeme...

 

 

Par contre il faut plusieurs fois le bloc TOTAL.dwg et il faut que le lisp renseigne de maniere dynamique les ATT1 en fonction du nombre de BLOCS.DWG ayant un ATT1 different.

 

Si c'est impossible (mise en place d'un systeme de lecture de la chaine de caractere etc etc...) ... je pourrai sans soucis retrouver mes petits avec le schema exposé initialement...

 

:)

 

 

Lien vers le commentaire
Partager sur d’autres sites

Mais si il est possible d'identifier les ATT1 differents et de faire 1 total des ATT2 pour chaque famille de ATT1 identiques alors cela allege le systeme...

Oui, mais cet attribut est renseigné une première fois pas l'utilisateur ou c'est le lisp qui écrit dedans en voyant qu'il n'est pas renseigné ?

 

ps : tu commences à faire le lisp, on t'aidera

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

C'est mon jour de bonté

 

(defun c:toa(/	blo bloc_1 bloc_2 doc ent lgn lst lst1 lst2 sel tot
	nombl reliq total)

 (defun nombl(bl)
   (if (vlax-property-available-p bl 'effectivename)
     (vla-get-effectivename bl)
     (vla-get-name bl)
   )
 )

 (defun total(blo / att)
   (setq tot 0)
   (foreach att (vl-remove-if-not '(lambda(x)(eq (strcase (caar blo)) (strcase (caar x)))) lst2)
     (setq tot (+ tot (atof (cadar att))))
   )
 )

 (defun reliq(lst txt / blo tes)
   (and (setq lst (vl-sort lst '(lambda(a b)(< (caar a) (caar b)))))
     (princ (strcat "\nIl " txt " un/des bloc(s) " bloc_1 " dans le plan.\n\tAvec comme référence de valeur d'attribut(s) : "))
     (while lst
(setq blo (caaar lst))
(and tes (princ ", "))
(princ blo)
(setq lst (vl-remove-if '(lambda(x)(eq blo (caar x))) lst)
      tes T
)
     )
   )
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object))
bloc_1 "TOTAL"
bloc_2 "BLOCS"
 )
 (vla-startundomark doc)
 (and (ssget "x" (list (cons 0 "insert") (cons 2 (strcat bloc_1 "," bloc_2)) (cons 66 1)))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(setq lst (mapcar 'vla-get-textstring (vlax-invoke ent 'getattributes)))
(if (eq (strcase (nombl ent)) (strcase bloc_1))
  (setq lst1 (cons (cons lst ent) lst1))
  (setq lst2 (cons (cons lst ent) lst2))
)
     )
     (vla-delete sel)
     (foreach blo lst1
(total blo)
(setq lgn (length lst2)
      lst2 (vl-remove-if '(lambda(x)(eq (caar blo) (caar x))) lst2)
)
(or (eq lgn (length lst2))
  (progn
    (vla-put-textstring (cadr (vlax-invoke (cdr blo) 'getattributes)) (rtos tot))
    (setq lst1 (vl-remove-if '(lambda(x)(eq (caar blo) (caar x))) lst1))
  )
)
     )
     (while (and lst1 lst2)
(total (setq blo (car lst2)))
(mapcar '(lambda(a b)
	  (vla-put-textstring a b)
	)
	(vlax-invoke (cdar lst1) 'getattributes)
	(list (caar blo) (rtos tot))
)
(setq lst1 (cdr lst1)
      lst2 (vl-remove-if '(lambda(x)(eq (caar blo) (caar x))) lst2)
)
     )
     (reliq lst1 "reste")
     (reliq lst2 "manque")
   )
 )
 (vla-endundomark doc)
 (princ)
) 

 

@+

 

[Edité le 6/7/2010 par Patrick_35]

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

Lien vers le commentaire
Partager sur d’autres sites

Merci...

 

Ca marche parfaitement

 

Je posterai un fichier .Zip du menu complet... la tu viens de decoincer la situation et de m ouvrir en grand le chemin pour que j'accomplisse ce projet (qui me trotte dans la tete depuis plus d'un an) !!

 

 

Tu l'as entendu souvent.... mais bravo ! quel talent...

 

 

Lien vers le commentaire
Partager sur d’autres sites

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é