Ilisp-Programmierung

Hallo ihr alle.

 

Ich möchte ein Makro aus einer meiner CAD/CAM-Software ändern.

Diese Software funktioniert in ilisp. Ich kenne dieses Programm überhaupt nicht....

 

Vereinfacht ausgedrückt kopiert dieses Makro Excel-Spalten und wandelt sie in der Schneidesoftware in Rechtecke um. (AutoCAD-Typ)

 

Das Problem ist, dass das Makro rückwärts gelesen wird. Wenn ich meine Rechteckliste habe, ist das erste das letzte auf der Liste usw.

 

Hier ist der Makroanhang, wenn jemand weiß, wie man das ändert, wäre es einfach =)

 

Vielen Dank!

 


import.lsp

Hier ist die Datei im Text für diejenigen, die sie nicht öffnen können.

 

(SETQ txt (CLIP-GET))
(SETQ YGAP 100)
(IF (NOT txt) (QUIT "*Abbrechen*"))
(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 (READ txt))
(SETQ basep (LISTE 0 0))
(FOREACH s txtlist
  (SETQ ymax 0)
    (SETQ x (CAR s) y (CADR s))
    (WENN (> y ymax) (SETQ ymax y))
    (CAD-RECTANGLE basep (LIST (+ (CAR basep) x) (+ (CADR basep) y)) 7)
  (SETQ basep (LIST 0 (+ (CADR basep) ymax YGAP)))
)
(NEU ZEICHNEN)

 

 

1 „Gefällt mir“

Hallo, würde da nicht ein kleiner Code fehlen? 

Mit diesem Code verfüge ich über ein funktionales Makro, das Excel im Rechteck dxf exportiert

 

Warum, was wird Ihnen fehlen?

 

Das Makro funktioniert folgendermaßen:

 

Ich gebe meine Länge und Breite der Teile in Excel in 2 Spalten ein.

Spalte A Länge, Spalte B Breite.

Dann mache ich eine "Kopie" der Liste und indem ich auf mein Makro klicke, fügt es alles ein, indem es die Daten in Dimensionen in mm umwandelt

1 „Gefällt mir“

Wenn Sie den Bereich in XL auswählen, beginnen Sie klassischerweise mit der Zelle oben links und enden unten rechts. Was passiert, wenn Sie von unten rechts nach oben links oder von unten links nach oben rechts vorgehen (das Ziel besteht darin, die Auswahl oben zu beenden)?

Durch Zufall habe ich eine Info zu dieser Sprache gefunden: http://igems.se/pdf/English-Ilisp.pdf

Auf Seite 23 finden Sie den PRINC-Befehl für die Erklärung von \t, \n und \r.

Danke Stef, ich hatte diese Hilfedatei bereits heruntergeladen.

Aber ich verstand nichts...

Ich habe es übersetzt und gedruckt. Ich werde es heute Abend mit einem ausgeruhten Kopf lesen =)

 

Ich halte euch natürlich auf dem Laufenden =)

Kennen Sie Lisp (Sprache, die zu Beginn für Autocad-Makros verwendet wird)

Ich habe ein paar Kommentare hinzugefügt

(SETQ txt (CLIP-GET)); Wir rufen den Inhalt der Zwischenablage ab

(SETQ YGAP 100); Wir initialisieren

(IF (NOT txt) (QUIT "*Abbrechen*")) ; Wir prüfen, ob der Inhalt nicht leer ist
(SETQ txt (STRREPLACE txt "\t" " ")); Ersetzen Sie das Spaltentrennzeichen (Tabulator) durch ein Leerzeichen
(SETQ txt (STRREPLACE txt "\n" ")(")) ; Die Änderung der Zeile wird durch ein )(
(SETQ txt (STRREPLACE txt "\r" "")) ; Ich weiß nicht, was return ist (in dem, was aus der Zwischenablage abgerufen wird
(SETQ txt(STRREPLACE txt "," ".")) ; Wir ersetzen das , durch .


(SETQ txt (STRCAT "((" (SUBSTR txt 1 (1- (STRLEN txt))) "))")) ; Wir vervollständigen es, um eine (am Anfang und eine) am Ende zu haben

(SETQ txtlist (READ txt)); Die Zeichenkette wird in eine Form umgewandelt, die von der Sprache verstanden werden kann

(SETQ-Basis (LISTE 0 0)); Wir initialisieren

(FOREACH s txtlist
  (SETQ ymax 0)
    (SETQ x (CAR s) y (CADR s))
    (WENN (> y ymax) (SETQ ymax y))
    (CAD-RECTANGLE basep (LIST (+ (CAR basep) x) (+ (CADR basep) y)) 7)
  (SETQ basep (LIST 0 (+ (CADR basep) ymax YGAP)))
)
(NEU ZEICHNEN)

Das für Lisp charakteristische "list"-System bedeutet, dass wir durch Hinzufügen der Paare () direkt die Paare "s" der Koordinaten abrufen, die selbst Listen sind.

Mit CAR und CADR können die Unterteile des Koordinatenpaares extrahiert werden. Zu Ihrer Information: Wir können das a und d kombinieren, um ein bestimmtes Element aus einer Liste mit vielen Elementen zu extrahieren (typischerweise das Ergebnis des Befehls "list", der auf ein Element oder eine Familie von Elementen angewendet wird (in diesem Fall haben wir eine Liste von Listen, und es kann einen langen Weg gehen).

Ich weiß nicht, warum es einen Test auf ymax gibt, noch wofür basep und YGAP sind