TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: CAB 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?
-
Hi
An example to remove a layer in a viewport
(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.
@+
-
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 ?
-
Thanks Kerry.
That is how I solved it. See this routine.
http://www.theswamp.org/index.php?topic=22264.msg287603#msg287603