Aller au contenu

[Résolu] Où se trouvent le nom des vues enregistrées ?


DenisHen

Messages recommandés

Bonjour à tous.

 

Pour les besoins d'un code que je suis en train d'écrire, j'ai besoin d’obtenir la liste des vues enregistrées avec la commande VUE.

 

Si quelqu'un a une astuce, une solution, un conseil... Je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut Fraid, et merci pour ton aide, les noms des vues sont dans le code DXF 2...

 

Je n'avais pas pensé à ça...

 

Encore merci à toi...

 

Il ne me reste plus qu'à en faire une liste... Ce n'est pas encore gagné...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Merci Gilles !

 

Bye, lecrabe

 


;;; Par GC 23/01/2010
;;; http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=26548#pid116207
;;; Deux commandes :
;;; ImportViews : pour importer dans le dessin courant toutes les vues enregistrées 
;;; du dessin sélectionné (il doit être fermé).
;;;
;;; ExportViews : pour Exporter dans le dessin sélectionné (il doit être fermé) 
;;; toutes les vues enregistrées du dessin courant.

;;; ImportViews par GC
;;; Importe dans le dessin courant toutes les vues enregistrées
;;; du dessin sélectionné

(defun c:ImportViews (/ filename doc lst)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (if (setq filename (getfiled "Fichier source" "" "dwg" 0))
   (if (setq doc (gc:GetAxDbDoc filename))
     (progn
       (vlax-for v (vla-get-Views doc)
         (setq lst (cons v lst))
       )
       (if lst
         (progn
           (vlax-invoke doc 'CopyObjects lst (vla-get-Views *acdoc*))
           (vlax-release-object doc)
         )
       )
     )
     (alert
       (strcat
         "\nLe fichier \""
         filename
         "\" est ouvert.\nFermer le avant de relancer ImportViews"
       )
     )
   )
 )
 (princ)
)

;;; ExportViews par GC
;;; Exporte dans le dessin sélectionné toutes les vues enregistrées
;;; du dessin courant

(defun c:ExportViews (/ filename doc lst)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (if (setq filename (getfiled "Fichier cible" "" "dwg" 0))
   (if (setq doc (gc:GetAxDbDoc filename))
     (progn
       (vlax-for v (vla-get-Views *acdoc*)
         (setq lst (cons v lst))
       )
       (if lst
         (progn
           (vlax-invoke *acdoc* 'CopyObjects lst (vla-get-Views doc))
           (vla-SaveAs doc filename)
           (vlax-release-object doc)
         )
       )
     )
     (alert
       (strcat
         "\nLe fichier \""
         filename
         "\" est ouvert.\nFermer le avant de relancer ExportViews"
       )
     )
   )
 )
 (princ)
)


;;; 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 :
;;; Le chemin complet du fichier
;;;
;;; Exemple d'utilisation :
;;; (if (setq doc (gc:GetAxDbDoc filename))
;;;   (progn
;;;     ...
;;;     (vla-SaveAs doc filename)
;;;     (vlax-release-object (car doc))
;;;   )
;;; )

(defun gc:GetAxDbDoc (filename / axdbdoc release)
 (setq axdbdoc
        (vlax-create-object
          (if (< (setq release (atoi (getvar "ACADVER"))) 16)
            "ObjectDBX.AxDbDocument"
            (strcat "ObjectDBX.AxDbDocument." (itoa release))
          )
        )
 )
 (if (vl-catch-all-apply
       'vla-open
       (list axdbdoc filename)
     )
   (not (vlax-release-object axdbdoc))
   axdbdoc
 )
)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut LeCrabe, et merci pour ton aide...

 

Comme toujours, les codes de Maître (gile) sont extrêmement bien faits, mais trop compliqués pour un profane comme moi...

 

J'ai donc écris ce petit bout de code (qui me sert de test), car je ne comprend pas bien le code de (gile) :

(defun c:CherchView (/ TblView LstView)
 (while (setq TblView (tblnext "VIEW"))
   (setq LstView (cons (cdr (assoc 2 TblView)) LstView))
 ) ;_ Fin de while
 (princ LstView)
 (princ)
) ;_ Fin de defun

Mais je n'obtiens qu'un nil en fin de code...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Avec TBLNEXT, il faut commencer par le 1er élément avec la syntaxe ( TBLNEXT "VIEW" T ) et ensuite (TBLNEXT "VIEW")...

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

En réponse au message #3 de DenisHEN

Je n'avais pas pensé à ça...

Il FAUT penser aux codes DXF en AutoLISP TOUT est dans les codes DXF

 

Il faut que j'explique ça sur mon site car si ça se trouve plusieurs personnes pensent comme toi.

 

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Que dire, merci à vous tous...

 

Maintenant, j'ai donc ce code :

(defun c:CherchView (/ TblView LstView)
 (setq TblView (tblnext "VIEW" T))
 (setq LstView (cons (cdr (assoc 2 TblView)) LstView))
 (while (setq TblView (tblnext "VIEW"))
   (setq LstView (cons (cdr (assoc 2 TblView)) LstView)))
 (setq LstView (vl-sort LstView '<))
 (princ LstView)
 (princ)
)

Didier : effectivement, je pense encore (à tord je sais) que seules les entités ont des codes DXF... Et je suis sûr de ne pas être le seul.

 

Encore merci à vous...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Petite astuce couramment utilisée avec tblnext pour démarrer au début de la collection (l'argument T)

Si view est le nom de la variable qui prendra tour à tour chaque enregistrement contenu dans la table et que la variable view a bien été déclarée localement (comme il se doit), au lancement de la boucle (while ...), view vaut nil, donc (not view) renvoie T et après la première itération view ne vaudra plus nil et (not view) retournera nil.

 

On peut donc faire :

 

(defun c:CherchView (/ view LstView)
 (while (setq view (tblnext "VIEW" (not view)))
   (setq LstView (cons (cdr (assoc 2 view)) LstView)))
 (setq LstView (vl-sort LstView '<))
 (princ LstView)
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

On peut aussi faire une petite routine générique pour lister n'importe quelle table.

 

(defun listTable (tblname / rec lst)
 (while (setq rec (tblnext tblname (not rec)))
   (setq lst (cons (cdr (assoc 2 rec)) lst))
 )
 (reverse lst)
)

 

(listTable "view") retourne la liste des noms des vues enregistrées

(listTable "block") la liste des blocs

(listTable "appid") celle des application enregistrées

etc.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile).

Petite astuce couramment utilisée avec tblnext pour démarrer au début de la collection (l'argument T)

Si view est le nom de la variable qui prendra tour à tour chaque enregistrement contenu dans la table et que la variable view a bien été déclarée localement (comme il se doit), au lancement de la boucle (while ...), view vaut nil, donc (not view) renvoie T et après la première itération view ne vaudra plus nil et (not view) retournera nil.

Merci (gile) pour cette explication, ça explique pourquoi je n'avais pas compris le code dont je me suis inspirer, il y avait effectivement un (not xxx) à cet emplacement, et je ne savais pas pourquoi... Maintenant, je sais...

 

Encore merci...

 

EDIT : j'aime le "comme il se doit", j'ai fais beaucoup d'effort là-dessus... Suite à vos nombreux conseils... ;)

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

yop

 

c'est cool, au debut j'allais t'envoyer du code tout fait, et ta réussi à le faire.

c'est plus formateur que du copier coller.

 

le mapcar on s'en fait une montagne, mais ce n'est pas si difficile.

c'est juste appliquer une fonction à chaque élément d'une liste.

cette fonction prend le nom lambda quand elle est déclarée dans le mapcar.

 

Gile en donne plein d'explications plus ou moins compliquées.

(Merci encore.)

 

 

aaarf, mélangé 2 post...

Lien vers le commentaire
Partager sur d’autres sites

c'est cool, au debut j'allais t'envoyer du code tout fait, et ta réussi à le faire.

J'essai de faire de mon mieux, à mon piètre niveau... Mais le principal est que j'arrive à faire ce que je veux, et tous ça grace à CadXP... Et à ces membres bien sur... ;)

c'est plus formateur que du copier coller.

didier, sort de ce corps... ;)

 

le mapcar on s'en fait une montagne, mais ce n'est pas si difficile.

c'est juste appliquer une fonction à chaque élément d'une liste.

cette fonction prend le nom lambda quand elle est déclarée dans le mapcar.

J'aimerai être à ce niveau... Pour moi, mapcar et lambda sont encore de la magie... :huh:

 

Gille en donne plein d'explications plus ou moins compliquées.

Maître (gile) navigue dans les hautes sphères du code (et pas seulement en Lisp)... Descendre à notre niveau pour s'expliquer ne doit pas être une simple affaire... :mellow:

 

aaarf, mélangé 2 post...

Ah bon ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é