Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  alternative zu (entget (entlast))

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:  alternative zu (entget (entlast)) (965 mal gelesen)
fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 22. Mai. 2004 17: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

hallo,

gibt es eine alternative zu (entget (entlast)) in vlisp ?

habe einen reaktor geschrieben und dem funktioniert entget amscheinend nicht.

danke

------------------

MfG
Frank

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


Ex-Mitglied

erstellt am: 23. Mai. 2004 13:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von fca_mi2:
hallo,

gibt es eine alternative zu (entget (entlast)) in vlisp ?

habe einen reaktor geschrieben und dem funktioniert entget amscheinend nicht.


Die korrekte Methode für den Zugriff auf die Objekte von Reaktoren aus ist tatsächlich der über die VLA(x)-Funktionen, also z.B. vlax-get-property.

Aber solange das den Reaktor auslösende Objekt selbst nicht angesprochen oder modifiziert wird, sollte ENTGET ganz gut funktionieren, auch wenn die AutoCAD Dokumentation davon abrät. Vielleicht zeigst Du uns mal Deinen Code ...

Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 23. Mai. 2004 17:01    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 habe folgendes lisp von den afralisp-seiten und schon ein bißchen umgebaut.

es kann eine linie gezeichnet werden und immer dann wenn man sie verändert, wird die neue laenge ausgegeben. meine erweiterung zielt nun darauf hinaus, dass immer wenn ich die linie kopiere, der reaktor auch auf die neue linie anspringt.

(vl-load-com)

;****************************************************************************

(defun c:ld ()

(setq acadDocument (vla-get-activedocument (vlax-get-acad-object)))

(setq mspace (vla-get-modelspace acadDocument))

(setq apt (getpoint "Specify First Point: "))

(setq pt (getpoint "Specify next point: " apt))

(setq myLine (vla-addline mspace (vlax-3d-point apt)(vlax-3d-point pt)))

(princ "\nmy line : ")
(princ myline)
(princ (entget (entlast)))
(setq lineReactor
      (vlr-object-reactor
(list myLine)
"Line Reactor"
'(
  (:vlr-modified . print-length)
  (:vlr-copied . kopiert))
        )
)

(princ)

);defun

;******************************************************************************

(defun print-length (notifier-object reactor-object parameter-list)

  (princ "\nnotifier-object : ")
  (princ notifier-object)
  (princ "\nreactor-object : ")
  (princ reactor-object)
  (princ "\nparameter-list : ")
  (princ parameter-list)
   

(cond
((vlax-property-available-p notifier-object "Length")
(alert (strcat "The length is now " (rtos (vla-get-length notifier-object)))))
);cond

(princ)

);defun

;*******************************************************************************


(princ)

;*******************************************************************************

(defun kopiert (notifier-object reactor-object parameter-list)

  (princ "\nnotifier-object : ")
  (princ notifier-object)
  (princ "\nreactor-object : ")
  (princ reactor-object)
  (princ "\nparameter-list : ")
  (princ (car parameter-list))
  (setq a (car parameter-list))
  (princ "\nentity-name : ")
  (princ (cdr (assoc -1 (entget a))))

;;;  (princ "\nparameter-list-vlax : ")
;;;  (princ (vlax-ename->vla-object (car parameter-list)))

(cond
((vlax-property-available-p notifier-object "Length")
(progn
  (alert "Sie haben die Linie kopiert")
  (setq lineReactor
  (vlr-object-reactor
    (list (vlax-ename->vla-object (cdr (assoc -1 (entget a)))))
    "Line Reactor"
    '(
      (:vlr-modified . print-length)
      (:vlr-copied . kopiert))
    )
);setq
  );progn
)
);cond

(princ)

);defun


;*******************************************************************************************

------------------

MfG
Frank

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 24. Mai. 2004 09: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 Nur für fca_mi2 10 Unities + Antwort hilfreich

Hi,
ich könnte mir vorstellen, dass es sich hier um ein Laufzeit-Problem handelt. D.h. in dem Moment, wo entget versucht auf die Linie zuzugreifen, ist vla-addline noch gar nicht so richtig fertig mit der Erzeugung des Objekts...

------------------
Ciao,
Marc

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 24. Mai. 2004 10: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 Nur für fca_mi2 10 Unities + Antwort hilfreich

Nee, da liegt der Fehler ja gar nicht - das (entget(entlast)) funktioniert doch einwandfrei. Probleme gibt es erst mit dem entget in der kopiert-Funktion (aber nicht in Verbindung mit entlast, die Fragestellung war nicht sehr präzise), wenn die Daten der kopierten Linie ausgelesen werden sollen. Der Ename der Linie wird zwar in der Parameterliste übergeben, aber das Entity ist noch nicht fertig (es steht in Lisp noch nicht zur Verfügung).

Da bleibt nur der bekannte Weg über einen zweiten Reaktor (Command-Reaktor mit CommandEnded-Event an den COPY-Befehl) und den Enamen irgendwo zwischenspeichern - oder eben auf entget verzichten.

Gruß, Axel

------------------

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 24. Mai. 2004 12:50    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,

danke für die antworten.

gibt es denn keine andere möglichkeit an den entity-namen zu kommen ?

------------------

MfG
Frank

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


Ex-Mitglied

erstellt am: 24. Mai. 2004 13:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von fca_mi2:

gibt es denn keine andere möglichkeit an den entity-namen zu kommen ?

Nein, denn das Entity gibt es zu dem Zeitpunkt ja noch gar nicht. Viele Programmierer übersehen immer wieder, dass sie mit den Reaktoren mitten im Geschehen sitzen, und dass sie dort eben auch viel Unheil anrichten können.

Der korrekte Weg ist der, den Axel erwähnt hat: lasse Deinen Objektreaktor lediglich den Entitynamen in eine globale Variable schreiben, und verwende einen Editorreaktor, der bei COMMAND-ENDED diese Variable ausliest und dann alles Nötige veranlasst. Korrekterweise sollte der Editorreaktor bei COMMAND-WILL-START diese globale Variable zurück setzen, und am besten auch noch das (ENTLAST) in eine andere globale Variable sichern (dann hast Du bei COMMAND-ENDED mittels (entnext ..) auch noch Zugriff auf alle Objekte, die von dem auslösenden Befehl erzeugt wurden. Deine von den Reaktoren zu kontrollierenden Objekte kannst Du dann auch noch schön mit XDATA garnieren, damit Du Kopien auch daran erkennen kannst (die Kopien können ja auch mittels Copy&Paste aus anderen Zeichnungen kommen oder aus aufgelösten Blöcken stammen), und außerdem kannst Du dann darauf verzcihten, Deine Reaktoren persistent zu machen, was wirklich ziemlich nervig für Anwender ist, die Deine Datei ohne Deine Applikation in die Finger kriegen.

Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 01. Jun. 2004 10: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

hallo,

ich bin jetzt so weit, dass ich an die linie xdatas hänge und anhand dessen die linie z.b. beim kopieren identifizieren kann. vor dem kopieren frage ich das letzte element ab und kann dementsprechend alle neuen elemente durchlaufen.
wie läuft es denn, wenn ich eine linie nur verändere ? kann ich die elemente, die ich z.b. verschieben oder strecken möchte irgendwie ermitteln.

------------------

MfG
Frank

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


Ex-Mitglied

erstellt am: 01. Jun. 2004 10:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von fca_mi2:
wie läuft es denn, wenn ich eine linie nur verändere ? kann ich die elemente, die ich z.b. verschieben oder strecken möchte irgendwie ermitteln.

Siehe oben: zwei Reaktoren verwenden.

Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

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