| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Hyperlink finden (350 mal gelesen)
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 05. Jul. 2023 07:42 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander, ich möchte auf einer DWG alle vorhandenen Textefelder durchsuchen und prüfen ob in diesen ein Hyperlink festgelegt ist. Hat jemand eine Idee wie ich das mache? ------------------ ---------------------------------- Mit freundlichen Grüßen Felix 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: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 05. Jul. 2023 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 05. Jul. 2023 11:23 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Ich würde einmal die Blocktabelle durchlaufen und alle Elemente der Blockdefinition durchgehen. Prüfen, ob es ein Textelement ist, Text, MText, AttributDefinition, MtextAttribut, Blockreference->Attributreference. Damit erwischst du alle relevanten Entities, was dir beim SelectionSet nicht unbedingt gelingt, gerade dann nicht, wenn die Texte in beliebiger Tiefe innerhalb eines Blocks verschachtelt sind. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 07. Jul. 2023 09:19 <-- editieren / zitieren --> Unities abgeben:
Also mit dem Code konnte ich leider nichts so richtig anfangen. Ich habe jetzt versucht alle objekte zu durchlaufen und zu testen ob es Texte sind. Aber wie teste ich jetzt ob das Objekt einen Hyperlink hat und lese diesen aus? acObjId.Database.HyperlinkBase bringt leider keinen Erfolg. Code:
Dim acLockCurrDoc As DocumentLock = oDoc.LockDocument() Dim acCurDb As Database = oDoc.Database Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acBlkTblRec As BlockTableRecord Dim acBlkTbl As BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForRead) For Each acObjId As ObjectId In acBlkTblRec If acObjId.ObjectClass().DxfName.Contains("TEXT") Then MsgBox(acObjId.Database.HyperlinkBase) End If Next End Using
------------------ ---------------------------------- Mit freundlichen Grüßen Felix 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: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 07. Jul. 2023 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 10. Jul. 2023 10:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mir die Beispiele angeschaut aber wie schon gesagt konnte ich damit nichts anfangen. Briscke meinte ja man soll lieber alle Elemente durchsuchen, prüfen ob es Texte sind und dann daraus die Hyperlinke suchen. Das habe ich versucht aber ich komme jetzt nicht an die Hyperlinks. ------------------ ---------------------------------- Mit freundlichen Grüßen Felix 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: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 10. Jul. 2023 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Felix, Nach dem VB.NET - Beispiel
Code:
Using acLockCurrDoc As DocumentLock = acDoc.LockDocument() Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim MyEntity As Entity = CType(acTrans.GetObject(MyObjID, OpenMode.ForWrite), Entity) Dim hyperlinkColl As HyperLinkCollection = MyEntity.Hyperlinks Dim hyperL As HyperLink = hyperlinkColl.Item(0) hyperL.Description =" Some description" acTrans.Commit() End Using End Using
D.h. man holt sich zunächst ein Acad Objekt (entity), von diesem frägt man die Hyperlinks Collection ab und weißt diese einem Hyperlink Objekt (Array) zu. Hat dieses Array Werte (Count>0) kann man die Item abfragen und die zugehörigen Eigenschaften (Eigenschaften unter VBA): URL = Webadresse, Dateiname mit Pfad URLDescription = Beschreibung zur URL URLNamedLocation = In .NET müßten die Eigenschaften entsprechend sein: .Name .Description .SubLocation Aber wie schon geschrieben, habe mich am Rande mit .Net beschäftigt das ActiveX-Modell ist aber ähnlich. Genauere Programmdetails muß Dir Holger geben oder Du informierst Dich selber über die diversen Autodesk Seiten. Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 482 Registriert: 19.02.2014 Autodesk Inventor 2022 AutoCAD Mechanical 2021 Microsoft Visual Basic 2010
|
erstellt am: 10. Jul. 2023 15:29 <-- editieren / zitieren --> Unities abgeben:
Das hatte ich bereits versucht aber da stürzt AutCAD ab mit der Meldung "Systemfehler". Code:
Dim acLockCurrDoc As DocumentLock = oDoc.LockDocument() Dim acCurDb As Database = oDoc.Database Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acBlkTblRec As BlockTableRecord Dim acBlkTbl As BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForRead) For Each acObjId As ObjectId In acBlkTblRec If acObjId.ObjectClass().DxfName.Contains("TEXT") Then Dim MyEntity As Entity = CType(acTrans.GetObject(acObjId, OpenMode.ForWrite), Entity) Dim hyperlinkColl As HyperLinkCollection = MyEntity.Hyperlinks Dim hyperL As HyperLink = hyperlinkColl.Item(0) MsgBox(hyperL) ' hyperL.Description = " Some description" 'acTrans.Commit() End If Next End Using
------------------ ---------------------------------- Mit freundlichen Grüßen Felix 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: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 11. Jul. 2023 10:10 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Welchen Systemfehler bekommst Du denn? Möglicherweise hat das Element ja gar keinen Hyperlink (hyperlinkColl.Count = 0) und Du kannst deshalb nicht auf Item(0) zugreifen. Bei der MsgBox würde ich auch die Eigenschaft (HyperL.Name) anzeigen lassen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |