ASTERIXII Posté(e) le 4 avril 2014 Posté(e) le 4 avril 2014 Bonjour, Ma question, est-il possible de lire la valeur d'un Attribut d'un bloc sans qu'il soit dans le dessin, et sans l'ouvrire.Scanner un répertoire, et lire un attribut dans un ensemble de bloc ?
(gile) Posté(e) le 4 avril 2014 Posté(e) le 4 avril 2014 Salut, Avec ObjectDBX (Visual LISP uniquement), on peut accéder à la base de donnée (database) d'un dessin sans l'ouvrir dans l'éditeur.Ce qui veut dire, qu'on aura pas la possibilité d'utiliser les fonctionnalités de l'éditeur comme les commandes ou les sélections, mais on peut très bien parcourir le bloc de l'espace objet pour y retrouver des objets puis les lire et/ou modifier. Une fonction qui retourne le Document (AxDbDocument) du fichier passé en argument (ou nil s'il n'a pu être ouvert). ;;; gc:GetAxDbDoc ;;; Accéder à un dessin fermé. ;;; ;;; Retourne : ;;; un objet IAxDbDocument si le document est trouve ;;; nil si le document n'a pu être trouvé ou s'il est ouvert. ;;; ;;; Argument : ;;; filename : le chemin complet du fichier ;;; ;;; Exemple d'utilisation : ;;; (if (setq doc (gc:GetAxDbDoc filename)) ;;; (progn ;;; ... ;;; ... ;;; (vlax-release-object doc) ;;; ) ;;; ) (defun gc:GetAxDbDoc (filename / acadver progId axdbdoc) (vl-load-com) (setq progId (if (< (setq acadver (substr (getvar 'acadver) 1 2)) "16") "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." acadver) ) ) (if (setq axdbdoc (vlax-create-object progId)) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename) ) (not (vlax-release-object axdbdoc)) axdbdoc ) ) ) Exemple d'utilisation simple (affiche le nombre d'entité contenues dans l'espace objet du dessin) : Note que c'est le programme qui a la resposabiblité de libérer les ressources de l'objet externe ObjectDBX, avec vlax-release-object. (if (setq doc (gc:GetaxDbDoc "C:\\Program Files\\Autodesk\\AutoCAD 2014\\Sample\\ActiveX\\ExtAttr\\attrib.dwg" ) ) (progn (princ (strcat "\n" (itoa (vla-get-Count (vla-get-ModelSpace doc))) " entités dans l'espace objet") ) (vlax-release-object doc) ) (princ "\nEchec à l'ouverture du fichier.") ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ahbv Posté(e) le 4 avril 2014 Posté(e) le 4 avril 2014 Salut Gile par curiosité j'ai essayé ton lisp et j'ai ceci en retour"Commande: no function definition: GC:GETAXDBDOC" (je suis sous MEP2014)merci d'avance.AHG Salut, Avec ObjectDBX (Visual LISP uniquement), on peut accéder à la base de donnée (database) d'un dessin sans l'ouvrir dans l'éditeur.Ce qui veut dire, qu'on aura pas la possibilité d'utiliser les fonctionnalités de l'éditeur comme les commandes ou les sélections, mais on peut très bien parcourir le bloc de l'espace objet pour y retrouver des objets puis les lire et/ou modifier. Une fonction qui retourne le Document (AxDbDocument) du fichier passé en argument (ou nil s'il n'a pu être ouvert). ;;; gc:GetAxDbDoc ;;; Accéder à un dessin fermé. ;;; ;;; Retourne : ;;; un objet IAxDbDocument si le document est trouve ;;; nil si le document n'a pu être trouvé ou s'il est ouvert. ;;; ;;; Argument : ;;; filename : le chemin complet du fichier ;;; ;;; Exemple d'utilisation : ;;; (if (setq doc (gc:GetAxDbDoc filename)) ;;; (progn ;;; ... ;;; ... ;;; (vlax-release-object doc) ;;; ) ;;; ) (defun gc:GetAxDbDoc (filename / acadver progId axdbdoc) (vl-load-com) (setq progId (if (< (setq acadver (substr (getvar 'acadver) 1 2)) "16") "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." acadver) ) ) (if (setq axdbdoc (vlax-create-object progId)) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename) ) (not (vlax-release-object axdbdoc)) axdbdoc ) ) ) Exemple d'utilisation simple (affiche le nombre d'entité contenues dans l'espace objet du dessin) : Note que c'est le programme qui a la resposabiblité de libérer les ressources de l'objet externe ObjectDBX, avec vlax-release-object. (if (setq doc (gc:GetaxDbDoc "C:\\Program Files\\Autodesk\\AutoCAD 2014\\Sample\\ActiveX\\ExtAttr\\attrib.dwg" ) ) (progn (princ (strcat "\n" (itoa (vla-get-Count (vla-get-ModelSpace doc))) " entités dans l'espace objet") ) (vlax-release-object doc) ) )
(gile) Posté(e) le 4 avril 2014 Posté(e) le 4 avril 2014 Salut, Il faut, bien sûr, charger la routine gc:GetAxDbDoc avant de lancer l'expression :(if (setq doc (gc:GetAxDbDoc ...)) ...) Il faut aussi changer le chemin du fichier à ouvrir si besoin (dans l'exemple, il s'agit d'un fichier dans le répertoire Sample d'AutoCAD 2014).J'ai ajouté l'affichage d'un message en cas d'échec à l'ouverture du fichier. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ASTERIXII Posté(e) le 4 avril 2014 Auteur Posté(e) le 4 avril 2014 Gile, merci pour ta réponse. Je vais creuser, mais je connais pas bien le travail avec les "objets VLA"
(gile) Posté(e) le 4 avril 2014 Posté(e) le 4 avril 2014 Ça n'est pas très difficle,tu peux voir ce sujet-ci, et celui-là. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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