Aller au contenu

Messages recommandés

Posté(e)

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)

OOOOOOOO

1 3 8 6 4 2 5 7

ma 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)

)

)

)

)

)

 

Posté(e)

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-1

Après relecture de mon premier message, les images étaient illisible et mon explication pas clair. Milles excuses !

 

Merci pour votre aide

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

Bonjour

 

Cela me parait bien compliqué votre histoire

Pourquoi 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)
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

 

./__\.
(.°=°.)
Posté(e)

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 ..............

Posté(e)

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

Posté(e)

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.

Posté(e)

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

Posté(e)

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 !

Posté(e)

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

Posté(e)

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:

Posté(e)
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

 

./__\.
(.°=°.)

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é