Aller au contenu

Recupérer seulement une partie d'un nom d'un calque dans un champs ou RTEXT


Messages recommandés

Posté(e)

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.

Posté(e)

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 ?

Posté(e)

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 ?

Posté(e)

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).

Annuler

Insérer un champ --> Expression diesel --> $(substr,$( + le copier du champ (ctrl + v) + ),5,3) --> valider

Graphiquement, ç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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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)??

Posté(e)

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

Posté(e)

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....

Posté(e)

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)??

Posté(e)

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

Posté(e)

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"

Posté(e)

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

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é