Aller au contenu

Extraire description d'un bloc d'un fichier texte


chronos21

Messages recommandés

Bonjour à tous,

 

voilà je cherche actuellement à créer un légende de façon automatique et pour cela j'ai découvert la routine très intéressante de TAMBER qui se nomme Tabloblo. Cette routine est très bien mais mon soucis c'est que le nom de mes blocs ne sont pas du tout explicite et si je mets cela sur un de mes plans personne ne comprendra ce que cela veut dire.

 

Ainsi, la méthode à laquelle j'ai pensé (car il est hors de question de changer le nom des blocs ou encore de leurs ajouter des étiquettes ou attribut, cela engendrerai des conséquences dans certains marchés) serait d'interroger un fichier texte ou j'aurais deux colonnes la première avec le nom des blocs et la deuxième avec sa description et au lieu d'afficher le nom du bloc, j'afficherais sa description qui serait bien plus explicite.

 

Voilà, je demande au grands maitres lispeurs si cela est possible et si oui si ils ont une commande qui permet de le faire.

 

J'espère avoir été clair dans ma requête,

 

Cordialement,

 

Chronos

Lien vers le commentaire
Partager sur d’autres sites

Malheureusement je n'ai pas de réponse à ta demande.

Par contre je trouve ton idée très intéressante et très utile.

Effectivement quand on a déjà plus de 500 blocs sa serait un peu long de tous les renommer, ton idée d'une liste parallèle peut être très utile surtout que l'on pourrait donner encore plus d'information.

Alors messieurs les seigneurs du lisp à vos crayons :D

Lien vers le commentaire
Partager sur d’autres sites

Coucou, tu peux m'écrire en MP ou passer par la page contact de mon site web (abcad.fr)

 

Et me dire (en copiant le lien) où tu as trouvé la version de tabloblo sur CADxp. Il y a eu du mouvement.

Je l'adapterai et on publiera ici. Mais vite fait alors B)

J'ai plein de boulot.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Salut

 

J'avais fait quelque chose en son temps.

 

@+

 

Salut Patrick

J'ai voulu essayer d'utiliser ton lisp pour le tester mais lors de son lancement il ne veut pas ouvrir le fichier excel, il m'affiche "version d'excel inconnue ou non installée !

Je suis avec Excel 2010, ton fichier je peux l'ouvrir sans problème

Lien vers le commentaire
Partager sur d’autres sites

C'est bien ce que je disais, en son temp ;)

Je viens de vérifier et cela fonctionne avec Excel 2003 max.

Il faudrait que je reprenne le lisp, mais le temps me manque :(

 

@+

 

 

Pas de problème je te comprends, les débuts d'année il y a toujours beaucoup à faire et on est très demandé.

Lien vers le commentaire
Partager sur d’autres sites

Bon, coucou mes chers amis.

 

J'ai retouché Tabloblo pour faire plaisir à chronos21 et lui faire bon accueil ;)

C'est pas tous les jours...

 

J'ai ajouté gc:str2lst de (gile)

La liste lassoc doit, en principe diminuer au fur et à mesure que la routine cherche. C'est pour otimiser basiquement la routine.

Ca serait bien de faire des tests avec des gros fichiers textes et quantités de blocs.

 

ATTENTION aux utilisateurs, cherchez l'expression FINDFILE dans le code pour y spécifier proprement le nom du fichier texte.

 

J'espère que ca marche correctement. C'est une rustine. Une bonne normalement :(rires forts):

 

;; TABLOBLO (Tramber)

;; Crée un tableau qui liste les blocs insérés (sélectionnés ou toute la collection)
(defun c:tabloblo       
      (/ libloc liidbloc ss col liref ptins tableVL cont row
lassoc)
 
 (vl-load-com)  
 (or *acdoc*      
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
           )  
 (prompt "\nSélectionnez les blocs à lister ou ")  
 (or (setq ss (ssget '((0 . "INSERT"))))      
     (setq ss (ssget "_X" '((0 . "INSERT")))	    
    col T))
 
 (if ss    
   (progn      
     (vlax-for x		
	(setq	  
	  ss (vla-get-ActiveSelectionSet *acdoc*)		  
	  )	
(or (vlax-property-available-p x 'Path)	    
    (setq liref		   
	   (cons		     
	     (if (vlax-property-available-p x 'EffectiveName)		       
	       (vla-get-EffectiveName x)		       
	       (vla-get-Name x)		       
	       )		     
	     liref		     
	     )		  
	  )	    
    )	
)      
     (vla-delete ss)      
     )    
   )
 
 (if col    
   (vlax-for i (vla-get-Blocks *acdoc*)      
     (if (and (not (wcmatch (setq name (vla-get-Name i)) "`**,*|*"))	       
       (= :vlax-false (vla-get-IsXref i))	       
       )	
(setq libloc (append libloc (list (vla-get-name i)))	      
      liidbloc (append liidbloc (list (vla-get-ObjectID i)))	      
      )	
)      
     )    
   (setq libloc (remove_doubles liref)	  
  liidbloc (mapcar		     
	     '(lambda (x)			
		(vla-get-ObjectID			  
		  (vla-item			    
		    (vla-get-Blocks *acdoc*)			    
		    x			    
		    )			  
		  )			
		)		     
	     libloc		     
	     )	  
  )    
   )
 
 (initget 1)  
 (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0))  
 (setq tableVL (vla-addtable		  
	  (vla-get-modelspace		    
	    (vla-get-activedocument (vlax-get-acad-object))		    
	    )		  
	  (vlax-3d-point ptins)		  
	  (+ 2 (length libloc))		  
	  3		  
	  20 ; Hauteur cellule		  
	  80 ; Largeur cellule		  
	  )	
)  
 (vla-put-VertCellMargin tableVL 4.0) ; Marge verticale  
 (vla-put-TitleSuppressed tableVL :vlax-false)  
 (vla-put-HeaderSuppressed tableVL :vlax-false)  
 (vla-setText tableVL 0 0 "Blocs") ; Titre  
 (vla-setText tableVL 1 0 "Nom") ; Titre colonne 1  
 (vla-setText tableVL 1 1 "Nombre") ; Titre colonne 2  
 (vla-setText tableVL 1 2 "Symbole") ; Titre colonne 3  
 (setq cont -1	
row 1	
)  
 
 (setq lassoc
 (cond((if(setq f(FINDFILE "Table blocs.txt"))(setq f(open f "r"))); ATTENTION, fichier texte à mettre dans le dossier du fichier ou dans un dossier de support
       (while(setq lignt (read-line f))
	 (setq lignt(vl-remove-if '(lambda(x)(= x ""))(gc:str2lst lignt"\t"))
	       lis(cons lignt lis))
	 )
       )
      )
)
 (if f(close f))


 (repeat (- (vla-get-Rows tableVL) 2)
   (setq nouvn(nth (setq cont (1+ cont)) libloc))
   (vla-settext
     
     tableVL
     
     (setq row (1+ row))
     
     0
     
     (cond((trouvnom nouvn))(T nouvn))
     
     )
   
   (vla-settext
     
     tableVL
     
     row
     
     1
     
     (length (vl-remove-if-not
	
	'(lambda (n) (= n (nth cont libloc)))
	
	liref
	
	)
      
      )
     
     )
   
   (vla-SetBlockTableRecordId
     
     tableVL
     
     row
     
     2
     
     (nth cont liidbloc)
     
     :vlax-true
     
     )
   
   (vla-setcellalignment tableVL row 0 5)
   
   (vla-setcellalignment tableVL row 1 5)
   
   )
 
 (princ)
 
 )

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste


(defun REMOVE_DOUBLES (lst)
 
 (if lst
   
   (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))
   
   )
 
 )

(defun trouvnom(ancn  / result); attention lassoc est modifié en global dans c:tabloblo
 (if(setq result(cadar(vl-remove-if-not '(lambda(x)(=(car x)ancn))lassoc)))
   (setq lassoc(vl-remove-if '(lambda(x)(=(car x)ancn))lassoc))
   )
 result
 )

;; gc:str2lst
;; Transforme une chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur

(defun gc:str2lst (str sep / len lst)
 (setq len (strlen sep))
 (while (setq pos (vl-string-search sep str))
   (setq lst (cons (substr str 1 pos) lst)
  str (substr str (+ len pos 1))
   )
 )
 (reverse (cons (substr str 1 pos) lst))
)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour et toutes mes excuses pour ce délais de réponse inacceptable, soucis de santé obligent...

 

Je tiens à féliciter TRAMBER pour sa superbe macro qui fonctionne à merveille.

 

C'est exactement ce que je souhaitais. Je vais tout de même essayer de modifier certaines choses comme que mes blocs aillent dans les calques des blocs créés ou encore supprimer les lignes du tableau et mettre le symbole dans la première colonne.

 

Je n'en reviens pas de la qualité de la macro (Testé sur un énorme plan topographique avec une bonne centaine de blocs différents) et de la gentillesse que vous avez fait part à mon égard, encore merci.

 

Je vous tiendrai au courant de mon avancement mais le code risque de ne pas être aussi "propre"

 

Merci.

 

Chronos

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et toutes mes excuses pour ce délais de réponse inacceptable, soucis de santé obligent...

 

Aucun souci. J'étais justement en train de me demander ce que devenait ce sujet... et me revoilà.

 

Je vais tout de même essayer de modifier certaines choses comme que mes blocs aillent dans les calques des blocs créés

Fastoche.

 

ou encore supprimer les lignes du tableau et mettre le symbole dans la première colonne.

Déjà plus délicat.

 

Je n'en reviens pas de la qualité de la macro (Testé sur un énorme plan topographique avec une bonne centaine de blocs différents) et de la gentillesse que vous avez fait part à mon égard, encore merci.

 

Tant mieux tant mieux. J'ai pondu cette macro un jour car j'avais remarqué qu'on pouvait visualiser un bloc dans un tableau (excellente idée d'Autodesk). Franchement, je n'ai pas eu beaucoup de mal à monter cette routine et elle a eu un franc succès. J'ai de la chance car je ne publie pas souvent. Je me trouve bon développeur mais pas plus que cela.

Pour éviter les problèmes de temps de traitement, j'ai glissé l'astuce de réduire la liste de comparaison à mesure qu'elle était consultée. C'est pas grand chose mais cela doit contribuer.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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é