Aller au contenu

Comment attacher un xref avec un calque du même nom


Messages recommandés

Posté(e)

Bonjour,

 

Je cherche un lisp qui pourrait attacher un xref dans un plan en lui donnant directement son nom dans un calque pour éviter de faire beaucoup de manipulations en attachant un xref dans mon plan sous le calque 0 puis en créant un calque du nom de l'xref et enfin en déplaçant l'xref du calque 0 au calque du même nom pour tous les xrefs que j'attache.

 

je ne sais pas si je suis clair mais j'espère avoir une réponse

 

Merci d'avance

 

Cordialement

Posté(e)

Salut Kinato,

 

Personnellement je n'ai pas de programme pour cela... Lorsque que je travaille en synthèse technique, je superpose en règle générale entre 10 et 15 plans (maxi 30 mais c'est rare) en références externes. Chacune d'entre elles est ventilée dans un calque portant le numéro du plan. Je crée moi-même ces calques en les nommant XREF_"le numéro du plan". Il est clair que ça prend un peu de temps mais avec les raccourcis clavier "Ctrl+C" et "Ctrl+V", je dois mettre 1 à 2 secondes maxi par calque, et donc par référence externe et j'avoue que cette manip ne me dérange pas vraiment...

 

Je n'ai pas du tout répondu à ta demande, mais je voulais te faire part de ce retour d'expérience.

 

A la prochaine.

Posté(e)

Salut,

 

Pour le principe, un truc très simpliste écrit en moins de 2 minutes, lance cette fonction layNom immédiatement après avoir insérer ton Xref (ou tout autre objet ayant un code de groupe dxf 2).

 

;; Place le dernier objet dessiné sur le calque correspondant
;; au code dxf 2 si il existe.
(defun c:layNom (/ ent)
 (if (assoc 2 (setq ent (entget (entlast))))
   (entmod (subst (cons 8 (cdr (assoc 2 ent))) (assoc 8 ent) ent))
 )
 (princ)
)

 

Pour quelque chose de plus abouti et automatique, c’est possible en Vlisp avec une fonction réacteur, mais de retour de congés je n’ai pas le temps matériel pour faire plus pour le moment…

 

Cordialement

Apprendre => Prendre => Rendre

Posté(e)

Merci pour ta réponse Charly, je fais la même chose que toi mais quand tu as une centaine de plan multiplié par le nombre d'xref a attacher, ça commence à prendre du temps. Et puis la présentation se n'est pas la meilleure partie d'un plan donc si je peux gagner un peu de temps dessus, c'est toujours ça de prit.

 

Merci pour ton lisp bruno

Posté(e)

Re,

Merci pour ta réponse Charly, je fais la même chose que toi mais quand tu as une centaine de plan multiplié par le nombre d'xref a attacher..

 

Dans ce cas une version plus spécifique à lancer quand tu veux dans ton dessin (et qui évite l’usage de d’objet réacteur), qui met toutes les Xref d’un dessin sur un calque de même nom préfixé de X- , à tester..

 

;; Place tout les Xref du fichier dans le calque de leur nom de respectif
(defun c:layXref (/ ent obj ss)
 (vl-load-com)
 (ssget "_X" '((0 . "INSERT")))
 (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-ActiveDocument (vlax-get-acad-object))))
   (if (vlax-property-available-p obj 'Path)
     (entmod
       (subst (cons 8 (strcat "X-" (cdr (assoc 2 (setq ent (entget (vlax-vla-object->ename obj))))))) (assoc 8 ent) ent)
     )
   )
 )
 (if ss
   (vla-delete ss)
 )
 (princ)
)

 

Cordialement

Apprendre => Prendre => Rendre

Posté(e)

Salut

 

Dommage d'utiliser le code dxf 8 alors que tu as sous la main la propriété layer.

En plus, ce que demande kinato c'est d'ajouter un préfix au nom du bloc qui deviendra le nom du calque

 

;; Place tout les Xref du fichier dans le calque de leur nom de respectif
(defun c:layXref (/ ent obj ss)
 (vl-load-com)
 (ssget "_X" '((0 . "INSERT")))
 (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-ActiveDocument (vlax-get-acad-object))))
   (and (vlax-property-available-p obj 'Path)
 (setq ent (vla-get-name obj))
     (progn
(or (tblsearch "layer" (setq ent (strcat "X-" ent)))
  (vla-add (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))) ent)
)
(vla-put-layer obj ent)
     )
   )
 )
 (if ss
   (vla-delete ss)
 )
 (princ)
)

 

@+

  • Upvote 1

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut,

 

Dommage d'utiliser le code dxf 8 alors que tu as sous la main la propriété layer.

 

Oui merci Patrick_35, tu as 100% raison remarque pertinente. :)

 

Par contre je trouve dommage qu’en retour tu aies laissé trainé ce petit progn qui il me semble n’apporte rien de plus au code… ;) :D

 

Amicalement Bruno

Apprendre => Prendre => Rendre

Posté(e)

Par contre je trouve dommage qu’en retour tu aies laissé trainé ce petit progn qui il me semble n’apporte rien de plus au code… ;) :D

:D

 

A cause du and ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)
A cause du and ;)

"Humour" ou on ne c'est pas compris :blink: , dans le doute je développe ;)

 

 

progn ne sert à rien, car en sortie de l’instruction or true est toujours retourné donc à ce stade (vla-put-layer obj ent) sera évalué..

 

 

 

;; Place tout les Xref du fichier dans le calque de leur nom de respectif 
(defun c:layXref (/ ent obj ss) 
 (vl-load-com) 
 (ssget "_X" '((0 . "INSERT"))) 
 (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-ActiveDocument (vlax-get-acad-object)))) 
   (and (vlax-property-available-p obj 'Path)
 (or (tblsearch	"layer"	(setq ent (strcat "X-" (vla-get-name obj))))
     (vla-add (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object))) ent)
 )
 (vla-put-layer obj ent)
   )     
 ) 
 (if ss (vla-delete ss)) 
 (princ) 
)

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Salut,

 

Ah oui, tu as raison.

Méa culpa. J'étais partie sur nil en sortie du or, d'ou le progn.

Ho, pour le Méa culpa j’en demandais pas tant, car le progn n’amenait pas de disfonctionnement, c’était plus pour le jeux… :P

 

Dommage d'utiliser le code dxf 8 alors que tu as sous la main la propriété layer.

Une petite précision tout de même sur l’utilisation du code dxf8, il se justifiait par l’emploie de entmod que je trouve très puissant et confortable, entmod crée le calque si il n’existe pas et change l’entité de calque..

 

(Ps : ce forum n’étant pas spécifiquement orienté lisp j’arrête là ma prose et m’en excuse.)

A+

Apprendre => Prendre => Rendre

Posté(e)

Je suis le premier à indiquer où l'on peut améliorer certaines choses dans des lisps. Il est normal de me le dire aussi.

Utiliser un entmod sur un objet pour créer un calque, j'avoue que je ne connaissais pas et que je n'y avais jamais pensé; pourquoi pas.

 

C'est vrai que l'on déborde du sujet original, mais c'est intéressant :D

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Re,

 

Utiliser un entmod sur un objet pour créer un calque, j'avoue que je ne connaissais pas et que je n'y avais jamais pensé;

La déduction découle de source lorsque l’on fait le parallèle avec la fonction entmake

 

Pour illustrer :

((lambda (x)
  (entmake (list '(0 . "LINE")
                 '(8 . "JeSuisUnNouveauCalque")
                 (cons 10 x)
                 (cons 11 (getpoint x "\n2ème point: "))
           )
  )  
)
 (getpoint "\n1er point: ")
)

 

 

C'est vrai que l'on déborde du sujet original, mais c'est intéressant :D

Si cela est le cas j’en suis heureux, car ce n’est qu’un juste retour des choses.. :)

 

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é