Gé rér la migration dé vos applications lisp vérs la vérsion 2015 (VVC: Intérna
Gé rér la migration dé vos applications lisp vérs la vérsion 2015 (VVC: Intérnal Error) : Partié II Rappel VVC: Internal Error, vous avez eu ce message ? Si oui, il s’agit certainement d’un problème lié à l’utilisation de command dans un lisp J’ai déjà fait un article sur ce problème, vous le trouverez ici. Malheureusement, il ne réglait pas encore tout le problème : Le Hic : Il reste un petit problème : Si l’éditeur visual lisp est actif, la fonction unprotect-assign ne marche pas, on a un message pour entrer dans une boucle d’arrêt, il faut répondre non J’aimerai trouver un moyen de fermer l’éditeur visual lisp, mais je n’ai pas trouvé. La solution est-elle enfin trouvée ? Oui, mais en réalité, je faisais fausse route. Fermer visual lisp ne suffisait pas, une fois que l’editeur visual-lisp était lancé, le message revenait quand même, c’est un problème de pragma qui ne fonctionne pas une fois que l’éditeur a été lancé. C’est un problème signalé depuis 2009, voir aussi l’aide Autodesk sur pragma De plus, je n’ai jamais trouvé le moyen de fermer la fenêtre vlisp par la programmation, mais pour être franc, je n’ai pas beaucoup cherché … La solution ? Elle est encore plus simple, il suffit de paramétrer l’éditeur vlisp pour supprimer la boite de dialogue d’erreur, pour la remplacer par un avertissement. Pour cela, on peut soit éditer vlide.dsk et changer (*protect-assign* . 2) par (*protect-assign* . 1) Soit passer par l’interface : outils, option d’environnement, options générales, SETQ pour les symboles protégés, cliquer imprimer message. Ensuite n’oublier pas d’enregistrer l’environnement Voir également l’aide Autodesk sur *protect-assign* Chronologie du problème : - Autocad 2012 : apparition de command-s, qui provoque un crash lorsqu’on l’utilise - Autocad 2013 : command-s et command fonctionne tous les 2 - Autocad 2014 : Idem - Autocad 2015 : command ne fonctionne plus de la même façon - Autocad 2016 : pas testé Décryptage, analyse et perte de repères Toutes ces affirmations citées plus haut doivent être soigneusement contrôlées et testées, car elles sont en générales incomplètes ou parfois inexacte : Command ne marche pas avec mapcar Pas toujours : L’exemple de Gile (mapcar '(lambda (c r) (command "_.circle" "_non" c r)) '((0 0) (24 0) (36 0) (42 0) (45 0)) '(16 8 4 2 1) ) Ne marche pas avec la 2015, par contre : (command "_line" "0,0")(mapcar 'command '("2,2" "3,3"))(command "") Fonctionne très bien La différence ? dans l’exemple de Gile, chaque évaluation de mapcar achève la commande, Dans le deuxième exemple, mapcar est utilisé par paresse pour passer des arguments à une commande déjà commencée Command-s n’accepte pas les pause L’aide Autocad contient des inexactitudes : (command-s "_line" "0,0" PAUSE "") est bien valide. Par contre, effectivement, (command-s "_line") (command-s "2,2" "12.25,9" "") Ne marche pas C’est donc assez grave, car qui n’a pas, dans ses lisps, un truc du genre : (command "_line" "0,0") (while (= 1 (getvar "cmdactive")) (command pause) ) Bien sur, cela peut se remplacer par : (command-s "_line" "0,0") Car command-s accepte les pause, mais n’en a pas besoin : La preuve : (command-s "_line" "0,0")(prompt ”terminé")-> terminénil VL-CMDF est il l’équivalent de command-s ? L’aide LISP explique que le vl-cmdf était l'équivalent de command-s, obligeant à donner tous les arguments dès le début , mais en fait vl-cmdf est un mix entre command et command-s, et ne fonctionne pas toujours, mais parfois … Existe-t-il d’autre cas d’erreur ? On peut voir ce sujet : problème avec vl-cmdf et mapcar Et l’explication de Gile montre qu’il y a un lien entre eval et mapcar, or j’ai eu des erreur avec un (command « _redraw ») à l’interieur d’un eval Que faire ? Si on écoute Autodesk, il faudrait remplacer command par command-s Or ce n’est pas si simple : Si on veut gérer les versions, on a 3 cas : avant, 2012 et après Command-s ne permet pas de faire les mêmes choses que command (par exemple l’appel séquentiel) Donc un mise a niveau peut engendrer de longues heure de migration. La méthode G-EAUX Devant l’ampleur de la tâche, j’ai essayé de gruger C’est un sujet de the swamp qui m’a donné l’idée de la redefinition de command en command-s Le problème, command est protégé, donc il faut utiliser pragma Autre problème, pragma ne fonctionne pas s’il est directement appelé par acaddoc.lsp, il faut le mettre dans s ::startup Redéfinir command par command-s Donc voilà ce que j’ai mis dans mon acaddoc.lsp : ;;gestion du problème command-s, s'effectue après l'ouverture du dessin (defun command-s-check ( / acadApp) (if (> (atof (getvar "ACADVER")) 18.2) ;_la 2012 ou command-s est apparu, mais ne fonctionne pas (progn (pragma '((unprotect-assign (setq acadApp (vlax-get-acad-object)) (vla-get-activedocument acadApp) command ) ) ) (if (setq command command-s) (prompt "\nFunction Command redefined as command-s") ) ) ) ) (if s::startup (setq s::startup (append s::startup '((command-s-check)))) (defun-q s::startup (mapcar 'eval '((command-s-check))) ) ) Un petit test : Commande: !command #<SUBR @000000002cea28a8 COMMAND-S> Le miracle J’ai fait tout ça par tâtonnement et je n’aurai pas choisi cette voie si j’avais su tout ce que je sais maintenant, mais contre toute attente :, (command "_line") (command "2,2" "12.25,9" "") Fonctionne très bien, ainsi que : (command "_line" "0,0") (while (= 1 (getvar "cmdactive")) (command pause) ) Il n’y donc que les mapcar façons Gile à reprendre : Miracle ! G-EAUX uploads/Geographie/ ge-rer-la-migration-de-vos-applications-lisp-vers-la-version-2015-vvc-internal-error-partie-ii.pdf
Documents similaires










-
20
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Sep 17, 2021
- Catégorie Geography / Geogra...
- Langue French
- Taille du fichier 0.6095MB