Aller au contenu

Bug très étrange


Invité Patrick

Messages recommandés

Posté(e)

Un bug très étrange que je n'arrive pas à résoudre, donc... A L'AIDE!!! (pas trouvé d'aide sur Google non plus)

 

L'instruction VBA suivante (j'insère un fichier/bloc):

 

   Set L_obj_BlocAttributs = ThisDrawing.PaperSpace.InsertBlock(position, "titre_legende_barrial.dwg", 1, 1, 1, 0)

 

produit une erreur "fichier non trouvé" dans AutoCAD 2007 mais seulement la deuxième fois que l'instruction est exécutée... :casstet:

 

Cette instruction ne produit jamais d'erreur dans AutoCAD 2006 ni dans AutoCAD 2005.

 

Je précise évidemment que le dessin inséré est bien dans son répertoire et que son chemin d'accès est bien accessible comme chemin de support.

 

Info additionnelle: bug testé également dans les versions allemandes d'AutoCAD 2007.

 

 

Posté(e)

Salut Patrick

 

1) Ce n'est que pour ce bloc ou ça arrive avec d'autres ?

2) Ce n'est que pour un certain dessin ou ça arrive sur d'autres ?

3) As-tu relancé Autocad, voir redémarrer l'ordinateur voir si cela se reproduit ?

4) Le fichier est dans les chemins de recherches d'autocad afin qu'il l'insère selon ton exemple ?

5) La variable position est correcte pour le deuxième insertion ?

 

@+

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

Posté(e)

]Salut Patrick

 

1) Ce n'est que pour ce bloc ou ça arrive avec d'autres ?

 

ça arrive avec d'autres.

 

2) Ce n'est que pour un certain dessin ou ça arrive sur d'autres ?

 

j'utilise un gabarit et de nouveaux dessins sont créés à partir de ce gabarit. Un an et demi que ça fonctionne sauf en 2007....

 

3) As-tu relancé Autocad, voir redémarrer l'ordinateur voir si cela se reproduit ?

 

Oui, pareil.

 

4) Le fichier est dans les chemins de recherches d'autocad afin qu'il l'insère selon ton exemple ?

 

Oui.

 

5) La variable position est correcte pour le deuxième insertion ?

 

Elle a la même valeur que pour la première insertion...

 

Posté(e)

Encore une question, le bloc n'est pas déjà dans le dessin lors de la première insertion et si c'est le cas, un test dans la table des blocs pourrait éviter le problème

 

@+

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

Posté(e)

Lors de la première insertion, le bloc n'est pas dans le dessin. La première instruction d'insertion fonctionne et ça plante à la deuxième. Si je teste si le bloc existe, je vais le trouver dans le dessin la deuxième fois, mais il faut que je l'insère de toute façon, ou alors peut être en enlevant le suffixe DWG pour la deuxième insertion?

Posté(e)

Il n'y en a pas, c'est certain puisque ce programme fonctionne depuis plus d'un an en version 2006. C'est AutoCAD 2007 qui apporte un changement dont je ne connais pas la nature et qui cause ce bug. Ma priorité est de trouver une solution, puis ensuite de trouver la cause du bug.

Posté(e)

Salut,

 

Je ne connais pas le VBA mais j'ai essayé un code similaire en vlisp sur AutoCAD 2007 :

 

(vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
 (vlax-3d-point (getpoint "\nInsertion: "))
 "F:\\D.A.O\\Blocs\\Logo.dwg"
 1
 1
 1
 0
 ) 

 

pas de problème, le bloc s'insère à chaque fois.

 

Mais ça m'a donné un idée, tester si le bloc est déjà dans la collection du dessin, et si oui essayer de l'insérer depuis la collection en spécifiant uniquement son nom. Je ne sais pas comment on l'écrirait en VBA, mais en vlisp ça serait quelque chose comme çà :

 

(setq pt (getpoint "\nInsertion: "))
(vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
 (vlax-3d-point (getpoint "\nInsertion: "))
 [surligneur](if (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) "Logo")
   "Logo"
 "F:\\D.A.O\\Blocs\\Logo.dwg"
   )[/surligneur] 
 1
 1
 1
 0
 ) 

 

En relisant plus attentivement, je m'aperçois que mon idée ne fait que préciser ce qui est suggéré plus haut.

 

[Edité le 11/7/2006 par (gile)]

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

Posté(e)

Oui, mais c'est une bonne idée et j'essaierais dès jeudi.

Posté(e)

Une petite précision, Item Method retourne une erreur si le bloc n'est pas présent dans la collection. Je ne sais pas si des fonction équivalentes existent en VBA, mais en vlisp on peut passer par un (if (vl-catch-all-error-p (vl-catch-all-apply ...)) ...) :

 

(vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
(vlax-3d-point (getpoint "\nInsertion: "))
(if (vl-catch-all-error-p
(vl-catch-all-apply
  'vla-item
  (list	(vla-get-Blocks
	  (vla-get-activedocument (vlax-get-acad-object))
	)
	"Logo"
  )
)
     )
 "F:\\D.A.O\\Blocs\\Logo.dwg"
 "Logo"
)
1
1
1
0
) 

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

Posté(e)

Bon ben c'est confirmé, le comportement du VBA en version 2006 et 2007 n'est pas le même...

 

Lorsque vous insérez un bloc en VBA 2007, vous ne pouvez plus comme en 2006 spécifier le bloc sous la forme nomdubloc.dwg

 

Il faut tester si la définition du bloc est dans la table des blocs, puis selon que la réponse est oui ou non, spécifier le nom du bloc à insérer comme nomdubloc ou nomdubloc.dwg

 

Vachement plus simple... j'ai passé la matinée à adapter mon développement.

 

Précision, cette adaptation a été testée avec succès dans un AutoCAD 2007 français et allemand.

  • 2 ans après...
Invité Patrick
Posté(e)

Suite de la discussion sur le forum Autodesk US, je n'ai jamais eu d'explication sur cette différence de comportement entre la 2005 et la 2007...http://discussion.autodesk.com/forums/thread.jspa?threadID=732606

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é