Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Eingabe eines Punktes per Lisp

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:  Eingabe eines Punktes per Lisp (1840 mal gelesen)
WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 14. Jan. 2004 09:07    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

Halllo Lispler,

ACad Mechanical 2004;

befinde mich gerade in den Vorbereitungen einer Datenmigration. Da das Migrationstool von AutoDesk für uns nicht brauchbar ist (lange Geschichte ...), möchte ich die Dateien per Lisp bzw. Skript migrieren (Aufruf einiger Befehle und am Ende Speichern).

Folgendes Problem:
Ich rufe den Befehl AMCVTFRAME12 auf. ACad erwartet jetzt, dass ein "Rahmenblock" ausgewählt wird, und zwar per Mausklick.
Kann ich diesem Befehl irgendwie statt per Mausklick mein Objekt per Lisp mitgeben? Indem  ich z.B. den Objektnamen mit SSGET etc. suche?

Ich hab's mit SSGET schon probiert, wenn ich aber dann die Variable (die den Objektnamen enthält, z.B: <Objektname: 7ed35b80> ) in die Eingabeaufforderung eingebe, erhalte ich folgende Meldung: "*Ungültige Auswahl*. Erwartet einen Punkt oder Letztes".

Mit bestem Dank im Voraus,
WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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: 14. Jan. 2004 09:13    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 WolfgangE 10 Unities + Antwort hilfreich

Hallo Wolfgang,

dann versuche doch mal den Rahmen als Auswahlsatz an die Funktion zu geben, oder in Form einer Liste, wie diese von (entsel) zurück gegeben wird.
Vielleicht funzt das ja. Wenn nicht, ich habe im Moment kein Mechanical zur Hand, ich kanns dann erst heute abend testen.

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

marvin101010
Mitglied
ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)


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

Beiträge: 562
Registriert: 22.01.2003

Pentium 4
Windows XP
Autocad 2002
Autocad 2002LT + Extender
ADT 3.3
ArchiCAD

erstellt am: 14. Jan. 2004 09:13    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 WolfgangE 10 Unities + Antwort hilfreich

ich würde über GC 5 auswählen...
(5 . "94CE")

bleibt mir eine frage...woher bekommst du den ohne das element
irgendwann zu wählen?

objektnamen ändern sich mit jedem neuen öffnen der datei (glaub ich) 

------------------
...so long and thanx for all the fish!

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 14. Jan. 2004 09:34    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 Holger, hallo Marvin,

danke erstmal für die schnelle Antwort.
Das mit dem Auswahlsatz scheint nicht zu funktionieren, auch DC 5 mag er nicht.

@Brischke:
Mein Element hole mich mir mit
(SSGET "X" '((0 . "INSERT") (2 . "name"))
wobei mir "name" bekannt ist. Das so gefundene Objekt möchte ich eben an AMCVTFRAME12 übergeben.

Bin aber mittlerweile schon einen Schritt weiter. Der Befehl kann auch mit Koordinaten gefüttert werden, also z.B. 0,0

Ich kann mir also über (ASSOC 10 (ENTGET ...)) die Koordinaten rausholen und diese übergeben. Leider nur theoretisch, sobald ich nämlich wieder meine Variable als Punkt eingebe, ist das eine ungültige Eingabe.
Auch wenn ich meine Koordinaten mit (SETQ PT1 "0,0") definiere und PT1 dem Befehl übergebe, funktioniert das nicht.

Danke und ciao,
WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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: 14. Jan. 2004 09:40    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 WolfgangE 10 Unities + Antwort hilfreich

Hallo Wolfgang,

du sollst eine Liste übergeben, so wie diese von (entsel) erzeugt wird. (list ename pt)
Und du sollst nicht den Elementnamen übergeben sondern einen Auswahlsatz. (ssadd ename)

Hast du das schon probiert?

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 14. Jan. 2004 09:45    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 Brischke,

hab's wie folgt probiert:
Hab' mit (ENTSEL) mein Objekt ausgewählt. Das Ergebnis hab' ich dann übergeben. Der Übergabewert sieht konkret so aus:
(<Objektname: 7e805b80> (19417.3 -822.964 0.0))

Ich glaube, das hast du gemeint, aber vielleicht hab' ich's noch nicht ganz verstanden, meine AutoLisp- und auch ACad-Kenntnisse halten sich nämlich stark in Grenzen.

Danke und ciao,
WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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: 14. Jan. 2004 09:49    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 WolfgangE 10 Unities + Antwort hilfreich

und hat es so funktioniert?

Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 14. Jan. 2004 09:51    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

Leider nein, nicht einmal dann, wenn ich den Wert (<Objektname: 7e805b80> (19417.3 -822.964 0.0)) direkt reinkopiere, also ohne Variable.

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 14. Jan. 2004 10:03    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

Vielleicht nochmal ein ganz konkretes Beispiel bezüglich der Koordinaten-Eingabe:

Die Varialbe BASE beinhaltet die Koordinaten aus der (ENTGET)-Definition. Die Koordinaten speichere ich nach X und Y (alles direkt an der Kommandozeile):

Befehl: AMCVTFRAME12

Bitte Rahmenblock wählen: X,Y


*Ungültige Auswahl*
Erwartet einen Punkt oder Letztes

Bitte Rahmenblock wählen: *Abbruch*


Befehl: (SETQ X (CAR BASE))
-1714.6

Befehl: (SETQ Y (CADR BASE))
-1703.23

*********************************
Jetzt Folgende Eingaben:

Befehl: AMCVTFRAME12

Bitte Rahmenblock wählen: X,Y


*Ungültige Auswahl*
Erwartet einen Punkt oder Letztes

Bitte Rahmenblock wählen: *Abbruch*

Befehl: AMCVTFRAME12

Bitte Rahmenblock wählen: -1714.6,-1703.23

Bitte Schriftfeld wählen: -1714.6,-1703.23

Maßstab <1:20>:

Rahmen und Schriftfeld konvertiert in Power-Objekte !
*****************************************************

Der Befehl würde also funktionieren, nur werden die Variablen hier eben nicht ausgwertet.
Dasselbe passiert eben, wenn ich statt der Koordinaten den Objektnamen über SSGET verwende.

WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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

axeld
Mitglied
Projektingenieur/CAD-Administrator


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

Beiträge: 267
Registriert: 18.11.2002

erstellt am: 14. Jan. 2004 14:40    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 WolfgangE 10 Unities + Antwort hilfreich

Wolfgang,
Wie wäre es, wenn du die Lispfunktion veränderst.
amcvtframe12 findet sich in genbas0.lsp (ACADM\GEN).
Das Unterprogramm genzvi12to13 findet sich in genzvi.lsp.
Da kannst du sie dir nach Belieben verändern (natürlich erst in eine neue Datei kopieren!). Hier mußt du das GENSSGET ersetzen.

Auf diese Weise habe ich mir schon einige Programm verändert.

------------------
Axel

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 14. Jan. 2004 16:18    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 Axel,

der Vorschlag ist wirklich gut. Hab's gleich ausprobiert. Funktioniert!

Danke und ciao,
WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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

Arpi
Mitglied



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

Beiträge: 79
Registriert: 19.04.2002

erstellt am: 18. Mrz. 2005 09:18    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 WolfgangE 10 Unities + Antwort hilfreich

Moin,
jetzt bin ich auch in der Situation, den Befehl im Batch zu nutzen.
Kann mir jemand sagen, wie ich die Liste der Blocknamen an die Funktion übergeben kann, also was muss ich für GENSSGET einsetzen?

Danke

------------------
Tata
Rainer

Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt!

www.fla-nell.de
kindermöbel & accessoires

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

WolfgangE
Mitglied



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

Beiträge: 1006
Registriert: 29.01.2003

Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung.
Programmierung, Wartung und Administration von MSSQL2000-Datenbanken.
Grundlegende Kenntnisse in AutoLisp-Programmierung.

erstellt am: 18. Mrz. 2005 12:42    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


wec_amcvtframe12.txt

 
Puuuuhhhh, lang ist's her ...
ich hab's damals so gemacht wie von axel beschrieben. Hab die Original-Funktion amcvtframe12 kopiert und sie mir ein bisschen umgeschrieben und die dann stattdessen aufgerufen.

Hab dir mal die geänderte Funktion hier gepostet, die Änderungen zum Original sind jeweils kommentiert. Achte aber drauf dass das schon wieder eine ältere Version ist: AcadM2004.
Der Blockname wird in diesem Fall als Parameter übergeben, die Routine ist dann so umgebaut, dass der Parameter entsprechend verwendet wird.

Ciao,
WolfgangE

------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!

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

Arpi
Mitglied



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

Beiträge: 79
Registriert: 19.04.2002

erstellt am: 22. Mrz. 2005 09:41    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 WolfgangE 10 Unities + Antwort hilfreich

Guten Tag,
erst einmal Danke für deine Beispieldatei.

Ich habe da jetzt noch andere Änderungen dran vorgenommen und zwar ermittle ich die vorhandenen Rahmen und Schriftfelder automatisch und weise diese den Variablen BORDER und TITLE zu; das funktioniert auch alles soweit bis auf Zeichnungen, wo mehr als ein (1) Layout vorhanden sind (AutoCAD Mechanikal 2002).
Nachfolgend die Programmzusätze; wo könnte der Fehler liegen, dass die Funktion nil bei mehreren Layouts zurückgibt?

Code:

(defun testblo1 ()

;Test, ob Block "DIN_A4",...existiert; evt. zusätzliche Zeilen einfügen!
;Der entsprechende Elementname (en) wird zurückgeliefert und kann von entget verwendet werden
(setq enTIT
  (cond
    ((tblobjname "block" "01TITLE") (tblobjname "block" "01TITLE"))
    ((tblobjname "block" "23TITLE") (tblobjname "block" "23TITLE"))
    (t nil)
  )
)

  (setq enBOR
  (cond
    ((tblobjname "block" "VA4") (tblobjname "block" "VA4"))
    ((tblobjname "block" "VA3") (tblobjname "block" "VA3"))
    ((tblobjname "block" "VA2") (tblobjname "block" "VA2"))
    ((tblobjname "block" "VA1") (tblobjname "block" "VA1"))
    ((tblobjname "block" "VA0") (tblobjname "block" "VA0"))
    (t nil)
  )
)
)

(defun c:rp1 ( / title border scale next entli ent enb unchg
ss ssobj obj pins ll ru dum result anzra anztit boxt boxb )


(testblo1)

(if (/= nil enTIT)
    (progn
        (setq edTIT (entget enTIT))
        (setq title (cdr (assoc 2 edTIT)))
        (princ title)
        (terpri)
  ); END progn
); end if

(if (/= nil enBOR)
    (progn
      (setq edBOR (entget enBOR))
        (setq border (cdr (assoc 2 edBOR)))
        (princ border)
        (terpri)
  ); END progn
); end if
.
.
.
.
.snip


------------------
Tata
Rainer

Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt!

www.fla-nell.de
kindermöbel & accessoires

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