nicolas2 Posté(e) le 22 janvier 2009 Posté(e) le 22 janvier 2009 Bonjour à tous .Voila mon problème :- Je dessine une multitude de cercles avec un pas défini sous Autocad (plaque tubulaire pour échangeur de chaleur, parfois + de 3000 cercles)- Je transfert mon dxf sur une machine de soudage. L'ordre de soudage (sur ma machine) est en relation direct avec l'ordre avec lequel j'ai tracé mes cercles.Ex:Si j'ai dessiné sous Autocad (dans l'ordre)OOOOOOOO1 3 8 6 4 2 5 7ma machine va souder le 1, puis va sauter 4 tubes pour souder le 2, revenir en arrière....L'ordre de soudage ne peut se décider qu'une fois tous les cercles finis de tracer.L'idéal serait d'avoir un outil me permettant, en final, de dire en cliquant directement sur les cercles :- tube 1- tube 2- tubes 3 à 100 (en capturant un lot de cercles....) Posté sur le forum "AUTOCAD 2004", j'ai eu 5 Lisp proposés, s'est pourquoi je reposte mon souhait sur le forum approprié.Les 5 Lisp's retranscrit sur ma machine de soudage (en .mpf) prennent les tubes à rebourd.Malgrés mon choix 1-2-3.....3800. La Machine le fait 3800-3799-...1 Merci à tous ceux qui se sont déja penchés sur mon problème (les Routines suivantes sont les leurs) et à tous ceux qui pourront encore m'aider. Routine 1 : (defun c:bb(/)(setq jeu(ssget) compt 0)(repeat(sslength jeu)(entmake(entget(ssname jeu compt)))(entdel(ssname jeu compt))(setq compt(1+ compt)))) Routine 2 : (defun c:bb (/ s i)(setq s (ssget))(repeat (setq i (sslength s))(entmake (entget (entdel (ssname s (setq i (1- i))))))(entdel (ssname s i)))) Routine 3 : (defun c:bbi(/)(setq jeu(ssget))(setq compt(1-(sslength jeu)))(repeat(sslength jeu)(entmake(entget(ssname jeu compt)))(entdel(ssname jeu compt))(setq compt(1- compt)))) Routine 4 : (defun c:ordre ( / nw_js js n)(setq nw_js (ssadd))(while (setq js (ssget))(setq n -1)(repeat (sslength js)(ssadd (ssname js (setq n (1+ n))) nw_js)))(cond(nw_js(setq n -1)(repeat (sslength nw_js)(entmake (entget (ssname nw_js (setq n (1+ n)))))(entdel (ssname nw_js n)))))(prin1)) Routine 5 : (defun c:test (/ e l i)(setvar 'errno 0)(setq i 0)(while (/= (getvar 'errno) 52)(while(and (setq e (car (entsel)))(setq l (entget e))(= "CIRCLE" (cdr (assoc 0 l))))(entmake l)(entdel e)(setq h (/ (cdr (assoc 40 l)) 2.)i (1+ i))(entmake(list'(0 . "TEXT")'(10 0. 0. 0.)(cons 11 (cdr (assoc 10 l)))(cons 40 h)(cons 1 (itoa i))'(72 . 1)'(73 . 2))))))
nicolas2 Posté(e) le 23 janvier 2009 Auteur Posté(e) le 23 janvier 2009 En clair : - Je dessine dans un ordre- Le "programme de convertion machine" garde le même ordre- Je veux pouvoir modifier cet ordre en cliquant sur les cercles du Dwg http://moe.mabul.org/up/moe/2009/01/23/img-093718xvtaq.jpg Les routines ci-dessus (après transcription machine) le font, mais à rebourd en commençant par 10-9-8....2-1Après relecture de mon premier message, les images étaient illisible et mon explication pas clair. Milles excuses ! Merci pour votre aide
bonuscad Posté(e) le 23 janvier 2009 Posté(e) le 23 janvier 2009 Alors pour mon ancienne proposition, dans l'autre sens: (defun c:ordre ( / nw_js js n) (setq nw_js (ssadd)) (while (setq js (ssget)) (setq n -1) (repeat (sslength js) (ssadd (ssname js (setq n (1+ n))) nw_js) ) ) (cond (nw_js (repeat (setq n (sslength nw_js)) (entmake (entget (ssname nw_js (setq n (1- n))))) (entdel (ssname nw_js n)) ) ) ) (prin1) ) Une autre routine(non destructrice), qui n'a rien à voir avec la demande pour observer l'ordre de création dans un dessin (il me semblait l'avoir déjà poster, mais je ne la retrouve plus) (defun dec2hex (decnum / bit liste return) (if (or (> decnum 65535) (< decnum 0)) (progn (alert "Le nombre doit être positif et inférieur ou égal à 65535 (0xFFFF) ") (setq return nil) ) (progn (setq return "") (setq liste (list (/ (boole 1 61440 decnum) 4096) (/ (boole 1 3840 decnum) 256) (/ (boole 1 240 decnum) 16) (boole 1 15 decnum) ) ) (foreach bit liste (setq return (strcat return (if (> bit 9) (chr (+ 55 bit)) (itoa bit))))) ) ) return ) (defun hexdec (nb / r i s) (if (= (type nb) 'INT) (setq nb (itoa nb)) ) (setq r 0 i 0) (while (and (= (type nb) 'STR) (< i (strlen nb))) (setq i (1+ i)) (setq s (strcase (substr nb i 1 ))) (setq r (+ (lsh r 4) (- (ascii s) (if (<= s "9") 48 55 ) ) ) ) ) ) (defun c:rebour ( / ) (setq js_swap (ssget "_X" '((-4 . "[b]<[/b]NOT") (60 . 1) (-4 . "NOT>"))) n_swap 0) (cond (js_swap (repeat (sslength js_swap) (setq ent (ssname js_swap n_swap)) (redraw ent 2) (setq n_swap (1+ n_swap)) ) ) ) (setq hd_ent (cdr (assoc 5 (entget (entlast))))) (princ "\nAppuyez sur une touche pour voir entité précédente, S pour Stopper.") (while hd_ent (setq ent (handent hd_ent)) (setq hd_ent (dec2hex (1- (hexdec hd_ent)))) (cond ((and ent (assoc 67 (entget ent)) (zerop (cdr (assoc 67 (entget ent))))) (setq key (grread)) (cond ((or (equal key '(2 115)) (eq key '(2 83))) (setq hd_ent nil) ) (T (redraw ent) ) ) ) ) ) (command "_.regenall") ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nicolas2 Posté(e) le 26 janvier 2009 Auteur Posté(e) le 26 janvier 2009 Merci Bonuscad !Voila mon problème :Que je dessine directement dans l'ordre ou que je modifie mon dessin avec ta routine "ORDRE", le résultat dans "l'historique AUTOCAD" devrait être le même :casstet: ...Non...!!???? http://img264.imageshack.us/img264/8251/mauscam1pz4.jpg[/url]] Du coup si j'utilise mon premier dessin, ma machine s'y retrouve et dans le 2ième cas s'est le brin !Si tu as une explication ?Merci
bonuscad Posté(e) le 26 janvier 2009 Posté(e) le 26 janvier 2009 Les 5 Lisp's retranscrit sur ma machine de soudage (en .mpf) prennent les tubes à rebourd. Suite à cette observation j'ai inversé, mais d'après ton dernier message avec les images de listing, ce coup ci c'est réellement inversé (On voit quand même que les "Maintien" dans les listing sont bien tous les 2 décroissant ). Alors quel est le bon? Est tu sur que la 1ere proposition en lisp inversait l'ordre. Normalement, pour vérifier, si tu fais successivement des "Effacer" "dernier", tu devrais remonter tes objet 1 à 1 jusqu'au 1er dessiné. (ou la routine rebour) Si sur tes 2 dessins test, l'effacement se fait dans le même ordre, alors c'est bon. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nicolas2 Posté(e) le 26 janvier 2009 Auteur Posté(e) le 26 janvier 2009 Merci Bonus pour ta réactivité !Je vérifie cela demain matin au boulot
Patrick_35 Posté(e) le 26 janvier 2009 Posté(e) le 26 janvier 2009 Bonjour Cela me parait bien compliqué votre histoirePourquoi ne pas sélectionner les éléments un par un et dans l'ordre souhaité, de faire un copier sur le dessin en lui-même (donc avec @ uniquement) et un effacer précédent ? Cela normalement met le dessin dans l'ordre désiré. @+ 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 26 janvier 2009 Posté(e) le 26 janvier 2009 de faire un copier sur le dessin en lui-même (donc avec @ uniquement) Moi j'ai encore plus simple ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 27 janvier 2009 Posté(e) le 27 janvier 2009 Moi j'ai encore plus simple ! Poubelle ou rangement vertical ? ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
nicolas2 Posté(e) le 27 janvier 2009 Auteur Posté(e) le 27 janvier 2009 Bon,Patrick 35 et toi Tramber, j'vous parle même plus :casstet: !L'utilité de cette routine est que certaines fois j'ai + de 4000 tubes, donc à resélectionner 1 par 1... Merci Bonucad pour ton aide !! Je me suis fait avoir, je t'ai demandé si tu pouvais inverser ta routine parcequ'en fait j'utilisait ta première routine en ne sélectionnant que quelques tubes. Mon premier essai (ci-dessous) me le confirme. Mon ordre est respecté, mais si je ne sélectionne pas tous les tubes, il me les met à la fin. - Sur mon 1ier Essai j'ai sélectionné 1-2-3-4-5-6-7-8 et pas les autres- Sur mon 2ième Essai j'ai sélectionné 1-2-3-4-5-6-7-8 et puis les autres http://img518.imageshack.us/img518/432/explicationmachinetw8.jpg N'est-il pas possible de modifier la routine en lui imposant de mettre les tubes non sélectionnés à la suite et non devant...? Merci à tous quand même ..............
bonuscad Posté(e) le 28 janvier 2009 Posté(e) le 28 janvier 2009 J'arrive plus à savoir si je suis dans le bon sens :P Teste ce qui suit: (defun c:ordre ( / nw_js js n) (setq nw_js (ssadd)) (while (setq js (ssget"_:S")) (ssadd (ssname js 0) nw_js) (redraw (ssname js 0) 3) ) (setq js (ssget "_X")) (cond (js (repeat (setq n (sslength js)) (ssadd (ssname js (setq n (1- n))) nw_js) ) ) ) (cond (nw_js (setq n -1) (repeat (sslength nw_js) (entmake (entget (ssname nw_js (setq n (1+ n))))) (entdel (ssname nw_js n)) ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nicolas2 Posté(e) le 28 janvier 2009 Auteur Posté(e) le 28 janvier 2009 Bravo BONUSCAD, tout fonctionne et dans l'ordre :) !!(uste une modification sur la 1ière ligne de ta routine où tu as du fourcher : (defun c: ordre....) Gile m'avait fait cette routine : (defun c:test (/ e l i)(setvar 'errno 0)(setq i 0)(while (/= (getvar 'errno) 52)(while(and (setq e (car (entsel)))(setq l (entget e))(= "CIRCLE" (cdr (assoc 0 l))))(entmake l)(entdel e)(setq h (/ (cdr (assoc 40 l)) 2.)i (1+ i))(entmake(list'(0 . "TEXT")'(10 0. 0. 0.)(cons 11 (cdr (assoc 10 l)))(cons 40 h)(cons 1 (itoa i))'(72 . 1)'(73 . 2)))))) Les Tubes sélectionnés était incrémentés (chiffre à l'intérieur du cercle 1-2-3.....)Si j'abuse un peu, je te demanderais si tu peu l'insérer dans ta routine. Merci à tous, bravo. C'est sympa de ne pas laisser tomber les grosses B..... dans mon genre.
bonuscad Posté(e) le 28 janvier 2009 Posté(e) le 28 janvier 2009 je te demanderais si tu peu l'insérer dans ta routine. (defun c:ordre ( / nw_js js n i l_dxf h) (setq nw_js (ssadd)) (while (setq js (ssget"_:S")) (ssadd (ssname js 0) nw_js) (redraw (ssname js 0) 3) ) (setq js (ssget "_X")) (cond (js (repeat (setq n (sslength js)) (ssadd (ssname js (setq n (1- n))) nw_js) ) ) ) (cond (nw_js (setq n -1 i 0) (repeat (sslength nw_js) (entmake (setq l_dxf (entget (ssname nw_js (setq n (1+ n)))))) (entdel (cdar l_dxf)) (setq h (* (cdr (assoc 40 l_dxf)) 0.5) i (1+ i)) (entmake (list '(0 . "TEXT") '(10 0. 0. 0.) (cons 11 (cdr (assoc 10 l_dxf))) (cons 40 h) (cons 1 (itoa i)) '(72 . 1) '(73 . 2) ) ) ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nicolas2 Posté(e) le 28 janvier 2009 Auteur Posté(e) le 28 janvier 2009 Re-Bravo :) :) Merci encore :) :)
nicolas2 Posté(e) le 28 janvier 2009 Auteur Posté(e) le 28 janvier 2009 Est-ce que la numérotation aux seuls cercles cliqués est possible ? ;) Cela me permetrait de visualiser uniquement le trajet "imposé" (le reste du trajet étant un chemin soit horizontal, soit vertical donné au niveau du logiciel machine). Merci !
bonuscad Posté(e) le 28 janvier 2009 Posté(e) le 28 janvier 2009 Brut de pomme, sans contrôle de validité des sélections. C'est vraiment propre à ta demande, (cercle supposés) (defun c:ordre ( / nw_js js n i l_dxf h) (setq nw_js (ssadd) i 0) (while (setq js (ssget"_:S")) (ssadd (ssname js 0) nw_js) (setq l_dxf (entget (ssname js 0))) (setq h (* (cdr (assoc 40 l_dxf)) 0.5) i (1+ i)) (entmake (list '(0 . "TEXT") '(10 0. 0. 0.) (cons 11 (cdr (assoc 10 l_dxf))) (cons 40 h) (cons 1 (itoa i)) '(72 . 1) '(73 . 2) ) ) ) (setq js (ssget "_X")) (cond (js (repeat (setq n (sslength js)) (ssadd (ssname js (setq n (1- n))) nw_js) ) ) ) (cond (nw_js (setq n -1) (repeat (sslength nw_js) (entmake (setq l_dxf (entget (ssname nw_js (setq n (1+ n)))))) (entdel (cdar l_dxf)) ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nicolas2 Posté(e) le 28 janvier 2009 Auteur Posté(e) le 28 janvier 2009 Encore Merci et Bravo :o :) Je vais voir pour le déclencher à partir d'un bouton.C'est pas encore gagné :( Bonne continuation à tous PS : Moi je serais plutôt Calva que Brut de Pomme :cool:
Tramber Posté(e) le 28 janvier 2009 Posté(e) le 28 janvier 2009 Moi j'ai encore plus simple ! Poubelle ou rangement vertical ? ;) @+ Non, double ENTREE sans @. Désolé Nicolas2, j'ai décroché sur ce sujet. Je n'ai le temps que de papoter ici, pas de travailler :D Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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