Author Topic: safearray - remove an element  (Read 2574 times)

0 Members and 1 Guest are viewing this topic.

CAB

  • Global Moderator
  • Seagull
  • Posts: 10401
safearray - remove an element
« on: June 28, 2008, 03:43:51 PM »
How do you remove an element from a safearray?
Do you have to delete & recreate the array?
I've reached the age where the happy hour is a nap. (°¿°)
Windows 10 core i7 4790k 4Ghz 32GB GTX 970
Please support this web site.

Patrick_35

  • Guest
Re: safearray - remove an element
« Reply #1 on: June 29, 2008, 07:26:04 AM »
Hi

An example to remove a layer in a viewport

Code: [Select]
(defun remove_lay(vie tab / i j k l n nd nt xd xt)
  (vla-getxdata vie "" 'xt 'xd)
  (setq n  (vlax-safearray-get-u-bound xt 1)
i  (length tab)
k  (- n i)
nt (vlax-make-safearray vlax-vbinteger (cons 0 k))
nd (vlax-make-safearray vlax-vbvariant (cons 0 k))
j  0
l  0
  )
  (repeat (1- n)
    (or (member (vlax-variant-value (vlax-safearray-get-element xd j)) tab)
      (progn
(vlax-safearray-put-element nt l (vlax-safearray-get-element xt j))
(vlax-safearray-put-element nd l (vlax-safearray-get-element xd j))
(setq l (1+ l))
      )
    )
    (setq j (1+ j))
  )
  (vlax-safearray-put-element nt (1- k) (vlax-safearray-get-element xt (1- n)))
  (vlax-safearray-put-element nd (1- k) (vlax-safearray-get-element xd (1- n)))
  (vlax-safearray-put-element nt k     (vlax-safearray-get-element xt n))
  (vlax-safearray-put-element nd k     (vlax-safearray-get-element xd n))
  (list nt nd)
)

(setq test (remove_lay viewport (list "layer 1" "layer 2")))
and to look result
(vlax-safearray->list (cadr test))

and when you use vla-setxdata, it's don't work.

@+
« Last Edit: June 29, 2008, 07:45:41 AM by Patrick_35 »

Kerry

  • Mesozoic relic
  • Seagull
  • Posts: 11654
  • class keyThumper<T>:ILazy<T>
Re: safearray - remove an element
« Reply #2 on: June 29, 2008, 07:35:58 PM »
How do you remove an element from a safearray?
Do you have to delete & recreate the array?

Alan,
I believe you are correct, the array needs to be rebuilt ... at least thats what I've done.

.. what sort of array data are you dealing with ?
kdub, kdub_nz in other timelines.
Perfection is not optional.
Everything will work just as you expect it to, unless your expectations are incorrect.
Discipline: None at all.

CAB

  • Global Moderator
  • Seagull
  • Posts: 10401
Re: safearray - remove an element
« Reply #3 on: June 29, 2008, 07:48:05 PM »
Thanks Kerry.
That is how I solved it. See this routine.
http://www.theswamp.org/index.php?topic=22264.msg287603#msg287603
I've reached the age where the happy hour is a nap. (°¿°)
Windows 10 core i7 4790k 4Ghz 32GB GTX 970
Please support this web site.