naito073 Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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
Charly21000 Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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.
VDH-Bruno Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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
naito073 Posté(e) le 15 novembre 2012 Auteur Posté(e) le 15 novembre 2012 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
Charly21000 Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 Là, en effet, je comprends ta demande... J'espère que tu trouveras ton bonheur. Bon courage.
naito073 Posté(e) le 15 novembre 2012 Auteur Posté(e) le 15 novembre 2012 Serait-il possible d'ajouter un préfixe, exemple X-(le nom de l'xref) à ton lisp
VDH-Bruno Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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
Patrick_35 Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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) ) @+ 1 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
naito073 Posté(e) le 15 novembre 2012 Auteur Posté(e) le 15 novembre 2012 Merci, excellent lisp, mon problème est résolu.
VDH-Bruno Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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
Patrick_35 Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 15 novembre 2012 Posté(e) le 15 novembre 2012 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
Patrick_35 Posté(e) le 16 novembre 2012 Posté(e) le 16 novembre 2012 Ah oui, tu as raison.Méa culpa. J'étais partie sur nil en sortie du or, d'ou le progn. A deux, on va y arriver :P @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 16 novembre 2012 Posté(e) le 16 novembre 2012 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
Patrick_35 Posté(e) le 16 novembre 2012 Posté(e) le 16 novembre 2012 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 16 novembre 2012 Posté(e) le 16 novembre 2012 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant