Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Les données :

Un plan dans lesquels il y a plusieurs xrefs (une trentaines) qui ont chacun une ou plusieurs présentations

 

L'objectif :

Récupérer dans chaque présentation de chaque xref un bloc "_cart" avec des attributs "nom" "date" "indice" pour écrire dans l'espace papier chacune des valeurs trouvé sous la forme :

 

XREF 1 : nom1 date1 indice1

XREF 2 : nom2 date2 indice2 - nom2 date2 indice2

 

mais je ne sais pas comment faire pourriez-vous m'aider à faire ce lisp ?

 

[Edité le 13/9/2009 par polo777]

Posté(e)

Salut et bienvenue,

 

Pour accéder aux références de bloc insérés dans des xrefs on peut, soit ouvrir chaque xref, soit accéder à sa base de données en utilisant ObjectDBX.

Cette deuxième méthode est plus rapide.

 

Je te donne un exemple qui retourne une liste dont chaque terme (un par bloc "_cart" trouvé) est une liste du type :

(nom_xref nom date indice)

 

;; GetXrefAttributes
;; retourne une liste dont chaque terme est un liste du type :
;; (nom_xref nom_présentation 

(defun GetXrefAttributes (/ acdoc doc nom date ind result)
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))

 ;; on parcourt les blocs du document actif pour trouver les xrefs
 (vlax-for blk (vla-get-Blocks acdoc)

   ;; pour chaque xref trouvée
   (if (= (vla-get-IsXref blk) :vlax-true)
     (progn

       ;; on "ouvre" le document
       (setq doc (getDocument (vla-get-Path blk)))

       ;; pour chaque présentation (excepté l'espace "Model")
       (vlax-for lay (vla-get-Layouts (car doc))
         (if (/= (vla-get-Name lay) "Model")

           ;; pour chaque objet dans la présentation
           (vlax-for obj (vla-get-Block lay)

             ;; si c'est un bloc nommé "_CART"
             (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
                      (= (strcase (vla-get-Name obj)) "_CART") ; nom du bloc
                 )
               (progn

                 ;; pour chaque attribut
                 (foreach att (vlax-invoke obj 'GetAttributes)

                   ;; si l'étiquette est "NOM" "DATE" ou "INDICE"
                   (cond
                     ((= (vla-get-TagString att) "NOM") ; etiquette d'attribut
                      (setq nom (vla-get-TextString att))
                     )
                     ((= (vla-get-TagString att) "DATE") ; etiquette d'attribut
                      (setq date (vla-get-TextString att))
                     )
                     ((= (vla-get-TagString att) "INDICE")
                                                 ; etiquette d'attribut
                      (setq ind (vla-get-TextString att))
                     )
                   )
                 )

                 ;; on ajoute un élément au résultat
                 (setq
                   result (cons
                            (list (vla-get-Name blk) nom date ind)
                            result
                          )
                   nom    nil
                   date   nil
                   ind    nil
                 )
               )
             )
           )
         )
       )

       ;; si le document est du type IAxDbDocument, on libère la mémoire
       (and (cadr doc) (vlax-release-object (car doc)))
       (setq doc nil)
     )
   )
 )
 result
)


;; getDocument
;; Accéder à un dessin ouvert ou fermé
;; Retourne un liste dont le premier terme est le document (vla-object)
;; le deuxième T si le document est du type IAxDb nil s'il est du type IAcad

(defun getDocument (fileName / document release AxDb)
 (if (setq filename (findfile filename))
   (progn
     (vlax-for	doc (vla-get-Documents (vlax-get-acad-object))
(if (= (strcase (vla-get-FullName doc)) (strcase fileName))
  (setq document doc)
)
     )
     (if (not document)
(progn
  (setq	document
	 (vlax-create-object
	   (if (		     "ObjectDBX.AxDbDocument"
	     (strcat "ObjectDBX.AxDbDocument." (itoa release))
	   )
	 )
	AxDb T
  )
  (vla-open document filename)
)
     )
   )
 )
 (list document AxDb)
)

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é