W tym przykładzie zajmiemy się bliżej przedstawieniem kilku podstawowych możliwości funkcji ssget, która pozala na pracę ze wskazaniami elementów. Mechanizm zbiorów wskazań służą łatwej manipulacji większą liczbą obiektów, pozwalają np. wybrać z rysunku elementy spełniające określone kryteria.

Może to być ograniczenia narzucone Użytkownikowi, np. jeśli chcemy wykonać określone operacje na blokach o określonej nazwie, natomiast w rysunku tych bloków jest wiele i Użytkownik decyduje które z nich mają być brane pod uwage, możemy ograniczyć możliwe do wskazania bloki o określonej nazwie. Co więcej wybór obiektów może być automatyczny, z pominięciem ingerencji Użytkownika. Jeśli pierwszym z parametrów wywołania funkcji będzie litera "X" wybrane będą automatycznie wszyskie obiekty z bazy danych rysunku. Możemy wybierać i ograniczać wybór na wiele sposobów, kilka z nich przedstawię poniżej:

Zbiory Wskazań

 

Polecenie do uruchomienia skryptu LISP: 

 

Kod źródłowy z opisem

 

;;; Zbiory wskazań
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP:
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/168-zbiory-wskazan.html
; Przykład1: Wybieranie wszystkich kreskowań o określonym wzorzez z określonej warstwy
(setq wybrane (ssget "X" '((0 . "HATCH") (2 . "ANGLE" ) (8 . "Layer3"))))
; Przykład ten wybierze wszystkie elementy, które spełniają wszystkie warunki.
; Przykład2: wybiera wszystkie linie i okręgi z aktualnego rysunku
; na zbiorach wskazań można też wykonywać operacje logiczne. Czyli np wybrać wszystkie elementy
; spełniające jeden z warunków. Wystarczy w tym przypadku użyć operatora "or"
(setq wybrane (ssget "X" '((-4 . "<or") (0 . "LINE") (0 . "CIRCLE") (-4 . "or>"))))
; użycie takiej konstrukcji jest możliwy tylko jeśli wartości filtrów są stałe. Jeśli w tym
; miejscu chcemy użyć zmiennych, konieczne jest przebudowanie struktury listy np:
;Przykład3:
(setq Typ1 "LINE" ; np typ odczytany z innego obiektu, lub wybrany przez użytkownika z okna
Typ2 "HATCH" )
(setq wybrane (ssget "X" (list(cons -4 "<or") (cons 0 Typ1) (cons 0 Typ2 ) (cons -4 "or>"))))
; Używanie funkcji ssget wymaga znajomości kodów DXF czyli liczb które reprezentują każdą z
; właściwości obiektu np
; 0 - typ obiektu
; 1 - tekst obiektu
; 2 - nazwa
; 6 - typ linii
; 8 - warstwa
; 62 - kolor
; może być taka sytuacja, że ten sam kod DXF ma różne znaczenia dla różnych obiektów. np: lub nie
; mieć wogóle znaczenia dla określonego obiektu. np
; 1 - treść dla obiektu typu tekst, tekst wielowierszowy, Atrybut definicja , wymiarowanie. Natomiast
; nie ma znaczenia dla linii, punktów, okręgów, brył 3d itp.
; 10 - współrzędne : dla punktu , punkt wstawienia dla bloku, tekstu, środek okręgu, punkt początkowy
; linii. punkt środkowy bryły
; 40 - Promień okręgu lub łuku, Wysokość tekstu, atrybutu, Szerokość polilinii.
; Znajoność kodów wszystkich właściwości nie jest konieczna. Aby w łatwy sposób poznać kod DXF
; właściwości możemy się posłużyć następującym kodem:
(entget(car(entsel)))
; po uruchomieniu tej prostej funkcji, Użytkownik zostanie poproszony o wskazanie jednego obiektu,
; a w jego wyniku, w pasku poleceń wyświetlą się właściwości zanaczonego obiektu właśnie w formacie
; kodów DXF. Przykładowy zrwot takiej funkcji może być następujący:
;Select object: ((-1 . <Entity name: 7ed52338>) (0 . "INSERT") (330 . <Entity name: 7ed50cf8>)
;(5 . "1FF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
;(100 . "AcDbBlockReference") (66 . 1) (2 . "zxc") (10 1805.8 1371.04 0.0)
;(41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0)
;(210 0.0 0.0 1.0))
; do szczegółowego omówienia tego wyniku wrócę innym razem
; ssget daje nam jeszcze znacznie większe możliwości.
; i tak dla przykładu, jeśli chcemy wybrac bloki, Które leżą na warstwach np Warstwa1, Warstwa2, Warstwa3,
; ale już pominąć te, które są na warswach Warstwa, WarstwaA, WarstwaB, możeby posłużyć się następującą
; konstrukcją
(setq Wybrane(ssget "x" '((0 . "INSERT")(8 . "Layer#"))))
;Daje nam to możliwość pracy na wyrażeniach regularnych. Możemy znakiem * zastąpić dowolny ciąg znaków,
; znakiem # jedną liczbę, @ zastępuje dowolną literę, By poznać więcej możliwości wyrażeń regularych
; zapraszam do zapoznania z dokumentacją funkcji (wcmatch)
; Ostatnia funkcja, którą chciałbym przedstawić w tym przykładzie to sssetfirst. funkcja ta zaznacza
; listę elementów,
(sssetfirst wybrane wybrane)
;Temat zbiorów wskazań jest bardzo obszerny i w przyszłości z pewnością do niego wrócimy, dziś tylko
; zasygnalizowanie kilku podstawowych zastosowań.

 

Wykonanie w ZWCAD 2023

zbior wskazan