Aller au contenu

Ordre d\'affichage


l56

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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-getExtensionDictionary

space

)

"ACAD_SORTENTS"

)

)

 

==> #%catch-all-apply-error%

 

Donc :

(setq sort (vla-addObject

(vla-getExtensionDictionary

space

)

"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]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

 
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 encore

a+

Lien vers le commentaire
Partager sur d’autres sites

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 existe

ou : 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

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é