Aller au contenu

Defiler les hyperliens et le contenu


Messages recommandés

Posté(e)

Hello CADXPiens

 

SVP j'aurais besoin d'une petite routine (que je n'ai pas trouvee)

 

1) A partir d'une selection AutoCAD classique : clic / Fenetre / Tout / CP / etc

 

Tous les resultats sur l'ecran texte AutoCAD ...

( ou eventuellement mieux dans un fichier texte/ascii )

 

- Nombre d'entites dans la selection ayant un Hyperlien (1 ligne ca suffit)

 

- Ecrire N lignes successives avec le contenu de chaque hyperlien

(avec eventuellement un compteur en debut de ligne, ce sera plus joli ! )

 

En fin de routine TOUTEs les entites ayant un Hyperlien sont selectionnees !

 

et c tout !

 

Merci d'avance pour votre bon coeur ...

 

Bonne Annee et surtout la Sante, lecrabe

 

PS: la commande SHOWURLS (c sympa !) des Express Tools ne me convient pas !

Autodesk Expert Elite Team

Posté(e)

Hello

 

Google est mon ami et donc j'ai trouve (chez Xanadu) ce que je cherchais ou presque !

 

SVP si quelqu'un pouvait me faire 2 petites modifs, cela serait sympa ...

- Selection classique AutoCAD et non pas forcement TOUT le DWG

- Ecrire dans l'ecran texte c bien !

mais si en plus je pouvais avoir la meme chose dans un fichier texte externe,

ca serait parfait !

 

Merci d'avance pour votre aide, lecrabe

 

 


;;
;; Lists all hyperlinks in a drawing (by XANADU.cz)
;;

(defun C:ListLinks ( / ss ssl i ento hyp1 h l1)
 (vl-load-com)
 (setq List_Links (list))
 (setq ss (ssget "_X" '((-3 ("PE_URL")))))
 (setq ssl (sslength ss))
 (setq i 0)
 (while (< i ssl)
	(setq ento (vlax-ename->vla-object (ssname ss i)))
   (setq hyp1 (vla-get-hyperlinks ento))

   (vlax-for h hyp1
    (setq l1 (vla-get-URL h))
 (setq List_Links (cons l1 List_Links))
   )

   (setq i (1+ i))
 )
;; all done , display it
(princ "\nHyperlinks in this drawing : ")
(foreach i List_Links (princ (strcat "\n" i)))
(princ "\n")
;;  List_Links contains the list of all hyperlinks for possible other use
(princ)
)

Autodesk Expert Elite Team

Posté(e)

Un truc comme ça ?

(defun c:LesHLink (/ ssbase cpt ss HLink ListHLink ssets HlinkSS SSHL)
 (vl-load-com)
 (ssget)
 (setq HlinkSS (ssadd))
 (setq cpt 0)
 (vlax-for ss
       (vla-get-activeselectionset
	 (vla-get-activedocument
	   (vlax-get-acad-object)
	 )
       )
   (vlax-for HLink
	    (vla-get-Hyperlinks ss)
     (progn
(setq cpt (1+ cpt))
(setq ListHLink	(append	ListHLink
			(list (strcat (itoa cpt)
				      ")    "
				      (vla-get-url Hlink)
				      "\n"
			      )
			)
		)
)
(ssadd (vlax-vla-object->ename ss) HlinkSS)
     )
   )
 )

 (princ (strcat "Il y a "
	 (itoa cpt)
	 " hyperliens dans la sélection :\n"
 )
 )
 (mapcar '(lambda (x) (princ x)) ListHLink)

 (initget "Oui Non")
 (if (= (getkword
   "\nEnregistrer dans un fichier ? [Oui/Non] <Non>: "
 )
 "Oui"
     )
   (progn
     (setq fic (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))
     (setq fic (substr fic 1 (- (strlen fic) 4)))
     (setq f (open (strcat fic ".txt") "w"))
     (princ "Hyperliens du plan : \n" f)
     (princ (getvar "DWGNAME") f)
     (princ (strcat "\nRéalisé le "
	     (substr (rtos (getvar "CDATE") 2 2) 7 2)
	     "/"
	     (substr (rtos (getvar "CDATE") 2 2) 5 2)
	     "/"
	     (substr (rtos (getvar "CDATE") 2 2) 1 4)
	     "\n\n"
     )
     f
     )
     (princ (strcat "Il y a "
	     (itoa cpt)
	     " hyperliens dans la sélection :\n"
     )
     f
     )
     (mapcar '(lambda (x) (princ x f)) ListHLink)
     (close f)
   )
 )

 (sssetfirst nil HlinkSS)
 (princ)

)

 

C'est différent de ce que tu à trouvé mais ça devrait fonctionner (testé avec succés sur ma machine).

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Hello

 

Oui magnifique, c SUPER !

 

Teste avec succes sur MAP 2012 32 bits sous Win XP Pro SP3 ...

 

Merci beaucoup, lecrabe

Autodesk Expert Elite Team

Posté(e)

Bonjour,

 

Visiblement alala a été plus rapide, je livre tout de même ma solution en passant par les valeurs dxf..

 

(defun c:AuditLinks (/ ss i n l txt file)
 ;; Selection avant/après -> "grippé
 (sssetfirst
   nil
   (setq ss (cond ((ssget "_I" '((-3 ("PE_URL")))))
                  (T
                   (prompt "\nSélectionnez les objets graphiques ayant des hyperliens à lister...")
                   (ssget '((-3 ("PE_URL"))))
                  )
            )
   )
 )
   

 ;; Boucle sur la selection
 (repeat (setq i (if ss (sslength ss) 0))
   (setq l (cons (cons (itoa i)
                         (cdr (assoc 1000 (cdadr (assoc -3 (entget (ssname ss (setq i (1- i))) '("PE_URL"))))))
                   )
                   l
             )
   )
 )
 

;; Affichage du traitement sur l'ecran texte AutoCAD
 (textscr)
 (princ (setq txt ""
             txt (strcat "\n\nIl y a "
                         (itoa (length l))
                         " entités dans la selection ayant un Hyperlien..."
                         "\n"
                         (foreach x l (setq txt (strcat txt "\n" (car x) "\t" (cdr x))))
                 )
       )
)
 

;; Enregistrement des résultats dans un fichier texte
(initget "Oui Non")
(if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] <Non>: ")  "Oui")
  (and (setq file (getfiled "Créez ou sélectionnez un fichier" "" "txt" 33))
       (setq file (open file "a"))
       (princ txt file)
       (close file)
  )
)

(graphscr)
(princ)  
)

 

Cordialement,

Apprendre => Prendre => Rendre

Posté(e)

Une question (légérement HS) au passage sur ces valeurs DXF.

Lorsque je fais un (entget(car(entsel)))

je n'ai pas la valeur -3 qui apparait sur l'objet interrogé,

meme si il dispose d'un hyperlien.

Il y a une méthode pour lister ces valeurs non affichées par un entget ?

(hors de les connaitre et les rechercher explicitement)

 

Merci.

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Salut alala,

 

Il y a une méthode pour lister ces valeurs non affichés par un entget? (hors de les connaitre et les rechercher explicitement)

 

Si tu regarde dans mon code, j’ai écrit:

(entget (ssname ss (setq i (1- i))) '("PE_URL"))

Pour tester sur en dehors du code, tu peux faire :

(entget (car (entsel)) '("PE_URL"))

 

 

La fonction entget possède un argument optionnel qui permet d’accéder au donnée étendu en fonction du nom d’application

Syntaxe complète pour la fonction entget: (entget ename [applist])

L’argument applist accepte les caractères génériques utilisé par la fonction wcmatch

 

 

Donc lorsque l’on travaille avec les codes dxf, en théorie on devrait pour bien faire extraire les définitions d’entité avec la syntaxe suivante:

(entget (car (entsel)) '("*"))

Pour retourner les données étendues d’une entité quelques soit le nom d’application. Cela pour éviter de les supprimer lorsque l’on travaille avec entmode..

 

 

Si le sujet t’intéresse un peu, tu peux regarder ce lien

http://cadxp.com/index.php?/topic/35668-echelle-lineaire/page__view__findpost__p__194327

Ou j’avais tenté une explication un peu similaire..

 

Cordialement,

Apprendre => Prendre => Rendre

Posté(e)

Bonjour,

 

Une explication vraiment très claire!

Ça me permet, en plus, de commencer à regerder du coté des Xdata.

 

meci beaucoup pour toutes ces connaissances partagés!

C'est en forgeant que l'on devient forgerons.

Et c'est en sciant que Léonard DeVinci!

Posté(e)

Re,

 

Super Sympa vos participations, lecrabe
meci beaucoup pour toutes ces connaissances partagés!

 

Tant que ça m’est possible, c’est toujours un plaisir de converser avec des forumeurs sympthiques.

A court ou moyen terme, l’abandon d’AutoCAD est programmé pour un «logiciel encore en développement », ce qui signifie pour moi une forme d’apocaLISP (je suis hélas monolingue).

 

A+ Bruno

Apprendre => Prendre => Rendre

Posté(e)

Hello

 

Chez Autodesk un certain nombre de logiciels significatifs n'ont rien a voir avec AutoCAD :

3DS Max, Inventor, Revit, Maya, etc

 

Mais bon l'abandon d'AutoCAD et de son interface "antique" n'est pas pour demain

meme si beaucoup de choses ont change :

- interface ruban

- menus contextuels

- palettes

- cases de dialogie avec masquage et transparence

- etc

 

Bien sur que l'interface va encore evoluer/changer ...

 

Rappel : n'oublions pas quand meme que AutoCAD + AutoCAD LT,

cela represente plus de 50% du CA d'Autodesk, donc ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Pardon, je me suis mal exprimé, je ne parlais pas d’un abandon d’AutoCAD de la part d’AutoDesk mais de la part de mon entreprise…

 

Entreprise très modeste détenu par un groupe financé par des fonds de pensions anglo-saxons et qui à l’échelle du groupe développerait son propre logiciel métier...

 

Ce qui justifie l'abscence d'évolutions logiciel depuis la version 2007… D’un autre coté l’absence de mise à niveau perpétuelle sous AutoCAD, m’a permis dernièrement de me libérer assez d’énergie pour m’intéresser au lisp.

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Hello

 

SVP on parle de quel metier ?

 

Neanmoins j'espere que tu resteras present et actif sur Cadxp ?

 

Encore Merci pour toutes les routines que tu as realisees, lecrabe

Autodesk Expert Elite Team

Posté(e)
SVP on parle de quel metier ?

Ossature Béton, plus précisément la préfabrication d’éléments en béton armé et précontraint (poteaux, poutres, plancher DAP), c’est essentiellement de la préfa lourde pour la réalisation de bases logistiques, usines, centres commerciaux, parking...

 

Neanmoins j'espere que tu resteras present et actif sur Cadxp ?

Ce n’est pas encore fait et du retard s’annonce mais ça ce précise tout de même. Après pour ce qui sera de ma présence futur difficile à moins d’une remise en question professionnelle...(dans cette optique je remercie Rebcao pour ses supports pour AutoCAD 2013).

 

A+

Apprendre => Prendre => Rendre

  • 3 mois après...
Posté(e)

Bonjour,

 

Pour faire suite, à cette discussion http://cadxp.com/index.php?/topic/37532-hyperlien/ dans la quel je viens de découvrir l’existence des fonctions lisp geturl & seturl, la version mise à jour de ma proposition précédente.

(defun c:AuditLinks (/ ss i n l txt file)
 ;; Selection avant/après -> "grippé
 (sssetfirst
   nil
   (setq ss (cond ((ssget "_I" '((-3 ("PE_URL")))))
                  (T
                   (prompt "\nSélectionnez les objets graphiques ayant des hyperliens à lister...")
                   (ssget '((-3 ("PE_URL"))))
                  )
            )
   )
 )
 ;; Boucle sur la selection
 (repeat (setq i (if ss (sslength ss) 0))
   (setq l (cons (cons (itoa i) (geturl (ssname ss (setq i (1- i))))) l))
 )
 ;; Affichage du traitement sur l'ecran texte AutoCAD
 (textscr)
 (princ (setq txt ""
              txt (strcat "\n\nIl y a "
                          (itoa (length l))
                          " entités dans la selection ayant un Hyperlien..."
                          "\n"
                          (foreach x l (setq txt (strcat txt "\n" (car x) "\t" (cdr x))))
                  )
        )
 )
 ;; Enregistrement des résultats dans un fichier texte
 (initget "Oui Non")
 (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] <Non>: ") "Oui")
   (and (setq file (getfiled "Créez ou sélectionnez un fichier" "" "txt" 33))
        (setq file (open file "a"))
        (princ txt file)
        (close file)
   )
 )
 (graphscr)
 (princ)
)

 

Sinon pour ce qui est de ma participation sur ce forum, je crois qu’il faudra me supporter encore un petit peu, les projets de développement d’un logiciel métier à l’échelle du groupe semblant sérieusement ajourné pour cause de crise mondial. Le côté positif de l’histoire c’est que cela m’avait donné suffisamment d’énergie pour commencer à m’intéresser à autre chose qu’au lisp…

 

A+

Apprendre => Prendre => Rendre

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité