Lionso Posté(e) le 27 mars 2017 Posté(e) le 27 mars 2017 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
lecrabe Posté(e) le 27 mars 2017 Posté(e) le 27 mars 2017 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
Lionso Posté(e) le 27 mars 2017 Auteur Posté(e) le 27 mars 2017 Salut lecrabe, pardon de ne pas avoir précisé mais oui, Z=0 avec l'attribut ALT qui donne la vraie élévation
lecrabe Posté(e) le 27 mars 2017 Posté(e) le 27 mars 2017 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
Lionso Posté(e) le 27 mars 2017 Auteur Posté(e) le 27 mars 2017 MERCI INFINIMENT !!!!!!!!!! ca a tres bien marché esperons mntnt que je ne rencontre pas de soucis pour l'extraction de données ! merci merci merci :D
lili2006 Posté(e) le 27 mars 2017 Posté(e) le 27 mars 2017 Bonsoir à toutes et tous, Je peux te le faire avec Covadis si tu veux,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
didier Posté(e) le 28 mars 2017 Posté(e) le 28 mars 2017 Coucou Si on n'a pas Covadis et qu'on ne sait pas faire de lispIl faut utiliser les commandes natives : Extraction de blocsInjection dans ExcelCré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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Olivier Eckmann Posté(e) le 28 mars 2017 Posté(e) le 28 mars 2017 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
didier Posté(e) le 28 mars 2017 Posté(e) le 28 mars 2017 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 achatNativement et avec un peu d'imagination il y a moyen de "bidouiller" et de faire des choses qui paraissent compliquéesQuand la porte est fermée, essaie de rentrer par la fenêtre; voilà ce que je voulais évoquer. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
le chauve Posté(e) le 31 août 2022 Posté(e) le 31 août 2022 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
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