_

Mój pierwszy Lisp. Pomożecie?

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

Mój pierwszy Lisp. Pomożecie?

Postprzez koral224 » sty 10, 2017 22:06

Próbuję stworzyć lispa który łączyłby kilka linii/polilinii w jedną polilinię. W AutoCADzie da się to zrobić za pomocą funkcji "połącz", jednak w GstarCADzie, którego używam funkcja ta działa nieco inaczej i stąd mój problem. Swojego lispa stworzyłem w taki sposób aby za pomocą funkcji "command" kolejno:

-wywoływał polecenie "_pedit"
-w odpowiedzi na pytanie CADa "Wybierz polilinię lub [Wiele]" odpowiadał "_multi"
-wskazywał CADowi wcześniej zdefiniowany zbiór o nazwie "zbior"
-w odpowiedzi na pytanie CADa "Przekształcić linie, łuki i splajny w polilinie [Tak Nie]" odpowiadał "_yes"
-w odpowiedzi na pytanie CADa "Podaj opcję" odpowiadał "_join"
-w odpowiedzi na pytanie CADa "Podaj długość połączenia" odpowiadał "0.0"

A oto jak mój lisp wygląda:
Kod: Zaznacz cały
(defun c:dd ()
  (setq zbior (ssget))
  (command "_pedit" "_multi" zbior "" "_yes" "_join" "0" "")
  (princ)
)


Wszystko ładnie działa, jednak problem pojawia się w momencie gdy do połączenia wybieram same polilinie. CAD pomija wtedy pytanie "Przekształcić linie, łuki i splajny w polilinie [Tak Nie]" i przechodzi do "Podaj opcję", na które lisp odpowiada mu "_yes". Pojawia się wtedy błąd o treści "Nieprawidłowe opcje słów kluczowych. ; błąd: Funkcję anulowano". Chciałbym poprosić bardziej doświadczonych użytkowników o pomoc. Czy da się tak zaprogramować lispa aby wykonywał różne instrukcje w zależności od tego czy w zbiorze "zbior" znajdują się same polilinie, bądź odpowiednio reagował na napotkany błąd? A może rozwiązanie jest jeszcze inne? W miarę możliwości, oprócz rozwiązania prosiłbym o wytłumaczenie na czym ono polega.

Z góry dziękuję za pomoc :)
koral224
 
Posty: 6
Dołączył(a): lis 10, 2016 19:52

Re: Mój pierwszy Lisp. Pomożecie?

Postprzez kojacek » sty 10, 2017 22:17

koral224 napisał(a):Próbuję stworzyć lispa który łączyłby kilka linii/polilinii w jedną polilinię. W AutoCADzie da się to zrobić za pomocą funkcji "połącz", jednak w GstarCADzie, którego używam funkcja ta działa nieco inaczej i stąd mój problem. Swojego lispa stworzyłem w taki sposób aby za pomocą funkcji "command" kolejno:

-wywoływał polecenie "_pedit"
-w odpowiedzi na pytanie CADa "Wybierz polilinię lub [Wiele]" odpowiadał "_multi"
-wskazywał CADowi wcześniej zdefiniowany zbiór o nazwie "zbior"
-w odpowiedzi na pytanie CADa "Przekształcić linie, łuki i splajny w polilinie [Tak Nie]" odpowiadał "_yes"
-w odpowiedzi na pytanie CADa "Podaj opcję" odpowiadał "_join"
-w odpowiedzi na pytanie CADa "Podaj długość połączenia" odpowiadał "0.0"

A oto jak mój lisp wygląda:
Kod: Zaznacz cały
(defun c:dd ()
  (setq zbior (ssget))
  (command "_pedit" "_multi" zbior "" "_yes" "_join" "0" "")
  (princ)
)


Wszystko ładnie działa, jednak problem pojawia się w momencie gdy do połączenia wybieram same polilinie. CAD pomija wtedy pytanie "Przekształcić linie, łuki i splajny w polilinie [Tak Nie]" i przechodzi do "Podaj opcję", na które lisp odpowiada mu "_yes". Pojawia się wtedy błąd o treści "Nieprawidłowe opcje słów kluczowych. ; błąd: Funkcję anulowano". Chciałbym poprosić bardziej doświadczonych użytkowników o pomoc. Czy da się tak zaprogramować lispa aby wykonywał różne instrukcje w zależności od tego czy w zbiorze "zbior" znajdują się same polilinie, bądź odpowiednio reagował na napotkany błąd? A może rozwiązanie jest jeszcze inne? W miarę możliwości, oprócz rozwiązania prosiłbym o wytłumaczenie na czym ono polega.

Z góry dziękuję za pomoc :)


GSTAR'a nie znam, ale parę nawiasów w LISP'ie już postawiłem...
W AutoCAD jest zmienna o nazwie PEDITACCEPT - gdy jej wartość =1, przekształca wybrane obiekty w polilinie bez monitu. Sprawdź, może w Gstar też tak jest? Inna sprawa, poczytaj gdzieś (help / net) o ssget, aby zawęzić zbiór wskazań.
Avatar użytkownika
kojacek
 
Posty: 5184
Dołączył(a): paź 03, 2005 20:17

Re: Mój pierwszy Lisp. Pomożecie?

Postprzez koral224 » sty 10, 2017 22:33

Pomogło! GstarCAD też posiada taką zmienną. Generalnie twórcy GstarCADa, że tak powiem baaaardzo wzorowali się na AutoCADzie i różnice pomiędzy tymi programami są naprawdę subtelne. Wielkie dzięki za pomoc :D
koral224
 
Posty: 6
Dołączył(a): lis 10, 2016 19:52

Re: Mój pierwszy Lisp. Pomożecie?

Postprzez Tyomex » sty 11, 2017 20:22

Niestety te "subtelne różnice" przy dłuższym kontakcie okazują się kolosalne :D
Avatar użytkownika
Tyomex
 
Posty: 359
Dołączył(a): paź 09, 2014 15:06

Re: Mój pierwszy Lisp. Pomożecie?

Postprzez obmiarowiec » sty 30, 2017 19:02

Tyomex napisał(a):Niestety te "subtelne różnice" przy dłuższym kontakcie okazują się kolosalne :D


Jedyną kolosalną różnicą, jaką widzi większość użytkowników klonów, to jest kolosalna różnica w cenie AutoCADa. Nie znam ani jednego biznesu związanego z projektowaniem czy też korzystającego z rysunków w DWG, który by właśnie nie kupował klonów, albo nie myślał o klonach jako następnych zakupach. A siedzę w branży ponad 20 lat, więc znam ich dużo. Zniesienie licencji na rzecz "abonamentu" to był strzał w stopę AutoDesku. Jak to mówią: chytry dwa razy traci.
obmiarowiec
 
Posty: 7
Dołączył(a): lis 29, 2016 19:45


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników