Aller au contenu

bug lisp " IMPT"


fiesta13310

Messages recommandés

Bonjour

 

Voilà 3 ans maintenant que j'utilise le LISP de BRED qui marchait très bien jusqu'à présent.

Maintenant j'ai un bug, je ne sais pas si c'est autocad qui fait ce beug mais c'est énervant.

Quand j'utilise impt, pendant un temps il fonctionne très bien, puis un beau matin, je veux l'utiliser sur le même fichier que la veil et la ça beug. En fait il me créer que des pages blanche. Alors quand je fait imprimer puis fenêtre pour voir l'aperçu de la dernière page qu'il a appliqué à la présentation, au lieu que ce soit le dernier bloc à imprimer, il me montre un rectangle blanc pommé dans l'espace objet qui a les même dimensions que mon bloc, sauf qu'il y en a pas. Alors si j'utilise impt et que je sélectionne 5 blocs par exemple, il va me créer 5 pages blanche...Bien sur, j'ai déjà essayé de lancer le lisp en désactivant l'accrochage objet.

 

J'ai trouvé une parade à ça, mais c'est chiant. Je sélectionne tout (ctrl+A), je copie et colle dans un nouveau dessin autocad, je relance impt et là tout fonctionne.

 

Une idée de ce qu'il se passe?

 

 

Merci d'avance et bonne journée

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

SVP tu nous remets ton Lisp IMPT dans ton message (un simple copier/coller du code) ?

 

Merci, Bye, lecrabe

 

;; imprime tous les cadre/bloc identique d'un page - par BRED -
;; bloc ayant un attribut "folio" = numéro de page
(defun c:impt (/ ACDOC B BACKGROUNDPLOT C I P1 P2 SEL XMIN YMAX PLT lst-att LST LST-F LST-NB Y)
 (vl-load-com)

 (while (not sel)
   (setq sel (car (entsel "\n Choix du cadre (Bloc) :")))

   (if sel
     (if (not (equal (vla-get-ObjectName (setq b (vlax-ename->vla-object sel))) "AcDbBlockReference"))
       (setq sel nil)
     )
   )
 )
 (setq sel            (ssget '((0 . "INSERT")))
       AcDoc          (vla-get-activedocument (vlax-get-acad-object))
       BACKGROUNDPLOT (getvar "BACKGROUNDPLOT")
 )

 (setvar "BACKGROUNDPLOT" 0)

 ;; Récupère Attrib "FOLIO"
 (repeat (setq i (sslength sel))
   (if (equal (vla-get-effectivename (setq c (vlax-ename->vla-object (ssname sel (setq i (1- i))))))
              (vla-get-effectivename B)
       )

     (if (setq lst-att (vlax-safearray->list (vlax-variant-value (vla-GetAttributes c))))
       (repeat (setq y (length lst-att))
         (if (equal (strcase (vla-get-TagString (nth (setq y (1- y)) lst-att))) "FOLIO")
           (setq lst-F  (append (list (cons (atoi (vla-get-TextString (nth y lst-att))) c)) lst-F)
                 lst-nb (append (list (atoi (vla-get-TextString (nth y lst-att)))) lst-nb)
           )
         )
       )
     )
   )
 )

 ;; Tri
 (setq lst-nb (vl-sort lst-nb '<)
       i      0
 )
 (repeat (length lst-nb)
   (setq lst (append lst (list (cdr (assoc (nth i lst-nb) lst-F))))
         i   (1+ i)
   )
 )

 ;; trite liste bloc
 (setq i 0)
 (repeat (length lst)
   (setq c (nth i lst)
         i (1+ i)
   )

   (vla-GetBoundingBox c 'xmin 'ymax)
   (setq p1 (vlax-make-safearray vlax-vbdouble (cons 0 1))
         p2 (vlax-make-safearray vlax-vbdouble (cons 0 1))
   )

   (vlax-make-variant
     (vlax-safearray-fill p1 (list (car (vlax-safearray->list xmin)) (cadr (vlax-safearray->list xmin))))
   )
   (vlax-make-variant
     (vlax-safearray-fill p2 (list (car (vlax-safearray->list ymax)) (cadr (vlax-safearray->list ymax))))
   )

   (if (> (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin)))
          (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin)))
       )
     (vla-put-PlotRotation (vla-get-activelayout AcDoc) ac90degrees)
     (vla-put-PlotRotation (vla-get-activelayout AcDoc) ac0degrees)
   )

   (setq plt (vla-get-plot AcDoc))
   (vla-put-PlotType (vla-get-activelayout AcDoc) acWindow)
   (vla-setwindowtoplot (vla-get-activelayout AcDoc) p1 p2)
   (vla-plottodevice plt (vla-get-configname (vla-get-activelayout AcDoc)))
 )
 (setvar "BACKGROUNDPLOT" BACKGROUNDPLOT)
 (princ)
)

Modifié par (gile)
formatage du code (bbcode)
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

j'ai chercher à éplucher le lisp, mais je ne suis vraiment pas fort avec les fonctions activeX... au point que j'arrive pas à voir ou sont les lignes qui définissent tous les paramètre d'impression.

 

Quand on passe par (command "-traceur" ... il faut tout renseigner, l'équivalent dans ton code se résume à :

(vla-setwindowtoplot (vla-get-activelayout AcDoc) p1 p2)

 

j'ai du mal à comprendre comment P1 et P2 sont défini puis redéfini juste en dessous... mais si ça marchai, c'est peut etre pas là qu'il faut chercher.

 

juste que (setq plt (vla-get-plot AcDoc)) semble faire référence à une config existante. Si la config de la présentation à un décalage ou une echelle à la noix, peut etre c'est là que ça introduit un problème?

 

 

mais bon désolé...

 

 

au fait, tu lances ça en espace papier ou objet?

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

ok, si tu fait ça en objet, peut etre que tu garde dans ce dessin les présentation par défaut... donc, ton "activelayout"est pas forcement propre? pas de décalage ou d'échelle à la noix?

 

Salut,

 

J'ai supprimé toute les présentation par défaut déjà.

C'est quoi ce que tu appelles "décalage ou échelle à la noix" ? :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Quand tu imprime avec TRACEUR, dans la fenêtre de dialogue dans le coin en bas à gauche tu as un décalage, et à coté l'échelle.

Dans les présentations par défaut, (sans template customisé) il y a une échelle différente de 1/1.

Je suis pas sur du coup vu ma méconnaissance du VL mais comme il semble récupérer la config depuis ce "activelayout" si elle n'est pas propre ça doit pas être top...

 

peut etre fait passer le bloc dont tu te sers et je testerai si ça marche ici.

Lien vers le commentaire
Partager sur d’autres sites

Quand tu imprime avec TRACEUR, dans la fenêtre de dialogue dans le coin en bas à gauche tu as un décalage, et à coté l'échelle.

Dans les présentations par défaut, (sans template customisé) il y a une échelle différente de 1/1.

Je suis pas sur du coup vu ma méconnaissance du VL mais comme il semble récupérer la config depuis ce "activelayout" si elle n'est pas propre ça doit pas être top...

 

peut etre fait passer le bloc dont tu te sers et je testerai si ça marche ici.

 

Ben le truc, c'est que ça fonctionne un certain temps, puis un beau jour, pouf! ça ne fonctionne plus. Alors la parade que j'ai trouvé c'est de tout copier (ctrl+A) et de tout coller (ctrl+v) dans un nouveau dessin, et là ça fonctionne à nouveau, mais jusqu'à quand?

ce que je vais faire c'est que je t'envois un fichier "echec" et un fichier "réussite".

Lien vers le commentaire
Partager sur d’autres sites

Je ne crois pas que ton fichier soit confidentiel, mais je te laisse la responsabilité de le poster en public. car je ne comprend pas du tout le soucis.

 

j'ai tester tes 2 fichiers et force est de constaté que le problème est le même ici. ce n'est donc pas un soucis propre à ton poste, mais bien un truc qui cloche dans les fichiers. Je rabâche pas, mais j'ai que de très faible notion de VB j'ai tout de même été surpris du comportement du programme.

 

Quand je regarde tes présentations, elle sont configurées en A4 imprimante aucune, car il me manque "gestetner MP ..." Mais au lancement du lisp, il par sur pdfcreator qui est mon imprimante par défaut... Bon, je ne voie pas ou il l’appelle, mais admettons.

J'ai le même résultats que toi à savoir les 3 feuilles bien et les 3 feuilles blanches pour l'autre fichier.

 

Sur ton fichier "échec" si je relance la commande imprimer, elle est paramétrée en fenêtre, et quand on appelle le bouton pour redéfinir cette fenêtre, en dézoomant, on peu voir la trace de la fenêtre précédente. Il y a bien un décalage. Mais alors d'ou il vient, je ne saurai le dire... Ce n'est pas le vecteur depuis le 0,0,0.. je sèche.

 

 

http://joch04.free.fr/images/vrac/test-impt.jpg

 

 

Il n'y a qu'un defun ça ne devrai pas être un effet de portée de variable pourtant tu dis que si quand on colle tout dans un nouveau dessin ça marche, c'est forcément une variable qui reste coincée ... J'en sais rien quoi... désolé...

Lien vers le commentaire
Partager sur d’autres sites

Je ne crois pas que ton fichier soit confidentiel, mais je te laisse la responsabilité de le poster en public. car je ne comprend pas du tout le soucis.

 

j'ai tester tes 2 fichiers et force est de constaté que le problème est le même ici. ce n'est donc pas un soucis propre à ton poste, mais bien un truc qui cloche dans les fichiers. Je rabâche pas, mais j'ai que de très faible notion de VB j'ai tout de même été surpris du comportement du programme.

 

Quand je regarde tes présentations, elle sont configurées en A4 imprimante aucune, car il me manque "gestetner MP ..." Mais au lancement du lisp, il par sur pdfcreator qui est mon imprimante par défaut... Bon, je ne voie pas ou il l’appelle, mais admettons.

J'ai le même résultats que toi à savoir les 3 feuilles bien et les 3 feuilles blanches pour l'autre fichier.

 

Sur ton fichier "échec" si je relance la commande imprimer, elle est paramétrée en fenêtre, et quand on appelle le bouton pour redéfinir cette fenêtre, en dézoomant, on peu voir la trace de la fenêtre précédente. Il y a bien un décalage. Mais alors d'ou il vient, je ne saurai le dire... Ce n'est pas le vecteur depuis le 0,0,0.. je sèche.

 

 

http://joch04.free.fr/images/vrac/test-impt.jpg

 

 

Il n'y a qu'un defun ça ne devrai pas être un effet de portée de variable pourtant tu dis que si quand on colle tout dans un nouveau dessin ça marche, c'est forcément une variable qui reste coincée ... J'en sais rien quoi... désolé...

 

voilà.... même constat que moi... :unsure:

pourquoi sur l'un oui et sur l'autre non....

 

PS : je n'arrive pas à rendre public mon fichier, c'est pour ça que je te l'ai envoyé en message privé. tu peux le faire toi s'il te plait? :D Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Voila... si un pro du Vlisp veux bien y jeter un coup d’œil, J'ai tout mis ici

 

J'aimerai bien savoir d'ou ça vient...

Car j'ai fait un truc dans le genre, mais ce code m'a l'air beaucoup plus... intelligent que le mien.. détection du portait paysage, utilisation de boundingbox alors que le me traine des attributs invisibles pour repérer les coins, bref une bien plus grosse culture programatique et plus malin...

Mais si malin que je trouve pas d'ou peut bien venir ce bug.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour,

 

Je me permet de relancer ce sujet car encore une fois, les beug recommencent... c'est toujours le même problème... pas plus ni moins... même si j'ai trouvé un moyen de contourner le problème (en faisant copier coller dans un nouveau dessin), c'est quand même chiant de devoir le faire... :(

 

Merci pour votre aide

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é