| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Objektfang + Verschieben - Lisp-Programmierung (1625 mal gelesen)
|
Micha2107 Mitglied Stuttgart
Beiträge: 2 Registriert: 15.02.2007
|
erstellt am: 15. Feb. 2007 17:42 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hab folgendes Problem: Ich habe diese Aufgabe bekommen und soll sie in LISP programmieren: Objektfang für diese Aktion auf Zentrum, Endpunkt (mit,end) einstellen. Ein Objekt selektieren und es an P1 verschieben. Dazu sollen Sie den Selektierungs-Punkt als Basispunkt der Verschiebung vorgeben. mein bisheriger Programmtext: Code: (defun c:yy (/ pline1 pline2) (setvar "osmode" 5) (if (setq pline1 (car (entsel "\nPolylinie wählen:"))) (progn (command "_.copy" pline1 "" '(0 0 0) '(0 0 0)) (setq pline2 (entlast)) (command "_.move" pline2 "" pause ) ) ) (princ) )
aber anscheinden ist das was ich programmiert habe, nicht das Gewünschte, aber nur leider weiß ich nicht, wo der Fehler liegt. Wäre nett, wenn mir jemand weiterhelfen könnte. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 15. Feb. 2007 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für Micha2107
Hallo Micha, also so wie ich die Aufgabe verstehe würde ich das folgendermaßen machen: Code:
(defun c:yy (/ pline1) (setvar "osmode" 5) (if (setq pline1 (entsel "\nPolylinie wählen:")) (command "_.move" (car pline1) "" (cadr pline1) pause) ) (princ) )
Die Funktion "entsel" gibt Dir eine Liste zurück, das erste Element ist der Objektname, das zweite Element ist die Pickkoordinate. Über "car" und "cadr" kommst Du dann an diese Elemente ran. Und an P1 verschieben denke ich mal, es handelt sich um einen frei wählbaren Punkt, deswegen das "pause" im Command-Befehl. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 15. Feb. 2007 18:12 <-- editieren / zitieren --> Unities abgeben: Nur für Micha2107
so vielleicht ? (defun c:x (/ mem_osmode ent_name p) (setq mem_osmode (getvar "osmode")) (setvar "osmode" 5) (setq ent_name (car (nentselp (setq p (getpoint))))) (command "_.move" ent_name "" p pause) (setvar "osmode" mem_osmode) (princ) ) Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha2107 Mitglied Stuttgart
Beiträge: 2 Registriert: 15.02.2007
|
erstellt am: 15. Feb. 2007 18:13 <-- editieren / zitieren --> Unities abgeben:
@Rabbit007: Damit hatte ich am Anfang auch Probleme, aber es ist eben eine "vom Computer generierte" Aufgabe @joern bosse: dein Programmtext ist mir einleuchtend und ich denke so werde ich es dann auch machen, nur was mache ich mit dem "Endpunkt (mit end)" ??? Weil "osmode 5" beinhaltet ja eigentlich den Objektfang für zentrum und endpunkt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 15. Feb. 2007 18:18 <-- editieren / zitieren --> Unities abgeben: Nur für Micha2107
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 15. Feb. 2007 18:22 <-- editieren / zitieren --> Unities abgeben: Nur für Micha2107
Nochmal Hallo Micha, Du kannst das "end" aber auch direkt in den Command-Befehl einbauen, geht auch: Code:
(defun c:yy (/ pline1) (setvar "osmode" 5) (if (setq pline1 (entsel "\nPolylinie wählen:")) (command "_.move" (car pline1) "" (cadr pline1) "end" pause) ) (princ) )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
Ex-Mitglied | |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 15. Feb. 2007 20:00 <-- editieren / zitieren --> Unities abgeben: Nur für Micha2107
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Feb. 2007 20:45 <-- editieren / zitieren --> Unities abgeben: Nur für Micha2107
Zitat: Original erstellt von Rabbit 007: Äm Sorry doch nicht mehr Jörns Code !!! Da in der Aufgabe ja schließlich osmode vreädert werden muß und entsel keine Zentrum oder endpunke fängt wäre ich hierfür
Code: (defun c:yy (/ p1) (setvar "osmode" 5) (command "_.move" (setq p1 (getpoint)) "" p1))
... auf was soll denn _move angewandt werden ? Auf ne Koordinate ? .. nun ja... zurück zur (Haus)Aufgabe: man braucht Osmode gar nicht setzen sondern nur Jörns Code etwas abwandeln: (defun c:yy (/ OBJ) (if (setq OBJ (entsel "\nObjekt wählen:")) (command "_.move" (car OBJ) "" (cadr OBJ) "_end,_mid" pause) ) (princ) ) ... aber wenn die Aufgabe es unbedingt wünscht...(wer sich sowas immer ausdenkt ) wenn allerdings der ENTSEL-PKT auch ein END oder Mittelpunkt sein soll kann man ja noch ein (osnap (cadr OBJ)"_end,_mid") rumbasteln, erscheint mir aber sinnlos ... da von Pickboxgröße und gewähltem Objekt abhängig, aber als Randinfo..
@Theodor : Gute Frage !!! ... ich hoffe der Fragesteller lernt trotzdem was aus den Antworten.
------------------ - 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 |