• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Löschen von nicht verwendeten Schichten mit AutoLisp

Giuseppe Beatrice

Guest
hi, leute.
können sie autolisp verwenden, um ungenutzte schichten zu löschen?
ich versuchte, den schichtentitätsnamen mit der tblobjname funktion zu extrahieren und dann mit entdel zu löschen, aber es funktioniert nicht.
kann mir jemand informationen darüber geben?
danke für die verfügbarkeit.
 
testen sie dies, die schichten sollten nicht blockiert werden. :smile:

Code:
;elimina schicht vuoti

(defun c:elv (/ cmd lag lista_lay lista_lay1)
(Befehl "_undo" "_begin")
(Setq cmd (getvar "cmdecho")
(Setvar "cmdecho" 0)
(setq lag)
(setq lista_lay (list lay))
(while (/= lag nil)
(setq lag (cdr (assoc 2 (tblnext "layer")))
(setq lista_lay1 (list lay))
(falls (/= lag nil) (setq lista_lay (append lista_lay lista_lay1)))
)
(Setq n -1)
(Repeat (längelistea_lay)
(setq lay (nth (setq n (1+ n))lista_lay))
(falls und
(/= laien "0")
(/= laie (getvar "clayer")
(nicht (get "_x" (list (cons 8 lay))))
)
(Befehl "-laydel" "_n" lag "" "_y")
)
)
(Befehl "_undo" "_end")
(Setvar "cmdecho" cmd)
(princ)
)
 
danke. ich versuche es.
aber es scheint mir etwas wirklich seltsam, da die online-hilfe von autocad sagt, dass die entdel-funktion funktioniert sowohl für grafiken als auch nicht grafiken.
wie auch immer, vielen dank.
 
auf dem gebiet der lispe vielleicht alle zusammenfassen können:
Code:
(Fortsetzung c:elv2)
(vlax-for elemento (setq layers(vla-get-layers(vla-get-active document)))))))
(vl-catch-all-apply 'vla-delete (list elemento))
)
)
für den rest in der tat wäre genug eine spüle...
 
aber zu verwenden (befehl "_purge" "_la" "_n") ist nicht besser?
in jedem fall ist es gut zu erinnern, dass es notwendig ist, den plan 0 (null) vor dem start der entfernung einzustellen.

bye
 
ein herzschlag dank confutatis, zu dem ich nur sage, dass ich den kommentar von gp vollständig teile, einen ...bravo!
ich sage anderen, dass der purge-befehl gut ist, aber meine anfrage beginnt von der notwendigkeit, eine solche beseitigung innerhalb eines viel größeren und artikulierten automatisierungsprogramms zu definieren, und dies kann leider nur mit autolisp geschehen.
wie auch immer, vielen dank.
 
ich sage anderen, dass der purge-befehl gut ist, aber meine anfrage beginnt von der notwendigkeit, eine solche beseitigung innerhalb eines viel größeren und artikulierten automatisierungsprogramms zu definieren, und dies kann leider nur mit autolisp geschehen.
tut mir leid, aber wer verbietet ihnen zu verwenden:

(defun miopurgelayer)
(befehl "_purge" "_la" "_n")
)
 
auf dem gebiet der lispe vielleicht alle zusammenfassen können:
Code:
(Fortsetzung c:elv2)
(vlax-for elemento (setq layers(vla-get-layers(vla-get-active document)))))))
(vl-catch-all-apply 'vla-delete (list elemento))
)
)
für den rest in der tat wäre genug eine spüle...
nur um zu zeigen, wie viele möglichkeiten sie ein problem in vlisp lösen können.

(defun c:elv3 ()
(vl-load-com)
(setq schichten (vla-get-schichten))
(vlax-map-kollektionsschichten '(lambda (x) (vl-catch-all-apply 'vla-delete (list x)))))
)

in wirklichkeit nur schreiben
(vlax-map-collection layers 'vla-delete)), wie es für jede methode sein sollte, anzuwenden, gibt der code fehler, weil sie kein element einer sammlung löschen können, während sie es verschieben.
 
Zuletzt bearbeitet:
1) ich vergesse immer das (vl-load-com)...(aber warum setzt das autodesk es nicht standardmäßig vorgeladen? )
2) tatsächlich dient die zuordnung der variablen schichten nicht praktisch nichts, sie können sicher löschen
Code:
(Fortsetzung c:elv2)
(vl-load-com)
(vlax-for elemento (fla-get-layers(vla-get-active document)))
(vl-catch-all-apply 'vla-delete (list elemento))
)
)
 
was ich brauche, ist eine art eliminierung "mirata" so weit zu schichten, die im namen eine bestimmte substringa haben, und ich kann dies mit der folgenden funktion tun, an die ich die zu eliminierenden namen gebe und die teilweise den befehl von g.p. verwendet:
(defun lsp_purge_lyr)
(mapcar '(lambda (x / item lay)
(tblnext "layer" t)
(while (setq item (tblnext "layer")
(wenn (wcmatch (setq lay) (cdr (assoc 2 item)) x)
(befehl "_-laydel" "_n" lag "_y"))
lst_lyr_flg)
aber ich würde gerne wissen, ob es einen "synthetischen" weg gibt und deshalb denke ich, dass confutatis, wenn sie etwas zeit haben, auf jeden fall die lösung finden könnte.
 
beispiel:
schichten: armaturen, innenräume, prs, prs+dashed
(befehl "_purge" "_la" "*+*" "_n")
alle pläne mit + löschen.

wie einmal verwendet.
 
Esmpio:
dalla lista dei schichten sottostante tutti quelli che contengono la sottostring "-b"

"sec-c" "sec-b" "sec-a" "pr-c" "pr-b" "pr-a" "ter" "dry" "pr" "bc" "0"

(defun c:del-lay (/ gefunden obj)
(vl-load-com)
(setq Bögen (fla-get Bolzen (fla-get-active Dokument)))
(Vlax für objschachten)
(falls (/= (vl-string-search "-b" (vla-get-name obj))))
(fla-delete obj)
)
)
)

Da provare
 
1)...
2) tatsächlich dient die zuordnung der variablen schichten nicht praktisch nichts, sie können sicher löschen. ...
in der regel erfolgt die zuordnung zu einer externen variable zu einem zyklus zur codeklarheit (insbesondere, und dies könnte ein fall sein, wenn es geschachtelte zuordnungen gibt), aber auch, wenn es notwendig ist, sich auf sie in anderen teilen des programms zu beziehen.
es ist sehr ähnlich wie bei der lambda-funktion, mit der, wenn ich ein verfahren brauche, das ich nur zu diesem zeitpunkt und in dieser position verwenden werde, ich kann eine lokale funktion schreiben, ohne eine spezielle externe funktion zu schreiben und zu erklären (aber auch in diesem fall geht es zum nachteil der lesbarkeit des codes, wie immer passiert, wenn die klammern in den anderen).
in der tat hat eine wahrheit hintergrund der notiz witz:
l.i.s.p.= auflistung = verloren in dummer parenthesis opp. verloren in einem meer der elternarbeit
 
im vorherigen code können sie ersetzen (vl-string-search "ec" (vla-get-name obj)mit(wcmatch (fla-get-name hug) "*ec*")
 
danke, dass das programm seine aufgabe perfekt erfüllt!
und dank allen auch für die debatte, die ausgelöst wurde und für die beiträge, die dann helfen, alle wachsen, verstehen und verwenden immer besser ein leistungsstarkes design-tool wie autocad.
wenn ich der diskussion einen demütigen kommentar hinzufügen kann, werde ich sagen, dass ich bei der erstellung von listen, zwischen der hinzufügung von mehr oder weniger "nutzlos" aber erläuternden variablen und der beschneidung, mit dem unvermeidlichen wachstum von klammern und der daraus folgenden "stupid lostitude" zu schweben.
vielen dank an alle.
 
generell die zuordnung zu einer externen variable zu einem zyklus zur codeklarheit
richtige beobachtung ihrer, aber angesichts der mindestlänge des programms war die betreffende variable mehr. natürlich gibt es mehr variablen, mehr speicher wird verwendet und, soweit möglich, versuche ich, seine verwendung zu beschränken. es ist wahr, dass es zum nachteil der lesbarkeit des codes geht, aber wenn die programme sehr kurz sind, wie in diesem fall, schließe ich sie an das minimum unverzichtbar.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben