Annonces

À partir du mois de décembre, nous archiverons le contenu de la communauté datant de 10 ans et plus. Cette FAQ fournit de plus amples informations.

Hyperlien sur bloc

Anonymous

Hyperlien sur bloc

Anonymous
Non applicable

Bonjour,
Grâce aux forums cadxp et autodesk (notamment patrick ^^) j'utilise depuis un moment un lisp qui me permet d'attribuer automatique un hyperlien sur un objet texte en récupérant son contenu.

 

ex : le texte W25-101G1 aura son hyperlien automatiquement écrit "\\serveur\plans\W25-101G1.pdf"

 

J'essaye de faire de même avec des blocs, en lisant l'attribut, mais j'ai beau modifier le lisp ça n'abouti pas du tout -_- . Je pense faire au moins une erreur sur la fonction cons 0 , sauf que je ne trouve pas d'explication claire pour modifier ça.

j'ai mis le lisp pour l'hyperlien automatique sur des objets texte en PJ

Le but est de le transformer pour que le lisp puisse récupérer l'attribut REPËRE des blocs SONDAGE et PIEZO.

 

ex: le bloc sondage portant le repere SP041 devra avoir l'hyperlien \\serveur\plans\sondage\SP041.pdf

 

Je n'aurai pas besoin de la partie du lisp qui fait la différence entre les repères inférieur ou supérieur à 5000, mais même pour ça je ne sais pas la partie que je dois enlever (je crois que je dois en laisser trop ou pas assez à chaque fois.. bref je suis une quiche en lisp ^^ )

 

Merci pour votre aide 🙂

0 J'aime
Répondre
510 Visites
4 Réponses
Replies (4)

Kevin_Megel
Mentor
Mentor

Salut

 

Pour une meilleur lisibilité il serait bien de restructurer ton texte et utiliser les balises [code] pour le lisp.

 

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime

Anonymous
Non applicable
yep dsl d'habitude la mise en forme ne bouge pas, là ça m'a tout tassé dans le fond ^^
c'est mieux là?
0 J'aime

Kevin_Megel
Mentor
Mentor

oui tu trouvera plus facilement d'aide maintenant !

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime

Anonymous
Non applicable

quelle différence il y a entre faire une liste avec les textes, ou lister les valeurs d'un attribut de bloc?

(à part bien sûr que je dois cibler le bloc en question et ses attributs)

 

(defun c:SOND(/ cdl cmd fic js n lst rch rep txt)
  (defun rch(dir nom / lstfile tbl)
    (defun lstfile(dir nom / lst res)
      (foreach res (vl-directory-files dir nil -1)
        (or (member res '("." ".."))
          (lstfile (strcat dir res "/") nom)
        )
        (and (or (eq res ".") (eq (strlen dir) 3))
             (setq lst (mapcar '(lambda(x) (cons x (findfile (strcat dir x))))(vl-directory-files dir nom 1)))
          (setq tbl (append tbl lst))
        )
      )
    )
    (or (member (substr dir (strlen dir) 1) '("/" "\\"))
      (setq dir (strcat dir "/"))
    )
    (lstfile dir nom)
    tbl
  )

  (setq cmd (getvar "cmdecho")
        cdl (vlax-create-object "Shell.Application")
  )
  (setvar "cmdecho" 0)
  (command "_.undo" "_group")
  (and  (setq rep (vlax-invoke cdl 'browseforfolder 0 "Sélectionnez la branche de répertoires à traiter" 512 0))
        (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
        (setq lst (rch rep "*.pdf"))
        (setq js (ssget "x" (list (cons 0 "*TEXT"))))
    (progn
      (setq n 0)
      (while (setq txt (ssname js n))
        (setq txt (entget txt)
              val (cdr (assoc 1 txt))
        )
        (and (setq fic (assoc (strcat val ".pdf") lst))
          (command "_.-hyperlink" "_i" "_o" (cdr (assoc -1 txt)) "" (cdr fic) "" "")
        )
        (setq n (1+ n))
      )
    )
  )
  (vlax-release-object cdl)
  (command "_.undo" "_end")
  (setvar "cmdecho" cmd)
  (princ)
)

Pour faire la liste des attributs, j'imagine qu'il faut utiliser autre chose que ssget, à savoir ent_sel pour selectionner le bloc, et entget pour choper l'attribut ? mais comment mettre ça en forme, sachant que je dois pouvoir me débrouiller pour lui dire qu'il s'agit du 1er attribut (et donc utiliser entnext?) qui se nomme REPERE que ce soit pour le bloc PIEZO ou SONDAGE (il n'y a que ces 2 blocs dans le dessin, ça veut dire que je ne suis peut etre pas obligé de lister tous les blocs, mais seulement dire par lisp "je trouve un bloc, je liste la valeur de son 1er attribut" .
j'ai commencé à remplacer la ligne en bleue par 

(setq ent_bloc (entsel "PIEZO"))
(setq ent (entnext ent))
(setq js (ssget "X" (list '(0 . "INSERT") (cons 2 REPERE))))

Si qqun peut m'aider là dessus c'est cool ^^ . j'ai bien téléchargé un gros pdf expliquant le lisp, mais n'étant pas du tout calé en programmation, même si j'arrive à peu près (je dis bien à peu près ^^) à comprendre le déroulement d'un lisp, j'ai trop de mal avec la syntaxe.

Bonne journée tout le monde 🙂

0 J'aime