Recommended Posts

Posted

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

Posted

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)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...