| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Im Fluss: Daten konsolidiert - Prozesse synchronisiert , ein Anwenderbericht
|
Autor
|
Thema: block ersetzen (4010 mal gelesen)
|
will Mitglied
Beiträge: 66 Registriert: 11.07.2001
|
erstellt am: 21. Jan. 2005 15:04 <-- editieren / zitieren --> Unities abgeben:
hallo allerseits, ich möchte einen block durch einen anderen tauschen. habe es mit dem lisp "blocktausch" probiert. leider sind die blöcke die ich austauschen möchte, skaliert. der block der die alten ersetzen soll, aber nicht und soll auch nicht skaliert werden! Das bedeutet, dass ich von dem zu ersetzenden block nur die Position übernehmen möchte, geht das? wenn ja: wie? danke schon mal... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lazzlo Mitglied Schreinermeister, Dipl.-Ing. Holztechnik
Beiträge: 24 Registriert: 14.01.2005 AutoCAd 2005 Nemetschek Allplan 2004 ArCon 2003 CADwork 13 Friedrich und Lochner Windows Office 2003<P>Windows XP pro. sp2<P>AMD Athlon XP 3200+ 2.20GHz 400 Barton FSB MSI K7N2 delta-L Motherboard, NVIDIA nForce2 2 x 512 Infineon Dual Chanel 160GB SAMSUNG SP1614N, 7200 8MB Dual Chanel 2 x Nec DVD-R/*RW DVD Brenner ND-2500 bulk 8x ATI Radeon 9600XT 128MB Dual PowerColor AGP8x
|
erstellt am: 21. Jan. 2005 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hey, ich weis zwar nicht ob das zu einfach ist, aber ich sag es trotzdem. Beim neuen Block erstellen, wähle den zu ersetzenden Blocknamen aus wähle als Objekt den neuen Block, mit neuem Einfügepunkt und speichere. Dann kommt die Meldung : bestehenden Block ersetzte, Ja. Bei mir sind dann alle Blöcke neu. Liebe Grüsse aus Bayern Alexander Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
will Mitglied
Beiträge: 66 Registriert: 11.07.2001
|
erstellt am: 21. Jan. 2005 15:17 <-- editieren / zitieren --> Unities abgeben:
ersetzen funktioniert ja auch, nur will ich nicht, dass der neue block skaliert ist. z.B.: ALTER BLOCK: Faktor X: -0.25 Faktor Y: 0.5 Faktor Z: 0.5 NEUER BLOCK: Faktor X: 1 Faktor Y: 1 Faktor Z: 1 d.h. er soll seine normale skalierung beibehalten und nur die position des alten blocks übernehmen. und das für alle blöcke mit dem gleichen namen (einige ) 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: 21. Jan. 2005 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für will
|
flaschenpost Mitglied Architekt
Beiträge: 497 Registriert: 29.09.2004 ADT 2004 / Windows XP
|
erstellt am: 21. Jan. 2005 22:14 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo will, vielleicht reicht Dir so etwas : ;Blocktausch, Befehl: BLT (defun C:BLT (/ blwahl nblock_name nfakt nblock nr) (print "Blöcke wählen:") (setq blwahl (ssget '((0 . "INSERT")) ) ) (setq nblock_name (getstring "\nName des Blockes, der bestehende ersetzen soll: ")) (setq nfakt (getreal "\nFaktor des neuen Blockes (gleicher Faktor xyz): ")) (setq nr 0) (while (< nr (sslength blwahl)) (progn (setq block (entget (ssname blwahl nr)) ) (setq nblock (subst (cons 2 nblock_name)(assoc 2 block) block )) (setq nblock (subst (cons 41 nfakt)(assoc 41 nblock) nblock )) (setq nblock (subst (cons 42 nfakt)(assoc 42 nblock) nblock )) (setq nblock (subst (cons 43 nfakt)(assoc 43 nblock) nblock )) (entmod nblock) ) (setq nr (+ nr 1)) ) ) Gruß Carsten 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: 22. Jan. 2005 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für will
@Carsten 1. Benutzerfreundlicher, d.h. ohne Progfehler bei Eingabeabbruch ist sowas : (if(and(setq blwahl (ssget '((0 . "INSERT")) ) ) (setq nblock_name (getstring "\nName des Blockes, der bestehende ersetzen soll: ")) (setq nfakt (getreal "\nFaktor des neuen Blockes (gleicher Faktor xyz): ")) (tblsearch "BLOCK" nblock_name) ) (progn ... ) 2. zu (setq nr 0) (while (< nr (sslength blwahl)) (progn (setq block (entget (ssname blwahl nr)) ) ... nehme da lieber repeat! While testet jedesmal -> unnütze Rechenzeit!, und mit (sslength blwahl) steht doch die Anzahl der Duchläufe schon fest.! Besser ist: (setq nr -1) (repeat (sslength blwahl) (setq block (entget (ssname blwahl (setq nr(1+ nr)))) ) .... )
------------------ - 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 |
flaschenpost Mitglied Architekt
Beiträge: 497 Registriert: 29.09.2004 ADT 2004 / Windows XP
|
erstellt am: 22. Jan. 2005 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo Thomas, danke für die hilfreichen Hinweise ! Und da ich schon mal am Ändern war, habe ich es ein bischen komfortabler gemacht. Gruß Carsten ;Blocktausch, Befehl: BLT ; ;Bei nicht vorhandenem Blocknamen ;oder Enter auf Wunsch Block-Auflistung ; ;Flaschenpost - cad.de - 22.01.05
(defun C:BLT (/ blwahl nr nblock_name nfakt nblock bln1 bln tbl_block) (block_auswahl) (block_tauschen) )
(defun block_auswahl () (print "Blöcke wählen:") (while (= (setq blwahl (ssget '((0 . "INSERT")))) nil) (print "Kein Block gewählt") ) );defun (defun block_tauschen () (if (and (setq nblock_name (getstring T "\nName des Blockes, der bestehende ersetzen soll: ")) (tblsearch "BLOCK" nblock_name) );and (progn (setq nfakt (getreal "\nFaktor des neuen Blockes (gleicher Faktor xyz): ")) (setq nr -1) (repeat (sslength blwahl) (setq block (entget (ssname blwahl (setq nr (1+ nr)))) ) (setq nblock (subst (cons 2 nblock_name)(assoc 2 block) block )) (setq nblock (subst (cons 41 nfakt)(assoc 41 nblock) nblock )) (setq nblock (subst (cons 42 nfakt)(assoc 42 nblock) nblock )) (setq nblock (subst (cons 43 nfakt)(assoc 43 nblock) nblock )) (entmod nblock) );repeat );progn dann (progn (initget "j n") (if (= (getkword "Blockname unbekannt - Blocknamen auflisten ? [Ja/Nein]:") "j") (progn (setq bln1 (list (cdr (assoc 2 (tblnext "block" T)))) ) (while (/= (setq tbl_block (tblnext "block")) nil) (if (/= (substr (cdr (assoc 2 tbl_block)) 1 1) "*") (progn (setq bln (cons (cdr (assoc 2 tbl_block)) bln1)) (setq bln1 bln) ) ) ) (reverse bln) (print bln) (block_tauschen) );progn (block_tauschen) );if );progn sonst ); if );defun 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: 23. Jan. 2005 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für will
noch ein Hinweis: wenn der User bei (setq nfakt (getreal "\nFaktor des neuen Blockes (gleicher Faktor xyz): ")) nur Enter drückt, d.h. nil zurückgegeben wird crasht dein Prog immer noch. D.h. -> mit initget nil-Eingaben / 0 nicht zulassen bzw. so: (or(and(setq nfakt (getreal "\nFaktor des neuen Blockes <1> : ")) (/= nfakt 0) ) (setq nfakt 1.0) ) somit: falls nichts, oder 0 eingegeben wird, wird nfakt auf 1.0 gesetzt. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."
[Diese Nachricht wurde von CADmium am 23. Jan. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flaschenpost Mitglied Architekt
Beiträge: 497 Registriert: 29.09.2004 ADT 2004 / Windows XP
|
erstellt am: 23. Jan. 2005 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für will
@Thomas die Feinde einer optimalen Lösung sind Gewohnheit und Kopierfunktion ;-) Jetzt ist auch das Problem raus; negative Werte werden unterbunden, weil es bei gleichem xyz-Faktor nicht sinnvoll erscheint.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robin H. Mitglied Bauzeichner
Beiträge: 59 Registriert: 07.09.2004 Transtec 1300, P2.40GHz, 2047 MB RAM, Matrox Millennium G550<P>Win2000, AutoCAD 2004, Soficad, Stratbau, VPHybridCAD
|
erstellt am: 24. Jan. 2005 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo zusammen Das lsp-Ding war genau das was wir suchten, nur kann man das noch so biegen das auch die Blöcke in allen Layouts mitgeändert werden? (ich hab leider nahezu null ahnung von lsp...) Wir müssen eben in vielen vielen Zeichnungen noch viele viele mehr Layauts ändern, da wir alle Blattumgrenzungen/Titelblätter mit unserem neuen Logo ausstatten müssen... Und das "normale" Block überschreiben funktioniert eben leider nicht ganz... Optisch zwar tip top nur werden nicht alle Atributte angepasst... und ich hatte mich schon gefreut das ein nur einen Tag altes lsp all meine probleme löst :-) ------------------ Retschhlchreeibfer snid Eenigutm des Betrchtraes! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flaschenpost Mitglied Architekt
Beiträge: 497 Registriert: 29.09.2004 ADT 2004 / Windows XP
|
erstellt am: 24. Jan. 2005 14:33 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo Robin, eigentlich wird nicht hin- und hergebogen, damit die Lösung für jeden Anwender maßgeschnitten ist. Dafür gibt es Programmierer. Das ist jetzt nur für Deinen Fall, nicht in der Anwendung getestet. Vorher alle Layouts aktiv schalten (Strg-Taste) ! Gruß Carsten
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robin H. Mitglied Bauzeichner
Beiträge: 59 Registriert: 07.09.2004 Transtec 1300, P2.40GHz, 2047 MB RAM, Matrox Millennium G550<P>Win2000, AutoCAD 2004, Soficad, Stratbau, VPHybridCAD
|
erstellt am: 24. Jan. 2005 15:04 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo Carsten Vielen vielen Dank, funktioniert 1a!! Hast uns einige Stunden an stupieder Kopeierarbeit erspart! Und ja ja ich wollte mich eigentlich schon lange mal mit Autolisp-programmieren befassen, aber eben...wollte... (Dann könnt ich selber biegen...) gruss Robin ------------------ Retschhlchreeibfer snid Eenigutm des Betrchtraes! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stephan 2 Mitglied
Beiträge: 326 Registriert: 28.11.2001
|
erstellt am: 03. Mrz. 2005 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo Robin Das Tool ist gut. Jedoch habe ich das Problem, dass mein Firmenlogo innerhalb eines Schriftkopfblockes liegt. Also Block in Block. An der stelle greift dein Tool nicht. Es findest den Block einfach nicht. Kann man hier noch was drehen? Vielen Dank für Hilfe. Stephan ------------------ Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robin H. Mitglied Bauzeichner
Beiträge: 59 Registriert: 07.09.2004 Transtec 1300, P2.40GHz, 2047 MB RAM, Matrox Millennium G550<P>Win2000, AutoCAD 2004, Soficad, Stratbau, VPHybridCAD
|
erstellt am: 03. Mrz. 2005 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für will
Hallo wir haben zudem "damals" festgestellt das Blöcke die sich scheinbar nicht sauber ändern lassen mit "Block an jeweiliger stelle bearbeiten" oder durch geänderten Block wieder mit selben Namen einfügen erst sauber dargestellt wurden wenn man unter Blockatributmanager rechts oben auf synchroniesieren drückt. (das erspart dann auch blockersatztools :-)) Gruss Robin ------------------ Retschhlchreeibfer snid Eenigutm des Betrchtraes! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
robertuscoolus Mitglied
Beiträge: 1 Registriert: 10.10.2017
|
erstellt am: 10. Okt. 2017 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für will
|
joeycool Mitglied Ingenieur TGA
Beiträge: 1455 Registriert: 01.06.2004 MEP/ACAD 2008,..., 2013, 2014, 2015, 2016 und 2017 REVIT MEP 2017 WIN7 64 bit i7 3,4 GHZ, SSD Platte, 16 GB Ram NVDIA Quadro K 2200
|
erstellt am: 11. Okt. 2017 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für will
|