vins13007 Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Bonjour,Je suis désolé de vous demander ça car c'est pas grand chose mais j'y arrive pas :/. J'ai 268 schémas à passer en 0,0,0 pour pouvoir ajouter un petit texte au même endroit sur tous les schémas. En gros je pensais :- Selectionner tout le schéma qui se trouve dans objet- Le deplacer a partir du coin inferieur gauche en 0,0,0- Ajouter en DDTEXT un texte avec un certain calque (déjà existant sur le schéma) à un endroit précis. En gros sur l'image ci-jointe, voici une partie du cartouche qui part d'en bas à gauche et il faut rajouter le 3 dans la grille de validité. Je vous remercie encore pour votre aide, vous êtes formidable :)Cordialement,
didier Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Coucou Je ne comprends pas bien, Tu veux savoir commencer déplacer tous les objets (de tous les fichiers) depuis le coin inférieur gauche à 0,0,0 ?Tu vas utiliser un script ensuite ? ou autre chose ?Ce script insérera ton texte ou tu as besoin d'aide pour insérer le texte ? Éternel débutant... Mon site perso : Programmer dans AutoCAD
vins13007 Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 Bonjour,Alors je ne sais ni déplacer le schéma automatiquement du coin inferieur gauche au point 0,0,0 ni ajouter le texte à un endroit précis. Donc j'ai besoin de vous pour ces deux manipulations. L'idéale serait un lisp ou une maccro qui déplace tout le schéma en 0,0,0 a partir du point en bas a gauche et qui insère le texte "3" a un point spécifique. Je veux pas vous casser la tête non plus donc déjà si je sais juste mettre automatiquement les schémas en 0,0,0 ça me servira aujourd'hui et par la suite.
didier Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Coucou Le point inférieur gauche est une vue de l'esprit qu'il va être compliqué d'expliquer à AutoCADSi jamais il y à la moindre entité mal placée et c'est foutu. Par contre faire un lisp qui va redéfinir un SCU en faisant cliquer le fameux point bas gauche par l'utilisateur me semble une bonne piste pour un début. Je n'ai pas compris à quel endroit tu voulais rajouter un "3".Tu ne nous dis pas tout d'ailleurs, cette grille de validité c'est un bloc avec des attributs ou autre chose ? Éternel débutant... Mon site perso : Programmer dans AutoCAD
vins13007 Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 Oui c'est ce que j'ai vu avec la variable "extmin" c'est en fonction du zoom étendu. Y a peu de chance que quelque chose sorte du cadre du schéma mais on peut partir sur redéfinir le SCU. Je vous joint le .dwg que j'ai du renommer en .pdf pour vous le joindre comme ça vous pouvez regarder, je tiens à préciser que je suis pas l'auteur de ce schéma mdr car la grille est en texte y a pas de bloc, c'est que des traits et y a rien de centré. Merci d'avancetest.pdf
didier Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Coucou Est-ce que tous les fichiers sont identiques ou y-en-a-t'il avec des blocs et d'autres avec du texte (je parle de la grille de validité)Est-ce que dans tous les fichiers ce que tu appelles le point bas gauche est vraiment le minimum dessiné, autrement dit : si je filtre les entités je peux prendre la plus petite coordonnée X et la plus petite coordonnée Y et je tomberai à coup sûr sur ce que tu appelles le point bas gauche ? Au fait : il vaut mieux compresser le DWG pour qu'il devienne ZIP, c'est plus simple Éternel débutant... Mon site perso : Programmer dans AutoCAD
vins13007 Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 Ha d'accord, je ziperai le prochain coup ;). Oui tous les schémas sont identiques, la taille reste la même grâce au cadre autour et la grille de validité est toujours en texte et en trait.Merci
Patrick_35 Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Salut Une première approche(defun c:m00(/ bas bd doc ele hg lst sel) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget "x") (progn (vlax-for ele (setq sel (vla-get-activeselectionset doc)) (or (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list ele 'bd 'hg))) (setq lst (cons (vlax-safearray->list bd) lst)) ) ) (setq bas (apply 'mapcar (cons 'min lst))) (vlax-for ele sel (vla-move ele (vlax-3d-point bas) (vlax-3d-point '(0.0 0.0 0.0))) ) (vla-delete sel) (entmake (list (cons 0 "TEXT") (cons 1 "3") (cons 10 '(0.0 0.0 0.0)) (cons 40 (getvar "textsize")) ) ) ) ) (vla-endundomark doc) (princ) )A toi de bien positionner le texte @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
vins13007 Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 A toi de bien positionner le texte @+Merci patrick, j'ai essayé en mettant la taille du texte mais ça me met :"; erreur; groupe DXF incorrect: (40)
Patrick_35 Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Pour un texte d'une hauteur de 10 par exemple(cons 40 10) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Coucou Une autre approche sans rien bougerJe cherche la string GRILLE DE VALIDITE puis je me déplace d'une certaine valeur pour écrire un texteVite fait sans vrais contrôles (setq jeusel (ssget "x" (list (cons 0 "TEXT")))) (setq n 0 test (cdr (assoc 1 (entget (ssname jeusel n)))) ) (if (= (cdr (assoc 1 (entget (ssname jeusel n)))) "GRILLE DE VALIDITE") (alert "fini")) (repeat (sslength jeusel) (if (= (cdr (assoc 1 (entget (ssname jeusel n)))) "GRILLE DE VALIDITE") (setq pins (cdr (assoc 11 (entget (ssname jeusel n))))) (setq n (+ 1 n)) ) ) (command "_text" (list (+ (car pins) 6.95679)(- (cadr pins) 4.79129)) "1.40625" "" "3" ) Ensuite il faut mettre ça dans un script en batch et je pense que ça peut le faire. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 @didier, tu pourrais simplifier : (if (setq jeusel (ssget "_X" '((0 . "TEXT") (1 . "GRILLE DE VALIDITE")))) (command "_text" (mapcar '+ (cdr (assoc 10 (entget (ssname jeusel 0)))) '(6.95679 -4.79129 0.0) ) 1.40625 "" "3" ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Coucou Merci pour la simplification, mais j'ai une sale manie d'écrire quasiment ligne par ligne et je ne me suis pas investi plus que ça car le besoin n'est pas certain d'être satisfaitEncore merci pour la leçon.Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
vins13007 Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 Merci à tous pour votre implication, je test tout ça dès la première heure demain en arrivant au travail :)Bonne soirée à tous
vins13007 Posté(e) le 14 juin 2016 Auteur Posté(e) le 14 juin 2016 Bonjour messieurs :), Je viens d'essayer vos lisp merci de votre aide. @Didier- J'ai lancé le lisp et j'arrive bien à insérer un 3 dans la grille mais pas exactement ou je le souhaite. par contre je suis curieux de savoir votre démarche car je comprends pas en fonction de quoi vous placez le texte avec (6.95679 -4.79129 0.0).- Vous me parlez d'un .batch, c'est pour automatiser la commande ? @Patrick_35- J'arrive à insérer le texte exactement comme il faut grâce à ce lisp en modifiant les coordonnés et la taille du texte. Le point d'insertion était bien spécifie et l'avantage c'est que je peux le modifier pour un autre usage :D. - Est-il possible avant de placer le texte de déplacer l'ensemble du schéma pour mettre le point en bas à gauche du cadre en 0,0,0 comme ça le 3 se positionnera correctement dans la grille ? - Comment faire pour écrire le "3" avec votre lisp dans un autre calque que "0" déjà existant dans le schéma ? Le calque souhaité est "TEXTE" Avant tout, je veux pas abuser, c'est déjà très gentil de votre part :) (defun c:m00(/ bas bd doc ele hg lst sel) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget "x") (progn (vlax-for ele (setq sel (vla-get-activeselectionset doc)) (or (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list ele 'bd 'hg))) (setq lst (cons (vlax-safearray->list bd) lst)) ) ) (setq bas (apply 'mapcar (cons 'min lst))) (vlax-for ele sel (vla-move ele (vlax-3d-point bas) (vlax-3d-point '(0.0 0.0 0.0))) ) (vla-delete sel) (entmake (list (cons 0 "TEXT") (cons 1 "3") (cons 10 '(113.1027 11.2090 0.0)) (cons 40 1.4063) ) ) ) ) (vla-endundomark doc) (princ))
didier Posté(e) le 14 juin 2016 Posté(e) le 14 juin 2016 Coucou Ma solution porte sur la position du texte à insérer par rapport au point d'insertion du texte GRILLE DE VALIDITEDans la simplification réalisée par (gile) je pense qu'il faudrait remplacer (mapcar '+(cdr (assoc 10 (entget (ssname jeusel 0))))'(6.95679 -4.79129 0.0))Par(mapcar '+(cdr (assoc 11 (entget (ssname jeusel 0))))'(6.95679 -4.79129 0.0)) Les deux valeurs dont tu me parles sont les deltas X et Y du point d'insertion du texte à écrire par rapport au point d'insertion du texte de référence (GRILLE DE VALIDITE), l'assoc 11 c'est parce que le texte est inséré en "milieu" Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 14 juin 2016 Posté(e) le 14 juin 2016 Salut J'ai du mal à comprendre la question.Le lisp déplace l'ensemble du dessin en recherchant le point le plus bas pour ensuite aller au point 0,0 (selon ta demande)Ensuite, tu places le texte à l'endroit qui convient.Ta réponse me fait penser que tu as plusieurs folios sur le même dessin et dans ce cas, ma routine ne correspond pas à la demande et c'est la routine de Didier la plus appropriée. ps : Pour choisir le calque, tu ajoutes (cons 8 "Mon_Calque") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
vins13007 Posté(e) le 14 juin 2016 Auteur Posté(e) le 14 juin 2016 Salut J'ai du mal à comprendre la question.Le lisp déplace l'ensemble du dessin en recherchant le point le plus bas pour ensuite aller au point 0,0 (selon ta demande)Ensuite, tu places le texte à l'endroit qui convient.Ta réponse me fait penser que tu as plusieurs folios sur le même dessin et dans ce cas, ma routine ne correspond pas à la demande et c'est la routine de Didier la plus appropriée. ps : Pour choisir le calque, tu ajoutes (cons 8 "Mon_Calque") @+Bonjour Patrick,Non moi il ne déplace pas le dessin :( (je suis bien sur autocad 2013) par contre il insert bien le texte au point demandé et grâce à cons 8 j'ai réussi à le mettre sur le calque que je voulais. Je n'ai que un seul dessin par fichier donc ta solution convient très bien
vins13007 Posté(e) le 14 juin 2016 Auteur Posté(e) le 14 juin 2016 Ha d'accord, c'est bien ce qui me semblait mais je n'arrivais pas à placer le point ou je voulais. Je vous remercie pour votre solution mais celle de patrick est plus facile à gérer pour moi car je suis débutant et on y est presque. Manque plus qu'à faire marcher le déplacement du dessin. Si je fais cette démarche auprès de vous c'est parce que j'ai dejà eu la demande et je pourrai réutiliser cette fonction régulièrement.
Patrick_35 Posté(e) le 14 juin 2016 Posté(e) le 14 juin 2016 Si le coin en bas à gauche est à 0,0,0 alors oui, le dessin n'est pas déplacé car il est déjà aux bonnes coordonnées.Maintenant, si le coin bas gauche est par exemple à 100,100,0 alors le dessin sera déplacé et le coin bas gauche mis aux coordonnées 0,0,0. Tu peux tester sur un dessin vierge avec des lignes dessinées à la volé et voir le résultat. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
vins13007 Posté(e) le 14 juin 2016 Auteur Posté(e) le 14 juin 2016 Si le coin en bas à gauche est à 0,0,0 alors oui, le dessin n'est pas déplacé car il est déjà aux bonnes coordonnées.Maintenant, si le coin bas gauche est par exemple à 100,100,0 alors le dessin sera déplacé et le coin bas gauche mis aux coordonnées 0,0,0. Tu peux tester sur un dessin vierge avec des lignes dessinées à la volé et voir le résultat. @+ Ha mais c'est quoi ces schémas boiteux que je dois traiter, effectivement sur un nouveau dessin pas de problème tout part au point 0.0.0, j'ai même essayé de coller mon schéma dans un nouveau dessin et il va se mettre en 0.0.0 et le 3 est pile ou il faut.Mais dans le dessin d'origine, il ne bouge pas :/. Je vous l'envoie en ZIP pour que vous puissiez regarder. Merci patricktest.zip
Patrick_35 Posté(e) le 14 juin 2016 Posté(e) le 14 juin 2016 Dans ton dessin test, tu as un bloc vide. Un petit coup de jav puis de m00. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
vins13007 Posté(e) le 14 juin 2016 Auteur Posté(e) le 14 juin 2016 Pfff ça m'énerve de voir ça, centrer du texte ils savent pas faire mais rajouter des blocs vide y a pas de soucis.Meri beaucoup patrick ;)
didier Posté(e) le 14 juin 2016 Posté(e) le 14 juin 2016 Coucou C'est pour pallier ce genre de désagrément que j'ai choisi de ne rien déplacer dans le fichier mais de me connecter au texte "Grille ...." ce qui fonctionne pas trop mal Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
vins13007 Posté(e) le 14 juin 2016 Auteur Posté(e) le 14 juin 2016 Coucou C'est pour pallier ce genre de désagrément que j'ai choisi de ne rien déplacer dans le fichier mais de me connecter au texte "Grille ...." ce qui fonctionne pas trop mal Amicalement Pas mal du tout, je savais même pas que c'était possible donc déjà suis content d'avoir vu une autre façon de faire et je vais regarder pour arriver à comprendre le positionnement :)Merci didier
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