Tryks Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 Bonjour, Voila mon problème, je voudrais récupérer une partie du nom d'un calque, exemple: nom de calque "lot n°1" et ne récupérer que le "1", avec un champ je récupère tout le nom du calque mais je ne sais pas comment faire pour garder uniquement une partie du nom du calque alors j'ai essayé de passer par un Rtext mais je n'arrive pas a comprendre comment écrire une expression diesel correct. J'arrive a le faire avec le calque courant avec " $(substr, $(getvar, clayer), 8,3)" mais je n'arrive pas a faire en sorte qu'il récupérer le nom du rtext.
Patrick_35 Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 Salut La formule est bonne, il faut juste, quand tu lances la commande rtext, choisir l'option D pour diesel. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tryks Posté(e) le 5 septembre 2018 Auteur Posté(e) le 5 septembre 2018 Merci, j'arrive a faire le rtext avec la formule qui marche également mais avec cette formule je récupère le nom du calque courant du dessin et je voudrais pourvoir récupérer le nom du calque du rtext, est ce que c'est possible ?
Patrick_35 Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 La réponse va être rapide, non, pas en rtext. Par contre, tu peux utiliser les champs, mais pas de formule diesel dans ce cas. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tryks Posté(e) le 5 septembre 2018 Auteur Posté(e) le 5 septembre 2018 ok, est il possible avec les champs de ne garder qu'une partie du nom de calque? je sais comment crée le champs mais je ne voie pas comment enlever une partie du nom ?
Patrick_35 Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 ok, est il possible avec les champs de ne garder qu'une partie du nom de calque? je sais comment crée le champs mais je ne voie pas comment enlever une partie du nom ?Ben non, comme je te l'ai indiqué, pas d'expression diesel qui permette d'utiliser une partie du nom du calque. Je m'étais amusé à faire ceci.Insérer un champ --> Objet --> Sélection du texte --> Calque --> Puis un copier de la formule dans Expression de champ (ctrl + c).AnnulerInsérer un champ --> Expression diesel --> $(substr,$( + le copier du champ (ctrl + v) + ),5,3) --> validerGraphiquement, ça marche, mais si tu édites ton texte, tu te rends compte que tu n'as que la partie de texte qui t'intéresse et que si tu changes de calque ton objet + regen, et bien cela ne fonctionne plus. Donc, aucun intérêt. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tryks Posté(e) le 5 septembre 2018 Auteur Posté(e) le 5 septembre 2018 je viens d'essayer sa marche pas avec regen mais il se modifie quand même si on utilise "mettre a jour champs" dans clique droit sur le champs et la formule se transforme elle passe de : $(substr,$( + le copier du champ (ctrl + v) + ),5,3) à : $(substr,$(nom du claque),5,3)Mais autre problème si il n'y a pas assez de lettre, il affiche la suite de la formule exemple : avec $(substr,$(Lot n°12),10,5) il vas me mettre dans le champs 12)??
bonuscad Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 Et avec une expression diesel dans le champ comme ceci (le calque "Lot n°1" doit être courant)?$(substr,$(getvar,"CLAYER"),7,1) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tryks Posté(e) le 5 septembre 2018 Auteur Posté(e) le 5 septembre 2018 oui mais il faudrait qu'il prenne le calque d'un objet, l'objectif étant de crée un étiquette: calque "lot n°1" => étiquette "1"calque "lot n°2" => étiquette "2" calque "lot n°3" => étiquette "3" etc....
Patrick_35 Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 Change le 5 3 en 7 1 comme l'indique BonusCad.Ou même 7 2 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tryks Posté(e) le 5 septembre 2018 Auteur Posté(e) le 5 septembre 2018 Est ce vous pouvez m’expliquer pourquoi avec j’obtiens des résultat différent : -> avec calque courant = lot n°12 $(substr,$(getvar,CLAYER),7,5) = 12 -> en copiant la formule du champs: $(substr,$(+ le copier du champ (ctrl + v),10,5) = 12)??
Patrick_35 Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 $(substr,$(+ le copier du champ (ctrl + v),10,5) = 12)??Tu fais bien une 1ere manip en copiant (ctrl + c) puis coller (ctrl + v) ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tryks Posté(e) le 5 septembre 2018 Auteur Posté(e) le 5 septembre 2018 oui et ensuite quand je retourne voir la formule, l'expression de champs que j'ai copier est remplacer par le nom du claque
bonuscad Posté(e) le 5 septembre 2018 Posté(e) le 5 septembre 2018 Ou alors sans passer par la variable CLAYER (calque courant)C'est marrant on peut le faire en lisp, mais manuellement j'y arrive pas (impossible d'inserer un champ dans l'expression diesel)((lambda ( / ent htx AcDoc Space ename) (while (not (setq ent (entsel)))) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (setq ename (vlax-ename->vla-object (car ent))) (vla-addMtext Space (vlax-3d-point (getvar "VIEWCTR")) 0.0 (strcat "%<\\AcDiesel $(substr," "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Layer\>%,7,1)>%" ) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tryks Posté(e) le 6 septembre 2018 Auteur Posté(e) le 6 septembre 2018 merci sa marche mais je ne peux pas choisir l'emplacement du champ et il s'actualise uniquement avec le clique droit sur le champ " mettre a jour champ"
bonuscad Posté(e) le 6 septembre 2018 Posté(e) le 6 septembre 2018 Pour l'emplacement, pas de problème.Par contre je ne comprends pas bien l'histoire que tu soit obligé d'actualiser le champ!Normalement il devrait apparaitre la bonne valeur par rapport au calque de l'entité sélectionnée, à moins que tu change le nom du calque entre temps.(defun c:tryks ( / ent pt htx AcDoc Space ename) (while (not (setq ent (entsel)))) (initget 1) (setq pt (getpoint "\nPoint d'insertion du champ: ")) (initget 6) (setq htx (getdist pt (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ename (vlax-ename->vla-object (car ent)) ) (vla-addMtext Space (vlax-3d-point (trans pt 1 0)) 0.0 (strcat "%<\\AcDiesel $(substr," "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Layer\>%,7,1)>%" ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tryks Posté(e) le 6 septembre 2018 Auteur Posté(e) le 6 septembre 2018 merci sa marche nickel, non je demandais juste au cas ou, vue que normalement les champs ce mettes a jours touts seul avec un regen
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