| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Über Definitionsdatei Blöcken einen Layer zuweisen (2996 mal gelesen)
|
wuselking Mitglied
Beiträge: 293 Registriert: 19.11.2004 AutoCAD 2018 EPLAN P8 v2.9 SP1 build 14642
|
erstellt am: 13. Jun. 2015 09:05 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen! Ist es möglich, über eine Definitionsdatei verschiedenen Blöcken verschiedene Layer zuzuweisen? Also Block A auf Layer Z Block B auf Layer Y Block C auf Layer X Gab es da nicht mal so einen Punkt, wo man so eine Definitionsdatei erstellt und dann über die Zeichnung laufen lassen kann? Wir haben mehrere Zeichnungen von einer Firma, in denen ich die Blöcke (Symbole) auf unseren Standard setzen will. ------------------ Danke und Grüße Olaf P.S. Wer Schreinfehler findet, darf sie behalten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 15. Jun. 2015 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für wuselking
Mit der nächsten Acadversion hättest du die similar-funktion, da könntest du die Blöcke komfortable einfach per Mausklick filtern. Ansonsten halt Quikselect oder Filter verwenden. Im "Object Selection Filters" hast du auch die Möglichkeit nach unterschiedlichen Parametern zu filtern. Legst du dort entspr. Filternamen, wie im Bild, an. Die sind im File C:\Users\username\AppData\Roaming\Autodesk\C3D 2014\enu\Support Filter.nfl zu finden und sehen so aus -- Do not edit this file. :ai_lisp|A1-1 (2 . "A1-1") (0 . "INSERT") :ai_str|A1-1 Block Name = A1-1 Object = Block :ai_lisp|B1 (0 . "INSERT") (2 . "B1") :ai_str|B1 Object = Block Block Name = B1 :ai_lisp|B6 (0 . "INSERT") (2 . "B1") :ai_str|B6 Object = Block Block Name = B1 Damit kannst in jeder neuen Zeichnung die Filter verwenden Eine Programmierung scheint mir daher nicht von Nöten zu sein.
------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 15. Jun. 2015 07:42 <-- editieren / zitieren --> Unities abgeben: Nur für wuselking
Code: (defun c:xx( / ss ssn i bname) (setq i -1) (if (setq ss (ssget "X" '((0 . "INSERT")))) (repeat (sslength ss) (setq ssn (ssname ss (setq i (1+ i))) bname (cdr (assoc 2 (entget ssn))) ) (cond ((= "A1-1" bname) (entmod (subst (cons 8 "LAYER1") ; ... Layer1 für Block 'A1-1' (assoc 8 (entget ssn)) (entget ssn))) ) ((= "B1" bname) (entmod (subst (cons 8 "LAYER2") ; ... Layer2 für Block 'B1' (assoc 8 (entget ssn)) (entget ssn))) ) ((= "B6" bname) (entmod (subst (cons 8 "LAYER3") ; ... Layer3 für Block 'B6' (assoc 8 (entget ssn)) (entget ssn))) ) ) ) ) (princ) )
Hier mal auf die Schnelle etwas zusammengetippt, wie du es mittels Lisp-code auch lösen könntest. Speichere als LSP-datei ab und lade die Datei mittels appload in deine Zeichnung. Dannach kannst du die Funktion mit Eingabe xx starten. Wie du in den Zeilen selbst lesen kannst, müsstest du dir die Filterung entsprechend deinem Bedarf angleichen. Alles klar?! ------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
[Diese Nachricht wurde von cadplayer am 15. Jun. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 2.5 - 2025, Civil 3D, MAP 3D, ACADM, ACA Inventor Prof. 2025, AIP 4-2025 Win 11
|
erstellt am: 15. Jun. 2015 07:47 <-- editieren / zitieren --> Unities abgeben: Nur für wuselking
Zitat: Original erstellt von cadplayer: Mit der nächsten Acadversion hättest du die similar-funktion, ...
Hallo Dirk, Command/Befehl: _SIMILAR kennt auch mein Civil 2016 Version nicht. Oder meinst du SELECTSIMILAR - den Befehl gibt es aber schon seit 2011 auch im StandardautoCAD? Aber die Variante mit den FILTER hilft ja vielleicht schon. Evtl sind aber die Blockgeometrien in der Definition auf festen Layern statt auf Layer 0, die müssten dann noch nachgearbeitet werden (auch mit einem Makro wie NUKE.lsp o.ä.). ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 15. Jun. 2015 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für wuselking
|
wuselking Mitglied
Beiträge: 293 Registriert: 19.11.2004 AutoCAD 2018 EPLAN P8 v2.9 SP1 build 14642
|
erstellt am: 15. Jun. 2015 08:32 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für eure Antworten. Den Befehl SELECTSIMILAR habe ich im AutoCAD 2014 gefunden und ist nicht schlecht. Das mit dem Objektselektionsfilter muss ich mir erst anschauen. Nochmals vielen Dank! ------------------ Danke und Grüße Olaf P.S. Wer Schreinfehler findet, darf sie behalten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
-ikarus- Mitglied Zeichner
Beiträge: 142 Registriert: 12.02.2007 ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015 Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro, Visual Studio 2013 Notepad++ Rechner: HP Z620 Workstation NVIDIA Quadro K4000
|
erstellt am: 15. Jun. 2015 16:37 <-- editieren / zitieren --> Unities abgeben: Nur für wuselking
Hallo ich hab mir da mal was geschrieben: Block-auf-Layer.lsp achtung für den Supportpfad (setq TD-SUPPORTPFAD "....") anpassen!
Code: ; ; ;| ; ; ------------------------------------------------------------------------------- ; ; Jürgen Haubenreich ; ; AutoCAD 2015 ; ; ------------------------------------------------------------------------------- ; ; Copyright (C) 2014 Jürgen Haubenreich ; ; ------------------------------------------------------------------------------- ; ; Lizenzbedingung: ; ; Dieser Quellcode ist geistiges Eigentum von Jürgen Haubenreich und darf mit dessen ; ; Zustimmung verwendet, nach Bedürfnissen angepasst, kopiert und weitergegeben werden. ; ; Es dürfen keine Gebühren auf diesen Quellcode (Programm) erhoben werden, sofern nicht ; ; die Zustimmung von Jürgen Haubenreich vorliegt. ; ; Der Urheberrechtshinweis darf nicht entfernt werden. ; ; ------------------------------------------------------------------------------- ; ; |; (princ "\n[Copyright (C) 2014 Jürgen Haubenreich]\n")(princ) ; (defun C:Block-auf-Layer (/ start_mit_Lay) (setq start_mit_Lay 1) (Block-auf-Lay) (princ "\n[Copyright (C) 2014 Jürgen Haubenreich]\n")(princ) )(defun Block-auf-Lay (/ MD_ERR *ERROR* M:FEHLER S ofang1 AWS1 #kopie inifile ZRFAnfang ZRF N-U N-O zaehler ) (princ "neue Version") ; (vl-load-com) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Error Funktion (setq MD_ERR *ERROR* *ERROR* M:FEHLER ) ;_ end of setq ;;Marke für Zurück nach Abbruch setzen (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)) ) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)) ) ;;;Die eigentliche Funktion: (defun M:FEHLER (S) (print (strcat "M:fehler " S)) (vl-cmdf "_UNDO" "_BACK") (setq *ERROR* MD_ERR) (alert "Der Befehl wurde abgebrochen!") (princ) ) ;_ end of defun ;------------------------ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;------------------------ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq ofang1 (getvar "osmode")) (setvar "osmode" 0) (if (= start_mit_Lay 1) (progn (princ "\nObjekte wählen / <Alle> ") ;kommentar (if (not (setq AWS1 (ssget))) (setq AWS1 (ssget "_X")) (princ "Objekte gewählt" ) ) ;Objektauswahl ) (setq AWS1 (ssget "_X")) ) ; (command "wahl" AWS1 "" ) ;aktiviert die Objektauswahl wieder ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq inifile (strcat TD-SUPPORTPFAD "Block-auf-Layer.INI")) (if (findfile inifile) (progn (princ (strcat "Datei <" inifile "> vorhanden.")) ) (progn (princ (strcat "Datei <" inifile "> nicht gefunden.")) ) ) (setq inifile (OPEN inifile "r")) (setq ZRF (READ-LINE inifile)) ;;;;in diesem Abschnitt werden alle Blöcke auf Layer UK gelegt bis ;;;;auf die Ausnahmen und im Folgendem Abschnitt werden sie dann sotiert! (setq zaehler 1) (while (/= ZRF "[ENDE-AUSNAHME-BLOCK-AUF-LAYER-UK]") (setq i 0) (setq ZRFAnfang (substr ZRF 1 1) ;das = #ZRF (substr ZRF 2) ;die Blockausnahmen ) (if (= ZRFAnfang "=") (progn (princ (strcat "\n----------------------------\n[" (itoa zaehler) "] Durchgang\n" ) ) (princ (strcat "\nZeile <" ZRF "> wird ausgewährtet da ein = vorhanden ist." ) ) (setq zaehler (+ zaehler 1)) (setq ZRF1 (READ-LINE inifile) #ZRF1 (substr ZRF1 2) ) ;die gesamten Blöcke (setq ZRF2 (READ-LINE inifile) #ZRF2 (substr ZRF2 2) ) ;der Layer (setq ZRF3 (READ-LINE inifile) #ZRF3 (substr ZRF3 2) ) ;der LAYER eigenschaften (command "wahl" AWS1 "") (if (setq BLwahl (ssget "_P" (list (cons 0 "INSERT")(cons -4 "<NOT")(cons 2 #ZRF )(cons -4 "NOT>" ))) ) (progn (if (= nil (tblsearch "LAYER" #ZRF2 )) ;--- wenn (progn ;(setq befehl #zrf3 ) ;--- dann (entmake (read #zrf3 )) (princ (strcat "\nLayer <" #ZRF2 "> wurde erstellt.")) ; ende entmake ) ;--- ende dann (princ (strcat "\nLayer <" #ZRF2 "> vorhanden.")) ) (repeat (sslength BLwahl ) (setq OBJEKT (ssname BLwahl i)) (setq AWS (entget OBJEKT )) (if (= "INSERT" (cdr (assoc 0 AWS))) (progn (setq ed (subst (cons 8 #ZRF2 ) (assoc 8 AWS ) AWS) ) (entmod ed ) ) ) (setq i (+ 1 i)) ) ) (princ (strcat "\nkeine Blöcke mit dem Namen: \n" #ZRF "\nvorhanden." ) ) ) ) (princ (strcat "\n----------------------------\nZeile <" ZRF "> wurde nicht ausgewährtet da kein = vorhanden ist." ) ) ) (setq ZRF (READ-LINE inifile )) ) ;;;;;in diesem Abschnitt werden die Blöcke auf die Layer sotiert! (setq zaehler 1) (while (/= ZRF "[ENDE-BLOCK-AUF-LAYER]") (setq i 0) (setq ZRFAnfang (substr ZRF 1 1) #ZRF (substr ZRF 2) ) (if (= ZRFAnfang "=") (progn (princ (strcat "\n----------------------------\n[" (itoa zaehler) "] Durchgang\n" ) ) (princ (strcat "\nZeile <" ZRF "> wird ausgewährtet da ein = vorhanden ist." ) ) (setq zaehler (+ zaehler 1)) (setq ZRF2 (READ-LINE inifile) #ZRF2 (substr ZRF2 2) ) ; der LAYER (setq ZRF3 (READ-LINE inifile) #ZRF3 (substr ZRF3 2) ) ; LAYER eigenschaften (command "wahl" AWS1 "") (if (setq BLwahl (ssget "_P" (list (cons 0 "INSERT") (cons 2 #ZRF))) ) (progn (if (= nil (tblsearch "LAYER" #ZRF2 )) ;--- wenn (progn ;(setq befehl #zrf3 ) ;--- dann (entmake (read #zrf3 )) (princ (strcat "\nLayer <" #ZRF2 "> wurde erstellt.")) ; ende entmake ) ;--- ende dann (princ (strcat "\nLayer <" #ZRF2 "> vorhanden.")) ) (repeat (sslength BLwahl ) (setq OBJEKT (ssname BLwahl i)) (setq AWS (entget OBJEKT )) (if (= "INSERT" (cdr (assoc 0 AWS))) (progn (setq ed (subst (cons 8 #ZRF2 ) (assoc 8 AWS ) AWS) ) (entmod ed ) ;(setq bllayer #ZRF2) ) ) (setq i (+ 1 i)) ) ) (princ (strcat "\nkeine Blöcke mit dem Namen: \n" #ZRF "\nvorhanden." ) ) ) ) (princ (strcat "\n----------------------------\nZeile <" ZRF "> wurde nicht ausgewährtet da kein = vorhanden ist." ) ) ) (setq ZRF (READ-LINE inifile )) ) (CLOSE inifile) ; (setvar "osmode" ofang1) ; (command "regen") (princ "\n<Version 2014> von Jürgen Haubenreich\n<") (princ (strcat TD-SUPPORTPFAD "Block-auf-Layer.INI>\nDiese Datei wurde verwendet!\n" ) ) (princ) ) ;;;;;;;;;;;;;;;;Ende
Block-auf-Layer.ini
Code:
#Haubenreich 07/2014 Block auf Layer #in Lisp File: Block-auf-Layer.lsp[START-AUSNAHME-BLOCK-AUF-LAYER-UK] #der Rest kommt auf Layer UK #1Zeile = alle Blöcke die nicht auf einen anderen Layer verschoben werden sollen #2Zeile = * wählt alle Blöcke aus bis auf die die in Zeile 1 als Ausnahme eingetragen wurden #3Zeile = Layer Name auf den die Blöcke gelegt werden sollen. #4Zeile = Wenn der Layer nochnicht exisitiert dann erzeuge einen Layer mit diesen Eigenschaften # 0 Objekttyp/100 Unterklasse Datenpunktmarkierung/2 Layername/70 alle Layer an/getaut/entspert usw./62 Farbe/6 Linientyp =Bem-Kreis,Bem-Kreis-Text =* =UK =((0 . "LAYER" )(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord" )(2 . "UK" )(70 . 0 )(62 . 2 )(6 . "Continuous" )) [ENDE-AUSNAHME-BLOCK-AUF-LAYER-UK] [START-BLOCK-AUF-LAYER] #aufbau des Befehls: #1Zeile = alle Blöcke die auf den folgenden Layer gelegt werden sollen #2Zeile = Layer Name auf den die Blöcke gelegt werden sollen. #3Zeile = Wenn der Layer noch nicht existiert dann erzeuge einen Layer mit diesen Eigenschaften # 0 Objekttyp/100 Unterklasse Datenpunktmarkierung/2 Layername/70 alle Layer an/getaut/entspert usw./62 Farbe/6 Linientyp =TB25*,TB35*,TB45* =BEPL =((0 . "LAYER" )(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord" )(2 . "BEPL" )(70 . 0 )(62 . 4 )(6 . "Continuous" )) =LKANRAST,SKANRAST =RAST =((0 . "LAYER")(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord" )(2 . "RAST" )(70 . 0 )(62 . 3 )(6 . "Continuous" )) =MF,MF45GRAD =DAEMM1 =((0 . "LAYER")(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord" )(2 . "DAEMM1")(70 . 0)(62 . 1)(6 . "Continuous")) =23-15,31-31,30-30,W50-35,HL50-40,ABDICHT,DEHNPROF,ALU-S-98,VERLD112,VERLD113,LASTEN,ZANGE =ZUB =((0 . "LAYER")(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord" )(2 . "ZUB")(70 . 0)(62 . 3)(6 . "Continuous")) =ALPHA,MUE,LAMBDA,SIGMA,DELTA =TEXT1 =((0 . "LAYER")(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord" )(2 . "TEXT1")(70 . 0)(62 . 1)(6 . "Continuous")) [ENDE-BLOCK-AUF-LAYER]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wuselking Mitglied
Beiträge: 293 Registriert: 19.11.2004 AutoCAD 2018 EPLAN P8 v2.9 SP1 build 14642
|
erstellt am: 15. Jun. 2015 22:24 <-- editieren / zitieren --> Unities abgeben:
Danke auch für diese Info. Ich komme mit der Filterdatei, die ich händisch schnell um die notwendigen Blöcke erweitern kann, sehr gut zurecht und reicht für die konkrete Anforderung. Danke! ------------------ Danke und Grüße Olaf P.S. Wer Schreinfehler findet, darf sie behalten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
-ikarus- Mitglied Zeichner
Beiträge: 142 Registriert: 12.02.2007 ACAD 2015,PSP 2011, Showcase 2015, Mudbox 2015 Indesign CC, Illustrator CC, Photoshop CC, After Effects CC, Premiere Pro CC, Edge Animate CC, Acrobat DC Pro mit PitStop Pro, Visual Studio 2013 Notepad++ Rechner: HP Z620 Workstation NVIDIA Quadro K4000
|
erstellt am: 16. Jun. 2015 06:17 <-- editieren / zitieren --> Unities abgeben: Nur für wuselking
Hallo, Ich hab mir für _Insert einen Reaktor gebastelt der beim Einführung dann alle Blöcke auf den gewünschten Layer legt. Gruß Jürgen
[Diese Nachricht wurde von -ikarus- am 16. Jun. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wuselking Mitglied
Beiträge: 293 Registriert: 19.11.2004 AutoCAD 2018 EPLAN P8 v2.9 SP1 build 14642
|
erstellt am: 16. Jun. 2015 11:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Jürgen, klingt auch interessant. Ist aber für meinen Anwendungsfall nicht brauchbar. Ich bekomme eine Zeichnung, in der jedes Symbol ein eigener Bloch ist. Auch die Symbole, die eigentlich das gleiche Teil anzeigen. Nur der Anfang der Symbolnamen, die das gleiche Teil darstellen, sind gleich. Ich muss also mit Platzhalter * arbeiten und das geht mit der Filterliste sehr gur und relativ rasch. Trotzdem vielen Dank! ------------------ Danke und Grüße Olaf P.S. Wer Schreinfehler findet, darf sie behalten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wuselking Mitglied
Beiträge: 293 Registriert: 19.11.2004 AutoCAD 2018 EPLAN P8 v2.9 SP1 build 14642
|
erstellt am: 16. Jun. 2015 11:39 <-- editieren / zitieren --> Unities abgeben:
|