Podczas pracy natknąłem się na zapytanie techniczne związane z programem AutoCAD – dotyczyło przeniesienia rożnych linii z warstwy 0 na inne warstwy. Czynność miała być wykonana automatycznie i kryterium doboru warstwy był kolor linii.
Cały rysunek miał być stworzony na warstwie 0, a kolor linii stworzonych na rysunku był każdorazowo ręcznie zmieniany na inne kolory (żółty, czerwony i niebieski). Na początek postanowiłem sprawdzić wartości RGB narzuconych kolorów. Wystarczyło rozwinąć menu przy wybranym kolorze i wybrać opcję Więcej kolorów… .
Utworzyłem na rysunku 3 dodatkowe warstwy (czerwone, niebieskie i żółte), a następnie z ciekawości postanowiłem sprawdzić jak z zadaniem poradzi sobie sztuczna inteligencja i skorzystałem z usług popularnego chatbota.
„AutoCAD. Na warstwie 0 znajdują się linie o różnych kolorach. Utworzono warstwę Czerwone (255,0,0), Niebieske (0,0,255) i Żółte (255,255,0). Napisz skrypt, który sprawdza kolor linii i przenosi ją na taką warstwę w jakim jest kolorze.”
(defun c:PrzeniesLinieNaWarstwy ()
(setq warstwa-0 (tblobjname „LAYER” „0”)) ; Wybierz warstwę 0
(setq wszystkie-linie (ssget „X” (list (cons 8 „0”) (cons 0 „LINE”)))) ; Pobierz wszystkie linie na warstwie 0
(if wszystkie-linie
(progn
(repeat (setq i (sslength wszystkie-linie)) ; Powtarzaj dla każdej linii w zestawie
(setq linia (ssname wszystkie-linie (setq i (1- i)))) ; Pobierz linię z zestawu
(setq kolor (cdr (assoc 62 (entget linia)))) ; Pobierz kolor linii
;; Sprawdź kolor i przenieś linię na odpowiednią warstwę
(cond
((= kolor 1) (entmod (subst (cons 8 „Czerwone”) (assoc 8 (entget linia)) (entget linia)))) ; Czerwone (kolor 1 = 255,0,0)
((= kolor 5) (entmod (subst (cons 8 „Niebieskie”) (assoc 8 (entget linia)) (entget linia)))) ; Niebieskie (kolor 5 = 0,0,255)
((= kolor 2) (entmod (subst (cons 8 „Żółte”) (assoc 8 (entget linia)) (entget linia)))) ; Żółte (kolor 2 = 255,255,0)
)
)
(princ „\nLinie przeniesione na odpowiednie warstwy.”)
)
(princ „\nBrak linii na warstwie 0.”)
)
(princ)
)
Uwaga:
Skrypt zakłada, że warstwy „Czerwone”, „Niebieskie” i „Żółte” już istnieją.
Skrypt AutoLISP najlepiej zapisać w pliku z rozszerzeniem .lsp.
W programie AutoCAD przeszedłem do zakładki Zarządzaj, w sekcji Aplikacje wybrałem Wczytaj aplikację i zimportowałem wcześniej utworzony plik z rozszerzeniem *.lsp .
Chatbot nazwał narzędzie „PRZENIESLINIENAWARSTWY”. Po zaimportowaniu pliku lsp wpisując wspomnianą nazwę ukazuje się nowe narzędzie:
Chatbot poradził sobie z zadaniem bardzo dobrze, każda z linii została przeniesiona na właściwą warstwę. Co prawda we właściwościach linii kolor jest nadal wymuszony, ale nie zdefiniowałem w zadaniu aby parametr ten zmienił się na JakWarstwa. Innym rozwiązaniem byłoby skorzystanie z funkcji szybki wybór, zaznaczenie całego rysunku i wybór właściwości – kolor. Wtedy AutoCAD automatycznie zaznaczy np. wyłącznie czerwone obiekty.
Więcej informacji o funkcji szybki wybór znajdziesz w naszym inny artykule:
https://www.pccpolska.pl/funkcja-szybki-wybor-w-programie-autocad/
Autor: Jakub Piwowar | PCC Polska