l56 Posté(e) le 2 janvier 2008 Posté(e) le 2 janvier 2008 Bonjour et Bonne année 2008 ! Est-il possible de modifier l'ordre d'affichage SANS provoquer de régénération ?Avec la commande "_.draworder", je pense que c'est impossible.Existe-t-til une solution VLISP ? a+
(gile) Posté(e) le 2 janvier 2008 Posté(e) le 2 janvier 2008 Salut, une méthode en vlisp : ;; récupérer l'espace courant = space (setq space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) ;; récupérer ou créer le dictionnaire de la table d'ordre de tracé = sort (if (vl-catch-all-error-p (setq sort (vl-catch-all-apply 'vla-getObject (list (vla-getExtensionDictionary space ) "ACAD_SORTENTS" ) ) ) ) (setq sort (vla-addObject (vla-getExtensionDictionary space ) "ACAD_SORTENTS" "AcDbSortentsTable" ) ) ) ;; placer en avant les objets (vla-object) d'une liste = olst (vlax-invoke sort 'MoveToTop olst) Vois dans l'aide aux développeurs les méthodes applicables à l'objet SortentsTable ou, après avoir attribué à la variable sort le dictionnaire, fait : (vlax-dump-object sort T) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
l56 Posté(e) le 2 janvier 2008 Auteur Posté(e) le 2 janvier 2008 Merci, je viens de tester mais le code suivant me retourne une erreur.Et je ne connais pas grand chose au vlisp. (setq sort (vl-catch-all-apply'vla-getObject(list (vla-getExtensionDictionaryspace)"ACAD_SORTENTS")) ==> #%catch-all-apply-error% Donc :(setq sort (vla-addObject(vla-getExtensionDictionaryspace)"ACAD_SORTENTS""AcDbSortentsTable") ==> #%catch-all-apply-error%Je crois qu'il n'arrive pas à créer le dictionnaire Je pense que la variable space est corectement défini, il rerourne : #VLA-OBJECT IAcadModelSpace 01106b94 [Edité le 2/1/2008 par l56]
(gile) Posté(e) le 2 janvier 2008 Posté(e) le 2 janvier 2008 Le dictionnaire d'ordre de tracé est lié à l'espace courant (objet ou papier), il faut donc avant de faire ce que tu as fait, définir la variable space avec l'objet espace courant : ;; récupérer l'espace courant = space (setq space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
l56 Posté(e) le 3 janvier 2008 Auteur Posté(e) le 3 janvier 2008 Je ne l'ai pas oublié.La variable SPACE est défini. Commande: !space # < VLA-OBJECT IAcadModelSpace 0d56a304> ensuite j' exécute: (if (vl-catch-all-error-p (setq sort (vl-catch-all-apply 'vla-getObject (list (vla-getExtensionDictionary space ) "ACAD_SORTENTS" ) ) ) ) (setq sort (vla-addObject (vla-getExtensionDictionary space ) "ACAD_SORTENTS" "AcDbSortentsTable" ) ) ) Mais il renvoi: ; erreur: Erreur Automation. Aucune description n'a été entrée. Qu'est-ce qu'une description ?
(gile) Posté(e) le 3 janvier 2008 Posté(e) le 3 janvier 2008 Excuse moi, je n'avais pas bien lu ta réponse.Effectivement space semble bien définie (malgré que *acdoc* ne soit pas définie dans les lignes que j'ai donné).Je ne comprends pas pourquoi cela ne fonctionne pas chez toi, ça marche bien chez moi et ces lignes de code sont extraites du LISP MT, pour lequel je n'ai eu aucun retour de ce genre. Si tu as le temps, on va essayer de trouver l'erreur en procédant par étapes (tblobjname "block" "*model_space") (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) (setq space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) Une fois le variables précédentes définies, ou essaye : (setq dict (vla-getExtensionDictionary space)) qui doit retourner : # si le dictionnaire existe ou : erreur: Erreur Automation Clé introuvable s'il n'existe pas. Dans le second cas, on essaye de le créer : (setq sort (vla-addObject dict "ACAD_SORTENTS" "AcDbSortentsTable")) Si ça ne fonctionne toujours pas, il peut s'agir d'un ARX qui ne serait pas chargé mais je n'arrive pas à déterminer lequel. PS: ces jours ci, je ne suis disponible pour CADxp qu'en soirée. [Edité le 3/1/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
l56 Posté(e) le 6 janvier 2008 Auteur Posté(e) le 6 janvier 2008 Commande: (tblobjname "block" "*model_space") [b] < Nom d'entité: 7ef60d00>[/b] Commande: (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) [b] #< VLA-OBJECT IAcadDocument 0d4e8f84>[/b] Commande: (setq space (if (= (getvar "CVPORT") 1) ((_> (vla-get-PaperSpace *acdoc*) ((_> (vla-get-ModelSpace *acdoc*) ((_> ) (_> ) [b] #< VLA-OBJECT IAcadModelSpace 0d56b554>[/b] Commande: (setq dict (vla-getExtensionDictionary space)) [b] #< VLA-OBJECT I [surligneur] AcadDictionary [/surligneur]0d56a0d4>[/b] Commande: (setq sort (vla-addObject dict "ACAD_SORTENTS" "AcDbSortentsTable")) [b] ; erreur: Erreur Automation. Aucune description n'a été entrée[/b]. Je t'ai surligné la différence de résultat entre ton code sur ta machine et sur la miene. Test fait sur AutoCAD 2004 et 2006. Merci encorea+
(gile) Posté(e) le 6 janvier 2008 Posté(e) le 6 janvier 2008 Oupss !!! J'ai oublié une étape, (setq dict (vla-getExtensionDictionary space)) doit bien retourner un objet AcadDictionary, donc juque là tout est correct Il faut ensuite faire : (vla-getObject dict "ACAD_SORTENTS") qui devrait retourner # si le dictionnaire existeou : erreur: Erreur Automation Clé introuvable s'il n'existe pas. Mais le retour de la dernière expression dit qu'AutoCAD ne veut pas ajouter de nouvel objet au dictionnaire, ce qui me fait penser qu'un ObjetARX n'est peut-être pas chargé. As tu essayé après avoir utilisé la commande ORDRETRACE ? Peux-tu essayer après avoir fait : (or (member "acdorder.arx" (arx)) (arxload "acdorder")) Sinon, peux tu faire (arx) sur la ligne de commande et poster la liste qui est retournée, je pourrais peut-être m'en servir en la comparant à celle que j'ai. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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