Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Quelqu'un a-t-il une solution pour charger une liste .txt dans autocad, sous forme d'un bloc point avec symbole, matricule et altitude. Je voudrais que ces blocs soient chargés en 3D. Un lisp est -il déjà créé ou c'est tout simplement pas possible car trop de boulot ou autre?

 

Merci d'avance!

Posté(e)

bonjour Gile

 

Ci-joint un extrait du fichier .txt:

197,1058.160666,2006.715163,102.364630,

196,1057.396245,2003.647364,100.158909,

195,1057.376926,2003.589929,102.359773,

194,1058.161465,2006.718699,103.547583,

193,1057.376013,2003.602305,103.554242,

Le premier nbre représente le numero, le second X, le troisième Y et enfin le dernier le Z

 

@ bientôt.

Posté(e)

Bonjour

pour les fichier il y a Mensura et covadis qui importe bien ces fichiers en script voilà ce que ça peut donner je le faisais sous excel.

 

attreq 1

inserer bloc 1058.160666,2006.715163,102.36463 1 1 0

197

102.36463

inserer bloc 1057.396245,2003.647364,100.158909 1 1 0

196

100.158909

inserer bloc 1057.376926,2003.589929,102.359773 1 1 0

195

102.359773

inserer bloc 1058.161465,2006.718699,103.547583 1 1 0

194

103.547583

inserer bloc 1057.376013,2003.602305,103.554242 1 1 0

193

103.554242

zoom et

 

mais si Gile nous trouve une routine plus simlple ça serait super....

 

@+

 

Michel a :)

Posté(e)

Salut

 

Un lisp vite fait

le numéro n'apparaitra que sur le premier attribut d'un bloc

 

@+

 

(defun c:topo(/ bl data doc ent esp fic file lst_pt)

 (defun lst_pt(str / lst)
   (while (/= str "")
     (setq lst (cons (substr str 1 (vl-string-search "," str)) lst)
    str (substr str (+ (vl-string-search "," str) 2))
     )
   )
   lst
 )

 (vl-load-com)
 (if (setq fic (getfiled "Veuillez choisir votre fichier de points" (getvar "dwgprefix") "txt" 16))
   (if (setq bl (getstring T "\nNom du bloc à insérer : "))
     (if (or (tblsearch "block" bl) (findfile (strcat bl ".dwg")))
(progn
  (setq doc (vla-get-activedocument (vlax-get-acad-object))
	file (open fic "r")
  )
  (if (eq (getvar "cvport") 1)
    (setq esp (vla-get-paperspace doc))
    (setq esp (vla-get-modelspace doc))
  )
  (vla-startundomark doc)
  (or (tblsearch "block" bl)
    (vla-delete (vla-insertblock esp (vlax-3d-point '(0.0 0.0 0.0)) (findfile (strcat bl ".dwg")) 1 1 1 0))
  )
  (while (setq data (read-line file))
    (setq data (lst_pt data))
    (if (setq ent (vlax-invoke (vla-insertblock esp (vlax-3d-point
						      (list
							(read (caddr data))
							(read (cadr data))
							(read (car data))
						      )
						    )
						    bl
						    1 1 1 0
			       )
			       'getattributes
		  )
	)
      (progn
	(vla-put-textstring (car ent) (cadddr data))
	(vla-put-textstring (cadr ent) (car data))
      )
    )
    
  )
  (close file)
  (vla-endundomark doc)
)
(princ (strcat "\nLe bloc " bl " est introuvable."))
     )
   )
 )
 (princ)
)

 

[Edité le 21/6/2007 par Patrick_35]

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)

C'est presque merveilleux,

 

Patrick j'ai juste une question car je crée un bloc avec une étiquette MAT et une autre ALT mais après création des blocs je n'ai plus qu'une étiquette sur les deux. Est-il possible de conserver les deux attributs après traitement? Sinon ta routine fonctionne super, MERCI.

Posté(e)

Salut,

 

Un autre, vite fait aussi. le bloc (nommé "PointFile") doit être présent dans le dessin ou en tant que fichier (wbloc) dans un répertoire du chemin de recherche et contenir deux attributs, dans l'ordre : le matricule et l'altitude.

 

(defun c:PointFile (/ AcDoc Space bloc file str mat alt ins ref)
 (vl-load-com)
 (and
 (setq	AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace AcDoc)
	(vla-get-ModelSpace AcDoc)
      )
 )
   (or
     (tblsearch "BLOCK" (setq bloc "PointFile"))
     (findfile (setq bloc "PointFile.dwg"))
   )
   (setq file (getfiled "Choisir le fichier" "" "txt" 0))
   (setq file (open file "r"))
   (while (setq str (read-line file))
     (setq str	(vl-string-right-trim "," str)
    mat	(substr str 1 (vl-string-position (ascii ",") str))
    str	(substr str (+ 2 (vl-string-position (ascii ",") str)))
    alt
	(rtos (atof (substr str (+ 2 (vl-string-position (ascii ",") str 1 T)))) 2 2)
    ins	nil
    ins	(cons (atof alt) ins)
    str	(substr str 1 (vl-string-position (ascii ",") str 1 T))
    ins
	(cons
	  (atof	(substr	str
			(+ 2 (vl-string-position (ascii ",") str 1 T))
		)
	  )
	  ins
	)
    str	(substr str 1 (vl-string-position (ascii ",") str 1 T))
    ins	(cons (atof str) ins)
    ref	(vla-InsertBlock
	  Space
	  (vlax-3d-point ins)
	  bloc
	  1.0
	  1.0
	  1.0
	  0.0
	)
     )
     (mapcar '(lambda (x y) (vla-put-TextString x y))
      (vlax-invoke ref 'GetAttributes)
      (list mat alt)
     )
   )
 )
 (princ)
) 

 

[Edité le 21/6/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Je n'avais pas compris que tu avais besoin du z dans un attribut. C'est le lisp de (gile) qui me l'a indiqué ;)

 

Donc, c'est corrigé. Maintenant, tu en as deux pour le prix d'un seul :D

 

@+

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)

Re,

 

Je m'écarte un peu du sujet principal mais je dois construire des facades avec ces points, je les insère donc en 3D en faisant différentes vues je peux faire mes constructions le soucis est que par exemple sur une vue de face mes blocs sont représentés pas des petits bout de lignes, comment rendre lisible ces blocs? Possible?

Posté(e)

Encore!

 

J'ai cherché mais pas trouvé, c'est vrai que mes connaissances sont encore plus que limitées, Gile peux-tu m'indiquer la modification pour passer de 6 à 2 décimales pour les altitudes?

Posté(e)

Salut,

 

J'ai remplacé :

 

(substr str (+ 2 (vl-string-position (ascii ",") str 1 T)))

 

par

 

(rtos (atof (substr str (+ 2 (vl-string-position (ascii ",") str 1 T)))) 2 2)

 

dans le code.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci Gile,

 

Question peut-on modifier la routine afin que je puisse non plus insérer mes point en SCG mais plutôt une première fois par exemple en vue de face puis sur les trois autes cotés (je selectionnerai chaque point concerné dans un .txt à part), le but est que je puisse monté des façades correctes. Possible ou pas?

Merci d'avance!

Posté(e)

Bonjour à tous,

 

Ce n'est pas "un appel au secours" mais j'ai vraiment besoin d'un coup de main pour la question énoncé ci-dessus!!!

Posté(e)

Salut,

 

Je te propose une autre solution, j'avais fait un LISP pour pivoter les textes et blocs sélectionnés du SCG à la vue courante. Tu te palce en vue de face, par exemple, tu fais wcs2view et tu sélectionne les blocs que tu veux afficher dans cette vue.

 

Tu truveras le LISP ici, ainsi que le LISP inverse VIEW2WCS.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Gile,

 

Je me suis mis en vue de face je lance la routine, je sélectionne mes points mais je reçois a la ligne de commande ;error :no function definition; MXM

Posté(e)

Au temps pour moi, les routines mxm et mxv appelées par Wcs2View sont données plus haut dans le même sujet.

 

Charge les avec le LISP

 

;; mxv Apply a transformation matrix to a vector by Vladimir Nesterovsky
(defun mxv (m v)
(mapcar '(lambda (row) (apply '+ (mapcar '* row v))) m)
)

;; mxm Multiply two matrices by Vladimir Nesterovsky
(defun mxm (m q / qt)
(setq qt (apply 'mapcar (cons 'list q)))
(mapcar '(lambda (mrow) (mxv qt mrow)) m)
) 

 

[Edité le 22/6/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

En voici un autre, peut-être plus pratique d'utilisation.

 

Les références de bloc et textes sélectionnés sont pivotés dans le plan de la vue courante par rapport à leur point d'insertion quelques soient leurs positions initiales.

 

PS : cette fois ci, les routines mxm et mxv sont bien jointes au code.

 

EDIT : code modifié suite aux tests de Bred ici.

 

;; Pivote les textes et blocs dans le plan de la vue courante

(defun c:r2v (/ doc nor ins dir mat)
 (vl-load-com)
 (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-StartUndoMark doc)
 (if (ssget '((0 . "INSERT,*TEXT")))
   (vlax-for obj (vla-get-ActiveSelectionSet doc)
     (setq nor	(vlax-get obj 'Normal)
    ins	(vlax-get obj 'InsertionPoint)
    dir	(mapcar	'-
		(trans (getvar "viewdir") 1 0)
		(trans '(0 0 0) 1 0)
	)
    mat	(mxm
	    (mapcar '(lambda (x) (trans x 0 dir T))
		    '((1 0 0) (0 1 0) (0 0 1))
	    )
	  (mapcar '(lambda (x) (trans x nor 0 T))
		  '((1 0 0) (0 1 0) (0 0 1))
	  )
	)
     )
     (vla-TransformBy
obj
(vlax-tmatrix	
  (append
    (mapcar
      '(lambda (v1 v2)
	 (append v1 (list v2))
       )
      mat
      (mapcar '- ins (mxv mat ins))
    )
    (list '(0 0 0 1))
  )
)
     )
   )
 )
 (vla-EndUndoMark doc)
 (princ)
)

;; Retourne le produit scalaire (réel) de deux vecteurs
(defun vxv (v1 v2)
 (apply '+ (mapcar '* v1 v2))
)

;; Transpose une matrice Doug Wilson
(defun trp (m)
 (apply 'mapcar (cons 'list m))
)

;; Applique une matrice de transformation à un vecteur Vladimir Nesterovsky
(defun mxv (m v)
 (mapcar '(lambda (r) (vxv r v)) m)
)

;; Multiplie deux matrices Vladimir Nesterovsky
(defun mxm (m q)
 (mapcar '(lambda (r) (mxv (trp q) r)) m)
)

[Edité le 23/6/2007 par (gile)]

 

[Edité le 24/6/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é