| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Block im Block (637 mal gelesen)
|
V-team Mitglied Vermessungsingenieur
Beiträge: 6 Registriert: 26.05.2005 Windows XP Pro AutoCAD 2004 AutoCAD MAP 2005 GeoCAD 2004 TachyCAD 4.0 HylasFM
|
erstellt am: 26. Mai. 2005 10:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, 1.Frage wir haben Blöcke (symbole) mit zwei Attributen. Die Attribute sollen zu Text, auf zwei verschiedenen Layer werden. Dabei darf das Symbol nicht aufgelöst werden. Expresstools "Explode Attributes to text" löst das Symbol mit auf! 2.Frage Wie kann man eine vielzahl von Blöcken (auf verschiedenen Layern, nicht die Block internen)so bearbeiten, dass der in der Blockdefiniton festgelegte Layer zum aktuellen Layer für das Symbol wird. Es sollen alle Blöcke dieser Art (zb Baum) dann auf Layer Baum liegen. MfG olvier
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: 26. Mai. 2005 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
zu 1. ist mit einer Programmierung lösbar, Frage ist, ob sich der Aufwand lohnt. zu 2. in der Blockdefinition ist kein Layer festgelegt. Meinst du das so, das die Blockreferenz auf dem Layer eingefügt wird, auf dem ein Blockelement definiert wurde, oder sollen alle Blockreferenzen mit Namen "BAUM" auf dem Layer "Baum" eingefügt werden? ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AsSchu Ehrenmitglied Konstrukteur
Beiträge: 1632 Registriert: 27.06.2003 ACAD 2012
|
erstellt am: 26. Mai. 2005 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Moin, 1. Frage: da gibt es ein lisp: ;** Datei ATTRTXT.LSP ;** Dient zum Umwandeln von sichtbaren Blockattributen in Text ;************************************************************************* ;** Funktionen ;** C:ATTRTOTXT_EXP Wandelt sichtbare Blockattribute in Text um und ;** zerlegt den Block ;** C:ATTRTOTXT_NOEXP Wandelt sichtbare Blockattribute in Text und setzt ;** alle Attributwerte des Blocks auf "", der Block ;** wird nicht zerlegt ;************************************************************************* ;** Autor: NAVRATIL Heinz ;** Stand: 04.11.1998 ;** Ver.: 4.2 -- AutoCAD Ver. 13 / 14, 2000,2002 ;** email: hnavratil@KGH.KABA.com 2. Frage: bei www.cadwiesel.de das Tool nuke.lsp
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V-team Mitglied Vermessungsingenieur
Beiträge: 6 Registriert: 26.05.2005
|
erstellt am: 26. Mai. 2005 12:01 <-- editieren / zitieren --> Unities abgeben:
hi, also das mit den Programmen ging nicht so wie ich mir das gedacht habe. Wir haben Blöcke mit dem internen Layer z.B Baum, die aber im GeoCAD immer mit Sektoren eingelesen werden z.B KA-P8-S1. Möchten aber das der ganze Block auf Baum liegt und der layer KA-P8-S1 gelöscht wird. (Man bekommt den layer KA-P8-S1 nur weg, wenn man den Block auflöst). Des weiteren müssen wir die Punktnummer und Höhe von jedem Block als text rausschreiben, dabei darf der Block aber nicht aufgelöst werden. Die Punktnummer, Höhe muss auf einem seperaten Layer liegen. Ich danke schon mal für die Antworten MfG Oliver 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: 26. Mai. 2005 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Vorschlag: mach ne kleine Zeichnung mit dem jetzigen Istzustand auf der einen Seite und deinem Wunschzustand auf der anderen Seite. Entsprechende TextKommentare an den Objekten machen sich auch nicht schlecht. Und diese Zeichnung hängst du an deinem nächsten Posting mit ran. Und schon wird vielleicht alles klarer. Denke mal, die meisten haben kein GeoCAD... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." 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: 26. Mai. 2005 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Hallo Oliver, für Dein erstes Problem habe ich was, mußt Du mal ausprobieren, bei Deinem 2. Problem muß ich nachfragen: Innerhalb des Blockes gibt es Objekte ,die auf einem bestimmten Layer definiert sind, auch wenn es die Sektor-Layer von GeoCAD sind. Desweiteren sind noch Attribute enthalten ??? => bei den Attributen kann der Layer in der Blockdefinition aber ein anderer sein als bei den tatsächlich sichtbaren Blöcken in der Zeichnung. Willst Du die Blöcke alle umdefinieren, so daß alle Layer der beinhalteten Zeichenobjekte sowie Attribute (wenn vorhanden) z.B. auf den (Einfüge)-Layer "Baum" kommen? Wenn Du die Layer innerhalb der Blockdefinition änderst, dann sollte auch der Layer "KA-P8..." zu löschen sein. Ich glaube, ich habe den Faden verloren, ich schließe mich CADmium an. (Mit GeoCAD habe ich ein paar Jährchen Erfahrung) So, jetzt nochmal zum ersten Problem, probier mal folgendes LISP aus, es werden aus den Attributen "PNR" und "HOEHE" Texte mit den gleichen Eigenschaften und seperaten Layern erzuegt: ;;;Aus den Attributen PNR und HOEHE von GeoCAD-Punkten werden Texte erzeugt ;;;Jörn Bosse, 26.05.05 (defun c:att_text ( / att aws n m temp) (if (not JB_text_pkn) (setq JB_text_pkn "0")) (if (not JB_text_ph) (setq JB_text_ph "0")) (if (/=(setq temp(getstring (strcat "\nBitte Layer für die Punktnummer eingeben:<" JB_text_pkn ">")))"") (setq JB_text_pkn temp)) (if (/=(setq temp(getstring (strcat "\nBitte Layer für die Punkthöhe eingeben:<" JB_text_ph ">")))"") (setq JB_text_ph temp)) (princ "\nBitte Blöcke mit Attributen wählen:") (if (setq aws (ssget (list (cons 0 "INSERT")))) (progn (setq n 0) (repeat (sslength aws) (setq m 1) (while (and(JB_entnext (ssname aws n) m) (/=(cdr(assoc 0(entget(JB_entnext (ssname aws n) m))))"SEQEND")) (if (=(cdr(assoc 0(setq att(entget(JB_entnext (ssname aws n) m)))))"ATTRIB") (entmake (list (cons 0 "TEXT") (cons 100 "AcDbEntity") (cons 67 0) (assoc 410 att) (cond ((=(cdr(assoc 2 att))"PNR") (cons 8 JB_text_pkn)) ((=(cdr(assoc 2 att))"HOEHE") (cons 8 JB_text_ph)) (T (cons 8 "0"))) (cons 100 "AcDbText") (assoc 10 att) (assoc 40 att) (assoc 1 att) (assoc 50 att) (assoc 41 att) (assoc 51 att) (assoc 7 att) (assoc 71 att) (assoc 72 att) (assoc 11 att) (assoc 210 att) (cons 100 "AcDbAttribute") (assoc 73 att)))) (setq m (+ m 1))) (setq n (+ n 1)))) (alert "Es wurden keine Blöcke gewählt.") ) (princ) )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V-team Mitglied Vermessungsingenieur
Beiträge: 6 Registriert: 26.05.2005
|
erstellt am: 26. Mai. 2005 16:23 <-- editieren / zitieren --> Unities abgeben:
ich habe jetzt 2 Dateien genacht ( soll und ist dwgs). ihr könnt euch die dateien ja mal ansehen und sagen was ihr von denen haltet. Das problem ist nur, dass wir mehrere Daten schon fertig gezeichnet haben. Die wir jetzt noch umstellen müssen und in zukunft auch so abgeben müssen.Der Auftraggeber möchte die Punkte und Höhen als Texte haben und dabei den Block nicht aufgelöst haben.Die Layer Ka.. sollen weg fallen. MfG oliver
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AsSchu Ehrenmitglied Konstrukteur
Beiträge: 1632 Registriert: 27.06.2003 ACAD 2012
|
erstellt am: 26. Mai. 2005 16:41 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
die Bäume kannst du mit nuke anpassen. Die attribute mit ^C^C_-attedit;;;;; (fürs Knöpfchen) da kann man dann den Layer der Attribute neu eingeben. Block bleibt erhalten. oder das: C:ATTRTOTXT_NOEXP Wandelt sichtbare Blockattribute in Text und setzt ;** alle Attributwerte des Blocks auf "", der Block ;** wird nicht zerlegt und dann mit Blockbearbeiten die Layer der Texte ändern [Diese Nachricht wurde von AsSchu am 26. Mai. 2005 editiert.] 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: 26. Mai. 2005 18:09 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Hallo Olliver, ich habe nochmal getestet, das Ergebnis habe ich Dir beigepackt, vieleicht hilft es ja. Allerdings habe ich die Blöcke der 3D-Punkte nicht in Ursprung zerlegt, da ich der Meinung bin, daß damit Informationen verloren gehen. Wenn Du nur den Text hast gibt es schließlich keine feste Zuordnung zum Punkt mehr. Die Attribute der Blöcke werden durch die Lisp-Routine "att_text" umdefiniert, so daß Du die KA-* Layer dann bereinigen kannst. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V-team Mitglied Vermessungsingenieur
Beiträge: 6 Registriert: 26.05.2005
|
erstellt am: 27. Mai. 2005 09:15 <-- editieren / zitieren --> Unities abgeben:
Moin, @joern bosse die LSP ist genau das was ich suche. Nur ich habe wenig ahnung vom Programieren.Wir haben ja noch mehr Blöcke in einer Datei die umgestellt werden müssen. Sehe ich das richtig, dass ich hier meine anderen Blöcke hinzufügen muss.(das sind dann so ca 100-150 Blöcke die ich hinzufügen muss) ;;;Blockname TGL_6321 ((=(cdr(assoc 2 (entget(ssname aws n))))"TGL_6321") (entmod(subst (cons 8 "BAUM")(assoc 8(entget(ssname aws n)))(entget(ssname aws n))))) ;;;Blockname TGL_3110 ((=(cdr(assoc 2 (entget(ssname aws n))))"TGL_3110") (entmod(subst (cons 8 "TOPOGRAFISCHER_PUNKT")(assoc 8(entget(ssname aws n)))(entget(ssname aws n))))) Oder gibt es einen Befehl , wo er alle Blöcke einer Zeichung automatisch erkennt und sie umstellt. Der Block interne Layer ist ja immer richtig.
MfG Oliver 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: 27. Mai. 2005 09:34 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Hallo Olliver, wenn Du soviele Blöcke hast kannst Du das zwar in die LISP-Datei einarbeiten, aber es macht dann mehr Sinn, mit einer externen Textdatei zu arbeiten. z.B. TGL_6321;BAUM TGL_3110;TOPOGRAFISCHER_PUNKT ... wobei nur ein Trennzeichen festgelegt werden muß. Wenn Du die Daten aus einer Excel-Tabelle rauskopierst kann das Trennzeichen auch ein Tab sein. Wenn Du aber auf die schnelle erstmal weitermachen willst, dann kannst Du in der LISP-Datei folgendermaßen vorgehen: Wenn Du dem Block TGL_#### den Layer "TGL_LAYER" zuweisen willst, dann müßte der Code folgendermaßen erweitert werden: ;;;Blockname TGL_6321 ((=(cdr(assoc 2 (entget(ssname aws n))))"TGL_6321") (entmod(subst (cons 8 "BAUM")(assoc 8(entget(ssname aws n)))(entget(ssname aws n))))) ;;;Blockname TGL_#### ((=(cdr(assoc 2 (entget(ssname aws n))))"TGL_####") (entmod(subst (cons 8 "TGL_LAYER")(assoc 8(entget(ssname aws n)))(entget(ssname aws n))))) ;;;Blockname TGL_3110 ((=(cdr(assoc 2 (entget(ssname aws n))))"TGL_3110") (entmod(subst (cons 8 "TOPOGRAFISCHER_PUNKT")(assoc 8(entget(ssname aws n)))(entget(ssname aws n))))) Heute habe ich aber keine zeitlichen Spielraum mehr, wenn noch Fragen zu der Lösung mit der externen Textdatei sind, dann am Montag.
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V-team Mitglied Vermessungsingenieur
Beiträge: 6 Registriert: 26.05.2005
|
erstellt am: 30. Mai. 2005 16:00 <-- editieren / zitieren --> Unities abgeben:
Hi, @joern bosse ich habe die Lsp mit den fehlenden Blöcken ergänzt. Alles ging super!! Nur ein Problem habe ich noch: Die LSP wandelt die Attribute in Text um. Jetzt steht der Text und das Attribut übereinander und liegen auf dem selben Layer. Gibt es eine Möglichkeit die Attribute aller Blöcke zu löschen, oder sie auf einen seperaten Layer zu legen? Blockattribute auf:Block_Punktnummer;Block_Punkthöhe Texte auf: Punktnummer;Punkthöhe MfG Olvier
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: 30. Mai. 2005 17:13 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Hallo Oliver, meiner Meinung nach gibt es ein paar Möglichkeiten, wie Ihr vorgehen könntet: 1. Die Text oder die Attribute auf eine seperaten Layer packen, z.B. die Attribute auf die PUNKTHÖHE_ATT und PUNKTNUMMER_ATT. Dann könntet Ihr die Layer frieren, und es ist nur der Text sichtbar. 2. Beides auf dem gleichen Layer lassen, aber über den Befehl "ATTZEIG" die Sichtbarkeit der Attribute ausschalten. 3. Die Inhalte der Attribute durch eine Leerstring ersetzen, daß würde aber zur Folge haben, daß Information vernichtet wird. (Nur der Text und ein Symbol kann ein ganz schönes Durcheinander geben, wenn man mehr als 3 Symbole hat. 4. Das was ich machen würde: Auf die Texte verzichten und nur mit den Attributen arbeiten. Kannst ja mal Deine Meinung dazu kundtun.
------------------ viele Grüße Jörn 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: 30. Mai. 2005 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für V-team
Für Variante 1 habe ich das LISP geändert (Zeile 25, 27, 73 und 75) Es wird jetzt an den Layernamen für das Attribut "_ATT" hinten angehängt, vergleiche es eifach mal mit der anderen LISP-Datei. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V-team Mitglied Vermessungsingenieur
Beiträge: 6 Registriert: 26.05.2005
|
erstellt am: 31. Mai. 2005 08:55 <-- editieren / zitieren --> Unities abgeben:
Moin joern, ich würde auch auf die Texte verzichten, nur der Auftraggeber möchte Punktnummer und Höhe als Text haben. -Kunde ist ja König- Ihre erste Möglichkeit hat mir am besten gefallen.Habe einfach meine Blöcke aus der alten Lsp in Ihre neue kopiert.Jetzt läuft alles sauber durch. Ich möchte mich noch mal bei Ihnen bedanken, ohne die Lsp-Dateien müssten wir viel mit der Hand änderen. Ohne Ihre Hilfe hätten wir das nie geschafft, da wir über keine Lsp-Kenntnisse verfügen. MfG Oliver Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |