Ich habe mit dem Command-Befehl "_.trim" in AutoCAD 2015 ein Problem (in AutoCAD 2012 tritt das Problem nicht auf)
Als COMMAND-S ist dieser nicht definiert:
AnwendungsFEHLER: Ungültige Element/Punktliste
; Fehler: Unbekannte(r) (command-s) fehlgeschlagen.
Also verwende ich diesen wie immer mit (command "_.trim" ...
Da habe ich aber festgestellt, daß der Command-Befehl aus einer Mapcar-Schleife heraus aufgerufen folgenden Fehler auslöst:
VVC: Internal Error*Abbruch*
oder
Fehler: Ausnahmebedingung aufgetreten: 0xC0000005 (Zugriffsverletzung)
Scheinbar je nach Laune des Rechners.
Dann habe ich probiert es mit einer FOREACH-Schleife, und, tata, es funktioniert. Der Einzelaufruf ohne Schleife funktioniert ebenfalls.
Fragen:
Kann das irgendwer von Euch nachvollziehen?
Kann mir einer erklären, was bezogen auf den Command-Befehl der Unterschied zwischen Mapcar und Foreach ist??
Anbei nochmal meine Test-Codes: einfach Kreis picken, dann mit Auswahlfenster die Linien auswählen, diese werden dann ausserhalb des Kreises gestutzt. Für die Schleifen habe ich eine Dummy-List mit einem Listeneintrag erstellt. Die zugehörige DWG-Datei "StutzTest.dwg" habe ich angehängt.
Code:
(defun c:TestMapcar ( / AWSLINES N OBJKREIS PKT DummyList)
(setq DummyList '(1))
(mapcar (function(lambda(A)
(setq objKreis (car(entsel "\nKreis picken:")))
(princ "\nLinien auswählen: ")
(setq awsLines (ssget (list (cons 0 "LINE"))))
(setq n 0)
(repeat (sslength awsLines)
(setq pkt
(trans
(polar
(cdr(assoc 10 (entget (ssname awsLines n))))
(angle (cdr (assoc 10 (entget (ssname awsLines n))))
(cdr(assoc 11 (entget (ssname awsLines n)))))
(*(cdr(assoc 40 (entget objKreis)))1.1))0 1))
(command "_.trim" objKreis "" (list (ssname awsLines n) pkt) "")
(setq n (+ n 1))
)
))DummyList)
)
(defun c:TestForeach ( / AWSLINES N OBJKREIS PKT DummyList)
(setq DummyList '(1))
(foreach A DummyList
(setq objKreis (car(entsel "\nKreis picken:")))
(princ "\nLinien auswählen: ")
(setq awsLines (ssget (list (cons 0 "LINE"))))
(setq n 0)
(repeat (sslength awsLines)
(setq pkt
(trans
(polar
(cdr(assoc 10 (entget (ssname awsLines n))))
(angle (cdr (assoc 10 (entget (ssname awsLines n))))
(cdr(assoc 11 (entget (ssname awsLines n)))))
(*(cdr(assoc 40 (entget objKreis)))1.1))0 1))
(command "_.trim" objKreis "" (list (ssname awsLines n) pkt) "")
(setq n (+ n 1))
)
)
)
(defun c:TEST ( / AWSLINES N OBJKREIS PKT)
(setq objKreis (car(entsel "\nKreis picken:")))
(princ "\nLinien auswählen: ")
(setq awsLines (ssget (list (cons 0 "LINE"))))
(setq n 0)
(repeat (sslength awsLines)
(setq pkt
(trans
(polar
(cdr(assoc 10 (entget (ssname awsLines n))))
(angle (cdr (assoc 10 (entget (ssname awsLines n))))
(cdr(assoc 11 (entget (ssname awsLines n)))))
(*(cdr(assoc 40 (entget objKreis)))1.1))0 1))
(command "_.trim" objKreis "" (list (ssname awsLines n) pkt) "")
(setq n (+ n 1))
)
)
------------------
viele Grüße
Jörn
http://www.bosse-engineering.com
Orthogonalvermassung Youtube
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP