Celem tego przykładu jest stworzenie funkcji ułatwiającej wstawianie rymiaru liniowego z dodatkowym symbolem średnicy. 

 

Wymiar liniowy

 

Polecenie do uruchomienia skryptu LISP: FiDim

 

Kod źródłowy z opisem

 

;;; Wymiarowanie liniowe z symbolem średnicy
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: FiDim
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/232-wymiar-liniowy-srednica.html
(vl-load-com)
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD* ))
(setq *Model* (vla-get-Modelspace *Rysunek* ))
(defun XGetpoint (tresc P0 domyslny / Px Wynik )
;----------------------------------------------------------
;Funkcja prosi Użytkownika o podanie punktu, jeśli Użytkownik wciśnie na klawiaturze
; spację lub enter, funkcja zwróci współrzędne punku domyślnego przekazane jako argument funkcji
;Argumenty: komunikat, zachętę, który sie wyświetli w linii poleceń w chwili uruchomienia funkcji
;Wynik: współrzędne punku - jeśli Użytkownik je poda
; współrzędne punku domyślnego - jeśli Użytkownik na klawiaturze wciśnie [ENTER] [SPACJA]
; nil - jeśli Użytkownik na klawiaturze wciśnie [ESC]
;----------------------------------------------------------
(if (not(null P0))
(setq Px(vl-catch-all-apply 'getpoint (list P0 tresc ))) ;wykonanie funkcji getpoint
; proszącej o wskazanie punktu) zwraca współrzędne punktu lub obiekt błędu
(setq Px(vl-catch-all-apply 'getpoint (list tresc )))
)
(if (vl-catch-all-error-p Px) ; sprawdzenie czy zwrócony został obiekt błędu
(progn ; wystąpił błąd
(prompt (vl-catch-all-error-message Px)) ;wyświetla w pasku poleceń komumikat błędu
(setq Wynik nil )
)
(progn ; Użytkownik wskazał punkt lub [ENTER]/[SPACE]
(if (null Px)
(setq Wynik domyslny )
(setq Wynik Px)
)
)
)
Wynik
)
(defun C:FiDim ( / )
;----------------------------------------------------------
; funkcja poprosi o wskazanie 2 punktów i doda wymiar liniowy z symbolem średnicy
; Argumenty: brak
; Wynik: wymiar wstawiony do modelu
;----------------------------------------------------------
(setq P1 (XGetpoint "Wskaż pierwszy punkt" nil nil ))
(if P1 (progn
(setq P2 (XGetpoint "Wskaż drugi punkt" P1 nil ) )
(if P2 (progn
(setq DimDist ; Ustawia odległośc wymiaru od lini określonej przez wskazane punkty
(*(getvar "DIMTXT" ) ; Pobiera domyślną wielkość tekstu wymiarowego
(getvar "DIMSCALE" ) )) ; Pobiera domyślną skalę wymiaru
(setq P3 (list (+(car P1) (/ (- (car P2) (car P1)) 2.0)) (+ DimDist (cadr P1)) (caddr P1)))
; Obliczenie punktu wstawienia tekstu wymiarowego
(setq Wymiar(vlax-invoke-method *Model* 'AddDimAligned (vlax-3d-point P1 ) (vlax-3d-point P2 ) (vlax-3d-point P3 ) ))
; wstawienie wymiaru
(vlax-put-property Wymiar 'TextOverride "%%C<>" ) ; nadpisanie tekstu przez dodanie symbolu średnicy
))
))
)

 

Wykonanie w ZWCAD 2023

wymiar liniowy

 

Wykonanie w ZWCAD 2015

LISP FiDim 2015

 

Wykonanie w ZWCAD Classic

LISP FiDim Classic