Rekomendowane odpowiedzi

Opublikowano

Witam,

poszukuję skutecznej metody aktualizacji wierzchołków polilinii za pomocą Visual Lisp'a.

Sprawdzałem na bazie tego co wcześniej robiłem w AutoCAD, lecz ZwCAD po prostu nie reaguje przy funkcji "vlax-put"...

Przykład:

- narysować dowolną polilinię, a następnie:

(vl-load-com)
(setq entOb (vlax-ename->vla-object (car(entsel))))
;(setq Coord (vlax-get entOb 'Coordinates))            - AutoCAD
(setq Coord (vlax-safearray->list (vlax-variant-value (vlax-get entOb 'Coordinates))))           ; - ZwCAD
;lub:
;(setq Coord (vlax-safearray->list (vlax-variant-value (vlax-get-property entOb 'Coordinates)))) 

;...tutaj ustalenie nowych współrzędnych np. (1500.20 111.0 1312.124 123.21)

(vlax-put entOb 'Coordinates Coord)
(vla-update entOb)

i nic się nie dzieje...

Próbowałem również:

(vlax-put-property entOb 'Coordinates (list 1500.20 111.0 1312.124 123.21))

ale również bez efektu...

Mogę zatem założyć, że funkcja "vlax-put" po prostu nie działa, a funkcja "vlax-put-property" albo nie działa do końca właściwie, albo nie jest po prostu przeznaczona do zmiany tych właściwości obiektu.

pozdrawiam

Opublikowano

Trzeba tą listę nowych współrzędnych zapisać jako variant elementów typu double:

(vl-load-com) 

(defun L2v(lista typ / NObj SelObjArray i iList SelObjArrayVar)

 (setq NObj (length lista))
 (setq SelObjArray (vlax-make-safearray typ (cons 0 (- NObj 1) )))
 (setq i 0)
 (repeat NObj    
  (vlax-safearray-put-element SelObjArray i (nth i lista))
  (setq i (1+ i))
 )

 (vlax-safearray-fill SelObjArray lista) 
 (setq SelObjArrayVar (vlax-make-variant SelObjArray))
)

(setq entOb (vlax-ename->vla-object (car(entsel)))) 
(setq Coord (vlax-safearray->list (vlax-variant-value (vlax-get entOb 'Coordinates))))           ; - ZwCAD 

(setq Coord(L2V(LIST 1500.20 111.000 1312.12 123.210) vlax-vbDouble))
(vlax-put-property entOb 'Coordinates Coord) 
(vla-update entOb)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się