Przykład nr 1

Koniec tego teoretyzowania :-). W tej "lekcji" zrobimy coś praktycznego. Przykład, którym się posłużę, będzie prosił użytkownika o wskazanie punktu, a następnie w miejscu wskazanym wstawiony zostanie krzyżyk opisujący współrzędne, X i Y.

Rysowanie punktu w LISP
Kod rysujący taki znaczek wyglądałby następująco:
;
  1. (vl-load-com)
  2. (setq *ZCApp* (vlax-get-zwcad-object))
  3. (setq *ActiveDocument* (vla-get-activedocument *ZCApp*))
  4. (setq *MSpace* (vla-get-modelspace *ActiveDocument*))

  5. (defun FullGetpoint (startPoint promp DefVal / ans outVal )
  6.   (if startPoint
  7.     (setq ans(vl-catch-all-apply 'getpoint (list startPoint promp ))) ; Wskaż punkt, z uwzględnieniem punku początkowego
  8.     (setq ans(vl-catch-all-apply 'getpoint (list promp ))) ; Wskaż punkt
  9.   )
  10.   (if (not(vl-catch-all-error-p ans)) ;warunek sprawdzający czy nie wystąpił błąd we wskazywaniu punku
  11.     (progn
  12.       (if ans ;Warunek sprawdzający czy został wskazany prawidłowy punkt
  13.         (setq outVal ans) ; Zwrócona zostanie lista współrzędnych wskazanego punktu
  14.         (setq outVal DefVal) ; Zwrócona zostanie wartość domyślna
  15.       )
  16.     )
  17.     (setq outVal nil) ; zwrócona zostanie pusta wartość
  18.   )
  19. outVal
  20. )


  21. (defun C:Krzyz ( / P0 P0v Wysokosc TextX TextXEnt TextY TextYEnt TextBBox textwidth)
  22.   (setq P0 (FullGetpoint nil "Wskaż punkt" nil))
  23.   (setq P0v (vlax-3d-point P0))
  24.   (setq Wysokosc 5)
  25.   (if P0
  26.     (progn
  27.       (setq TextX (vla-addtext *MSpace* (rtos (car P0) 2 2) P0v Wysokosc)) ;dodaje tekst
  28.       (setq TextXEnt(entget(vlax-vla-object->ename TextX)))
  29.       (setq TextBBox (textbox TextXEnt))
  30.       (setq textwidth (caar(cdr TextBBox ))) ;Oblicza szerokość tekstu
  31.       (vlax-invoke-method TextX 'Move P0v (vlax-3d-point(list (+ (car P0) (* 0.2 Wysokosc )) (+ (cadr P0) (* 0.2 Wysokosc )) (+ (caddr P0) (* 0.1 Wysokosc ))))) ; Przesuwa punkt
  32.       (vla-addline *MSpace* (vlax-3d-point (list (- (car P0) (+ textwidth (* 0.2 Wysokosc ))) (cadr P0) (caddr P0))) ;Tworzy linię
                      (vlax-3d-point (list (+ (car P0) (+ textwidth (* 0.2 Wysokosc ))) (cadr P0) (caddr P0))))
  33.       (vla-addline *MSpace* (vlax-3d-point (list (car P0) (+ (cadr P0) (+ textwidth (* 0.2 Wysokosc ))) (caddr P0)))
                      (vlax-3d-point (list (car P0) (- (cadr P0) (+ textwidth (* 0.2 Wysokosc ))) (caddr P0))))
  34.       (setq TextY (vla-addtext *MSpace* (rtos (cadr P0) 2 2) P0v Wysokosc))
  35.       (vlax-invoke-method TextY 'Move P0v (vlax-3d-point(list (+ (car P0) (* 0.2 Wysokosc )) (+ (cadr P0) (* 0.2 Wysokosc )) (+ (caddr P0) (* 0.1 Wysokosc )))))
  36.       (vlax-invoke-method TextY 'Rotate P0v (/ pi -2.0))
  37.     )
  38.   )
  39. (command "regen")
  40. (print )
  41. )


Spis treści
DCL

Copyright © 2000—2010 by Usługi Informatyczne SZANSA - Gabriela Ciszyńska-Matuszek.
Autoryzowany Dystrybutor programu ZWCAD w Polsce od 2005 roku. Wszelkie prawa zastrzeżone.