Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Lisp Programmierung (ein Dorf in China?)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Lisp Programmierung (ein Dorf in China?) (1298 mal gelesen)
Obi-Wahn
Mitglied
Student


Sehen Sie sich das Profil von Obi-Wahn an!   Senden Sie eine Private Message an Obi-Wahn  Schreiben Sie einen Gästebucheintrag für Obi-Wahn

Beiträge: 31
Registriert: 30.07.2007

erstellt am: 30. Jul. 2007 16:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!

Ich lese schon lange dieses Forum, und es hat mir auch schon öfters geholfen. Da ich nun absolut keinen plan hab, melde ich mich auch mal zu wort.

Ich suche eine einfach verständliche anleitung zu lisp.
Kann auch ruhig in englisch sein.

PS.: Sollte es das falsche Forum sein, so bitte ich das zu entschuldigen, und den Thread in das richtige Forum zu verschieben.


Des weiteren hab ich vor, Menübuttons so zu gestalten, dass ich einfach draufklicke, und dass dann ein komplettes layout gezeichnet wird.
Jedoch wird das layout immer mist.

Der Befehl für den Button sieht so aus (nur n auszug):

Code:
^C^C_rectang;0,0;@1189,841;;_rectang;....

Das Semikolon wird ja als enter gewertet. Und da ich ein Standard layout mit rechtecken, und linien für faltmarken, ... zeichnen will, erschien mir das am sinnvollsten, da ich nicht eine extra lisp datei dazupacken muss.

Auch da würd ich mich über hilfe freuen.

Danke im voraus
Andreas

------------------
Garten ist eine Kunstnatur

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ex-Mitglied
Grebe
Mitglied



Sehen Sie sich das Profil von Grebe an!   Senden Sie eine Private Message an Grebe  Schreiben Sie einen Gästebucheintrag für Grebe

Beiträge: 536
Registriert: 16.12.2002

erstellt am: 31. Jul. 2007 09:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Obi-Wahn 10 Unities + Antwort hilfreich

Zu deinem Layout-Problem:
1. Was heisst "Layout wir nix" ? Sitzen die Linien nicht da wo sie sitzen sollten ? Könnte daran liegen, dass in den Optionen und Benutzereinstellungen die Priorität für Koordinateneingabe auf Objektfang steht. Dann könnte der Objektfang zuschlagen. Besser auf tastatureingabe umstellen.
2. Ein Diesel-Makro kann nur eine bestimmte Länge haben - evtl. stösst Du da an Grenzen. Dann besser ein Skript erstellen und das per Makro ausführen lassen.
3. Warum erstellst du nicht eine DWT, die Deinen Wünschen entspricht ?  Die kannst Du direkt in Acad zeichen und fügst sie dann als neues Layout ein ?
Mathias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Obi-Wahn
Mitglied
Student


Sehen Sie sich das Profil von Obi-Wahn an!   Senden Sie eine Private Message an Obi-Wahn  Schreiben Sie einen Gästebucheintrag für Obi-Wahn

Beiträge: 31
Registriert: 30.07.2007

P4m Single Core - 1.6 GHz
100 GB HDD
1 GB RAM
--------
AutoCAD Architectural Desktop 2007

erstellt am: 31. Jul. 2007 10:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@Rabbit: Thx, ich werd mir diesel mal anschauen.

@Grebe:
Zu 1: Ja, die Linien sind nicht da wo sie sein sollten (die rechtecke), jedoch werden die einzellinien für die Faltmarken garnicht gezeichnet.

Zu 2: Kann man lisps in eine Menüdatei einbinden, sodass beim laden der menüdatei die lisp extrahiert wird? Oder zumindest einen befehl/befehle ausführen, der die lisp dann läd?
Denn ich möchte das ganze möglichst "narrensicher" ausführen, da nicht jeder mit laden von menüdateien oder lisps klarkommt.

Zu 3: ich erstelle eine Menüdatei (CUI und MNU inkl. Grafik-dll) in der ich einige Tools zusammenfasse, die im CAD zwar vorhanden sind, jedoch nicht jeder gleich findet.
Die Menüdatei wird dann auf meiner HP veröffentlicht. Daher funktioniert das schonmal nicht, da jeder ein anderes layout hat. Weiters arbeite ich auch mal in einer komplett leeren Zeichnung ohne voreinstellungen oder brauche in einer zeichnung noch ein zusätzliches layout, und da wäre es einfacher einfach einen Button zu klicken, anstatt ein layout markieren, kopieren oder duplizieren und das überflüssige rauslöschen.
Abgesehen davon, hab ich nur A0 vorlagen eingestellt, weil ich die bis auf ausnahmen permanent benutze. Wenn ich jetzt aber z.b. ein A2 brauche, ist ein button praktisch.


Ich werd mal die Optionen checken, und schauen ob die einstellungen auf Objektfang stehen.

------------------
Garten ist eine Kunstnatur

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ex-Mitglied
Theodor Schoenwald
Ehrenmitglied



Sehen Sie sich das Profil von Theodor Schoenwald an!   Senden Sie eine Private Message an Theodor Schoenwald  Schreiben Sie einen Gästebucheintrag für Theodor Schoenwald

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 06. Aug. 2007 18:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Obi-Wahn 10 Unities + Antwort hilfreich

Hallo Andreas,

zu:

"...anleitung zu lisp..."

findest Du ab dem 2. August hier: http://www.hanser.de/buch.asp?isbn=978-3-446-41217-0&area=Computer

auch wenn Dein gezeigtes Problem kein direktes Lisp-Problem ist.

Gruß
Theodor

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Obi-Wahn
Mitglied
Student


Sehen Sie sich das Profil von Obi-Wahn an!   Senden Sie eine Private Message an Obi-Wahn  Schreiben Sie einen Gästebucheintrag für Obi-Wahn

Beiträge: 31
Registriert: 30.07.2007

P4m Single Core - 1.6 GHz
100 GB HDD
1 GB RAM
--------
AutoCAD Architectural Desktop 2007

erstellt am: 07. Sep. 2007 18:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@Rabbit: Danke, dein Code hat mir schon etwas geholfen...


Ich hab nun endlich die Zeit gefunden, mich meinem "Projekt" wieder zu widmen, und hab heute den Code für das A0 layout erstellt.

Code:
(setq OldOsmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "_rectang" '(0 0) '(1189 841))
(command "_rectang" '(20 10) '(1179 831))
(command "_line" '(0 594) '(20 594) "")
(command "_line" '(0 297) '(20 297) "")
(command "_line" '(210 10) '(210 0) "")
(command "_line" '(319.5 0) '(319.5 10) "")
(command "_line" '(429 0) '(429 10) "")
(command "_line" '(619 0) '(619 10) "")
(command "_line" '(809 0) '(809 10) "")
(command "_line" '(999 0) '(999 10) "")
(command "_line" '(1179 594) '(1189 594) "")
(command "_line" '(1179 297) '(1189 297) "")
(command "_line" '(210 841) '(210 831) "")
(command "_line" '(319.5 831) '(319.5 841) "")
(command "_line" '(619 831) '(619 841) "")
(command "_line" '(809 831) '(809 841) "")
(command "_line" '(999 831) '(999 841) "")
(command "_line" '(429 841) '(429 831) "")
(command "_line" '(0 68.5) '(10 68.5) "")
(command "_line" '(0 228.5) '(10 228.5) "")
(command "_line" '(0 148.5) '(20 148.5) "")
(command "_line" '(0 297) '(20 400.619) "")
(command "_line" '(103.699 831) '(105 841) "")
(command "_zoom" "g")
(setvar "OSMODE" OldOsmode)

ich hab ihn zwar mit mehr glück als verstand zusammengeschustert, aber nachdem ich hier das Lisp-Handbuch für R14 gefunden hab, versteh ich ihn sogar.... :)

However, ich will mich daran machen, nicht nur bei 0,0 das layout einzufügen, sondern eine abfrage nach den koordinaten starten, bei denen das teil eingefügt werden soll. Einfügepunkt währe dann die linke untere ecke des Layouts.

Weiters hab ich mich dazu durchgerungen, wenn alles fertig ist einen installer zu schreiben, und deswegen spiel ich eine extra .lsp dazu, in der alles steht.

Doch nun steh ich an. Ich frage mit der Zeile:

Code:
(setq EFGPT (getpoint "\nEinfügepunkt angeben <0,0>"))

Den einfügepunkt ab. Ich habs im CAD getestet, und da ist dann in der befehlszeile z.b. die ausgabe:

(10.56 120.45 0.0)

um die einzelnen werte jedes objekts des layouts hinzuzufügen, dachte ich daran, den string bei jedem leerzeichen zu teilen, die klammern zu entfernen und dann mit den koordinaten zu addieren.


Also meine Fragen:

Wie bekomm ich aber die koordinaten in einzeine variablen, und wie rechne ich dann mit denen?
Ich komm zwar mit einfachen Zahlen klar (+ 2 5 7) aber kann ich die variablen genauso handhaben?
Wie teile ich den string in die koordinaten auf?
und wie entferne ich die klammern aus dem string?

Danke
Andreas

PS.: Danke Theodor. Muss ich mir mal ansehen...

------------------
Garten ist eine Kunstnatur

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 07. Sep. 2007 18:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Obi-Wahn 10 Unities + Antwort hilfreich

getpoint liefert keinen String, sondern eine Liste zurück...
guck dir mal das an :
(setq P (getpoint "\nPunkt"))
(setq P2 '(10 30 40))
(mapcar '+ P P2)


ansonsten ... verschieb doch einfach das BKS entsprechend und setzt es nach deinem Programm zurück.. da du eh alles mit commands abdeckst..


------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Obi-Wahn
Mitglied
Student


Sehen Sie sich das Profil von Obi-Wahn an!   Senden Sie eine Private Message an Obi-Wahn  Schreiben Sie einen Gästebucheintrag für Obi-Wahn

Beiträge: 31
Registriert: 30.07.2007

erstellt am: 08. Sep. 2007 13:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


ow-lisp.lsp.txt

 
Achso. Danke. Ich hab jetzt die Lisp fertig, das einzige was mich dabei stört ist, dass, da ich zuerst den Objektfang ausschalte, nacher beim einschalten des Objektfangs der Variablenwert in der Befehlszeile steht.
(Einfügepunkt angeben <0,0>:175)

Das 175 soll entfernt werden, da es die benutzer verwirren könnte...
Kann man das nicht einfach nach nirgendwo umleiten, wie z.b. bei Batch?
(ping 127.0.0.1 > nul)

Ich hab mal die lisp als Anhang genommen, da der ganze code doch schon etwas länger ist...

konstruktive kritik ist übrigens herzlich wilkommen...

------------------
Garten ist eine Kunstnatur

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ex-Mitglied
Obi-Wahn
Mitglied
Student


Sehen Sie sich das Profil von Obi-Wahn an!   Senden Sie eine Private Message an Obi-Wahn  Schreiben Sie einen Gästebucheintrag für Obi-Wahn

Beiträge: 31
Registriert: 30.07.2007

erstellt am: 08. Sep. 2007 15:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Optimal. Danke.

Lieg ich richtig, dass die ausgabe des letzten befehls der funktion als bestätigung ausgegeben wird? Oder hat das einen anderen Grund, dass der Objektfangvraiablenwert erschienen ist?

------------------
Garten ist eine Kunstnatur

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ex-Mitglied
Obi-Wahn
Mitglied
Student


Sehen Sie sich das Profil von Obi-Wahn an!   Senden Sie eine Private Message an Obi-Wahn  Schreiben Sie einen Gästebucheintrag für Obi-Wahn

Beiträge: 31
Registriert: 30.07.2007

erstellt am: 10. Sep. 2007 11:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


test.lsp.txt

 
Ok. Ich hab mir den teil von defun durchgelesen, aber bin soweit wie vorher.
AKA: Ich hab keinen plan von freigeben der Variablen.

Aber anderes Thema:
Um den Sourcecode zu kürzen, hab ich mir gedacht, ich definier eine funktionsvariable und überprüfe, welche variable weitergegeben wurde.

Doch anscheinend ist es so, dass je einfacher der gedanke wird, desdo komplizierter wird die ausführung...

Ich hab den code mal testweise mit einem rechteck bestückt und hochgeladen, aber beim funktionsaufruf (egal ob mit A0 A1 A2 oder A3) springt er bis zum ende durch, und beendet das programm.

Der aufruf erfolgt testweise in der Befehlszeile per "(LAY A0)"

Könnte mir vll. jemand nen tip geben, wo ich am schlauch steh?

Danke
Andreas

------------------
Garten ist eine Kunstnatur

[Diese Nachricht wurde von Obi-Wahn am 10. Sep. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 10. Sep. 2007 11:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Obi-Wahn 10 Unities + Antwort hilfreich

Dein veschachteltetes if ist ja    

nutze doch die Funktion cond dafür. Und ganz ehrlich: die Rahmen würd ich einmal zeichen und die dwg dann per DC als Block in die aktuelle Zeichnung ziehen.

------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 10. Sep. 2007 12:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Obi-Wahn 10 Unities + Antwort hilfreich

Ich habe deinen Code mal ein wenig gekürzt. Du kannst sehen, dass es noch andere Möglichkeiten gibt, als irgendwelche Unterscheidungen.
Ich habe einfach eine Format-Liste definiert, und durchsuche die dann eben nach dem vom Benutzer eingegebenen Format. Wird's gefunden - alles gut - und wenn nicht gibts eine Meldung.


Code:

(defun c:LAY ( / antw EFGPT FMT FMT-LISTE)
  (initget "A0 A1 A2 A3 A4")
  (setq FMT-LISTE '(("A4" 210.0 297.0)
    ("A3" 420.0 297.0)
    ("A2" 594.0 420.0)
    ("A1" 840.0 594.0)
    ("A0" 1189.0 840.0)
    )
antw (getkword "\nFormat [A0/A1/A2/A3/A4] <A4>: ")
FMT (if antw antw "A4")
antw (getpoint "\nEinfügepunkt angeben: ")
EFGPT (if antw antw '(0.0 0.0 0.0))
)
  (if (assoc FMT FMT-LISTE)
    (command "_rectang" EFGPT (mapcar '+ EFGPT (cdr(assoc FMT FMT-LISTE))))
    (alert "Kein gültiges Papierformat!")
    )
  (princ)
  )

Bei Fragen ...

Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz