Didier-AD Posté(e) le 30 mars 2007 Posté(e) le 30 mars 2007 ci joint un petit bout de LISPla commande C:TEST2 demande un nom de calque et le créela commande C:TEST demande de pointer une entité, et demande un nom de calque elle est censée créer le calque et basculer l'entité dans ce nouveau calque. (defun c:test( / e nomcalc olay ) (setq e (car (entsel))) (setq nomcalc (getstring "\nNom du calque à créer ? ")) (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke-method olay 'Add nomcalc) (setq ent (entget e)) (entmod (subst (cons 8 nomcalc) (assoc 8 ent) ent)) ) ;-------------------------------------------------- (defun c:test2(/ nomcalc olay ) (setq nomcalc (getstring "\nNom du calque à créer ? ")) (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke-method olay 'Add nomcalc) ) ;--------------------------------------------------- (vl-load-com) (princ) La commande C:TEST2 fonctionne normalementla commande C:TEST plante rend l'écran instable sur AutoCAD 2007 et plante une erreur fatale sur AutoCAD 2006 9 fois sur 10.... J'en conclue que j'ai surement une erreur de concept mais où ? il s'agit de fonctions résumées qui dans mon développement sont un peu plus compliquées (définition de la couleur du calque et du type de ligne) ; jusqu'il y a 2 jours, je n'utilisais pas les fonctions VLA pour créer le calque, je me contentais de récupérer les caractéristiques du calque 0 par (setq infolay (entget (tblobjname "LAYER" "0"))= puis par une série de modification de la liste infolay je définissais les caractéristiques de mon nouveua calque et terminais par (entmake infolay) Il se trouve que cette ancienne technique que j'utilisais déjà au millénaire dernier met le souk dans la table des layers de le Beta 2008.je suis donc passé aux fonctions VLA et je vous confie le résultat merci à qui me dira où je me trompe....
(gile) Posté(e) le 30 mars 2007 Posté(e) le 30 mars 2007 Salut, Essaye comme ça, personnellement j'essaye, tant que faire se peut, de ne pas mélanger les entmake, entmod ... avec les fonctions vla- (defun c:test (/ e nomcalc olay) (setq e (car (entsel))) (setq nomcalc (getstring "\nNom du calque à créer ? ")) (setq olay (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (vlax-invoke-method olay 'Add nomcalc) (vla-put-layer (vlax-ename->vla-object e) nomcalc) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Didier-AD Posté(e) le 30 mars 2007 Auteur Posté(e) le 30 mars 2007 Mercimais j'aimerais tout de même comprendre pourquoi faut pas mélanger....
Bred Posté(e) le 31 mars 2007 Posté(e) le 31 mars 2007 Salut,en fait je ne pense pas qu'il ne faille pas mélanger les genres.... c'est juste pour une raison de "propreté" du code... et de faisabilité aussi.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Tramber Posté(e) le 31 mars 2007 Posté(e) le 31 mars 2007 Des grands spécialistes dont Serge nous ont donné ce conseil. Ca provoquerait une certaine instabilité. Je dois dire, avec 1 mega de lisp que je n'ai pas encore clairement établi de problèmes. Ce qui est sûr, c'est que le VLisp est vraiment plus rapide. Au point que j'ai remarqué sur des routines uniquement VLisp que c'étaient les affichages avec PRINC qui consommait le + ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant