Faz tempo que não posto nada, por isso aí vai uma rotinazinha simples que usa o método MoveToTop do activex, ou seja, vla-movetotop. Na verdade é o mesmo que um draworder trazendo a entidade pra frente… mas vai servir de exemplo para quem ainda não sabe como usar safearray
vera rotina…
(defun movetotop (ent / tmp sort)
(if (and vla-movetotop (setq ent (ename-of ent))) ;cad2007 e a entidade existe?
(progn
(setq tmp (vla-GetExtensionDictionary (get-activespace))
ent (vlax-ename->vla-object ent))
(if (vl-catch-all-error-p ;pega ou cria o dictionary do draworder
(setq sort (vl-catch-all-apply ‘vla-item (list tmp “ACAD_SORTENTS”))))
(setq sort (vla-AddObject tmp “ACAD_SORTENTS” “AcDbSortentsTable”)))
(vla-movetotop sort
(vlax-make-variant ;|cria uma array com a entidade… se tivesse uma
selectionset, teria de trasformar ela numa lista e substituir abaixo|;
(vlax-safearray-fill
(vlax-make-safearray ;cria uma safearray
vlax-vbObject ; de vla
‘(0 . 0)) ;com a dimensao 0 igual a 0 (uma entidade)
(list ent)))) ;lista a ser usada para preeencher a safearray
(mapcar ‘vlax-release-object (list ent sort tmp)) ;discutivel a utilidade disso
)))
(if (and vla-movetotop (setq ent (ename-of ent))) ;cad2007 e a entidade existe?
(progn
(setq tmp (vla-GetExtensionDictionary (get-activespace))
ent (vlax-ename->vla-object ent))
(if (vl-catch-all-error-p ;pega ou cria o dictionary do draworder
(setq sort (vl-catch-all-apply ‘vla-item (list tmp “ACAD_SORTENTS”))))
(setq sort (vla-AddObject tmp “ACAD_SORTENTS” “AcDbSortentsTable”)))
(vla-movetotop sort
(vlax-make-variant ;|cria uma array com a entidade… se tivesse uma
selectionset, teria de trasformar ela numa lista e substituir abaixo|;
(vlax-safearray-fill
(vlax-make-safearray ;cria uma safearray
vlax-vbObject ; de vla
‘(0 . 0)) ;com a dimensao 0 igual a 0 (uma entidade)
(list ent)))) ;lista a ser usada para preeencher a safearray
(mapcar ‘vlax-release-object (list ent sort tmp)) ;discutivel a utilidade disso
)))
Link(s) da(s) subrotina(s) usada(s):ename-of, get-activespace