barbichette Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Bonjour,Lors de la présentation d'Autocad 2006, mon installateur m'avait montré un truc sympas, mais pas moyen de rmettre la main dessus. On a prit un plan de fondation par puitsLes puits étaient des blocs il a ensuite inséré un tableau ou quelquechose dans le genre et en 2 clics (ou 3) il a créé un tableau avec pour le plan, chaque bluc utilisé, et le nombre de fois où il apparait dans le dessin.... C'est possible ? ***********************Rien ne sert de courrir, il faut partir à point.
Bred Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Salut, Ligne de commande : _eattext ou Outils/Extraction d'Attribut Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
barbichette Posté(e) le 12 octobre 2006 Auteur Posté(e) le 12 octobre 2006 Merci ***********************Rien ne sert de courrir, il faut partir à point.
Pieroka Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Y a-t-il moyen que dans le tableau AutoCAD, le bloc lui même soit inséré dans une colonne symbole par exemple, afin d'avoir la représentation de l'élément en face du nom ? Formateur Autocad - Revit - Sketchup - Photoshop
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Y a-t-il moyen que dans le tableau AutoCAD, le bloc lui même soit inséré dans une colonne symbole par exemple, afin d'avoir la représentation de l'élément en face du nom ? Un cauchemar de programmeur avec les points de base décalés et les échelles à gérer. Mais il existe peut-être un lisp ?! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Oli553 Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 ICI Télécharger LV1.11 de patrick_35. Mais ne fonctionne pas avec les blocs dynamiques. Du coup j'utilise la solution dite plus haut avec les attributs L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
Pieroka Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 ya pas besoin de calculer le point de base, car on peux manuellement insérer un bloc dans un tableau et le centrer bouton droit sur une cellule d'un tableau "insérer un bloc...": http://xs307.xs.to/xs307/06414/bloctab.jpg C'est dommage que 'l'extraction d'attribut ne sorte pas un tableau avec les blocs insérés dans une cellule. Je vais tester le lisp... Formateur Autocad - Revit - Sketchup - Photoshop
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Autant pour moi. Mais je ne sais pas si c'est lispable. Et je ne crois pas du tout que le lisp de Patrick_35 (que je connais bien; le lisp, pas Patrick,... quoique) fasse le boulot). Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 J'ai reagrdé vite fait en Vlisp, ca doit pouvoir se faire. Et je m'y interesse. [Edité le 12/10/2006 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Oli553 Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 En attendant, faite gaffe avec l'extraction. Si vos bloc non pas la même echelle en X,Y,Z, il ne va pas tous les prendre (pour des paramétrique au moins, les autres, je ne sais pas) L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Un lisp pour faire un tableau de tous les blocs présents et non purgés dans le dessin, avec une colonne contenant le bloc : (defun c:tabloblo(/) (setq libloc nil liidbloc nil) (vlax-for i(vla-get-Blocks(vla-get-activedocument (vlax-get-acad-object))) (if(/=(substr (vla-get-name i)1 1)"*") (setq libloc(append libloc(list(vla-get-name i))) liidbloc(append liidbloc(list(vla-get-ObjectID i)))))) (setq ptins (getpoint "\nPoint d'insertion: ")) (vl-load-com) (setq tableVL (vla-addtable(vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point ptins) (length libloc) 2 20 200 ) ) (setq cont -1) (repeat(vla-get-Rows tableVL) (vla-settext tableVL(setq cont(1+ cont))0 (nth cont libloc)) (vla-SetBlockTableRecordId tableVL cont 1 (nth cont liidbloc) :vlax-true) (vla-setcellalignment tableVL cont 0 5 ) (vla-setcellalignment tableVL cont 1 5 ) ) (princ) ) lancer TABLOBLO (attention si vous avez bcp de blocs, ca n'est pas rapide, sauvegardez vos dessins). Drôlement sympa de m'avoir donné l'idée. Si vous trouvez le code sympa, je peux l'améliorer un peu et le publier dans les routines. [Edité le 12/10/2006 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 SalutSi, le lisp le fait. Il est même capable depuis un tableau contenant tout les blocs possible (déjà sauvegardé physiquement sur le disque) de créer un tableau qui ne contient que ceux qui sont dans le dessin. En bref, de créer une légende spécifique du dessin depuis une légende type @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Ah bon ?!!Changement de version ? Alors je viens de suer sangs et eaux pour rien ?! :cool: N'empêche que je ne suis pas mécontent, j'en revais, je n'en avais pas eu le temps alors qu'avec cette fonctionnalité du tableau qu'à montré Pieroka (que je ne soupçonnais même pas faute d'utiliser souvent la 2006), je m'y suis mis tout seul, comme un grand. En peu de temps finalement, au lieu de fabriquer un tableau avec des lignes, des textes et tout le tintouin. [Edité le 12/10/2006 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Non, pas de changement de version, sauf que le mien peut fonctionner avec la 2000 ;)Mais, ce n'est pas perdu, tu as acquis uu peu plus de connaissances et làn tu as pris de l'avance sur moi car ne ne connait pas encore les tables VLEt une question, histoire de te taquiner un peu. Si le point d'insertion du bloc se trouve n'importe où, dans ton tableau il se retrouve où ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Il est bien ton LISP, Tramber :) Juste un truc, si le style de tableau courant contient une rangée "Titre", le nom du premier bloc de la collection s'y affiche, sans le bloc bien sûr. Il suffit de le savoir. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Essaies le code, tu vas voir, le bloc est autocentré, c'est génial ! J'ai juste rebondi sur la remarque de Pieroka. [Edité le 12/10/2006 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Peu pas :( , je suis sur 2000 ou 2005C'est bien le premier lisp complet que je vois de Tramber :D Et il est possible d'y associer un texte avec un bloc, histoire de lui donner une désignation ? Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 Je réponds à ma propre remarque : Il suffit d'ajouter (vla-put-TitleSuppressed tableVL :vlax-true) après le (setq tableVL (vla-addtable ...)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 12 octobre 2006 Posté(e) le 12 octobre 2006 C'est bien le premier lisp complet que je vois de Tramber :D Alors ca, c'est du mauvais esprit :cool: J'ai trop développé de bibliothèques et de routines interdépendantes pour faire profiter de mes codes. Quand ca va vite et que j'ai le temps, je publie, mais seulement sans routines dépendantes. Merci (Gile), je t'invite vivement à en faire une bombe ! Moi pas avoir le temps ni l'énergie (cf la remarque de Patrick_35) :o C'est une formidable base pour créer des nomenclatures. Mais il pose un problème : faut se pencher un peu de temps dessus pour faire un tableau à nx2 colonnes, qui serait tellement plus présentable quand on a énormément de blocs ! Ou nx3 colonnes pour avoir aussi le nb de blocs insérés. Faudrait p'têt qu'on bascule dans le forum lisp ? :yltype: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 Suite à la suggestion de Tramber, le même avec des colonnes un peu plus étroites et une troisième colonne pour le nombre de blocs insérés. (defun c:tabloblo (/ libloc liidbloc ss liref ptins tableVL cont) (vl-load-com) (vlax-for i (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)) ) (if (/= (substr (vla-get-name i) 1 1) "*") (setq libloc (append libloc (list (vla-get-name i))) liidbloc (append liidbloc (list (vla-get-ObjectID i))) ) ) ) (setq ss (ssget "_X" '((0 . "INSERT")))) (if ss (setq liref (mapcar '(lambda (x) (setq x (vlax-ename->vla-object x)) (if (vlax-property-available-p x 'EffectiveName) (vla-get-EffectiveName x) (vla-get-Name x) ) ) (mapcar 'cadr (ssnamex ss)) ) ) (setq liref '()) ) (initget 1) (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq tableVL (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ptins) (length libloc) 3 20 100 ) ) (vla-put-TitleSuppressed tableVL :vlax-true) (setq cont -1) (repeat (vla-get-Rows tableVL) (vla-settext tableVL (setq cont (1+ cont)) 0 (nth cont libloc) ) (vla-settext tableVL cont 1 (length (vl-remove-if-not '(lambda (n) (= n (nth cont libloc))) liref ) ) ) (vla-SetBlockTableRecordId tableVL cont 2 (nth cont liidbloc) :vlax-true ) (vla-setcellalignment tableVL cont 0 5) (vla-setcellalignment tableVL cont 1 5) ) (princ) ) [Edité le 17/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Oli553 Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 :D GénialApparemment, sa marche même avec les blocs dynamiques :D :D RE-GENIALEt il compte trés bien, même avec le "probleme" que j'ai cité plus haut Vous allez dire que je fait mon rabat joie, mais est il possible de faire une selection? ;) A qui doi-je envoyer les fleurs?ou une bouteille? :cool: L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
Tramber Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 Les fleurs à (Gile) :cool: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 La bouteille à Tramber et les fleurs à madame Tramber, je ne fais qu'adapter (et apprendre). Voici un premier jet avec possibilité de faire une sélection ou de lister toute la collection en faisant ENTER ou clic droit. En l'état, seuls sont comptés les blocs sélectionnés. Si tu veux que soient comptés tous les blocs insérés dont un exemplaire a été sélectionné, c'est un peu plus compliqué à cause des blocs dynamiques qui changent de nom quand ils ont été modifiés, mais faisable. Tiens moi/nous au courant. (defun c:tabloblo (/ libloc liidbloc sst ssu liref ptins tableVL cont) (prompt "\nSélectionnez les blocs à lister ou < Tous >") (setq ssu (ssget '((0 . "INSERT")))) (setq sst (ssget "_X" '((0 . "INSERT")))) (if sst (setq liref (mapcar '(lambda (x) (setq x (vlax-ename->vla-object x)) (if (vlax-property-available-p x 'EffectiveName) (vla-get-EffectiveName x) (vla-get-Name x) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex sst))) ) ) (setq liref '()) ) (if ssu (setq libloc (remove_doubles (mapcar '(lambda (x) (setq x (vlax-ename->vla-object x)) (if (vlax-property-available-p x 'EffectiveName) (vla-get-EffectiveName x) (vla-get-Name x) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssu))) ) ) liidbloc (mapcar '(lambda (x) (vla-get-ObjectID (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object) ) ) x ) ) ) libloc ) liref (vl-remove-if-not '(lambda (n) (member n libloc)) liref) ) (vlax-for i (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)) ) (if (and (/= (substr (vla-get-name i) 1 1) "*") (= :vlax-false (vla-get-IsXref i)) ) (setq libloc (append libloc (list (vla-get-name i))) liidbloc (append liidbloc (list (vla-get-ObjectID i))) ) ) ) ) (setq ptins (getpoint "\nPoint d'insertion: ")) (vl-load-com) (setq tableVL (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ptins) (length libloc) 3 20 100 ) ) (vla-put-TitleSuppressed tableVL :vlax-true) (setq cont -1) (repeat (vla-get-Rows tableVL) (vla-settext tableVL (setq cont (1+ cont)) 0 (nth cont libloc) ) (vla-settext tableVL cont 1 (length (vl-remove-if-not '(lambda (n) (= n (nth cont libloc))) liref ) ) ) (vla-SetBlockTableRecordId tableVL cont 2 (nth cont liidbloc) :vlax-true ) (vla-setcellalignment tableVL cont 0 5) (vla-setcellalignment tableVL cont 1 5) ) (princ) ) ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (cond ((atom lst) lst) (T (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) ) [Edité le 13/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 Il est presque parfait :D Mais il compte aussi les xrefs @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 13 octobre 2006 Posté(e) le 13 octobre 2006 Une autre version, qui compte toutes les réferences insérées pour chaque référence sélectionnée.Les xrefs sont écartées (je modifie la version précédente pour écarter aussi les xrefs). (defun c:tabloblo (/ libloc liidbloc ss col liref ptins tableVL cont) (vl-load-com) (prompt "\nSélectionnez les blocs à lister ou < Tous >") (if (not (setq ss (ssget '((0 . "INSERT"))))) (setq ss (ssget "_X" '((0 . "INSERT"))) col T ) ) (if ss (setq liref (mapcar '(lambda (x) (setq x (vlax-ename->vla-object x)) (if (vlax-property-available-p x 'EffectiveName) (vla-get-EffectiveName x) (vla-get-Name x) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) ) (setq liref '()) ) (if col (vlax-for i (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)) ) (if (and (/= (substr (vla-get-name i) 1 1) "*") (= :vlax-false (vla-get-IsXref i)) ) (setq libloc (append libloc (list (vla-get-name i))) liidbloc (append liidbloc (list (vla-get-ObjectID i))) ) ) ) (setq libloc (remove_doubles liref) liidbloc (mapcar '(lambda (x) (vla-get-ObjectID (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object) ) ) x ) ) ) libloc ) ) ) (initget 1) (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq tableVL (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ptins) (length libloc) 3 20 100 ) ) (vla-put-TitleSuppressed tableVL :vlax-true) (setq cont -1) (repeat (vla-get-Rows tableVL) (vla-settext tableVL (setq cont (1+ cont)) 0 (nth cont libloc) ) (vla-settext tableVL cont 1 (length (vl-remove-if-not '(lambda (n) (= n (nth cont libloc))) liref ) ) ) (vla-SetBlockTableRecordId tableVL cont 2 (nth cont liidbloc) :vlax-true ) (vla-setcellalignment tableVL cont 0 5) (vla-setcellalignment tableVL cont 1 5) ) (princ) ) ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (cond ((atom lst) lst) (T (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) ) [Edité le 17/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant