movetotop

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

Link(s) da(s) subrotina(s) usada(s):ename-of, get-activespace

Nenhum comentário:

Postar um comentário