| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Nach Text suchen und diesen löschen (1422 mal gelesen)
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 23. Okt. 2008 16:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mal wieder eine Frage. Ich habe in einer Zeichnung mehrere Layouts in denen der Texte "Für die Produktion gesperrt" steht. Wenn ich nun ein Layout Prüfe, dann möcht ich gerne mittels Programm das der Text in dem aktuellen Layout gelöscht wird. Wie kann ich das bewerkstelligen? Gibt es eine Möglichkeit NUR den Text in aktuellen Layout zu löschen. Alle Texte in der ZNG mit "Für die Produktion gesperrt" habe ich schon herausgefunden. Vorab schon mal Danke für eure Hilfe Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 23. Okt. 2008 23:19 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo Gerhard, leider schreibst Du nicht wie Du alle Texte schon gefunden hast. Vermutlich über SelektionSet mit Mode Selectall. Wenn Du im aktuellen Layout diesen Text suchen möchtest, würde ich den Selektionset mit Mode = acSelectionSetWindow und einem Fenster mit Hilfe der Systemvariablen ExtMin und ExtMax machen. Damit bekommst Du nur die Angezeigten Texte. Alternativ: Durchsuchen von ThisDrawing.ActiveLayout.Block.item( 0 - (~.count -1)) Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 24. Okt. 2008 06:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, danke für deine Antwort. Ich habe mir die Texte mit einem Lispbefehl rausgesucht. Im Parameter suche übergebe ich den Text "Für Produktion ..." Lösche damit aber alle Texte in der Zeichnung und nicht nur den gewünschten im aktuellen Layout.
Code:
(defun c:DWLoeschText ( suche / text) (setvar "tilemode" 0) (setq text (ssget "X" (list (cons 0 "TEXT") (cons 1 suche)))) (if (not text) (princ) (command "_erase" text "") ) (princ) )
Bin in VB leider noch nicht so fit, hast du viellecht ein Codebeispiel für mich? Danke Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 24. Okt. 2008 06:53 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hi Gerhard, Wie sind die Texte denn in das Layout eingefügt worden?! Als Block, Mtext oder als Text?! Ich würde auch das ThisDrawing.ActiveLayout durchlaufen und diese dann nach dem Test überprüfen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 24. Okt. 2008 06:55 <-- editieren / zitieren --> Unities abgeben:
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 24. Okt. 2008 07:15 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hi Gerhard, Hier mal ein Ansatz: Code: Public Sub Suchetext() Dim Object As AcadObject For Each Object In ThisDrawing.ActiveLayout.Block If TypeName(Object) = "IAcadText2" Then If Object.TextString = "gesperrt" Then Object.Delete End If End If Next End Sub
Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
c.schojer Mitglied
Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 24. Okt. 2008 07:25 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo gleich! Sub Delete_Text() Dim ent, SString, Lay SString = "test" For Each ent In ThisDrawing.ActiveLayout.Block Debug.Print ent.Objectname If ent.Objectname = "AcDbText" Then If ent.Textstring = SString Then ent.Delete End If Next ent End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 24. Okt. 2008 07:53 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für beide Beispiele. Habe jetzt nur noch eine Frage zur unten eingefügten Zeile
Code:
For Each ent In ThisDrawing.ActiveLayout.Block
Warum "ActiveLayout.Block"! Das hat nichts mit den Autocad-Block zu tun oder? Gruß Gerhard
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 24. Okt. 2008 08:00 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo Gerhard, Starte das Makro mal mit F8 und schau dann im Direktfenster im unteren Bereich der IDE (Das musst du vielleicht erst über Ansicht... einblenden) nach. Da kannst du dir die Struktur anschauen. Gruß, Carsten [Diese Nachricht wurde von Carsten1210 am 24. Okt. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 24. Okt. 2008 08:03 <-- editieren / zitieren --> Unities abgeben:
|