Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Linie im Block

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Linie im Block (1021 mal gelesen)
Nano
Mitglied



Sehen Sie sich das Profil von Nano an!   Senden Sie eine Private Message an Nano  Schreiben Sie einen Gästebucheintrag für Nano

Beiträge: 179
Registriert: 25.10.2004

erstellt am: 09. Dez. 2006 13:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von MZjochen an!   Senden Sie eine Private Message an MZjochen  Schreiben Sie einen Gästebucheintrag für MZjochen

Beiträge: 18
Registriert: 14.02.2006

ACAD 2010, WIN XP/Vista

erstellt am: 09. Dez. 2006 14:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von MZjochen an!   Senden Sie eine Private Message an MZjochen  Schreiben Sie einen Gästebucheintrag für MZjochen

Beiträge: 18
Registriert: 14.02.2006

ACAD 2010, WIN XP/Vista

erstellt am: 09. Dez. 2006 14:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 09. Dez. 2006 15:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Nano an!   Senden Sie eine Private Message an Nano  Schreiben Sie einen Gästebucheintrag für Nano

Beiträge: 179
Registriert: 25.10.2004

erstellt am: 09. Dez. 2006 15:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Jörn genial

Jetzt kann ich das auch für andere Elemte brauchen.
Danke Jörn

Gruss Nano

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MZjochen
Mitglied
Techniker


Sehen Sie sich das Profil von MZjochen an!   Senden Sie eine Private Message an MZjochen  Schreiben Sie einen Gästebucheintrag für MZjochen

Beiträge: 18
Registriert: 14.02.2006

ACAD 2010, WIN XP/Vista

erstellt am: 09. Dez. 2006 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 09. Dez. 2006 16:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von MZjochen an!   Senden Sie eine Private Message an MZjochen  Schreiben Sie einen Gästebucheintrag für MZjochen

Beiträge: 18
Registriert: 14.02.2006

ACAD 2010, WIN XP/Vista

erstellt am: 09. Dez. 2006 16:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Nano an!   Senden Sie eine Private Message an Nano  Schreiben Sie einen Gästebucheintrag für Nano

Beiträge: 179
Registriert: 25.10.2004

erstellt am: 09. Dez. 2006 18:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Jörn

Super alles geht, leider kann ich nicht an die Attributen zugreiffen.
ist das richtig?? Element "ATTDEF" oder "ATTRIB"

Gruss Nano

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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 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



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 09. Dez. 2006 19:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Nano 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz