VisualLisp


Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

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)

Odnośnik do komentarza
Udostępnij na innych stronach

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