Aller au contenu

Petit problème avec Steal (de Lee Mac)


DenisHen

Messages recommandés

Bonjour à tous.

 

Aujourd'hui, dans une routine, j'utilise Steal de Lee Mac, avec ça, j'importe une présentation.

 

Dans cette présentation (du dessin source), j'ai deux fenêtres avec un (vlax-ldata chacune.

 

Après l'importation (dans le dessin courant), ces (vlax-ldata ont disparus...

 

Par contre, avec le DesignCenter, ces mêmes (vlax-ldata sont conservés après importation...

 

Quelqu'un as-t-il une solution ?

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

 

Essaye de cette manière

 ;;;---------------------------------------------------------------
 ;;;
 ;;; Accéder a un fichier dessin
 ;;;
 ;;;---------------------------------------------------------------

 (defun Ouvrir_dessin_dbx(dwg / dbx)
   (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
     (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
     (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   )
   (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx dwg)))
     nil
     dbx
   )
 )

 (setq dbx (Ouvrir_dessin_dbx "C:\\Test\\Mon_Dessin.dwg"))
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (setq new (vla-CopyObjects Dbx (vlax-safearray-fill 
			   (vlax-make-safearray vlax-vbObject '(0 . 0))
			   (list (vla-item (vla-get-layouts dbx) "Mon_Onglet"))
			 )
			 (vla-get-layouts doc)
    )
 )
 (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new))))
 (vlax-release-object dbx)

 

@+

 

ps : Ne pas oublier de remplacer "C:\\Test\\Mon_Dessin.dwg" et "Mon_Onglet" dans le lisp

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut Patrick_35, et merci pour ton aide.

 

Ton code est beaucoup trop compliqué pour que je le comprenne, mais ça ne va pas m’empêcher de l'utiliser... ;)

 

Par contre, il vient de tomber sur mon bureau un gros boulo d'une semaine à faire pour la semaine dernière... :angry:

 

La routine reprend... ;)

 

Mais je te tiens au courant...

 

Encore merci...

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

Ton code est beaucoup trop compliqué pour que je le comprenne, mais ça ne va pas m’empêcher de l'utiliser... ;)

Sans vouloir te vexer, je m'en doutais et je l'ai écrit de manière à ce que tu puisses l'utiliser sans difficulté.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut Patrick_35.

 

Sans vouloir te vexer, je m'en doutais ...

Rassures-toi, je ne le prend pas mal du tout... ;)

 

...je l'ai écrit de manière à ce que tu puisses l'utiliser sans difficulté.

Et je t'en remercie... ;)

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

Re.

 

Voilà, je pense qu'il y avait une petite erreur de parenthèses dans ton code. Je l'ai "corrigé" et adapté à mes besoins, le voici :

;;; ********************************
;;; Importation d'une présentation  
;;;      Patrick_35 (CadXP.com)     
;;; ********************************
(defun TC_ImportPresent	(Dessin Present / dbx)
 (princ "\nÉcrit par Patrick_35 de CadXP.com\n")
 (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
   (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
   (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
 ) ;_ Fin de if
 (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin)))
   nil
   dbx
 ) ;_ Fin de if
 (setq dbx (TC_ImportPresent Dessin))
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (setq	new (vla-CopyObjects Dbx
		     (vlax-safearray-fill
		       (vlax-make-safearray vlax-vbObject '(0 . 0))
		       (list (vla-item (vla-get-layouts dbx) Present))
		     ) ;_ Fin de vlax-safearray-fill
		     (vla-get-layouts doc)
    ) ;_ Fin de vla-CopyObjects
 ) ;_ Fin de setq
 (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new))))
 (vlax-release-object dbx)
) ;_ Fin de defun

Que j'appelle ainsi :

(TC_ImportPresent "TC_Lotissement.dwg" "PdV")

Bien sur, le fichier est dans un répertoire connu d'AutoCAD.

 

Mais AutoCAD me répond :

Écrit par Patrick_35 de CadXP.com

nombre d'arguments insuffisants

Une idée, un conseil ?

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 (gile), et merci de m'aider.

 

Tu veux dire que ça, c'est une routine à part entière :

;;; ********************************
;;; Importation d'une présentation  
;;;      Patrick_35 (CadXP.com)     
;;; ********************************
(defun TC_ImportPresent	(Dessin Present / dbx)
 (princ "\nÉcrit par Patrick_35 de CadXP.com\n")
 (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
   (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
   (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
 ) ;_ Fin de if
 (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin)))
   nil
   dbx
 ) ;_ Fin de if
) ;_ Fin de defun

Et que je dois placer ça dans mon code principal :

...
 (setq dbx (TC_ImportPresent (findfile "TC_Lotissement.dwg") "PdV"))
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (setq	new (vla-CopyObjects Dbx
		     (vlax-safearray-fill
		       (vlax-make-safearray vlax-vbObject '(0 . 0))
		       (list (vla-item (vla-get-layouts dbx) Present))
		     ) ;_ Fin de vlax-safearray-fill
		     (vla-get-layouts doc)
    ) ;_ Fin de vla-CopyObjects
 ) ;_ Fin de setq
 (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new))))
 (vlax-release-object dbx)
...

Si c'est ça, AutoCAD me répond :

Écrit par Patrick_35 de CadXP.com

Erreur Automation. Aucune description n'a été entrée.

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

Le lisp corrigé

  (defun TC_ImportPresent (Dessin / dbx)
   (princ "\nÉcrit par Patrick_35 de CadXP.com\n")
   (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
     (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
     (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   ) ;_ Fin de if
   (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin)))
     nil
     dbx
   ) ;_ Fin de if
 )

 (setq dbx (TC_ImportPresent (findfile "TC_Lotissement.dwg")))
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (setq new (vla-CopyObjects dbx
                            (vlax-safearray-fill
                              (vlax-make-safearray vlax-vbObject '(0 . 0))
                              (list (vla-item (vla-get-layouts dbx) "PdV"))
                            ) ;_ Fin de vlax-safearray-fill
                            (vla-get-layouts doc)
           ) ;_ Fin de vla-CopyObjects
 )
 (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new))))
 (vlax-release-object dbx)

 

Le tout dans une fonction

(defun ImportPresent (Dessin Present / TC_ImportPresent dbx doc new)

 (defun TC_ImportPresent (Dessin / dbx)
   (princ "\nÉcrit par Patrick_35 de CadXP.com\n")
   (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
     (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
     (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   ) ;_ Fin de if
   (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin)))
     nil
     dbx
   ) ;_ Fin de if
 )

 (if (setq dbx (TC_ImportPresent Dessin))
   (progn
     (setq doc (vla-get-activedocument (vlax-get-acad-object)))
     (setq new (vla-CopyObjects dbx
                                (vlax-safearray-fill
                                  (vlax-make-safearray vlax-vbObject '(0 . 0))
                                  (list (vla-item (vla-get-layouts dbx) Present))
                                ) ;_ Fin de vlax-safearray-fill
                                (vla-get-layouts doc)
               ) ;_ Fin de vla-CopyObjects
     )
     (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new))))
     (vlax-release-object dbx)
     T
   )
   nil
 )
)

(if (ImportPresent (findfile "TC_Lotissement.dwg") "PdV")
 (alert "Présentation importée.")
 (alert "Dessin non trouvé.")
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Merci Patrick_35, ça fonctionne, sauf que les (vlax-ldata que j'ai attachés à mes deux fenêtres de l'espace papier ne sont pas importés...

 

Je vais devoir réfléchir (aïe, c'est pas gagné) à une autre solution...

 

Encore merci à tous...

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

La version multiple (pour les présentations)

(defun ImportPresent (Dessin Present / TC_ImportPresent dbx doc new)

 (defun TC_ImportPresent (Dessin / dbx)
   (princ "\nÉcrit par Patrick_35 de CadXP.com\n")
   (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
     (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
     (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   ) ;_ Fin de if
   (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin)))
     nil
     dbx
   ) ;_ Fin de if
 )

 (if (setq dbx (TC_ImportPresent Dessin))
   (progn
     (setq doc (vla-get-activedocument (vlax-get-acad-object)))
     (setq new (vla-CopyObjects dbx
                                (vlax-safearray-fill
                                  (vlax-make-safearray vlax-vbObject (cons 0 (1- (length Present))))
			   (mapcar '(lambda(x) (vla-item (vla-get-layouts dbx) x)) Present)
                                ) ;_ Fin de vlax-safearray-fill
                                (vla-get-layouts doc)
               ) ;_ Fin de vla-CopyObjects
     )
     (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new))))
     (vlax-release-object dbx)
     T
   )
   nil
 )
)

(if (ImportPresent (findfile "TC_Lotissement.dwg") '("PdV" "Ong1" "Ong2"))
 (alert "Présentation's) importée(s).")
 (alert "Dessin non trouvé.")
)

 

Pour tes vlax-ldata, tu as songé la xdatas tout simplement ?

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Pour tes vlax-ldata, tu as songé la xdatas tout simplement ?

Oui, mais je suis "très" a l'aise avec les vlax-ldata et totalement incompétent avec les xdata, mais je vais devoir m'y mettre plus sérieusement...

 

Malgré que (gile) m'a fait deux superbes routine pour attribuer des xdata et les récupérer, mais j'hésite toujours à utiliser un code que je ne maîtrise pas...

 

Encore merci pour ton aide...

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

Je comprends bien, mais combien as-tu de routines que tu ne maitrises pas totalement et qui fonctionnent ?

C'est pas faux... ;)

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é