Aller au contenu

file txt


Invité ingoenius

Messages recommandés

Invité ingoenius
Posté(e)

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

Posté(e)

Salut

Le plus simple est d'écrire ton fichier avec un retout à la ligne pour chaque paramètre

Maintenant, à toi de savoir combien tu as besoin de paramètres par bloc afin de bien structurer ton fichier

 

@+

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)

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)

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

 

 

Posté(e)

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)

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

 

Posté(e)

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

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 ;-(

Posté(e)

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)

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?

 

Posté(e)

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)

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 mieux

que'en pensez vous??

 

 

 

[Edité le 4/10/2006 par ingoenius]

Invité ingoenius
Posté(e)

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é

 

;-)

 

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é