Strona 1 z 1

błąd lselsetp nil

PostNapisane: lip 05, 2022 17:35
przez jb71
Dzień dobry
Dzięki dobrodziejstwom tego forum popełniłem taki oto kod: (lisp w załaczeniu).
Problem w tym, że ja pracuję w Bricscadzie i u mnie kod działa poprawnie, co ważne pomaga. Niestety migracja do Autocada z tym lispem nie pozwala na jego użycie, bo ACAD wyrzuca błąd "lselsetp nil". Domyślam się, na podstawie postów oczywiście, że błąd jest związany z poleceniem ssget. Czy ktoś może mi pomóc?

Pozdrawiam jb71

Re: błąd lselsetp nil

PostNapisane: lip 05, 2022 21:43
przez andkal
Jeżeli chodziło o usunięcie polilini którą sie narysowało to można tak:
(entdel obj1)

Re: błąd lselsetp nil

PostNapisane: lip 06, 2022 06:42
przez jb71
Dzień dobry

Nie do końca chodzi o usunięcie linii, wręcz przeciwnie. W Bricscadzie (BC) jest jeden krok, który powoduje usunięcie linii i dlatego powtarzam polecenie narysuj plinię pomiędzy pkt1 i pkt2. Z tym się pogodziłem.
Opiszę jak to działa u mnie.
Wstawiam pkt1 i pkt2, lisp kreśli linię. Pod tą linią znajdują się inne polilinie (zwane dalej modułami), które powinny być przez tę linię zaznaczone, a program sprytnie podaje mi ilość tych modułów. Nie udało mi się zmusić programu do automatycznego zaznaczenia tej linii tuż po narysowaniu, więc zaznaczam ją ręcznie. W BC ta linia jest usuwana, nie wiem dlaczego, ale pod koniec ponownie ją kreślę. Później program jeszcze wyznacza punkt lekko powyżej środka tej linii, aby można było wpisać etykietę podawaną z palca. Wstawia także w pkt 1 i pkt2 odpowiednie bloki.
W ACADzie program przerywa komunikatem o błędzie po ręcznym wyborze linii. Uważam, że w miarę poprawne działanie tego lispa w BC jest dziełem przypadku, niemniej cytując klasyka, "jeżeli coś wygląda głupio, ale działa to nie jest głupie"
Mam nadzieję, że udało mi się precyzyjnie opisać problem.

Gdyby ktoś, coś ... mógł pomóc...
Dziękuję
pzdr jb71

Re: błąd lselsetp nil

PostNapisane: lip 06, 2022 19:26
przez andkal
Żeby wybrać element i ustawić jako zmienną możesz użyć
(command "_pline" pt1 pt2 "" )(setq obj1 (entlast)).
To zapisze go pod zmienną obj1 zaraz po narysowaniu. Nie trzeba tego obiektu wybierać ręcznie.

Ale zasadniczo program nie działa bo (ssget "_CP" lst1) potrzebuje koordynatów wieloboku wewnątrz którego wybierze obiekty. A jak polilinia ma tylko jeden bok od punktu pt1 do pt2 to program żadnych obiektów nie wybierze i wywali błąd.