Aller au contenu

Remplacer "position Z" par la valeur de l'attribut "ALT"


Lionso

Messages recommandés

Bonjour,

 

J'ai un plan de topo qui m'est fournis avec les hauteurs, env. 5000 points (block), leurs attributs sont "ALT" et "MAT".

Enfin j'aimerais remplacer leurs position en Z par cette valeur : "ALT" pour ensuite extraire des données et balancer ca sur Revit.

 

Est- ce que vous auriez une routine en stock permettant de faire ca ? (j'ai deja un peu chercher sans succès)

 

Merci d'avance !! :D

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Est ce que tes Blocs sont bien a la BONNE Altitude Z ?

Coords XYZ du Point d'Insertion ... Que vaut le Z ??

 

Ou bien sont-ils en Z=0 avec un attribut ALT / ALTITUDE qui donne la vraie Elevation ??

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Cette routine ALTZ de Patrick_35 devrait faire l'affaire !?

 

SVP tu nous dis, si c OK ?

 

Bye, lecrabe

 

 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;; 
;; Routine:  ALTZ  par P35 vs 1.00 
;;
;; Monter en Z (Elevation/Altitude) TOUS les Blocs (Meme Nom) correspondant  
;; a l'attribut (Elevation/Altitude) clique/selectionne
;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

(defun c:ALTZ (/ att bas doc ent lst pos pts sel nombl) 

; Ici, on a une une fonction qui donne le nom du bloc, même ceux qui sont dynamiques. 
; car si on regarde juste le nom du bloc dynamique, on a quelque chose dans ce style "*U304" 
; Donc, c'est la propriété effectivename qu'il faut regarder si elle existe. 

 (defun nombl(bl) 
   (if (vlax-property-available-p bl 'effectivename) 
     (vla-get-effectivename bl) 
     (vla-get-name bl) 
   ) 
 ) 

; Activation des fonctions activex 
 (vl-load-com) 

; On définit que l'on travail sur le document actif (le dessin actuel) 
 (setq doc (vla-get-activedocument (vlax-get-acad-object))) 

; On définit le début du undo, même style que (command "_.undo" "_group") 
 (vla-startundomark doc) 

; on fait un test avec la fonction And. 
; Un and à la particularité de tester le 1er argument, si c'est ok on passe au suivant, etc... 
; jusqu'à la fonction (ici le progn) 
; On sélectionne un sous-objet avec la fonction nentsel 
 (and  (setq ent (nentsel)) 
; On transforme la sélection en objet vla 
       (setq att (vlax-ename->vla-object (car ent))) 
; On regarde si c'est un attribut 
       (eq (vla-get-objectname att) "AcDbAttribute") 
; On détermine le père de l'attribut, c'est à dire le bloc qui contient ledit attribut sélectionné 
       (setq bas (vla-objectidtoobject (vla-get-database att) (vla-get-ownerid att)) 
; On recherche les attributs du bloc déterminé avant que l'on ajoute dans une liste 
             lst (vlax-invoke bas 'getattributes) 
; On calcul la position de l'attribut dans la liste définit auparavant 
             pos (- (length lst) (length (member att lst))) 
       ) 

; on fait une sélection dans tout le dessin avec comme arguments 
; que ce sont des blocs (cons 0 "insert") 
; que l'on recherche les blocs anonymes (cons 2 "`**") 
; que l'on recherche un bloc spécifique selon son nom (cons 2 (nombl bas)) 
; et que pour que le filtre fonctionne, on regroupe les différents noms (cons 2 (strcat "`**," (nombl bas))) 
; que l'on recherche des blocs avec attributs (cons 66 1) 
       (ssget "x" (list (cons 0 "insert") (cons 2 (strcat "`**," (nombl bas))) (cons 66 1))) 

   (progn 

; on fait une boucle de recherche (vlax-for = foreach mais pour du vla) 
; et sur la sélection active, donc de ssget (vla-get-activeselectionset doc) 
     (vlax-for ent (setq sel (vla-get-activeselectionset doc)) 
; Je vérifie que le bloc dans la boucle correspond bien au nom du bloc de base 
       (and (eq (nombl bas) (nombl ent)) 

         (progn 

; Je récupère le point d'insertion 
           (setq pts (vlax-get ent 'insertionpoint)) 

; il faut lire la ligne de code à l'envers, en fonction de ses imbrications 
; je regarde les attributs du bloc de ma boucle (vlax-invoke ent 'getattributes) 
; je prends l'attribut qui m'intéresse en fonction de sa position dans la liste 
; (nth pos (vlax-invoke ent 'getattributes)) 
; je récupère la valeur de l'attribut que je transforme en réel 
; (atof (vla-get-textstring (nth pos (vlax-invoke ent 'getattributes)))) 

; Je construis une liste de point 
; (list (car pts) (cadr pts) (atof (vla-get-textstring (nth pos (vlax-invoke ent 'getattributes))))) 

; que j'écris comme position du bloc dans la boucle de recherche 
           (vlax-put ent 'insertionpoint (list (car pts) (cadr pts) (atof (vla-get-textstring (nth pos (vlax-invoke ent 'getattributes)))))) 

         ) 

       ) 
     ) 

     (vla-delete sel) 
; J'efface le jeu de sélection. A faire systématiquement car sinon, a un moment donné, le lisp plantera à cause de lui 
; Pourquoi ? c'est la question à qui veux gagner des millions. 

   ) 

 ) 
; On définit la fin du undo, même style que (command "_.undo" "_end") 
 (vla-endundomark doc) 
; Silence 
 (princ) 
)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Si on n'a pas Covadis et qu'on ne sait pas faire de lisp

Il faut utiliser les commandes natives :

Extraction de blocs

Injection dans Excel

Créer un script (c'est très facile en faisant une mini recherche)

Injecter les blocs renseignés

 

Je ne dis pas ça pour critiquer mais au contraire pour faire avancer.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

si c'est pour faire l'extraction de données, je ne vois pas trop l’intérêt de transférer la valeur ALT dans le Z pour extraire les positions X, Y et Z, alors qu'il suffit d'extraire les positions X, et Y, et le contenu de l'attribut ALT, ce qui donnera exactement le même résultat.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Me serais-je mal exprimé ?

C'est bien comme tu dis Olivier, je pense comme toi.

 

Ce que je voulais exprimer c'est une alternative au lisp qui demande des capacités ou des connaissances ou même Covadis qui sous-entend un achat

Nativement et avec un peu d'imagination il y a moyen de "bidouiller" et de faire des choses qui paraissent compliquées

Quand la porte est fermée, essaie de rentrer par la fenêtre; voilà ce que je voulais évoquer.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

  • 5 ans après...

Bonjour, je rencontre un problème du même genre.

j'ai un fichier topo mais les valeurs Z ne sont pas renseignées dans les propriétés de géométrie je ne souhaite pas les rentrer manuellement et voudrait exporter ensuite ces données dans REVIT pour faire la TOPO.

Problème je ne comprend absolument pas les solutions proposées (je suis un jeune petit vieux débutant)

Quelqu'un peut il m'aider?

D'avance merci

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é