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)

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie