<lisp> Methodenaufruf mit Parameter

Endless Storm

Commander
Registriert
Dez. 2008
Beiträge
2.158
Hallo zusammen,

ich würde gern für AutoCAD etwas mit LISP programmieren. Durch Vorkenntnisse in Java ist eigentlich Wissen um Methodenaufrufe, Parameter etc vorhanden.
Jedoch verzweifel ich etwas an der Sprache LISP, welches ich nutzen wollte um Kataster-Exporte aus Smallworld in ein Kundenkonformes Format zu bringen.
Sprich: Layer auf andere schieben, einige Blöcke ersetzen, Textstile, Höhen, Farben, etc entsprechend anpassen auf fest definierte Werte.

Fangen wir klein an, Layer verschieben: [den Namen zum starten erstmal ignorieren]

dieser Code funktioniert:
[Entschuldigung für das falsche Syntax-Highlighting]
Code:
(defun c:SetCLayer ()
	(changeAll)
  (princ)
)
  
(defun changeAll ()
	(command "_.chprop" 
	(ssget "_x" '((0 . "TEXT")(8 . "1104_Gr*nland_(Wald+Baum)")))
	"" "LA" "2801_Hinweistext_3.5" "")

	(command "_.chprop" 
	(ssget "_x" '((0 . "TEXT")(8 . "2813_Bema*ungstext")))
	"" "LA" "1113_Text_Topographie" "")

	;weitere Layer kämen hier hin
	(princ)
)

Wenn ich mir nun überlege, das ganze in eine eigene Methode zu packen und über Paramter anzusprechen, wie man es z.B. in Java auch macht, klappt das ganze nicht mehr...

Code:
(defun c:SetCLayer ()
	(setq l1104 "1104_Gr*nland_(Wald+Baum)")      ;Umlaute funktionieren nicht
	(setq l2801 "2801_Hinweistext_3*5")

;keiner der drei Aufrufe funktioniert...
	;(changeLayer l1104 l2801)
	;(changeLayer "*1104*" "*2801*")
	(changeLayer "1104_Gr*nland_(Wald+Baum)" "2801_Hinweistext_3*5")
  (princ)
)

(defun changeLayer (vonLayer nachLayer)
  (if (tblsearch "layer" nachLayer) 
	(command "_.chprop" 
		(ssget "_x" '((0 . "TEXT")(8 . vonLayer)))
		"" "LA" nachLayer "")
  )
(princ)
)

Eine Übergabe der Parameter funktioniert leider nicht... es kommt ständig die Fehlermeldung: Objekte wählen: ; Fehler: Fehlerhafter SSGET-Listenwert oder es kommt gar keine Meldung...

Wo ist nur mein Denkfehler??
 
Wenn dir jemand die Worte "Sag", "deinen" und "Namen" entgegenschleudert, was antwortest du?

Er könnte meinen "Sag deinen Namen!" oder "Sag: 'deinen Namen'!". Wenn ich vermuten würde, das wäre eine Hausaufgabe, würde ich es dabei belassen.

Der Ausdruck '((0 . "TEXT")(8 . vonLayer)) ist eine Kurzschreibweise von (quote ((0 . "TEXT")(8 . vonLayer))). Wenn du das Symbol vonLayer zu seinem Wert aufgelöst haben willst, musst du das schon richtig machen. Siehe auch: cons, car, cdr, etcpp.

€: Und allgemein an dich und überhaupt alle: Lies meine Sig!
 
Zuletzt bearbeitet:
Zurück
Oben