| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Intelligenter Workflow von Köln bis Delhi mit SAP PLM - KHD Humboldt Wedag (CIDEON, SAP, PLM, ERP, Autodesk Inventor, AutoCAD), ein Anwenderbericht
|
Autor
|
Thema: Script - alle Layer wählen (2904 mal gelesen)
|
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 19. Jan. 2010 15:40 <-- editieren / zitieren --> Unities abgeben:
Schönen guten Tag! Ich hätte eine kleine Frage... ich verwende in einem Script den Befehl layzusf und hab immer unterschiedliche Layer, gibts einen Befehl dass ich nicht alle Layer eingeben muss, sondern einfach sage, z.B. nimm alle Layer, bis auf 0 und leg sie z.b. auf Layer Shading? Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 19. Jan. 2010 15:52 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
|
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 19. Jan. 2010 16:39 <-- editieren / zitieren --> Unities abgeben:
hm ... danke! Ich häng noch eine Frage hinten dran ... Ich erstell mir in meinem script neue Layer, einer davon wär 0S-Profile EPDM , so nimmt er mir den nicht, jetzt hab ich ihn halt unter "" gesetzt, dann bekomm ich die Meldung, Unbekannter Befehl ... was is falsch? Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 19. Jan. 2010 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
"unbekannter Befehl" kann nur kommen wenn gar kein Befehl aktiv ist - somit ist dein Makro wohl schon an anderer Stelle falsch ? Wenn du das dann geklärt hast und es immer noch Probleme gibt: HIER wieder melden. PS: Wenn du von einem Script sprichst dann poste es doch auch, sonst kann man sehr schlecht prüfen an was es liegt. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 08:01 <-- editieren / zitieren --> Unities abgeben:
Also mein Script sieht folgendermaßen aus: -layer n "0S-Profile PVCU" n "0S-Shading PVCU" n "0S-Profile Aluminium" n "0S-Shading Aluminium" n "0S-Profile EPDM" n "0S-Shading EPDM" -layzusf n "0S-Profile PVCU" n "0S-Shading PVCU" n "0S-Profile Aluminium" n "0S-Profile EPDM" n "0S-Shading EPDM" n "0S-Shading Aluminium" j filedia 0 ursprung al ursprung al (command "_erase" (ssget "X" (list (cons 8 "0S-Shading Aluminium"))) "") _-layer _s 0 _change _all _p _la 0 _c _bylayer _lt _bylayer _lw _bylayer _-purge _a n _qsave _zoom _e -bereinig al n _saveas 2000 _close j Ich möchte hier Layer deswegen erstellen, weil sie nicht in jeder Zeichnung vorhanden sind, und teilweise immer nur eine von denen verwendet wird. Die müssen aber alle aus der Zeichnung raus und da das Script dann bei (command "_erase" (ssget "X" (list (cons 8 "0S-Shading Aluminium"))) "") hängen bleibt wenn 0S-Shading Aluminium nicht vorhanden ist schreib ich halt zuerst alle zu löschenden Layer auf diesen. So nur kurz zur Erklärung, jetzt bleib ich aber schon beim definieren der Layer hängen Hab ich da jetzt was falsch geschrieben? Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 20. Jan. 2010 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
|
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 10:19 <-- editieren / zitieren --> Unities abgeben:
|
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 10:56 <-- editieren / zitieren --> Unities abgeben:
So, hier jetzt mein momentanes Script: (setvar "CLAYER" "0") ursprung al ursprung al (if (tblobjname "LAYER" "0S-Shading PVCU")(command "-laydel" "n" "0S-Shading PVCU" "" "j")) (if (tblobjname "LAYER" "0S-Profile PVCU")(command "-laydel" "n" "0S-Profile PVCU" "" "j")) (if (tblobjname "LAYER" "0S-Shading Aluminium")(command "-laydel" "n" "0S-Shading Aluminium" "" "j")) (if (tblobjname "LAYER" "0S-Profile Aluminium")(command "-laydel" "n" "0S-Profile Aluminium" "" "j")) (if (tblobjname "LAYER" "0S-Shading EPDM")(command "-laydel" "n" "0S-Shading EPDM" "" "j")) (if (tblobjname "LAYER" "0S-Profile EPDM")(command "-laydel" "n" "0S-Profile EPDM" "" "j")) _-layer _s 0 _change _all _p _la 0 _c _bylayer _lt _bylayer _lw _bylayer _-purge _a n _qsave _zoom _e -bereinig al n _saveas 2000 _close j Das läuft soweit, und habs auch schon brav durchlaufen lassen nur kommt jetzt noch ein Problem dazu, scheinbar sind nicht alle Zeichnungen 2 mal verschachtelt. Gibts da auch eine Möglichkeit abzufragen, ob Ursprung möglich ist und wenn nicht dass er dann weiter geht? Mit freundlich Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jan. 2010 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
ok, jetzt "muß" ich auch mal was sagen: (das Script sah und sieht gruselig aus) Normalerweise solltest du einfach:
alle Layer frieren, die Layer die weg sollen tauen Löschen Alle restlichen Layer tauen Eigenschaft(Layer) aller verbiebenen Objekte auf Layer 0 legen (+ weitere Einstellungen) PRÜFUNG Bereinigen (ggf. Zoom) speichern saveas close Das wäre der einfache Scriptweg bei dem man sich nichts "kaputt" machen kann(laydel). Folgendes hatte ich angefangen zu schreiben als Antwort auf dein 1.Posting, habe es dann aber doch nicht gepostet, dies hole ich nun nach. (wie gesagt: Antwort war eigentlich auf den Anfangspost, des wegen passt nicht mehr alles zum aktuellen Script, aber vieles)
Zitat:
Dein erzeugen der Layer sollte aber eigentlich funktionieren! dennoch:
[*] Du mußt die Quell-Layer imho nicht erst extra erzeugen, nur der Ziel-Layerr von layzusf muß vorhanden sein. [*] Wofür wird Filedia=0 gesetzt (und vor allem: warum nicht wieder zurück ?) [*] bevor du den Layer"0" aktuell setzt sollte man sicher stellen das dieser nicht gefroren ist (und je nach Expert auch: eingeschaltet ist) [*] englisch(international) und deutsch mischen, warum ? - bleibt bei international ! [*] schreibe jede Option aus, wenn man mit "Enter" die Vorgabe (blind) bestätigt kann auch mal Unsinn raus kommen. [*] Hast du die "saveas" Geschichte einmal vorher (in der Befehlszeile) getestet ?
Nachdem man sich das Makro (und deine Erklärung) mal als ganzes anschaut macht es SO gar keinen Sinn -> siehe CADmium
Nachtrag: Dir ist schon bekannt das du dir mit "ursprung" nicht nur Blockreferenzen zerschlägst ? dann ist ja gut. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 11:42 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, danke für den Hinweis, dass mir Ursprung mehr als nur Blöcke zerschlägt. Das haut mich jetzt Kilometer zurück. Somit funktioniert dann auch nicht die Idee mit Layer frieren, tauen dann löschen ... Dann steh ich wieder am Anfang. Dass man nur Blöcke auflöst, gibt es die Möglichkeit in einem Script? Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jan. 2010 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
Mit LISP ja (aber mit Lisp kann man ja soweiso "alles" machen / sich programmieren (lassen). (setq aws (ssget "_X" '((0 . "INSERT")))) (wählt alle Blockreferenzen der Datei) _.explode !aws (entspricht = URSPRUNG VORHER)
;script (setq aws (ssget "_X" '((0 . "INSERT")))) _.EXPLODE !aws
Spätestens an dieser Stelle wird man dann aber darüber stolpern das Explode/Ursprung nicht wie gewünscht in einem Script funktioniert ! (lese die Acadhilfe dazu: URSPRUNG)
soory <Beitrag wurde von CADffm editiert> ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jan. 2010 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
Zitat: Original erstellt von cadffm:
Spätestens an dieser Stelle wird man dann aber darüber stolpern das Explode/Ursprung nicht wie gewünscht in einem Script funktioniert ! (lese die Acadhilfe dazu: URSPRUNG)
Dieses Problem kann man dann wie folgt umgehen (war mir nicht gleich eingefallen ): ;scriptstart (ssget "_X" '((0 . "INSERT"))) _xplode _P _global _explode ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 13:31 <-- editieren / zitieren --> Unities abgeben:
Jetzt sind wir an einem Punkt angekommen wo ich nur noch Bahnhof versteh. Du musst davon ausgehen, dass ich ein Zeichenanweder von AutoCAD bin und 1-2 mal im Jahr ein Script schreibe, das sieht auch dann dementsprechend aus, einfach alle Befehle, die ich vorher in AutoCAD getestet hab, in eine Wurscht schreibe und damit war ich bis jetzt immer glücklich. Zumindest bis gestern. Also wenn ich das richtig interpretiere, brauch ich jetzt im Script nur den Befehl (ssget "_X" '((0 . "INSERT"))) _xplode _P _global _explode eingeben und er löst mir nur die Blöcke auf? - Sollte es so sein versteh ich dann das hier nicht: Befehl: (ssget "_X" '((0 . "INSERT"))) nil Befehl: _xplode Aufzulösende Objekte wählen. Objekte wählen: _P Kein vorheriger Auswahlsatz. Objekte wählen: Befehl: Befehl: _global Unbekannter Befehl "GLOBAL". Drücken Sie F1-Taste für Hilfe. Hab ich mit (ssget "_X" '((0 . "INSERT"))) alle Blöcke gewählt? Oder sollte es die Kombination sein? (setq aws (ssget "_X" '((0 . "INSERT")))) _xplode _P _global _explode bzw. hab ich da auch wieder das Problem, dass ich keinen vorherigen Auswahlsatz habe. Hm? ok, das war jetzt mein Fehler ... grad noch eine Zeichnung ohne Block geöffnet. Aber dann kommt schon die nächste Frage auf mit "_global" erreich ich nichts (habs zwar auch schon in der netten Hilfe gefunden), aber mit "Ungültiger Optionstitel" ist dann wohl nicht ganz das erreicht was man wollte, oder? Mit freundlichen Grüßen Franzal [Diese Nachricht wurde von Franzal am 20. Jan. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jan. 2010 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
|
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 13:54 <-- editieren / zitieren --> Unities abgeben:
Ok, soweit so gut. Ich hab jetzt irgendwie die Befürchtung, dass dir gleich wieder das grausen kommt. Ich hab jetzt einfach mal versucht zu kombinieren, da ich leider nicht in allen Zeichnungen Blöcke habe, und die raus zu sortieren wäre wohl eine Arbeit von 3 Wochen, habe ich das versucht. (if(setq aws (ssget "_X" '((0 . "INSERT"))))(command "_xplode" "_P" "" "_global" "_explode) Damit wollt ich eigentlich nur erreichen, dass er eben Blöcke auswählt, und wenn er keine hat einfach nichts tut, bzw. zum nächsten Befehl übergeht. Hat leider nicht so geklappt. Kann man das in einem Script bewerkstelligen? Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 20. Jan. 2010 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
|
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 14:24 <-- editieren / zitieren --> Unities abgeben:
Naja, wie gesagt, mehr als zeichnen war bei mir noch nicht drin, deshalb hab ich auch immer versucht auf script auszuweichen, wo ich von lisp keine Ahnung hab. Danke euch beiden für die tolle Hilfe, vielleicht bekomm ichs ja dann bald mal hin. Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Jan. 2010 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
Abgesehen davon das du in der Hektik einmal " vergessen hast "wolltest" du schon das Richtige machen, leider ist xplode dafür ein blödes Versuchsobjekt gewesen weil dies eine Lisp-Funktion ist und da funktioniert das nicht so wie mir "richtigen" Acad-Funktionen. In einem Script würde man dies lösen indem man vor dem auflösen immer erst einen (leeren)Block einfügt, somit ist gegeben das immer ein Auswahlsatz gebildet wird! Andere Variante: mit wählt außer Blöcken noch andere Objekte welche auf jeden Fall enthalten sind, aber durch (e)xplode nicht zerschlagen werden (Linien zB.) Ich habe für dich mal gegoogelt um dich weiter zu bringen: Hier zB. mal ein Treffer mit einer (Lisp)Lösung von CADmium: http://ww3.cad.de/foren/ubb/Forum52/HTML/003297.shtml ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 20. Jan. 2010 17:32 <-- editieren / zitieren --> Unities abgeben:
Im forum wird mir das zu abenteuerlich (vor allem weil du es schon nutzt <staun> ) Frage: Warum erstellst du vor dem xplode 2 Blöcke und fügst 2 Referenzen ein !? Eine Blockreferenz reicht doch auch !? Zudem: Nun nimmst du also doch "laydel" , hoffentlich hast du die Layer wirklich nicht in Blöcken verwendet welche noch erhalten bleiben sollen ! Auf den Rest gehe ich jetzt nicht mehr ein - schönen Feierabend Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franzal Mitglied
Beiträge: 63 Registriert: 21.07.2009 WIN XP Pro; AutoCAD Architecture 2010, 2011 Grafikkarte: NVIDIA Quadro FX 350M Arbeitsspeicher : 256.0 MB
|
erstellt am: 21. Jan. 2010 13:19 <-- editieren / zitieren --> Unities abgeben:
Aufgrund von _xplode _P global _explode füge ich zwei Blöcke ein. Die Abfrage ob individuell oder global kommt bei mir erst, wenn 2 Objekte gewählt sind. Ansonst bleibt mir immer brav das Script hängen. Mit freundlichen Grüßen Franzal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 21. Jan. 2010 13:37 <-- editieren / zitieren --> Unities abgeben: Nur für Franzal
|