CADxp: Petit problème avec Steal (de Lee Mac) - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Petit problème avec Steal (de Lee Mac)

#1 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 16 mai 2018 - 10:26

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 ?
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#2 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6189
  • Inscrit(e) : 06-janvier 03

Posté 16 mai 2018 - 14:34

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
0

#3 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 16 mai 2018 - 17:51

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...
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#4 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6189
  • Inscrit(e) : 06-janvier 03

Posté 16 mai 2018 - 18:38

Voir le messageDenisHen, le 16 mai 2018 - 17:51 , dit :

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
0

#5 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 17 mai 2018 - 08:38

Salut Patrick_35.

Voir le messagePatrick_35, le 16 mai 2018 - 18:38 , dit :

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

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

Voir le messagePatrick_35, le 16 mai 2018 - 18:38 , dit :

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

Et je t'en remercie... ;)
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#6 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 17 mai 2018 - 11:44

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 :

Citation

Écrit par Patrick_35 de CadXP.com
nombre d'arguments insuffisants

Une idée, un conseil ?
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#7 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 10944
  • Inscrit(e) : 02-septembre 05

Posté 17 mai 2018 - 11:56

Je pense que tu as fait une erreur en pensant "corriger" "une petite erreur de parenthèses".
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#8 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 17 mai 2018 - 12:47

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 :

Citation

Écrit par Patrick_35 de CadXP.com
Erreur Automation. Aucune description n'a été entrée.

LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#9 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6189
  • Inscrit(e) : 06-janvier 03

Posté 17 mai 2018 - 14:35

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
0

#10 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 17 mai 2018 - 14:43

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...
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#11 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6189
  • Inscrit(e) : 06-janvier 03

Posté 17 mai 2018 - 14:48

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
0

#12 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 17 mai 2018 - 14:54

Voir le messagePatrick_35, le 17 mai 2018 - 14:48 , dit :

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...
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#13 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6189
  • Inscrit(e) : 06-janvier 03

Posté 18 mai 2018 - 10:13

Salut

Je comprends bien, mais combien as-tu de routines que tu ne maitrises pas totalement et qui fonctionnent ?
Le plus dur est de s'y mettre.

@+
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
0

#14 L'utilisateur est hors-ligne   DenisHen 

  • ceinture noire 5em dan
  • Groupe : Membres
  • Messages : 2942
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 18 mai 2018 - 10:45

Voir le messagePatrick_35, le 18 mai 2018 - 10:13 , dit :

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

C'est pas faux... ;)
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)