VisualLisp


Recommended Posts

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

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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...