Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Hyperlink vom Text

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Hyperlink vom Text (360 / mal gelesen)
xem
Mitglied
Zeichner


Sehen Sie sich das Profil von xem an!   Senden Sie eine Private Message an xem  Schreiben Sie einen Gästebucheintrag für xem

Beiträge: 854
Registriert: 07.08.2008

Software:
AutoCAD 2022 - 64bit
Windows 10 Pro - 64bit
PDFCreator 1.0.2 - 32bit
Ghostscript 9.0 - 64bit
PDF-XChange Viewer - 64bit
GIMP 2.6.8 - 64bit
MS Office 2013 - 32bit
Opera 12 - 32bit
MacroX - 32bit
7-zip - 64bit
-----------------------
Hardware:
Intel i5 680 3,6GHz @ 4GHz
8GB RAM 1333MHz
nVidia GTX 460 1024MB
Intel SSD 2.5 80GB X25-M
Samsung SyncMaster 245B+
Iiyama ProLite E1900s
Logitech mx518
Logitech G11
Roccat Sense Glacier Blue

erstellt am: 27. Okt. 2023 15:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

auf der Suche nach einer Möglichkeit den Textinhalt von einem Text in einen Hyperlink zu bekommen, bin ich >hier< fündig geworden. Ich habe den Code auch so geladen, es funktioniert aber nicht.
Ich gebe den Befehl "updatefield" ein und wähle den Text aus. Dann kommt als Rückmeldung "1 Schriftfeld(er) gefunden. 1 Schriftfeld(er) aktualisiert." Der Hyperlink wurde aber nicht verändert.

Der Befehl "updatefield" ist doch ein AutoCAD Befehl und ist dann der Code eine Ergänzung dazu oder wie soll das funktionieren?


Code:
(defun updatefield (/ s str)
  ;; RJP » 2019-08-07
  (cond ((setq s (ssget "_X" '((0 . "mtext,text") (1 . "@:\*.dwg*"))))
(regapp "PE_URL")
(setq str (strcat (getvar 'dwgprefix) (getvar 'dwgname)))
(foreach x (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  (entmod (append (entget x)
  (list (list -3
      (list "PE_URL"
    (cons 1000 str)
    '(1002 . "{")
    (cons 1000 str)
    '(1002 . "{")
    '(1071 . 1)
    '(1002 . "}")
    '(1002 . "}")
      )
)
  )
  )
  )
)
(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
)
  )
  (princ)
)
;; Update on drawing open
(updatefield)
;; COMMAND REACTOR
(or *fieldpathreactor*
    (setq *fieldpathreactor* (vlr-command-reactor nil '((:vlr-commandwillstart . strtcmd))))
)
;; Update on publish or print
(defun strtcmd (calling-reactor strtcmdinfo)
  (and (wcmatch (car strtcmdinfo) "*PLOT*,*PUBLISH*") (updatefield))
  (princ)
)

------------------
Error in Layer 8

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 22171
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 27. Okt. 2023 18:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für xem 10 Unities + Antwort hilfreich

Hi,


ich habe deinen Post samt Code überflogen, hoffentlich nicht zu fix:

>>"auf der Suche nach einer Möglichkeit den Textinhalt von einem Text in einen Hyperlink zu bekommen, bin ich >hier< fündig geworden."
Das Thema passt.

>>"Ich habe den Code auch so geladen, es funktioniert aber nicht."
Ich bin sicher er funktioniert, halte es daher für wahrscheinlich das du etwas anderes suchst/erwartest.

>>"Ich gebe den Befehl "updatefield" ein und wähle den Text aus."
>>"Dann kommt als Rückmeldung "1 Schriftfeld(er) gefunden. 1 Schriftfeld(er) aktualisiert."
>>"Der Hyperlink wurde aber nicht verändert"

1. Beim Laden der Datei wird die Funktion bereits einmal ausgeführt,
   da du darüber nicht verwundert bis, erwartest du vermutlich etwas anderes von der Funktion.
2. Zweitens, das hast du bereits selbst beantwortet:

>>"Der Befehl "updatefield" ist doch ein AutoCAD Befehl"
Genau, du hast einen Standard AutoCAD-Befehl gestartet, welcher rein gar-nichts mit dem Code zutun hat!
Aber wie gesagt, beim laden der Datei wird die Funktion bereits 1x ausgeführt.

Lispfunktionen
(defun c:IRGENDWAS - So wird mit Lisp eine Funktion definiert, welche auch als AutoCAD-Befehl zur Verfügung stehen soll.
Man kann also wie den Befehl LINIE oder KREIS, dann auch IRGENDWAS eingeben zum starten.
(defun IRGENDWAS - So, ohne das "c:", definiert man Lispfunktion welche nicht als AutoCAD-Befehl zur Verfügung gestellt werden.
Möchte man eine Lispfunktion ausführen, so gehören die Klammern dazu.
(IRGENDWAS) oder (C:IRGENDWAS)


  

Der Code macht folgendes:
1. Suche alle Texte und MTexte welche einen Textwert nach dem Muster "@:\*.dwg*" haben (Achtung, GROSSkleinSchreibung beachten / das ist auch noch ein Bug in dem Code m.M.n.)
2. Erstelle/Ändere an jedem dieser Objekte einen Hyperlink mit dem Ziel=Die Datei in welcher du und die (M)Texte gerade sind.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

xem
Mitglied
Zeichner


Sehen Sie sich das Profil von xem an!   Senden Sie eine Private Message an xem  Schreiben Sie einen Gästebucheintrag für xem

Beiträge: 854
Registriert: 07.08.2008

Software:
AutoCAD 2022 - 64bit
Windows 10 Pro - 64bit
PDFCreator 1.0.2 - 32bit
Ghostscript 9.0 - 64bit
PDF-XChange Viewer - 64bit
GIMP 2.6.8 - 64bit
MS Office 2013 - 32bit
Opera 12 - 32bit
MacroX - 32bit
7-zip - 64bit
-----------------------
Hardware:
Intel i5 680 3,6GHz @ 4GHz
8GB RAM 1333MHz
nVidia GTX 460 1024MB
Intel SSD 2.5 80GB X25-M
Samsung SyncMaster 245B+
Iiyama ProLite E1900s
Logitech mx518
Logitech G11
Roccat Sense Glacier Blue

erstellt am: 30. Okt. 2023 08:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen,

so macht der Start in die Woche doch Spaß. Danke für die Erklärung.
Ja wenn man weiß wie der Code funktioniert, funktioniert er auch. 

Was meinst du mit

Zitat:
Achtung, GROSSkleinSchreibung beachten / das ist auch noch ein Bug in dem Code m.M.n
?
Der Text soll doch 1:1 übernommen werden und da ist die GROSSkleinSchreibung doch egal. ?

Dann habe ich noch einen Text in einem Block "Planrahmen", wo der Code nicht funktioniert.
Damit er da auch funktioniert muss doch sicher bei setq s mit definiert werden, dass auch Blöcke gesucht werden.
Reicht das dann schon? Irgendwie muss ja in den Block noch reingegangen werden und nicht nur ausgewählt werden.

Danke

------------------
Error in Layer 8

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 22171
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 30. Okt. 2023 09:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für xem 10 Unities + Antwort hilfreich

Moin,

>>"Der Text soll doch 1:1 übernommen werden und da ist die GROSSkleinSchreibung doch egal. ?"
Was das Übernehmen angeht, JA. Aber wohin soll er es denn übernehmen?
Du hast 100 Texte, zwei sollen den Hyperlink zur aktuellen Datei bekommen.

Frage: Woher soll das Programm wissen das es zwei sind und woher soll es wissen welche zwei von den hundert?


In dem Programm ist das aktuell so geregelt:
1. Suche alle Texte und MTexte welche einen Textwert nach dem Muster "@:\*.dwg*" haben

Wenn also genau die beiden Texte einen Textwert enthalten welcher  "@:\*.dwg*" entspricht, dann wird dort der Hyperlink ergänzt/geändert.

Ein Text "123" oder "abc" würde das also nicht betreffen,
einen Text "C:\abc123.DWG" AUCH NICHT,
"C:\abc123.dwg" hingegen schon - dort würde ein Hyperlink gesetzt werden.

>>"Dann habe ich noch einen Text in einem Block "Planrahmen", wo der Code nicht funktioniert."
Die AutoCAD Objektwahl und auch SSGET können nur nach Toplevel Objekten suchen,
bei Änderungen in Blöcken muß man ganz anders vorgehen und die Blocktabelle durchlaufen.

Beispielcode, überall wo es um 'in allen Blöcken'(Blockdefinitionen) geht, egal ob man da löscht, Farbe ändert oder sonstiges.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

xem
Mitglied
Zeichner


Sehen Sie sich das Profil von xem an!   Senden Sie eine Private Message an xem  Schreiben Sie einen Gästebucheintrag für xem

Beiträge: 854
Registriert: 07.08.2008

Software:
AutoCAD 2022 - 64bit
Windows 10 Pro - 64bit
PDFCreator 1.0.2 - 32bit
Ghostscript 9.0 - 64bit
PDF-XChange Viewer - 64bit
GIMP 2.6.8 - 64bit
MS Office 2013 - 32bit
Opera 12 - 32bit
MacroX - 32bit
7-zip - 64bit
-----------------------
Hardware:
Intel i5 680 3,6GHz @ 4GHz
8GB RAM 1333MHz
nVidia GTX 460 1024MB
Intel SSD 2.5 80GB X25-M
Samsung SyncMaster 245B+
Iiyama ProLite E1900s
Logitech mx518
Logitech G11
Roccat Sense Glacier Blue

erstellt am: 30. Okt. 2023 10:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Die GROSSkleinSchreibung habe ich jetzt verstanden. Die bezieht sich auf die Suche und nicht wie ich dachte auf den Text.

Zum Text in Block ändern. Wie funktioniert da im allgemeinen so ein Code?
Kann man sagen "Suche Block Planrahmen" und dann lasse den Code ablaufen?
Ich habe da kein Plan wie man da rangeht. Die Codes im Forum verstehe ich auch nicht wirklich.
Was ich vermuten würde ist erst mal den Block suchen mit if und dann mit progn den Code ablaufen lassen?

------------------
Error in Layer 8

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 22171
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 30. Okt. 2023 11:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für xem 10 Unities + Antwort hilfreich

>>"Kann man sagen "Suche Block Planrahmen"
Blockdefinitionen braucht man nicht suchen, man kann direkt darauf zugreifen (bei dynamischen Blöcken ist das Thema aber wieder aufwändiger)
(entget(tblobjname "BLOCK" "Planrahmen"))

Außer man weiß nicht um welche Blöcke es geht, dann untersucht man einfach jeden Block ob es ein Kandidat ist oder nicht.
AutoLisp-Funktion TBLNEXT passt da ganz gut.
Falls ja, durchsucht man jedes darin enthaltene Objekt und wenn das den Kriterien entspricht (hier also vielleicht ein Text mit dem Wert "@:/*.dwg"),
DANN kann man *wasauchimmer* damit machen. In deinem Fall: Einen Hyperlink anhängen/ändern.


>>"und dann lasse den Code ablaufen?"
Was den Kern des Codes angeht - Ja, aber nicht die Objektwahl und somit: Nein, das geht so nicht.
Quick&Dirty würde das gehen, denn man kann ja auch Blöcke im BEDIT öffnen und dort ist der Text ja "Toplevel",
aber das ist Murks.


>>"Ich habe da kein Plan wie man da rangeht. Die Codes im Forum verstehe ich auch nicht wirklich."
Ich würde auch eher empfehlen mit den Basics zu beginnen statt an so einer Stelle quer einzusteigen,
ist zwar toll wenn man da schnell etwas erreicht hat, aber Ahnung hat man dann noch immer nicht :-/


>>"und dann mit progn den Code ablaufen lassen?"
Progn ist nur eine Hilfsfunktion für den Fall das man mehrere Ausdrucke zusammenfassen möchte,
weil zum Beispiel einige Funktionen nur einen Ausdruck akzeptieren oder man auch nur die letzte
Rückgabe erhalten möchte.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

xem
Mitglied
Zeichner


Sehen Sie sich das Profil von xem an!   Senden Sie eine Private Message an xem  Schreiben Sie einen Gästebucheintrag für xem

Beiträge: 854
Registriert: 07.08.2008

Software:
AutoCAD 2022 - 64bit
Windows 10 Pro - 64bit
PDFCreator 1.0.2 - 32bit
Ghostscript 9.0 - 64bit
PDF-XChange Viewer - 64bit
GIMP 2.6.8 - 64bit
MS Office 2013 - 32bit
Opera 12 - 32bit
MacroX - 32bit
7-zip - 64bit
-----------------------
Hardware:
Intel i5 680 3,6GHz @ 4GHz
8GB RAM 1333MHz
nVidia GTX 460 1024MB
Intel SSD 2.5 80GB X25-M
Samsung SyncMaster 245B+
Iiyama ProLite E1900s
Logitech mx518
Logitech G11
Roccat Sense Glacier Blue

erstellt am: 30. Okt. 2023 13:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe es jetzt mal den Code mit einem Schriftfeld getestet und da funktioniert es nicht.
Es ist jetzt auch nicht wichtig, sondern nur ein nice to have. Damit sollte der Pfad der DWG Datei im PDF als Hyperlink enthalten sein und mit einem Klick könnte man die DWG dann öffnen. Wenn mal mehr Zeit ist werde ich mich weiter dran versuchen, aber vielen lieben Dank schon mal für die Hilfe und Erklärungen.

------------------
Error in Layer 8

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 22171
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 30. Okt. 2023 14:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für xem 10 Unities + Antwort hilfreich

>>"Ich habe es jetzt mal den Code mit einem Schriftfeld getestet und da funktioniert es nicht."

Eigentlich sollte es auch funktionieren wenn der Inhalt durch ein Schriftfeld dargestellt wird,
aber es gibt da wohl imo einen Bug in ACAD
! Du hast mit einem TEXT getestet, richtig?
Mit einem MText hätte es funktioniert!
Die AutoCAD-Objektwahlmöglichkeiten, inkl. ssget, schlagen alle* fehl im Falle von Schriftfeldanzeigen im TEXTobjekt (*ausser die Schnellauswahl).

Teste es noch einmal, nur damit du es gesehen hast, mit einem MTEXT.

Ich sehe da noch einen kleinen Schönheitsfehler neben dem GROSSkleinSchreibung, wenn auch in der praxis sicher recht irrelevant:
(1 . "@:\*.dwg") würde auch "a:\\\123#dwg" oder "o:!dwg" als gültig erkennen, besser wäre da zumindest (1 . "@:\\*`.dwg*,@:\\*`.DWG")

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

xem
Mitglied
Zeichner


Sehen Sie sich das Profil von xem an!   Senden Sie eine Private Message an xem  Schreiben Sie einen Gästebucheintrag für xem

Beiträge: 854
Registriert: 07.08.2008

Software:
AutoCAD 2022 - 64bit
Windows 10 Pro - 64bit
PDFCreator 1.0.2 - 32bit
Ghostscript 9.0 - 64bit
PDF-XChange Viewer - 64bit
GIMP 2.6.8 - 64bit
MS Office 2013 - 32bit
Opera 12 - 32bit
MacroX - 32bit
7-zip - 64bit
-----------------------
Hardware:
Intel i5 680 3,6GHz @ 4GHz
8GB RAM 1333MHz
nVidia GTX 460 1024MB
Intel SSD 2.5 80GB X25-M
Samsung SyncMaster 245B+
Iiyama ProLite E1900s
Logitech mx518
Logitech G11
Roccat Sense Glacier Blue

erstellt am: 30. Okt. 2023 16:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Du hast mit einem TEXT getestet, richtig?

Ja

Zitat:
Mit einem MText hätte es funktioniert!

Ja

Oh Mann, wahrscheinlich weißt du auch schon meine nächsten Fragen warum wieder etwas nicht funktioniert ... 

------------------
Error in Layer 8

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz