x_all Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Bonjour J'ai un bloc dynamique dont un paramètre s'appelle "longueur" Avez vous connaissance d'un lisp pour faire la somme des longueurs des blocs sélectionnés?J'ai bien trouver chez lee MAc une fonction Get Dynamic Block Property Value, mais je ne voie pas trop comment faire. Ceci dit, je ne doit pas etre le premier à avoir des longueurs de bloc dynamique à additionner et peut être qq1 à ça dans ces cartons? merci quelques trucs sur autocad
Steven Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Salut x_all, Tu peux faire un tableau avec une colonne de formule en additionnant la quantité multiplié par la longueur. Ceci te donnera le linéaire der tes blocs. Un peu comme ceci, par exemple: http://pix.toile-libre.org/upload/img/1409128442.png Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
lecrabe Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Hello +1 avec Steven ! A priori aucun besoin de programme Lisp/VLisp specifique !? Bye, lecrabe Autodesk Expert Elite Team
x_all Posté(e) le 27 août 2014 Auteur Posté(e) le 27 août 2014 hou lala...je me fait une fracture frontale...je n'ai qu'un seul type de caniveau avec différente longueurs (une 30taine ce pièces de 1.2 à 8m)Ton exemple avec plusieurs type d'armoire à l'air plus compliqué, mais effectivement je peu faire un tableau avec une seule ligne. par contre, comment tu l'as fait ton tableau?avec l'extraction de données? un lisp type tableaublo? mais ya de l'idée... je vais chercher. quelques trucs sur autocad
Steven Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 hou lala...je me fait une fracture frontale...je n'ai qu'un seul type de caniveau avec différente longueurs (une 30taine ce pièces de 1.2 à 8m)Ton exemple avec plusieurs type d'armoire à l'air plus compliqué, mais effectivement je peu faire un tableau avec une seule ligne. par contre, comment tu l'as fait ton tableau?avec l'extraction de données? un lisp type tableaublo? mais ya de l'idée... je vais chercher. Je l'ai fais avec l'extraction de données.En fait, mon tableau comporte plusieurs lignes parce que j'ai plusieurs types de blocs.Tu peux le faire avec une seule ligne si tu ne choisis qu'un seul type de bloc. En l'occurrence, celui de ton caniveau. [Edit] Tu auras plusieurs lignes, suivant le nombres de blocs pour le caniveau que tu auras dans ton dessin, par rapport à la longueur de ceux-ci. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
bonuscad Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Bonjour, Je ne suis pas un grand utilisateur des blocs dynamiques, en m'appuyant sur les codes de Lee Mac et de (gile), voici ce que j'ai pondu...En espérant que cela puisse te convenir ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)) ) (setq choice (reverse choice)) ) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))) ) ) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) ;; Get Dynamic Block Properties - Lee Mac ;; Returns an association list of Dynamic Block properties & values. ;; blk - [vla] VLA Dynamic Block Reference object ;; Returns: [lst] Association list of ((<prop> . <value>) ... ) (defun LM:getdynprops ( blk ) (mapcar '(lambda ( x ) (cons (vla-get-propertyname x) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;; Get Dynamic Block Property Value - Lee Mac ;; Returns the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (defun C:cumul_blkdyn ( / js param cumul n ent vla_blk lst_param ) (setq js (ssget "_X" '((0 . "INSERT"))) param nil cumul 0.0) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (cond ((wcmatch (cdr (assoc 2 (entget ent))) "`*U*") (setq vla_blk (vlax-ename->vla-object ent)) (setq lst_param (mapcar 'car (LM:getdynprops vla_blk))) (if (not param) (setq param (listbox "Paramètre dynamique" "Choisir un paramètre" (mapcar 'cons lst_param lst_param) 1)) ) (setq val (LM:getdynpropvalue vla_blk param)) (cond ((numberp val) (setq cumul (+ val cumul)) (princ (strcat "\n" (rtos val))) ) (T (princ "\nLe paramètre sélectionné n'a pas une valeur numérique.")) ) ) ) ) (princ (strcat "\nCumulé total: " (rtos cumul))) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bryce Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Bonjour, J'avais pondu une version modifiée de ATTOUT (dans les Express Tools) qui prend en compte les paramètres de blocs dynamiques, ça pourrait peut-être faire l'affaire... :)http://www.creao.fr/uploads/lisp/attout_dyn.lsp Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
x_all Posté(e) le 27 août 2014 Auteur Posté(e) le 27 août 2014 merci beaucoup a vous deux et même vous 3 ! mais j'ai 3 mais... ça serai trop simple... Extraction de donnée de Steven.Pour pas galérer, en page 2/8 de l'extracteur, il faut choisir : "sélectionner des objet dans le dessin actif". Comme ça, on isole le calque et on à pas trop à trier pour avoir que ce qu'on veux. Mais comme tu le dis, on se retrouve avec une ligne par bloc, et il faut donc faire le cumul à la main ou dans Excel... bref ça le fait, mais c'est un peu laborieux. Bonuscad ! super merci, ça serai le top sauf que...le lisp fait la somme de tous les attributs "longueur" du dessin. Malheureusement, j'ai 2 blocs qui ont un attributs "longueurs". De plus, il y a des blocs dans la nomenclature ce qui fausse encore le résultat. Bref ce serai le top si on pouvais sélectionner les objets avant ou après avoir lancer la commande. Bryce, je n'ai pas réussi a faire marcher ta commande. Créer un fichier texte comparativement à une simple alerte simple alerte avec le cumul, pourquoi pas, Mais quand je sélectionne les objets, il veut pas les prendre (ils passent pas en pointillets) et si je fait une sélection par fenetre de mon réseau, j'ai un message "pas d'objet valide sélectionné". Je n'utilise pas ATTOUT des Xpress alors peut etre je loupe qq chose. A la lecture de vos code, je me rend compte, comme je le soupçonnais, que ça n'a rien de trivial comme programme. Merci beaucoup, mais j'imagine que je ne dois pas etre le seul a vouloir faire des métré avec les blocs dynamiques. J'y vois déja d'autres utilisations pour mes blocs de branchement EU EP dans les lotissement, les rampe de diodes d'éclairage public... bref tout ce qu'on ne peu pas symboliser avec un simple type de ligne, mais qu'on fait en bloc étiré réseau ext... merci encore. quelques trucs sur autocad
Steven Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 x_all, Pourrais-tu m'envoyer ton dessin avec ton bloc à quantifier? Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
bonuscad Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Bref ce serai le top si on pouvais sélectionner les objets avant ou après avoir lancer la commande. Alors pour plus de liberté de sélection, juste la dernière partie revue. (conserver les fonctions de Lee Mac et (gile)) (defun C:cumul_blkdyn ( / js param cumul n ent vla_blk lst_param val) (or (setq js (ssget "_I" '((0 . "INSERT")))) (setq js (ssget "_P"'((0 . "INSERT")))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "INSERT"))))) ) ) (T (setq js (ssget '((0 . "INSERT"))))) ) (setq cumul 0.0) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (cond ((wcmatch (cdr (assoc 2 (entget ent))) "`*U*") (setq vla_blk (vlax-ename->vla-object ent)) (setq lst_param (mapcar 'car (LM:getdynprops vla_blk))) (if (not param) (setq param (listbox "Paramètre dynamique" "Choisir un paramètre" (mapcar 'cons lst_param lst_param) 1)) ) (setq val (LM:getdynpropvalue vla_blk param)) (cond ((numberp val) (setq cumul (+ val cumul)) (princ (strcat "\n" (rtos val))) ) (T (princ "\nLe paramètre sélectionné n'a pas une valeur numérique.")) ) ) ) ) (princ (strcat "\nCumulé total: " (rtos cumul))) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
-Olivier- Posté(e) le 27 août 2014 Posté(e) le 27 août 2014 Bonjour X_all,En partant du principe de Steven, les tableaux autocad permettent de faire des sommes sans passer par excel. Olivier
x_all Posté(e) le 27 août 2014 Auteur Posté(e) le 27 août 2014 merci beaucoup Bonuscad, ça marche du feu de dieu !! encore une routine qui va me faire gagner un temps précieux :) Steven, en pj un extrait de plan avec le bloc récalcitrant -Olivier- je n'ai pas l'habitude des tableaux autocad, je vais regarder ça... j'avoue ne pas les exploiter je ne savais pas qu'on pouvais faire faire des calculs...on en apprend tous les jours :) Edit... ayé, ça me sautais pas aux yeux car il faut dévérouiller le tableau pour insérer une rangée et redévérouiller la celleule pour y placer une formule pas franchement mise en valeur dans la barre d'outil des tableaux. Mais c'est vrai que ça le fait... en plus ça se met a jour si on raffraichi.... pas mal... bref toutes vos idées me donne de nouvelle perspectives... j'aime cadXP :) quelques trucs sur autocad
dfbiagio Posté(e) le 10 septembre 2015 Posté(e) le 10 septembre 2015 Bonjour, J'avais pondu une version modifiée de ATTOUT (dans les Express Tools) qui prend en compte les paramètres de blocs dynamiques, ça pourrait peut-être faire l'affaire... :)http://www.creao.fr/uploads/lisp/attout_dyn.lsp Bonsoir Brice,J'ai testé ta routine et elle me parait très intéressante. Mon seul souci, c'est les chiffres à rallonge type "853586138885085" pour une longueur réel de 85.36 cm. Est-ce qu'il existe une astuce pour modifier çà. Merci d'avance.Cordialement.
bryce Posté(e) le 16 septembre 2015 Posté(e) le 16 septembre 2015 Bonjour, Si les valeurs exportées ont x décimales, a priori c'est qu'elles sont déjà présentes dans le dwg (la valeur mesurée est peut-être arrondie suivant la précision définie avec la commande UNITES).Peut-être suffirait-il de modifier le format des cellules dans Excel pour arrondir les valeurs ? Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
cadcov Posté(e) le 13 juin 2023 Posté(e) le 13 juin 2023 Le 27/08/2014 à 10:39, Steven a dit : Salut x_all, Tu peux faire un tableau avec une colonne de formule en additionnant la quantité multiplié par la longueur. Ceci te donnera le linéaire der tes blocs. Un peu comme ceci, par exemple: http://pix.toile-libre.org/upload/img/1409128442.png le lien ne fonctionne pas ....
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