| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Linie im Block (1087 mal gelesen)
|
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 09. Dez. 2006 13:50 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Habe hier ein kleines Lisp erstellt. Es sollte für mich alle Linien-Elemente im einem Block filtrieren, Die Linien auf ein Layer und die Farben auf "Vonlayer" setzten. Habe bemerkt das es alle Linien im Block findet. Layer und Farbe neu setzten habe ich probleme, kann mir jemand sagen an was es liegt im (DEFUN AL1()?? Danke Nano (DEFUN C:AL() (setq Jblock (tblnext "BLOCK" t)) (while Jblock (setq blk (tblobjname "BLOCK" (cdr (assoc 2 Jblock)))) (while(setq blk (entnext blk)) (setq blkdaten (entget blk)) (setq blkelmen (cdr (assoc 0 blkdaten))) (if (= blkelmen "LINE") ;(ALERT "LINIEN JA") (AL1) ) ) (setq Jblock (tblnext "BLOCK")) ) ) (DEFUN AL1() (subst (cons 8 "A_BAU")(assoc 8 blkdaten) blkdaten) (subst (cons 62 "VONLAYER")(assoc 62 blkdaten) blkdaten) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MZjochen Mitglied Techniker
Beiträge: 18 Registriert: 14.02.2006 ACAD 2010, WIN XP/Vista
|
erstellt am: 09. Dez. 2006 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo Nano, deine Funktion AL1 könnte so lauten: (DEFUN AL1() (setq blkdaten(subst (cons 8 "A_BAU")(assoc 8 blkdaten) blkdaten)) (setq blkdaten (subst (cons 62 "VONLAYER")(assoc 62 blkdaten) blkdaten)) (entmod blkdaten) ) Am Ende von C:AL solltest du noch ein (command "_REGEN") einfügen. Gruß Jochen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MZjochen Mitglied Techniker
Beiträge: 18 Registriert: 14.02.2006 ACAD 2010, WIN XP/Vista
|
erstellt am: 09. Dez. 2006 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
hab ich übersehen, anstelle (setq blkdaten (subst (cons 62 "VONLAYER")(assoc 62 blkdaten) blkdaten)) solltest du: (setq blkdaten (subst (cons 62 256)(assoc 62 blkdaten) blkdaten)) verwenden Gruß Jochen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Dez. 2006 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo Nano und Jochen, Die Farbe "vonLayer" hat die Nummer 256 und sie muss bei der ENTMOD-Funktion verwendet werden. Zudem würde ich immer abfragen, ob der GC 62 schon in der Liste existiert, wenn nämlich nicht, dann kann dieser nicht mit SUBST ausgetauscht werden, sondern muß mit APPEND an die Liste angehängt werden. Ich habe die Funktionen von Nano leicht abgeändert, einfach mal durchschauen:
Code:
(DEFUN C:AL (/ Jblock blk blkdaten) (setq Jblock (tblnext "BLOCK" t)) (while Jblock (setq blk (tblobjname "BLOCK" (cdr (assoc 2 Jblock)))) (while (setq blk (entnext blk)) (if (= (cdr (assoc 0 (entget blk))) "LINE") (entmod (AL1 (entget blk))) ) ) (setq Jblock (tblnext "BLOCK")) ) (command "_.regen") ) (DEFUN AL1 (blkdaten / liste) (setq liste (subst (cons 8 "A_BAU") (assoc 8 blkdaten) blkdaten)) (if (assoc 62 liste) ;;wenn GC 62 nicht vorhanden über append anhängen (subst (cons 62 256) (assoc 62 liste) liste) (append liste (list (cons 62 256)))) )
------------------ viele Grüße Jörn [Diese Nachricht wurde von joern bosse am 09. Dez. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 09. Dez. 2006 15:15 <-- editieren / zitieren --> Unities abgeben:
|
MZjochen Mitglied Techniker
Beiträge: 18 Registriert: 14.02.2006 ACAD 2010, WIN XP/Vista
|
erstellt am: 09. Dez. 2006 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo Jörn, meiner Meinung nach kann man sich die Abfrage ob der GC 62 existiert sparen. Existiert er nähmlich nicht gibt subst die unveränderte Liste zurück. Das append ist auch überflüssig da Objekte mit der Farbe VONLAYER gar keinen GC62 haben. Gruß Jochen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Dez. 2006 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo Jochen, in diesem Fall, wenn sowieso die Farbe "vonLayer" gewünscht ist, hast Du sicherlich recht, aber was ist, wenn man die Funktion allgemeiner verwenden möchte. Es wäre doch mühselig eine zweite Funktion zu schreiben, wenn man die Linien des Blockes z.B. mit der Farbe rot darstellen möchte. Genauso würde ich den Layer in einer solchen Funktion nicht fix angeben, denn auch der Layer kann ja je nach Aufgabestellung ein anderer sein. Also ein bißchen allgemeiner: es wird die Objektliste, die Farbe und der Layer übergeben. Code:
(DEFUN al1 (blkdaten farbe layer / liste) (setq liste (subst (cons 8 layer) (assoc 8 blkdaten) blkdaten)) (if (assoc 62 liste) ;;wenn GC 62 nicht vorhanden über append anhängen (subst (cons 62 farbe) (assoc 62 liste) liste) (append liste (list (cons 62 farbe)))) )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MZjochen Mitglied Techniker
Beiträge: 18 Registriert: 14.02.2006 ACAD 2010, WIN XP/Vista
|
erstellt am: 09. Dez. 2006 16:44 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hallo Jörn, wenn man das ganze für andere Aufgaben variabel gestalten will, muß man es so lösen wie du es vorschlägsts. Allerdings war in der ursprünglichen Aufgabenstellung von Nano ------------ Zitat: Es sollte für mich alle Linien-Elemente im einem Block filtrieren, Die Linien auf ein Layer und die Farben auf "Vonlayer" setzten. ------------ nur von der Farbe "Vonlayer" die Rede. Lange Rede kurzer Sinn Beide Vorschläge funktionieren, dein Vorschlag ist betr. Variabilität mit Sicherheit die bessere Alternative. Gruß Jochen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nano Mitglied
Beiträge: 179 Registriert: 25.10.2004
|
erstellt am: 09. Dez. 2006 18:35 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 09. Dez. 2006 18:48 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Hi Nano, Du solltest Dir unbedingt mal das hier durchlesen: FAQ BlöckeDas Problem bei attributierten Blöcken ist folgendes: Die Attribute der Blockreferenzen können getrennt von den Atrributdefinitionen in den Blockdefinitionen verändert werden. Das geht so weit, dass man an Blockreferenzen Attribute ranhängen kann die in der Blockdefinition gar nicht als Attributdefinitionen existieren. Alter Streit: Bug oder Feature? IMHO absolut tödlich. Wenn Du also in der Blockdefinition an den Attributdefinitionen rummachst, mußt Du den Befehl Attsync starten, der alle Referenzen bezüglich ihrer Attribute mit der Definition synchronisiert. ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 11. Dez. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 09. Dez. 2006 19:58 <-- editieren / zitieren --> Unities abgeben: Nur für Nano
Zitat: Original erstellt von marc.scherer: Hi Nano, Du solltest Dir unbedingt mal das hier durchlesen: FAQ Blöcke Das Problem bei attributierten Blöcken ist folgendes: Die Attribute der Blockreferenzen können getrennt von denen in den Blockdefinitionen verändert werden. Das geht so weit, dass man an Blockreferenzen Attribute ranhängen kann die in der Blockdefinition gar nicht existieren. Alter Streit: Bug oder Feature? IMHO absolut tödlich. Wenn Du also in der Blockdefinition an den Attributen rummachst, mußt Du den Befehl Attsync starten, der alle Referenzen bezüglich ihrer Attribute mit der Definition synchronisiert.
In den Blockdefinitionen existieren prinzipiell keine Attribute (außer natürlich, wenn ein Insert mit Attributen Bestandteil einer Blockdefinition ist), sondern Attribut-Definitionen. Nur für bestimmte Arten von Attributdefinitionen wird beim Einfügen des Blocks über die entsprechenden AutoCAD-Befehle auch ein Attribut für das Insert erzeugt. Durch Programmierung des Einfügens können beliebige Attribute aber auch an Inserts gehängt werden, deren Blockdefinitionen über gar keine (oder andere) Attributdefinitionen verfügen. Diese von Applikationen angehängten Attribute aber werden von einigen AutoCAD Funktionen nicht erkannt und führen zu Fehlern (z.B. der Befehl EATTEDIT - ohne Test vermute ich, dass auch ATTEXT dafür nicht funktioniert). Insgesamt zeigt sich dabei, dass das Konzept der Attribute in AutoCAD inkonsistent ist. Es ist über viele AutoCAD Versionen nicht gepflegt und weiter entwickelt worden, und die neueren Funktionen wie EATTEDIT nehmen nur unzulänglich Rücksicht auf bestimmte Aspekte. Das Problem ist halt, dass bei sehr vielen Anwendern existenziell wichtige Informationen in diesen Attributen stecken, und dass hier deshalb Kompatibilität zu den ältesten AutoCAD Versionen absolut unerlässlich ist. Eine Umprogrammierung der ganzen Attributgesdchichte ist wegen der bereits vorhandenen Inkonsistenzen und der Notwendigkeit zur Kompatibiltät IMO deshalb gar nicht möglich. Autodesk sollte die Attribute so lassen wie sie sind, und parallel dazu ein komplett neues Attributsystem entwickeln, für das es dann verschiedene Konvertierungsmöglichkeiten zur Umwandlung bestehender Attribute geben sollte. Tom Berger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |