Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Spline schliessen

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:  Spline schliessen (391 mal gelesen)
ositodepeluche
Mitglied


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

Beiträge: 8
Registriert: 07.05.2021

erstellt am: 01. Sep. 2022 22: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 zusammen,
Ich möchte in einer LISP eine mit SKIZZE gezeichnete Spline schliessen. Mit Command Splineedit geht das zwar, aber wenn ich die Skizze nicht abschliesse und abbreche gibts ein Problem. Darum habe ich es folgendermassen versucht:
 
(While
    (initcommandversion)
    (Setq letzte (command "_SKETCH" pause))
  (setq obj_data (entget letzte))
    (if (assoc 70 obj_data)
  (setq obj_data (subst (cons 70 1)(assoc 70 obj_data) obj_data))
)
(entmod obj_data)
      (setq letzte nil)
    )

Dabei kommt folgende Fehlermeldung:
; Fehler: Fehlerhafter Argumenttyp: lentityp nil

Kann mir jemand einen Typ geben, was ich falsch mache. Ich habe eben erst begonnen mit diesen Gruppencodes zu arbeiten.
Besten Dank

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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 02. Sep. 2022 07:44    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 ositodepeluche 10 Unities + Antwort hilfreich

Hallo ositodepeluche,

(entget ..) will einen Entitynamen, den lieferst Du aber nicht. versuche es mal mit
(entget (entlast))

HTH
Gruß
Thomas

[Diese Nachricht wurde von spider_dd am 02. Sep. 2022 editiert.]

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: 02. Sep. 2022 10:10    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 ositodepeluche 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von spider_dd:
Hallo ositodepeluche,

(entget ..) will einen Entitynamen, den lieferst Du aber nicht. versuche es mal mit
(entget (entlast))

HTH
Gruß
Thomas

[Diese Nachricht wurde von spider_dd am 02. Sep. 2022 editiert.]


Genauer: ein erfolgreich abgeschlossener COMMAND Aufruf gibt immer NIL zurück. Mit (Setq letzte (command "_SKETCH" pause)) wird letzte also auf NIL gesetzt.

Das zuletzt erzeugte Entity bekommt man mit (ENTLAST). Ein COMMAND kann aber mehrere Entities erzeugen, und wenn man diese alle haben will, dann macht man das etwa so:
(setq lastent (entlast))
(command .....)
(setq l-sset (newsset lastent))

Dabei sammelt die Funktion NEWSSET alle Entities ein, die nach dem übergebenen Entrity erzeugt wurden. Dabei hilft ENTNEXT, das das jeweils in der Reihenfolge nach einem Entity erzeugte Entity zurück gibt. Mit (while (setq en (entnext en) ...) geht das zuverlässig, aber man muss dann noch die VERTEX-Entities der alten Polylinien, Attribute u.a. herausfiltern ...

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

ositodepeluche
Mitglied


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

Beiträge: 8
Registriert: 07.05.2021

erstellt am: 03. Sep. 2022 21:57    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

Vielen Dank für die Antworten
Ich haben dementsprechend folgendes versucht:

(While
  (initcommandversion)
  (command "_SKETCH" pause)
  (setq obj_data (entget (entlast)))
  (if (assoc 70 obj_data)
    (setq obj_data (subst (cons 70 1)(assoc 70 obj_data) obj_data))
    (setq obj_data (reverse (cons (cons 70 1) (reverse obj_data))))
  )
(entmode obj_data)

In obj_data habe ich nun die Daten geändert aber die Spline bleibt offen. Ich hab dann mal mit entupd gepröbelt. Ohne Erfolg. Beim Anschauen der Gruppencodes einer geschlossenen und einer offenen Spline merkte ich, dass die geschlossene z.B. 70.3115 und die offene  70.0164 oder von 70.3339 auf  70.1064 wechselt. Die 1 fürs schliessen macht also wohl den Wert ungerade. Da er sich auch sonst verändert kann ich wohl nicht einfach den Ausgangswert +1 machen. Es ist alles etwas komplizierter als ich mir das gedacht. Vielleicht versuche ich besser den letzten Punkt der Spline auf den den Wert des ersten zu setzen, um sie zu schliessen. Ich muss mich da noch ein bisschen reinbeissen.
Mein eigentliches Problem ist ja aber, dass ich den Befehl _SKETCH nicht mit «ESC» (2*ESC auf der Stifttaste) aus der LISP rauskomme, wenn die Linie nicht abgeschlossen ist. Es wird dann einfach die letzte abgeschlossene Spline geschlossen und die Schlaufe geht weiter. Dies versuchte ich ja mit meinem ersten Versuch zu umgehen. Hat mir da jemand einen Ansatz?
Besten Dank und LG osso

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: 04. Sep. 2022 10: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 ositodepeluche 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ositodepeluche:

Mein eigentliches Problem ist ja aber, dass ich den Befehl _SKETCH nicht mit «ESC» (2*ESC auf der Stifttaste) aus der LISP rauskomme, wenn die Linie nicht abgeschlossen ist. Es wird dann einfach die letzte abgeschlossene Spline geschlossen und die Schlaufe geht weiter. Dies versuchte ich ja mit meinem ersten Versuch zu umgehen. Hat mir da jemand einen Ansatz?
Besten Dank und LG osso

Damit geht es. Aufruf mit (mycommand "._SKETCH"):

(defun mycommand (cmnd / oldecho)
  (setq oldecho (getvar "cmdecho"))
  (setvar "cmdecho" 1)
  (command cmnd)
  (while (eq 1 (logand 1 (getvar "cmdactive")))
    (command pause)
  )
  (setvar "cmdecho" oldecho)
)

[Diese Nachricht wurde von archtools am 04. Sep. 2022 editiert.]

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

ositodepeluche
Mitglied


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

Beiträge: 8
Registriert: 07.05.2021

erstellt am: 04. Sep. 2022 12:26    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

Vielen Dank für die Bemühungen. Ich habe folgendes versucht:

(defun mycommand (cmnd / oldecho)
  (setq oldecho (getvar "cmdecho"))
  (setvar "cmdecho" 1)
  (initcommandversion)
  (command cmnd)
  (while (eq 1 (logand 1 (getvar "cmdactive")))
    (command pause)
  )
  (setvar "cmdecho" oldecho)
)
 
(defun c:FREIHAND ()
  (setvar "skpoly" 2)
  (While
      (mycommand "._sketch")
  (command "splineedit" "l" "_close" "" "" "")
    )

)

Leider funktioniert das bei mir nicht. Es wird immer noch die lezte erstellte Spline geschlossen und die Schlaufe weitergeführt. Wenn ich dein Zeilen richtig verstehe hilft es mir aus SKETCH rauszukommen, aber das funktioniert ja. Mein Problem ist das die Lisp nicht abgebrochen wird. LG urs

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: 04. Sep. 2022 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 ositodepeluche 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von ositodepeluche:
Vielen Dank für die Bemühungen. Ich habe folgendes versucht:

[i](defun mycommand (cmnd / oldecho)
  (setq oldecho (getvar "cmdecho"))
  (setvar "cmdecho" 1)
  (initcommandversion)
  (command cmnd)
  (while (eq 1 (logand 1 (getvar "cmdactive")))
    (command pause)
  )
  (setvar "cmdecho" oldecho)
)
 
(defun c:FREIHAND ()
  (setvar "skpoly" 2)
   (While
       (mycommand "._sketch")
   (command "splineedit" "l" "_close" "" "" "")
    )

)

Leider funktioniert das bei mir nicht. Es wird immer noch die lezte erstellte Spline geschlossen und die Schlaufe weitergeführt. Wenn ich dein Zeilen richtig verstehe hilft es mir aus SKETCH rauszukommen, aber das funktioniert ja. Mein Problem ist das die Lisp nicht abgebrochen wird. LG urs
[/i]



Natürlich funktioniert das nicht. Wie kommst Du denn auf die merkwürdige Idee, (mycommand "._sketch") als Bedingung einer While-Schleife zu verwenden?

(mycommand "._sketch") ruft den SKETCH-Befehl auf und führt ihn mittels Nutzereingaben zu Ende. Der Rückgabewert von MYCOMMAND ist der Wert des letzten Funktionsaufrufs darin, und der ist der CMDECHO-Wert, also niemals NIL. Deine While-Schleife wird deshalb auch nie beendet.

In meiner Variante meiner MYCOMMAND Definition wird als Rückgabewert übrigens eine Liste der durch den Befehl neu erzeugten Entities zurück gegeben, so dass man mit diesen gut weiter arbeiten kann. Aber das wäre jetzt hier etwas zu weit gegangen.

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

ositodepeluche
Mitglied


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

Beiträge: 8
Registriert: 07.05.2021

erstellt am: 04. Sep. 2022 13:38    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

Schande über mich, ich versuche immer alle Aspekte zu bedenken bevor ich Rückfrage. Das ist ja so offensichtlich. Ich bin halt immer noch blutiger Anfänger. Danke für deine Hilfe. LG osso

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