Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 salut, j'aurais besoin de creer un lisp pour obtenir un fichier txt precis et formattée dans cette facon selon vous est possible ets commant? j'ai sais plus comment mi prendre 1 selectionner le bloc (je selectionne par une fenetre des bloc dans le dessin et le fichier de sorti serait celui ci par chaque ligne nom du blo , posx pos y posz rotation x roty rotz scale x sacle y scale z le tout separé par un seul espace nom du bloc (1 espace) PosX (1 espace) Posy (1 espace) Posz (1 espace)............
Patrick_35 Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 SalutLe plus simple est d'écrire ton fichier avec un retout à la ligne pour chaque paramètreMaintenant, à toi de savoir combien tu as besoin de paramètres par bloc afin de bien structurer ton fichier @+ 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 4 octobre 2006 Posté(e) le 4 octobre 2006 Ma suggestion serait de séparer tes champs par ";".Pourquoi ?Parce que ce format (le CSV) est facile à expliter en lisp et s'ouvre directement en tant que fichier Excel (en renommant l'extension). Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 donc la fin ej devrai avoir il fichier txt avec 9 parametres espace par un espace ou un ; comme suggré par tramber ed une ligne par bloc je ppourrait avoir un exemple du lisp qui ecris ces parametre par tous le bloc selctionnes auparavent ?merci oui mais commant faire pour faire creer ce txt avec les suivant parametres :nom de bloc, posx, posy, posz,rotx, roty,rotz,scalex, scaley,scalez
(gile) Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 Pour formater ton texte comme tu le demandes : (setq ss (ssget '((0 . "INSERT"))) str "") (if ss (progn (repeat (setq n (sslength ss)) (setq bl (entget (ssname ss (setq n (1- n)))) str (strcat str " " (cdr (assoc 2 bl)) " " (rtos (cadr (assoc 10 bl))) " " (rtos (caddr (assoc 10 bl))) " " (rtos (cadddr (assoc 10 bl))) "\n" ) ) ) (if (setq file (getfiled "Seletionner un fichier" "" "txt" 1)) (progn (setq file (open file "a")) (princ str file) (close file) ) ) ) ) Tu peux, commme suggéré plus haut, remplacer les espaces (" ") par des point-virgules (";") ou des retours à la ligne ("\n") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 jé commencé avec ceci (defun C:Blend () (setq SS (ssget (list (cons 0 "insert"))));zero é il codice del nome (setq N (sslength SS)) (setq INDEX 0) (setq EL (entget (ssname SS INDEX))) (setq nome (cdr(assoc 2 EL)));nom bloc (setq PX (cadr(assoc 10 EL)));Posizione x (setq PY (caddr(assoc 10 EL)));Posizione y (setq PZ (cadddr(assoc 10 EL)));Posizione y (setq SX (cdr(assoc 41 EL))); Fattore Scala x (setq SY (cdr(assoc 42 EL))); Fattore Scala y (setq SZ (cdr(assoc 43 EL))); Fattore Scala z ) par contre je pas le code dxf ppour recuperer la rotation du bloc, et je ne sais pas faire ecrire dans un fichier texte tout cela et le faire repeter pour chaque bloc merci de votre aide
(gile) Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 À partir de ce que tu as commencé : (defun C:Blend () (setq SS (ssget (list (cons 0 "insert")))) ;zero é il codice del nome (setq N (sslength SS)) (setq INDEX 0) (setq STR "") ; chaine de caractère vide (repeat n ; Répéter pour chaque bloc (setq EL (entget (ssname SS INDEX))) (setq nome (cdr (assoc 2 EL))) ;nom bloc (setq PX (cadr (assoc 10 EL))) ;Posizione x (setq PY (caddr (assoc 10 EL))) ;Posizione y (setq PZ (cadddr (assoc 10 EL))) ;Posizione y (setq SX (cdr (assoc 41 EL))) ; Fattore Scala x (setq SY (cdr (assoc 42 EL))) ; Fattore Scala y (setq SZ (cdr (assoc 43 EL))) ; Fattore Scala z (setq rot (cdr (assoc 50 EL))) ; rotation (setq str (strcat str ; ajout à la chaine précédente nome " " (rtos PX) " " (rtos PY) " " (rtos PZ) " " (rtos SX) " " (rtos SY) " " (rtos SZ) " " (angtos rot) "\n" ; saut de ligne ) ) [surligneur](setq INDEX (1+ INDEX)) ;pour passer au bloc suivant[/surligneur] ) ; fin de repeat (if (setq file (getfiled "Seletionner un fichier" "" "txt" 1)) ;choisir ou créer un fichier (progn (setq file (open file "a")) ; ouvrir lr fichier (princ str file) ; écrire dans le fichier (close file) ; fermer le fichier ) ) (princ) ) [Edité le 4/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 merci ancore, mais c'est comme il prenait que le premier valeur , dans le fichier txt toutes les lignes sont les memes je trouve pas l'erreur ;-(
bonuscad Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 Ou encore de manière plus générale sauf les noms d'entités, autrement tu peux te construire ta liste de la manière que tu l'entends. ((lambda ( / js n dxf_ent line_writed data_dxf) (setq js (ssget '((0 . "INSERT"))) n -1) (cond (js (repeat (sslength js) (setq dxf_ent (entget (ssname js (setq n (1+ n)))) line_writed "") (foreach n '(2 10 50 41 42 43) ;; liste des éléments à extraire (setq data_dxf (cdr (assoc n dxf_ent))) (setq line_writed (strcat line_writed " " (cond ((eq (type data_dxf) 'STR) data_dxf ) ((eq (type data_dxf) 'LIST) (strcat (rtos (car data_dxf) 2 16) " " (rtos (cadr data_dxf) 2 16) " " (rtos (caddr data_dxf) 2 16)) ) ((eq (type data_dxf) 'REAL) (rtos data_dxf 2 16) ) ((eq (type data_dxf) 'INT) (itoa data_dxf) ) (T "") ) ) ) ) (print line_writed); pourait être remplacé par un (write-line) dans un fichier ouvert avant repeat. ) ) (T (princ "\nPas de bloc trouvé!")) ) )) Autrement il important de savoir si il y a des blocs placés en 3D, car il faudrait alors peut être utiliser le code 210 pour retranscrire les coordonées et la rotation dans le SCG. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 justement ce la le probleme, si j'ai des bloc 2d ou 3d mais qui sont pleces dans differentes orientations 3d comment tu fait pour recuperer en absolu les valeurs de rotation x rotation y et rotazion z par rapport au scu global?
(gile) Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 merci ancore, mais c'est comme il prenait que le premier valeur , dans le fichier txt toutes les lignes sont les memes Toutes mes excuses, j'avais oublié une[surligneur]ligne de code[/surligneur], j'ai modifié le code plus haut. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 c'est moi qui' s'excuse, vous etes trés gentil et rapides! Le seul probleme qui est insoluble pour moi est recuyperer les correcte rotations des bloc si ceux ci sont orienté en 3d dans tous le sens je devrai recuperer les rotations x y z par rapport au scu global je sais pes si c'est faisable donc maintenat que c'est presque tout bon je vous explique le pourquoi de tout cela Vu la mancance d'export 3ds depuis la version 2007 , et vu que je travaille enormement avec autocad et blender pour les rendus 3d j'ai dans le dessin cad par esemple des bloc "chaise" "table" "ecran" etc etc j'ai une biblioteque blender avec des objet 3d du meme nom e taille ce script , couplé avec un autre script en python pour blender(qui lit le fichiet txt ed importe des mesh 3d de blender)me permet de placer tout mes blocs 3d dans la bonne position rotation et echelle certe c'est pas un export 3d, mais d'une certaine facon c'est beaucoup mieuxque'en pensez vous?? [Edité le 4/10/2006 par ingoenius]
Invité ingoenius Posté(e) le 4 octobre 2006 Posté(e) le 4 octobre 2006 poru bonuscad Autrement il important de savoir si il y a des blocs placés en 3D, car il faudrait alors peut être utiliser le code 210 pour retranscrire les coordonées et la rotation dans le SCG. c'est axactement ca , tu sais comment faire pour recupere aussi les donnez de rotation du bloc en 3d?aprés ca c'est quasiment terminé ;-)
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