| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| AERZEN konsolidiert weltweite Autodesk Softwarelizenzen mit CIDEON (Autodesk, AutoCAD, Inventor), ein Anwenderbericht
|
Autor
|
Thema: Attributsdaten übertragen (2800 mal gelesen)
|
xconsole Mitglied Student :-)
Beiträge: 49 Registriert: 10.02.2003
|
erstellt am: 15. Mrz. 2004 11:02 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich wollte noch einmal wissen, ob es möglich ist Attributwerte von einem Schriftkopf in einen anderen zu übertragen? Fakten... Beide Schriftköpfe sind in einer Zeichnung. Haben gleiche Attributsabfragen - sehen aber unterschiedlich aus Einer ist im Model - der ander im Papierbereich. AutoCad14... Bisher mußte ich immer ie Attribute "per Hand" Zeile für Zeile ändern, obwohl die "Richtigen" Daten in dem Schriftkopf im Modelbereich sind.
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: 15. Mrz. 2004 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
|
Alpschorsch Mitglied Dipl.-Ing.(FH) Architektur
Beiträge: 735 Registriert: 18.11.2003 Grafikkarte: Rage128 Fury ProII 32MB Prozzesor ~1,5MHz Arbeitsspeicher~1,3GB Windows 2000 Professional ACAD 2004 Express Tools(deutsch) Photoshop 7.0 Quark Express 5.5 Acrobat 5.0
|
erstellt am: 15. Mrz. 2004 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Mrz. 2004 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
|
xconsole Mitglied Student :-)
Beiträge: 49 Registriert: 10.02.2003
|
erstellt am: 15. Mrz. 2004 11:16 <-- editieren / zitieren --> Unities abgeben:
|
marvin101010 Mitglied ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)
Beiträge: 562 Registriert: 22.01.2003 Pentium 4 Windows XP Autocad 2006 Autocad 2006LT + Extender ADT 2007 ArchiCAD
|
erstellt am: 15. Mrz. 2004 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Mrz. 2004 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
..und der Autocad-Kopie (_copy) Befehl ist auch nicht für ACAD2000 weil man keine Objekte vom Modell in den Papierbereich damit kopieren kann ??? Frage: welche anderen AutoCAD-Befehle funktionieren denn normalerweise vom Modell zum Papierbereich ? ____ - hol dir den Block über die Zw.Ablage in den jeweilig anderen Bereich und übertrage dann, die Kopie kannste ja löschen oder wie auch immer. ------------------ - Sebastian Mattis - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xconsole Mitglied Student :-)
Beiträge: 49 Registriert: 10.02.2003
|
erstellt am: 15. Mrz. 2004 11:38 <-- editieren / zitieren --> Unities abgeben:
Ja bitte entschuldigt! Ok - ich bin wieder auf dem stand Null, ich kann att-clone nicht vewenden, weil es nicht unter Acad 14 läuft. Ich kann den kopf ja ohne weiteres vom Modell ind den Papierbereich kopieren (man höre und staune). Aber was dann??? 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: 15. Mrz. 2004 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
du hast doch eben geschrieben: Zitat:
jedenfalls geht der befehl bei springen vom Modell- in den Papierbereich verloren...
das sagt mir doch das du das lisp laden kannst und ausführen auch... Also läuft es doch ? - wenigstens bis dahin <verwirrt> Das mit einem Wechsel der Bereiche der Befehl abgebrochen wird ist auch logisch - wie bei jedem anderen Befehl ja auch. (oder nicht?) Nach der Antwort von Marv und mir sollte es nun funken ?!? -du machst sonstwas damit Qell und Zielblock in einem Bereich liegen (beide im Modell oder beide im Papierbereich) - dann wendest du att-clone an ...) ------------------ - Sebastian Mattis - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 15. Mrz. 2004 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hallo Xconsole, warum scheidet denn die Variante, ein Ansichtsfenster im Layout auf den Schriftkopf des Modellbereichs anzulegen, aus? Dazu habe ich von Dir noch kein Statemant vernehmen können. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xconsole Mitglied Student :-)
Beiträge: 49 Registriert: 10.02.2003
|
erstellt am: 15. Mrz. 2004 11:54 <-- editieren / zitieren --> Unities abgeben:
als erstes muß ich nocheinmal sagen, das att-clone bei mir unter ACAD 14 nicht läuft. ist glaube ich auch ganz normal so, denn di lisp wurde glaube ich unter 2000 entwickelt. Die Variante mit dem Ansichtsfenster für den Schriftkopf scheidet deswegen aus, weil der 1. und der 2. Schriftkopf nicht identisch vom aussehen her sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 15. Mrz. 2004 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
gut, dann scheidet das Kopieren also auch aus. Folgender Vorschlag: Füge nach den Zeilen (if (not ATT-LST) (princ "\nQuell-Block enthält keinerlei Attributsdaten... Funktionsende !" ) ;_ end princ (progn
folgende Zeile ein (setvar "TILEMODE" (abs (- (getvar "TILEMODE") 1))) (Anbei die geänderte Datei, umbenennen in *.lsp) Das Programm sollte eigentlich auch unter R14 laufen. Der Abbruch geschieht ja nur wegen des Wechsels vom Papier- in den Modellbereich, oder eben anders herum. Wenn dass dann immer noch nicht funzt, dann poste hier mal die Fehlermeldung. Es hat sich zwar etwas von R14 zu 2000 im Lisp geändert, aber was, das habe ich nicht mehr so genau im Kopf. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 15. Mrz. 2004 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hi, ich melde mich nun auch noch mal zu Wort. Hier die Lösung mit getrennten Aufrufen vom Lesen (AC-R) und Schreiben (AC-W), jedoch auch unter R14 lauffähig, da ich das vl-bb-ref/set einfach durch 'ne globale Variable ersetzt habe. Code:
;;; *********************************************************************** ;;; * ATT-CLONE dient zum Übertragen von Attributwerten eines Blockes auf * ;;; * beliebige andere Blöcke. * ;;; * Bei identischen "Feldnamen" (also AttributNAMEN) wird der Wert des * ;;; * Quellblocks als Wert des zu klickenden Zielblocks eingetragen. * ;;; * Versuch's mit der dem Original-Zip Archiv beiliegenden * ;;; * "Test-Att-Clone.dwg" * ;;; * * ;;; * Written by Marc Scherer in 2002 * ;;; * * ;;; * Anregungen/Kritik an "marc.scherer@zvo.com" * ;;; * * ;;; * Dieses Programm folgt der "Better than Nothing" Philosophie des * ;;; * Leonid Nemirovsky: (http://home.pacifier.com/~nemi/) * ;;; * Zitat: * ;;; * The AutoLISP programs you are about to check - are NOT shareware * ;;; * or freeware. They are BTN - Better Than Nothing Software. * ;;; * You can freely use them in any way you choose. * ;;; * Just remember one thing....... * ;;; * If they do not perform the way you expect - * ;;; * it is still BETTER THAN NOTHING !!! * ;;; * I wrote those programs for my every day work. * ;;; * Some of them are more useful, some - are SO SO. * ;;; * ... Good Luck ! * ;;; ***********************************************************************;;; Globale Variable: "MS:ATT-CLONE-EXT" ;;; Funktion zum Aufruf von Att-Clone um ;;; zwischen der Pinselübertragung z.B. ;;; den Layoutbereich zu wechseln, oder aber das Dokument. ;;; Erfordert jedoch einen zweiteiligen Aufruf: ;;; "AC-R" zum Auslesen der Werte, ;;; "AC-W" zum Schreiben der ausgelesenen Werte (defun C:AC-R () (setq MS:ATT-CLONE-EXT T) ;_ globale Variable, steuert das Verhalten von ATT-CLONE (C:ATT-CLONE) ;_ Aufruf von ATT-CLONE (setq MS:ATT-CLONE-EXT nil) (princ) ;_ Silent out ) (defun C:AC-W (/ MS:ATT-LST) (if ;; (not (setq MS:ATT-LST (vl-bb-ref 'MS:ATT-LST))) (not (setq MS:ATT-LST MS:ATT-LST-GLOBAL)) (alert "KEINE Attributwerte zum Schreiben vorhanden.\nStarte bitte zuerst \"AC-R\" zum Auslesen,\nerst dann \"AC-W\" zum Schreiben..." ) ;_ end of alert (ATT-TO MS:ATT-LST) ;_ Aufruf zum Attributwerte schreiben ) ;_ end of if (princ) ;_ Silent out ) ;_ end of defun ;;; Funktionsaufruf zum Pinselübertragen ;;; Überträgt Attributwerte von einem Quellblock auf beliebig ;;; viele Zielblöcke (defun C:ATT-CLONE (/ MS:ATT-LST CHK OBJ OBJ-DATA) (while (/= (if (setq OBJ (car (entsel "\nBitte Quellblock für Attributwert-Übertragung wählen: " ) ;_ end of entsel ) ;_ end of car ) ;_ end of setq (progn (setq CHK (cdr (assoc 0 (setq OBJ-DATA (entget OBJ))))) (if (/= CHK "INSERT") (princ "\nKein BLOCK-Objekt geklickt, versuch's noch einmal...") ) ;_ end if CHK ) ;_ end of progn (princ "\nNICHTS geklickt, versuch's noch einmal...") ) ;_ end of if "INSERT" ) ;_ end of /= ) ;_ end of while (if OBJ-DATA (progn (if (CHK-ENT OBJ) (progn (setq MS:ATT-LST (ALL-BL-TXT OBJ)) (if (not MS:ATT-LST) (princ "\nQuell-Block enthält keinerlei Attributsdaten... Funktionsende !" ) ;_ end princ (progn (if MS:ATT-CLONE-EXT ;_ Funktionsaufruf für zweigeteilten Aufruf? (Read/Write) (progn (setq MS:ATT-CLONE-EXT NIL) ;_ globale Variable löschen ;_ (vl-bb-set 'MS:ATT-LST MS:ATT-LST) ;_ Attributsliste ins Blackboard schreiben (setq MS:ATT-LST-GLOBAL MS:ATT-LST) (princ "\nOK, Attributwerte ausgelesen. Werte schreiben mit \"ATT-W\"." ) ;_ end of princ ) ;_ end of progn (ATT-TO MS:ATT-LST) ;_ Übertragen auf starten ) ;_ end of if ) ;_ end progn ) ;_ end if ) ;_ end progn (princ "\nObjekt war KEIN Block oder UNGÜLTIG!") ) ;_ end of if ) ;_ end of progn ) ;_ end of if (princ) ) ;_ end defun
;;; Subfunction: Übertragen auf... ;;; While Schleife, solange Blöcke gewählt werden auf die ;;; Attributwerte übertragen werden soll... (defun ATT-TO (ATT-LST / OBJ) (while (setq OBJ (car (entsel "\nBitte Zielblock für Attributwert-Übertragung wählen (R.Klick=Ende): " ) ;_ end of entsel ) ;_ end of car ) ;_ end of setq (if (CHK-ENT OBJ) (progn (if (assoc 66 (entget OBJ)) (progn (foreach ELEM ATT-LST (princ (ED-ATT ELEM OBJ)) ) ;_ end foreach ) ;_ end progn (princ "\nZielblock enthält keine Attribute !") ) ;_ end if ) ;_ end progn (princ "\nObjekt war KEIN Block oder UNGÜLTIG!") ) ;_ end of if ) ;_ end of while ) ;_ end of defun
;;; Funktion checkt, ob Objekt ein regulärer Block oder'n Xref ;;; ist, bzw. ob's überhaupt 'n Insert ist... ;;; Rückgabe: Wenn kein Block, dann nil, ansonsten Ausgabe wie Eingabe (defun CHK-ENT (ENT / ENT-DATA) (if (= (type ent) 'ENAME) (setq ent-data (entget ent)) (setq ent-data (entget (car ent))) ) ;_ end of if (cond ((= (cdr (assoc 0 ENT-DATA)) "INSERT" ) ;_ end = (if (>= (cdr (assoc 70 (tblsearch "BLOCK" (cdr (assoc 2 ENT-DATA)))) ) ;_ end cdr 4 ) ;_ Wenn T dann Xref!!! (progn (princ "\nGeklicktes Objekt war ein XREF. Versuch's noch mal..." ) ;_ end princ (setq ENT NIL) ) ;_ end progn (setq ENT ENT) ) ;_ end if ) (t (princ "\nGeklicktes Objekt war KEIN Block. Versuch's noch mal..." ) ;_ end princ (setq ENT NIL) ) ) ;_ end cond ENT ) ;_ end defun
;;; Funktion tauscht Attributwerte aus. ;;; Zu übergeben ist eine cons List aus ;;; ("ATTBEZEICHNUNG" . "NEUER TEXTWERT") ;;; sowie der Elementname des Blocks, dessen Werte verändert werden sollen (defun ED-ATT (CHANGELST OBJNAME / ATTNAME BACK CHK OBJDATA TXTWRT) (setq ATTNAME (car CHANGELST) TXTWRT (cdr CHANGELST) OBJDATA (entget OBJNAME) ) ;_ end of setq (while (/= (cdr (assoc 0 OBJDATA)) "SEQEND") (setq OBJDATA (entget (entnext (cdr (assoc -1 OBJDATA))))) (if (eq (cdr (assoc 2 OBJDATA)) ATTNAME) (progn (setq OBJDATA (subst (cons 1 TXTWRT) (assoc 1 OBJDATA) OBJDATA)) (entmod OBJDATA) (setq CHK (entupd OBJNAME) OBJDATA (list (cons 0 "SEQEND")) ) ;_ end setq ) ;_ end progn ) ;_ end if ) ;_ end while (if CHK (setq BACK (strcat "\nWert: \"" TXTWRT "\" für: \"" ATTNAME "\" eingesetzt..." ) ;_ end strcat ) ;_ end of setq (setq BACK (strcat "\nFeld: \"" ATTNAME "\" im Zielblock nicht vorhanden...") ) ;_ end of setq ) ;_ end of if BACK ) ;_ end of defun
;;; Funktion durchsucht den Block, der über ename übergeben wird, ;;; nach ATTRIB's und erzeugt 'ne Textliste ;;; Retval: Liste der Texte oder nil (defun ALL-BL-TXT (ENAME / EDATA RETVAL) (setq RETVAL '() ;_ Liste initialiseren EDATA (entget ENAME) ) ;_ end setq (if (assoc 66 EDATA) ;_ GC 66 fehlt, wenn Block keine Attrib's hat (progn (while (/= (cdr (assoc 0 EDATA)) "SEQEND") ;_ Solange die Sequenz nicht endet... (setq EDATA (entget (entnext (cdr (assoc -1 EDATA))))) (if (= (cdr (assoc 0 EDATA)) "ATTRIB") (setq RETVAL (cons (cons (cdr (assoc 2 EDATA)) (cdr (assoc 1 EDATA))) RETVAL ) ;_ end cons ) ;_ end setq ) ;_ end if ) ;_ end while (setq RETVAL (reverse RETVAL)) ) ;_ end progn ) ;_ end if RETVAL ) ;_ end defun
(princ "\n\"ATT-CLONE\"->\"Pinselübertragung\" von Attribut-WERTEN...") (princ "\nFür den bereichsübergreifenden Einsatz \(Layout/Dokument\):") (princ "\n\"AC-R\" zum Auslesen, \"AC-W\" zum Schreiben verwenden...") (princ)
------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axeld Mitglied Projektingenieur/CAD-Administrator
Beiträge: 267 Registriert: 18.11.2002
|
erstellt am: 15. Mrz. 2004 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
|
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: 15. Mrz. 2004 16:02 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hi AxelD, mach doch selber... Ist Quellcode, da kannste ja reinschreiben, was Du willst: Code:
(defun C:ATT-R () (alert (strcat "Mach's Dir selbst: " (getvar "loginname"))) (princ) )
... ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 15. Mrz. 2004 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
@Axel, du kannst ja den Code in jedem x-beliebigen Editor öffnen, und wenn dir soviel daran gelegen ist, dann kannst du es wohl auch selber machen. Marc, so wie alle anderen auch, hilft hier freiwillig. Er ist nicht bei cad.de angestellt, also auch zu nichts verpflichtet. Zum Anderen ist es wohl auch so, dass die Benennung der Funktionen und Subfunktionen einer gewissen (Marc's eigenen) Logik unterliegen. Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Iris2 Mitglied CAD-Admin
Beiträge: 1170 Registriert: 17.02.2004 REVIT TEKLA Structures AutoCAD / Soficad ACA Microstation
|
erstellt am: 07. Mai. 2009 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hallo Marc, habe gerade Deine ATT_CLONE lip entdeckt. Ausprobiert und für "Klasse" empfunden Nun hätte ich eine Bitte, kannst Du mir sagen wie ich diesen Code so "umschreibe", dass einen händische Auswahl des Quell- und Zielblocke entfällt und die Blöcke über den Blocknamen ausgewählt werden. Der Blockname des Quellblocks ist immer "Kopf****". Die * stehen für unterschiedliche Zahlen. Geht sowas überhaupt?
------------------ Liebe Grüße Iris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 07. Mai. 2009 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Zitat: Original erstellt von Iris2: Geht sowas überhaupt?
Hi Iris2, es geht eigentlich so gut wie alles. Jedoch benötigt man auch 'ne klare Vorstellung von dem was man eigentlich will. Aus Deiner Beschreibung kann ich nicht so ganz herauslesen was genau Du willst. Man benötigt schon präzisere Angaben als Du sie hier postest um eine Anpassung vornehmen zu können. Att-Clone macht ja nix anderes als aus einem zu klickenden Block die Attribute auszulesen und dessen Attributwerte auf gleichnamige Attribute eines anderen zu klickenden Block zu übertragen. Und im "zu klicken" steckt dann auch das Problem. Wie sollte das Programm den Quellblock, wie den Zielblock finden? Liegt alles im Modellbereich? Oder sind die Blöcke jeweils in unterschiedlichen Layouts zu finden? Gibt es ein Master-Layout? Soll als Ziel mehr als ein Block ausgewählt werden? Fragen über Fragen. Mach Dir mal Gedanken was GENAU Du willst und ich kann Dir sagen, ob ich etwas passendes hier rumliegen habe oder ob das ganze dann doch eher in Richtung "bedarfsgerechte Programmierung" geht. ------------------ Ciao, Marc 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: 07. Mai. 2009 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Zitat: Original erstellt von Iris2: Hallo Marc,habe gerade Deine ATT_CLONE lip entdeckt. Ausprobiert und für "Klasse" empfunden :D Nun hätte ich eine Bitte, kannst Du mir sagen wie ich diesen Code so "umschreibe", dass einen händische Auswahl des Quell- und Zielblocke entfällt und die Blöcke über den Blocknamen ausgewählt werden. Der Blockname des Quellblocks ist immer "Kopf****". Die * stehen für unterschiedliche Zahlen. Geht sowas überhaupt?
Wie man ein Attribut eines speziellen Blockes sucht und füllt ist mal hier realisiert .... und der Rest ist wie gesagt eine Frage der genauen Aufgabenstellung.
------------------ - 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 |
Iris2 Mitglied CAD-Admin
Beiträge: 1170 Registriert: 17.02.2004 REVIT TEKLA Structures AutoCAD / Soficad ACA Microstation
|
erstellt am: 07. Mai. 2009 15:32 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hallo Marc, danke für die schnelle Antwort. Ich will mal versuchen genau zu beschreiben was ich tun möchte: Im Layout 0001 befindet sich unser Firmenplankopf als Block mit dem Namen Kopf0001 In dem selben Layout soll aber ein "projekteigener" Plankopf als Block eingefügt werden -Name KopfP001 Beide Blöcke liegen also auf dem selben Layout und haben die gleichen Attribute. Die Attribute in unserem Firmenplankopf werden über ein script beim Öffnen der Datei "gespeist". Soll "unser Plankopf auf den Plänen sichtbar sein, wird er standardmäßig in der linken unteren Ecke des Planrahmens plaziert. Ist nun projektbedingt ein "projekteigener" Plankopf nötig wird der Firmenplankopf skriptgesteuert außerhalb des Planrahmens plaziert (nicht gelöscht!). Den "projekteigener" Plankopf möchte ich nun mit einem 2.script in der linken Planecke plazieren. Die Attributwerte sollen vom Firmenplankopf übernommen werden. Jetzt kommt Deine ATT_CLONEllisp ins Spiel. Ich kann jetzt über die hänsische Auswahl von Quellobjekt und Zielobjekt die Atttributwerde auf den "projekteigener" Plankopf übertragen. => funktioniert einwandfrei. Möchte ich aber nicht (oder besser die Anwender ). Wunsch: "Deine" Lisp soll den Quellblock (Kopf0001) und die Zielblock (KopfP001) anhand ihres Namens auswählen, und nicht über die händische Auswahl. Eine kleine Schwierigkeit ist noch dabei: hat die Datei mehrere Layouts so heißen die Blöcke entsprechend der Layout-Namen. Bsp.: Layout 0002 - Quellblock Kopf0002 - Zielblock KopfN002 Es müsste also der Blockname mit hilfe einer "Wildcard" gesucht werden (Kopf*2) Ich hoffe ich hab´s verständlich erklären können. ------------------ Liebe Grüße Iris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 07. Mai. 2009 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hi Iris2, das heißt also: # Jedes Layout hat immer nur ZWEI in Frage kommende TitleBlocks? Fragen: # Warum unterscheiden sich die Namen der Quellblöcke pro Layout? (Dein Beispiel: Kopf0001, Kopf0002 ...). Ist das nicht immer derselbe Block? # Welchen Regeln folgt die Benennung der Zielblöcke (Dein Beispiel: KopfP001, KopfN002)? Ist das nicht immer "KopfP*"? # Ist 100% gewährleistet, das sich nur zwei TitleBlocks (Quell- und Zielblock) in jedem Layout befinden? # Soll die Funktion nur auf dem jeweils aktiven Layout ausgeführt werden? ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Iris2 Mitglied CAD-Admin
Beiträge: 1170 Registriert: 17.02.2004 REVIT TEKLA Structures AutoCAD / Soficad ACA Microstation
|
erstellt am: 07. Mai. 2009 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hallo Marc, was versteht man unter TitelBlock? In den einzeinen Layouts sind mehrere Blöcke enthalten (kopf/Planrahmen/...) aber alle mit einem eindeutigen Namen. Es ist immer der firmeneigene Kopf enthalten UND der projektspezifische => Summe 2 Antworten: #weil sie durch das script explizit "ausgewählt" werden müssen (die Attributwerte der Planköpfe sind ja jeweils unterschiedlich) # sorry Schreibfehler => der Zeilblock bekommt immer den Namen KopfP* (das Sternchen steht für den jeweiligen Layout-Namen) #Sh. oben => es gibt für jedes Layout nur jeweils einen Quell- und einen Zielblock #Das wäre eine Möglichkeit, da aber die Blocknamen ja in jedem Layout anders sind, gibt´´s vielleich die Möglichkeit alle "in einem Rutsch" abzugleichen ------------------ Liebe Grüße Iris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 07. Mai. 2009 16:50 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
Hi Iris2, hier Deine Lösung für jeweils ein Layout. In den ersten Zeilen des Proggies:
Code:
(setq SOURCENAME "Kopf####" TARGETNAME "Kopf@###" )
legst Du den Schlüssel für Quell- und Zielblock fest, das liest sich dann für AutoCAD so: "Kopf####" = Zeichenkette: "Kopf" Nummer Nummer Nummer Nummer "Kopf@###" = Zeichenkette: "Kopf" AlphabeticCharacter Nummer Nummer NummerWenn sich die Namen also ändern, müßtest Du eben da Hand anlegen. Kopiere einfach den folgenden Code zum Ausgangsprogramm hinzu, speichere es, lade es neu und starte das Prog mit: AUTOCLONETITLEBLOCKS Viel Spaß ;-)
Code:
(defun C:AUTOCLONETITLEBLOCKS (/ ATT-LST MS:ATT-LST OBJ SOURCE SOURCENAME TARGET TARGETNAME) (setq SOURCENAME "Kopf####" TARGETNAME "Kopf@###" ) (if (not (setq SOURCE (ssget "x" (list '(0 . "INSERT") (cons 2 SOURCENAME) (cons 410 (getvar "ctab")) ) ) ) ) (princ (strcat "\nKein Quell-Block für das Filterkriterium >" SOURCENAME "< gefunden! Funktionsende." ) ) (if (not (= (sslength SOURCE) 1)) (princ (strcat "\nAnzahl gefundener Quell-Blöcke für das Filterkriterium >" SOURCENAME "< ist nicht gleich 1! Ungültig. Funktionsende." ) ) (if (setq OBJ (CHK-ENT (ssname SOURCE 0))) (progn (setq MS:ATT-LST (ALL-BL-TXT OBJ)) (if (not MS:ATT-LST) (princ "\nQuell-Block enthält keinerlei Attributsdaten... Funktionsende !" ) (if (not (setq TARGET (ssget "x" (list '(0 . "INSERT") (cons 2 TARGETNAME) (cons 410 (getvar "ctab")) ) ) ) ) (princ (strcat "\nKein Ziel-Block für das Filterkriterium >" TARGETNAME "< gefunden! Funktionsende." ) ) (if (not (= (sslength TARGET) 1)) (princ (strcat "\nAnzahl gefundener Ziel-Blöcke für das Filterkriterium >" TARGETNAME "< ist nicht gleich 1! Ungültig. Funktionsende." ) ) (if (setq OBJ (CHK-ENT (ssname TARGET 0))) (progn (if (assoc 66 (entget OBJ)) (progn (foreach ELEM MS:ATT-LST (princ (ED-ATT ELEM OBJ)) ) ;_ end foreach ) ;_ end progn (princ "\nZielblock enthält keine Attribute !") ) ;_ end if ) (princ "\nZiel-Objekt war KEIN Block oder UNGÜLTIG!") ) ) ) ) ) (princ "\nQuell-Objekt war KEIN Block oder UNGÜLTIG!") ) ) ) (princ) )
Quick & Dirty & wildes Copy & Paste aber geht! ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 07. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Iris2 Mitglied CAD-Admin
Beiträge: 1170 Registriert: 17.02.2004 REVIT TEKLA Structures AutoCAD / Soficad ACA Microstation
|
erstellt am: 08. Mai. 2009 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für xconsole
|