Programowanie w Ilisp

Cze wszystkim.

 

Chcę zmodyfikować makro z jednego z moich programów CAD/CAM.

To oprogramowanie działa w ilisp. W ogóle nie znam tego programu....

 

Mówiąc prościej, to makro kopiuje kolumny Excela i przekształca je w prostokąty w oprogramowaniu do cięcia. (Typ AutoCAD)

 

Problem polega na tym, że makro jest odczytywane wstecz. Kiedy mam swoją listę prostokątów, pierwsza z nich jest ostatnią na liście itd.

 

Oto załącznik makro, jeśli ktoś wie, jak to zmodyfikować, to byłoby simpa =)

 

Dziękuję!

 


import.lsp powiedział:

Oto plik w tekście dla tych, którzy nie mogą go otworzyć.

 

(SETQ txt (CLIP-GET))
(SETQ YGAP 100)
(IF (NOT txt) (QUIT "*Anuluj*"))
(SETQ txt (STRREPLACE txt "\t" " "))
(SETQ txt (STRREPLACE txt "\n" ")("))
(SETQ txt (STRREPLACE txt "\r" ""))
(SETQ txt (STRREPLACE txt "," "."))
(SETQ txt (STRCAT "((" (SUBSTR txt 1 (1- (STRLEN txt))) "))"))
(SETQ txtlist (CZYTAJ txt))
(SETQ basep (LIST 0 0))
(FOREACH s txtlist
  (SETQ ymax 0)
    (SETQ x (CAR s) y (CADR s))
    (IF (> y ymax) (SETQ ymax y))
    (CAD-PROSTOKĄT basep (LISTA (+ (CAR basep) x) (+ (CADR basep) y)) 7)
  (SETQ basep (LISTA 0 (+ (CADR basep) ymax YGAP)))
)
(PRZERYSUJ)

 

 

1 polubienie

Witam, czy nie brakuje jakiegoś małego kodu? 

Dzięki temu kodowi mam funkcjonalne makro, które eksportuje excela w prostokącie dxf

 

Dlaczego, czego Ci zabraknie?

 

Makro działa w następujący sposób:

 

Wpisuję swoją długość i szerokość części w Excelu w 2 kolumnach.

Długość kolumny A, szerokość kolumny B.

Następnie robię "kopię" listy, a następnie klikając na moje makro wklejam wszystko przekształcając dane na wymiary w mm

1 polubienie

Po wybraniu obszaru w rozmiarze XL, klasycznie, zaczynasz od komórki w lewym górnym rogu i kończysz w prawym dolnym rogu. Co się stanie, jeśli zrobisz to od dołu po prawej do lewego górnego rogu lub od lewego dolnego rogu do prawego górnego rogu (celem jest zakończenie zaznaczenia na górze)?

Przypadkiem znalazłem kilka informacji na temat tego języka: http://igems.se/pdf/English-Ilisp.pdf

Na stronie 23 znajduje się wyjaśnienie poleceń PRINC, aby zapoznać się z \t, \n i \r.

Dzięki Stef, już pobrałem ten plik pomocy.

Ale nic nie rozumiałem...

Przetłumaczyłem ją i wydrukowałem. Przeczytam ją dziś wieczorem z wypoczętą głową =)

 

Oczywiście będę Cię informować na bieżąco =)

Czy znasz Lisp (język używany dla makr Autocad na początku)

Dodałem kilka komentarzy

(SETQ txt (CLIP-GET)); Pobieramy zawartość schowka

(SETQ YGAP 100); Inicjalizujemy

(IF (NOT txt) (QUIT "*Anuluj*")) ; Sprawdzamy, czy zawartość nie jest pusta
(SETQ txt (STRREPLACE txt "\t" " ")); Zastąp separator kolumn (tabulator) spacją
(SETQ txt (STRREPLACE txt "\n" ")(")) ; zmiana linii zostaje zastąpiona przez )(
(SETQ txt (STRREPLACE txt "\r" "")) ; Nie wiem, co to jest zwrot (w tym, co jest pobierane ze schowka
(SETQ txt(STRREPLACE txt "," ".")) ; Zamieniamy , na .


(SETQ txt (STRCAT "((" (SUBSTR txt 1 (1- (STRLEN txt))) "))")) ; uzupełniamy, aby mieć jeden (na początku i jeden) na końcu

(SETQ txtlist (READ txt)); Ciąg znaków jest przekształcany w formę, która może być zrozumiała dla języka

(SETQ basep (LIST 0 0)); Inicjalizujemy

(FOREACH s txtlist
  (SETQ ymax 0)
    (SETQ x (CAR s) y (CADR s))
    (IF (> y ymax) (SETQ ymax y))
    (CAD-PROSTOKĄT basep (LISTA (+ (CAR basep) x) (+ (CADR basep) y)) 7)
  (SETQ basep (LISTA 0 (+ (CADR basep) ymax YGAP)))
)
(PRZERYSUJ)

System "list", charakterystyczny dla Lispu, oznacza, że dodając pary (), bezpośrednio pobieramy pary "s" współrzędnych, które same w sobie są listami.

CAR i CADR umożliwiają wyodrębnienie części podrzędnych pary współrzędnych. FYI możemy połączyć a i d, aby wyodrębnić określony element z listy z wieloma elementami (zazwyczaj jest to wynik polecenia "list" zastosowanego do elementu lub rodziny elementów (w takim przypadku mamy listę list i może to przejść długą drogę).

Nie wiem, dlaczego jest test na ymax, ani do czego służą basep i YGAP