enzo06 Posté(e) le 23 mars 2012 Posté(e) le 23 mars 2012 re bien le bonjour Autre sujet cette fois ci sur les routines ....... J'utilise une routine "TABLOBLO" pour faire des quantitatifs (j'ai telecharger cet excellent lisp sur ce forum et remercie vivement l'auteur de ce pt bijou). Je souhaiterais toutes fois savoir s'il existe une variante qui permettrait de faire la meme chose que TABLOBLO mais selon une selection du fichier. Pour le moment TABLOBLO en ma possession me donne le quantitatif de tout le fichier ...... Ce que je voudrais c'est pouvoir avoir la quantitatif d'une zone du fichier qui aurait ete selectionnee par detourage dans une polyligne fermee (comme le lisp BCNT du meme auteut que TABLOBLO si mes souvenirs sont bon je crois que c'est Patrick 35 ......) Un grand MERCI par avance.
Tramber Posté(e) le 23 mars 2012 Posté(e) le 23 mars 2012 Je n'en reviens toujours pas du succès de cette routine ! Et comme peu routinier de la publication de routines bien faites je peux au moins m'enorgueillir d'avoir flairé un truc à faire. Techniquement pas difficile. Je suis donc l'auteur. Je commence à réfléchir à une page qui lui soit entièrement consacrée et où l'on puisse y trouver différentes versions ou un mode de fonctionnement plus avancé ! Qu'on se le dise. En attendant, publie ici les codes exacts de ces routines ou les liens vers les fils de discussion.Je les combinerai si Patrick_35 est d'acc' B) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
enzo06 Posté(e) le 23 mars 2012 Auteur Posté(e) le 23 mars 2012 Salut Tramber Mille excuses j'avais un peu zape le fait que c'est toi qui avait mis cette routines (merveilleuse) a la disposition de la communaute.Alors toi tu es l'auteur de TABLOBLO et Patrick_35 l'auteur de BCNT ..... Belle association Si je comprends bien tu veux que je joigne ici les codes de ces 2 routines pour en faire une compilation ?
Tramber Posté(e) le 23 mars 2012 Posté(e) le 23 mars 2012 Ben ouais. J'avoue que je suis un peu en mode "à l'arrache".Les liens vers les sujets où tu les as trouvé me suffit !En effet, je crois que Tabloblo a été remanié plusieurs fois donc, comme cela on partira sur la bonne base. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
enzo06 Posté(e) le 23 mars 2012 Auteur Posté(e) le 23 mars 2012 re Je dois dire que je ne sais pas ou se trouve les liens de ces 2 routines.J'ai bien ces 2 codes dans ma machine mais je sais pas comment les coller ici ....... De plus je possede ces 2 codes en version "originale". Elles doivent datees d'au moins 5 ans ....
Tramber Posté(e) le 26 mars 2012 Posté(e) le 26 mars 2012 J'ai pris parmi les premiers codes. C'est (Gile) qui a contribué à tout cela, moi je n'ai fait qu'une routine qui utilise la capacité des tableaux à afficher des blocs. J'ai donc fusionné donc deux versions mais puisant dans les sous-routines que notre ami phocéen avait publié à l'occasion. Vite fait, j'espère correctement car aujourd'hui j'ai de la fièvre ! (un comble au printemps !)Voici un code :(defun c:tabloblo (/ libloc liidbloc ss ss liref ptins tableVL cont) ;;; (prompt "\nSélectionnez les blocs à lister ou < Tous >") ;;; ;;; (setq ssu (ssget '((0 . "INSERT")))) ;;; ;;; (setq sst (ssget "_X" '((0 . "INSERT")))) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (initget "Objet Tous Sélection") (setq kw (getkword "\nSélectionnez les blocs ou [Objet/Tous/Sélection] [b]<[/b]Sélection>: " ) ) (cond ((= kw "Objet") (and (setq ent (car (entsel "\nSélectionnez le cercle, l'ellipse ou la polyligne: ") ) ) (setq typ (cdr (assoc 0 (entget ent)))) (or (member typ '("CIRCLE" "ELLIPSE")) (and (= typ "LWPOLYLINE") (= 1 (logand 1 (cdr (assoc 70 (entget ent))))) ) ) (setq ss (SelByObj ent "Wp" '((0 . "INSERT")))) ) ) ((= kw "Tous") (setq ss (ssget "_X" '((0 . "INSERT"))))) (T (setq ss (ssget '((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) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) ) (setq liref '()) ) (if ss (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 ss))) ) ) 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))) ) ) ) ;;; SelByObj -Gilles Chanteau- 06/10/06 ;;; Crée un jeu de sélection avec tous les objets contenus ou capturés, ;;; dans la vue courante, par un objet (cercle, ellipse, polyligne fermée) ;;; Arguments : ;;; - ent : un objet (ename ou vla-object) ;;; - opt : un mode de sélection (Cp ou Wp) ;;; - fltr : un filtre de sélection (liste) ou nil ;;; ;;; modifié le 26/07/07 : fonctionne avec les objets hors fenêtre (defun SelByObj (ent opt fltr / obj dist n lst prec dist p_lst ss) (if (= (type ent) 'ENAME) (setq obj (vlax-ename->vla-object ent)) (setq obj ent ent (vlax-vla-object->ename ent) ) ) (cond ((member (vla-get-ObjectName obj) '("AcDbCircle" "AcDbEllipse")) (setq dist (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) 50 ) n 0 ) (repeat 50 (setq lst (cons (trans (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) 0 1 ) lst ) ) ) ) ((and (= (vla-get-ObjectName obj) "AcDbPolyline") (= (vla-get-Closed obj) :vlax-true) ) (setq p_lst (vl-remove-if-not (function (lambda (x) (or (= (car x) 10) (= (car x) 42) ) ) ) (entget ent) ) ) (while p_lst (setq lst (cons (trans (append (cdr (assoc 10 p_lst)) (list (cdr (assoc 38 (entget ent)))) ) ent 1 ) lst ) ) (if (/= 0 (cdadr p_lst)) (progn (setq prec (1+ (fix (* 25 (sqrt (abs (cdadr p_lst)))))) dist (/ (- (if (cdaddr p_lst) (vlax-curve-getDistAtPoint obj (trans (cdaddr p_lst) ent 0) ) (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) ) (vlax-curve-getDistAtPoint obj (trans (cdar p_lst) ent 0) ) ) prec ) n 0 ) (repeat (1- prec) (setq lst (cons (trans (vlax-curve-getPointAtDist obj (+ (vlax-curve-getDistAtPoint obj (trans (cdar p_lst) ent 0) ) (* dist (setq n (1+ n))) ) ) 0 1 ) lst ) ) ) ) ) (setq p_lst (cddr p_lst)) ) ) ) (cond (lst (vla-ZoomExtents *acad*) (setq ss (ssget (strcat "_" opt) lst fltr)) (vla-ZoomPrevious *acad*) ss ) ) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
enzo06 Posté(e) le 26 mars 2012 Auteur Posté(e) le 26 mars 2012 Salut Tramber Je te remercie pour tes "oeuvres" ..... Je vais essaye la routine. je te tiens informe. Une bonne journee
enzo06 Posté(e) le 26 mars 2012 Auteur Posté(e) le 26 mars 2012 Re salut Tramber Il semblerait qu'il y ai un pt bug .... Totocad dit "VLAX-GET-ACAD-OBJECT" apres avoir fait la selectiond'une zone par une polyligne fermee ...... et choisi l'option "objet" dans la ligne de commande de TABLOBLO.
Tramber Posté(e) le 26 mars 2012 Posté(e) le 26 mars 2012 Chargement de vl-load-com légèrement modifié (glissé dans la principale). J'ai édité le code. Vois si ca marche. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
enzo06 Posté(e) le 26 mars 2012 Auteur Posté(e) le 26 mars 2012 la c'est sans appel ...... dans la ligne de commande il est dit "erreur:type d'argument incorrect:numberp:nil
Tramber Posté(e) le 26 mars 2012 Posté(e) le 26 mars 2012 Voilà qui est embêtant !Je n'ai pas tellement de temps aujourd'hui. Et puis j'ai noté qu'il y avait un problème avec la première ligne mon code gère mal le titre du tableau... Par contre, je n'ai aucune erreur... de mon côté, j'ai essayé toutes les options. J'ai essayé sur Acad2011 car c'est une version a priori vierge de tout développement ou routines additionnelles ici chez moi. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
enzo06 Posté(e) le 26 mars 2012 Auteur Posté(e) le 26 mars 2012 re Je suis sur version 2010 full ...... je refais un essai
enzo06 Posté(e) le 26 mars 2012 Auteur Posté(e) le 26 mars 2012 re C'est bon et impeccable .........Un GRAND merci Tramber ........Nickel
pointpower Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Salut Tramber, Merci pour ce lisp super utile, stp j'ai un petit souci avec peut-être que je ne l'utilises pas correctement. J'ai bien un tableau avec ma liste de blocs et le nombre de bloc et même en prime le dessin du bloc dans la troisième colonne. Pourtant je vois un petit problème avec la première ligne du tableau. Dans la première ligne du tableau, j'ai le nom d'un bloc sans le nb d'élément ni le dessin du bloc comme si cette ligne faisait office de titre si tu veux... Stp peux-tu me dire d'où ça vient? Merci
Tramber Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 C'est amusant cette relance. Pas plus tard qu'hier, j'ai voulu l'utiliser et me suis rendu compte que je ne savais pas où était cette routine dans mon ordi. Donc je suis venu la copier ici hier soir !!!.... et je me suis rendu compte qu'il y a avait un problème avec le premier bloc qui faisait office de titre. Résultat non voulu et un peu surprenant.Je me souvenais pourtant que la toute première version marchait bien.... Donc, j'ai tout corrigé ici : (defun c:tabloblo (/ libloc liidbloc ss ss liref ptins tableVL cont) ;;; (prompt "\nSélectionnez les blocs à lister ou ") ;;; ;;; (setq ssu (ssget '((0 . "INSERT")))) ;;; ;;; (setq sst (ssget "_X" '((0 . "INSERT")))) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (initget "Objet Tous Sélection") (setq kw (getkword "\nSélectionnez les blocs ou [Objet/Tous/Sélection] : " ) ) (cond ((= kw "Objet") (and (setq ent (car (entsel "\nSélectionnez le cercle, l'ellipse ou la polyligne: ") ) ) (setq typ (cdr (assoc 0 (entget ent)))) (or (member typ '("CIRCLE" "ELLIPSE")) (and (= typ "LWPOLYLINE") (= 1 (logand 1 (cdr (assoc 70 (entget ent))))) ) ) (setq ss (SelByObj ent "Wp" '((0 . "INSERT")))) ) ) ((= kw "Tous") (setq ss (ssget "_X" '((0 . "INSERT"))))) (T (setq ss (ssget '((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) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) ) (setq liref '()) ) (if ss (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 ss))) ) ) 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) (1+(length libloc) ) 3 20 100 ) ) (vla-put-TitleSuppressed tableVL :vlax-true) (vla-put-HeaderSuppressed tableVL :vlax-true) (setq cont -1) (repeat (1-(vla-get-Rows tableVL) ) (vla-settext tableVL (1+(setq cont (1+ cont)) ) 0 (nth cont libloc) ) (vla-settext tableVL (1+ cont ) 1 (length (vl-remove-if-not '(lambda (n) (= n (nth cont libloc))) liref ) ) ) (vla-SetBlockTableRecordId tableVL (1+ 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))) ) ) ) ;;; SelByObj -Gilles Chanteau- 06/10/06 ;;; Crée un jeu de sélection avec tous les objets contenus ou capturés, ;;; dans la vue courante, par un objet (cercle, ellipse, polyligne fermée) ;;; Arguments : ;;; - ent : un objet (ename ou vla-object) ;;; - opt : un mode de sélection (Cp ou Wp) ;;; - fltr : un filtre de sélection (liste) ou nil ;;; ;;; modifié le 26/07/07 : fonctionne avec les objets hors fenêtre (defun SelByObj (ent opt fltr / obj dist n lst prec dist p_lst ss) (if (= (type ent) 'ENAME) (setq obj (vlax-ename->vla-object ent)) (setq obj ent ent (vlax-vla-object->ename ent) ) ) (cond ((member (vla-get-ObjectName obj) '("AcDbCircle" "AcDbEllipse")) (setq dist (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) 50 ) n 0 ) (repeat 50 (setq lst (cons (trans (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) 0 1 ) lst ) ) ) ) ((and (= (vla-get-ObjectName obj) "AcDbPolyline") (= (vla-get-Closed obj) :vlax-true) ) (setq p_lst (vl-remove-if-not (function (lambda (x) (or (= (car x) 10) (= (car x) 42) ) ) ) (entget ent) ) ) (while p_lst (setq lst (cons (trans (append (cdr (assoc 10 p_lst)) (list (cdr (assoc 38 (entget ent)))) ) ent 1 ) lst ) ) (if (/= 0 (cdadr p_lst)) (progn (setq prec (1+ (fix (* 25 (sqrt (abs (cdadr p_lst)))))) dist (/ (- (if (cdaddr p_lst) (vlax-curve-getDistAtPoint obj (trans (cdaddr p_lst) ent 0) ) (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) ) (vlax-curve-getDistAtPoint obj (trans (cdar p_lst) ent 0) ) ) prec ) n 0 ) (repeat (1- prec) (setq lst (cons (trans (vlax-curve-getPointAtDist obj (+ (vlax-curve-getDistAtPoint obj (trans (cdar p_lst) ent 0) ) (* dist (setq n (1+ n))) ) ) 0 1 ) lst ) ) ) ) ) (setq p_lst (cddr p_lst)) ) ) ) (cond (lst (vla-ZoomExtents *acad*) (setq ss (ssget (strcat "_" opt) lst fltr)) (vla-ZoomPrevious *acad*) ss ) ) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pointpower Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Re, Super je viens de tester ça marche nickel, vraiment merci il est bien utile ce lisp. Je crois que Gile a développé un truc sur la sélection d'objets peut-être une piste avec ton option objet.... Je cherche la même chose que sélection rapide mais en utilisant une polyligne ou une ellipse ou autre comme zone de sélection et ensuite pouvoir appliquer le lisp longt pour le linéaire. Je ne sais pas si c'est envisageable car mes linéaires peuvent dépasser ma limite de sélection ( cette limite peut être intéressante si on travaille en tranches par exemple) et dans ce cas comment autocad les compte? Si tu as une idée, je veux bien. Merci
Tramber Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Le commentaire s'en retrouve au milieu du lisp mais il y a justement une routine de (Gile) en 2ème partie. Citation Je ne sais pas si c'est envisageable car mes linéaires peuvent dépasser ma limite de sélection ( cette limite peut être intéressante si on travaille en tranches par exemple) et dans ce cas comment autocad les compte? Excuse-moi mais c'est justement possible en mode Selection. Et grâce à (Gile) ! Tu dois taper SP ou CP, comme d'hab' Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lecrabe Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Hello EastMan / Xman Attention : le crabeleux attaque ! Je viens de tester ton programme sur AutoCAD 2011 FRA et AutoCAD 2013 FRA et a priori il fonctionne bien ! Sauf que j'ai le meme micro-bug sur les 2 versions Toutes les colonnes TEXT du tableau ont un texte du genre : Justification Milieu / CentreSAUF la derniere ligne : Justification Haut / CentreJ'ai corrige a la main (apres coup) mais c un peu un piege ...Car j'ai cru que la derniere ligne etait VIDE, parce que la hauteur du texte est microscopique partout !et donc le texte etait confondu sur la ligne horizontale !! SVP serait il possible que tu poses une question relative a la hauteur du texte dans les cellules ? Encore MERCI, lecrabe Autodesk Expert Elite Team
pointpower Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Re tramber, J'avais essayé le lisp de Gile et ça marchait pas car quand tu fais sélection il crée une polyligne et moi je voulais utiliser ma propre polyligne déjà dessinée. Je me demande si en modifiant le lisp et si ça marche comment il fait les métrés avec longt ( si les objets dépassent...). Svp quelqu'un peut tester le lisp de Gile pour confirmer ou infirmer ce que je dis... Merci A+
bryce Posté(e) le 15 mai 2012 Posté(e) le 15 mai 2012 Bonjour, Le 15/05/2012 à 16:03, lecrabe a dit : SVP serait il possible que tu poses une question relative a la hauteur du texte dans les cellules ? Il me semble qu'il y a les styles de tableau pour cela, et ils expliquent sans doute les "bugs" que tu as rencontrés... ;) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Tramber Posté(e) le 16 mai 2012 Posté(e) le 16 mai 2012 Bonjour ! Vous êtes gentils les amis mais ma présence ici est et sera sporadique pendant plusieurs semaines, je suis charette.Ce bout de code a été remanié cent fois. ... n'hésitez pas B) Je viens juste dire bonjour, livrer de ci de là une réponse rapide.RDV cet été Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pointpower Posté(e) le 18 mai 2012 Posté(e) le 18 mai 2012 Re, Merci à vous pour vos réponses mais vous ne m'avez pas dit si vous aviez testé le lisp de Gile pour la sélection et comment les métrés sont comptabilisés avec Longt lorsque les polylignes dépassent la polyligne de sélection... Merci, A+
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