Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Block verschieben in Unterfunktion

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:  Block verschieben in Unterfunktion (1525 mal gelesen)
pebre
Mitglied
Bauing.

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

Beiträge: 2
Registriert: 10.09.2011

Autodesk ADT 2006
WinXP ServicePack 2
Intel Pentium 4 2.8GHz

erstellt am: 10. Sep. 2011 20: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

Hallo Gemeinde,

Bisher habe ich ein Objekt immer mit grread visuell verschoben.
Nun möchte ich aber nicht mehr auf den Objektfang verzichten und
versuche es nun mit der command-funktion _move:
 
  (defun block-insert (Blockname /)
    (setvar "osmode" 0)
    (command "_insert" Blockname (car(cdr(grread 't 5 0))) 1. 1. 0. "")
    ;holt Block ans Fadenkreuz
    (command "_move" (entlast)(setvar "osmode" 3) "") ;verschiebt ihn
  )

Block hereinholen und verschieben funtioniert als standalone-Funktion
einwandfrei, im Gesamtprogramm aber nicht, weil die Funktion abgearbeitet
wird bevor ich den Block verschoben habe. Das kann man auch zeigen in der
Vlisp-Konsole z.B.:

(command "_move" (entlast)(setvar "osmode" 3) "")
(princ "XXXXX")  <enter>

Den Block kann ich wohl verschieben im Modelspace aber der string "XXXXX"
wird bereits vorher ausgegeben.

In meinem Hauptprogram treffe ich nach Abarbeitung der Unterfunktion
wieder auf eine grread-Tastaturabfrage. Da wird nun mit der Maustaste
ein falsches Argument eingegeben (3d-point statt key) , weil ich den
Block noch nicht verschoben habe, aber die Funktion "block-insert"
bereits ein "return" ausgeführt hat.

Ich habe mit wait-funktion oder irgendeiner dummy-funtion nach dem _move
probiert, aber es nützt alles nichts.

Warum kehrt die Funktion zurück bevor das _move command erledigt ist.

Ist das System- oder Lisp-bedingt?  Hilfe wid dankend angenommen

Peter

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 11. Sep. 2011 15:08    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 pebre 10 Unities + Antwort hilfreich

Hi,
ich verstehe dein ganzes vorhaben nicht so richtig.
Warum willst du einen Block einfügen und sofort wieder verschieben, setz ihn doch direkt an die richtige stelle!? 
Und warum ein grread reicht dir da nicht ein (getpoint)?
Also so:
Code:
(command "_insert" Blockname (getpoint "\nEinfügepunkt des Blocks wählen ! ") 1. 1. 0. )


Wenn du sofort verschieben willst.

Code:
(command "_insert" Blockname (getpoint (getpoint "\nVon hier" ) "\nNach hier verschieben") 1. 1. 0. "")

Ansonsten probier das von dir nochmal so.

Code:
(defun block-insert (Blockname /)
  (setvar "osmode" 0)
  (command "_insert" Blockname (car (cdr (grread 't 5 0))) 1. 1. 0. ) ;holt Block ans Fadenkreuz
  (setvar "osmode" 3)
  (command "_move" (entlast) "") ;verschiebt ihn
)

Ich hätte wohl grread raus geschmissen. Also so:

Code:
(defun block-insert (Blockname /)
  (setvar "osmode" 0)
  (command "_insert" Blockname (getpoint) 1. 1. 0. ) ;holt Block ans Fadenkreuz
  (setvar "osmode" 3)
  (command "_move" (entlast) "") ;verschiebt ihn
)

Ich weis jetzt nur nicht ob dir das weiterhilft.

------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 11. Sep. 2011 18:00    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 pebre 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von pebre:
Block hereinholen und verschieben funtioniert als standalone-Funktion
einwandfrei, im Gesamtprogramm aber nicht, weil die Funktion abgearbeitet
wird bevor ich den Block verschoben habe.

Das ist ja auch logisch. Deine "Standalone" Funktionen läßt das AutoCAD ja auch mit dem noch immer weiter laufenden und auf Input wartenden Verschieben-Befehl zurück. Du musst innerhalb eines richtigen Lisp-Programms Deine offenen Befehle aber ordentlich abschließen.

Es gibt dazu eine Systemvariable, die den Befehlszustand von AutoCAD anzeigt, und es gibt die "Befehlsoption" PAUSE, die auf Anwenderinput auf einen laufenden Befehl wartet. Dein verschieben in einer ordentlichen Lisp-Funktion sieht demnach so aus:

Code:

  (setvar "osmode" 3)
  (setvar "cmdecho" 1)
  (command "_move" (entlast) "")
  (while (eq 1 (logand 1 (getvar "cmdactive")))
    (command pause)
  )

Du musst dabei nur noch aufpassen, dass Du Deine Lisp-Funktion ja auch noch selbst als AutoCAD-Befehl registrieren lassen kannst. Dann geht das (getvar "cmdactive") natürlich tiefer und erfordert mehr Aufwand zum korrekten Abfangen.

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

pebre
Mitglied
Bauing.

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

Beiträge: 2
Registriert: 10.09.2011

Autodesk ADT 2006
WinXP ServicePack 2
Intel Pentium 4 2.8GHz

erstellt am: 11. Sep. 2011 19: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

@ Wolfgang
Dein zweiterTyp ist gut, das Objekt ist aber erst nach der Verschiebung sichtbar.
Es handelt sich hier um ein Progr. um Bewehrungsnetze auf einem Decckengrundriss
zu verteilen. Da ist es praktisch wenn der Block am Fadenkreuz hängt und ich
dann einen passenden Griff nehmen kann um zu verschieben und zu "pröbeln".
Das ist aber nicht das Hauptproblem, sondern wie ich am Schluss beschrieben habe
die Abfolge der Funktionen. Nun hat mich archtools auf die richtige Spur gebracht.

@ archtools
Vielen Dank. Das scheint mir dir Lösung zu sein. Ich werd's ausprobieren.
Jetzt hat mir gerade ein Blitz das CAD zum Absturz gebracht, also später.
Ich hatte früher schon beim Studieren der sysvar "CMDACTIVE" geahnt, dass
sie etwas damit zu tun haben könnte. 

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