yusukens82 Posté(e) le 29 juillet Posté(e) le 29 juillet Bonjour, En cherchant dans le forum j'ai trouvé une routine qui pourrait me convenir mais ce dernier s'applique correctement à un attribut et non à une cotation. quelqu'un pourrait m'aider à l'adapter à une cotation ? je mets un dwg pour le faire le test (defun c:COPYATT (/ selatt selatt2 objatt objatt2) (setq selatt (nentsel (strcat "\nSélectionner l'attribut ou le texte à copier :"))) (setq objatt (vlax-ename->vla-object (car selatt))) (if (setq selatt2 (nentsel (strcat "\nSélectionner l'attribut ou le texte de destination :"))) (progn (setq objatt2 (vlax-ename->vla-object (car selatt2))) (if (and (or (= (vla-get-ObjectName objatt) "AcDbText") (= (vla-get-ObjectName objatt) "AcDbMText") (= (vla-get-ObjectName objatt) "AcDbAttribute") ) (or (= (vla-get-ObjectName objatt2) "AcDbText") (= (vla-get-ObjectName objatt2) "AcDbMText") (= (vla-get-ObjectName objatt2) "AcDbAttribute") ) ) (vla-put-textstring objatt2 (vla-get-textstring objatt)) )) (command "_TEXT" (getpoint) 4 100 (vla-get-textstring objatt)) ;Hauteur de texte et orientation à 4 et 100g, à ajuster ) (princ) ) Merci par avance Test.dwg
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @yusukens82 Dans la cotation qu'il faut copier, se trouve un remplacement de texte, la lettre A est rajoutée à la main par l'utilisateur. Est-ce qu'il faut la copier aussi ou seulement la valeur afférente à la cotation ? "1.875011736039887" dans le cas présent. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
yusukens82 Posté(e) le 30 juillet Auteur Posté(e) le 30 juillet Bonjour Didier Merci pour ton aide, oui il faut copier le texte complet avec les préfixes suffixes de la cotation Soit = A 1.88 Amicalement
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @yusukens82 Il n'y a pas de préfixe ni de suffixe, mais je comprends qu'il faut prévoir le cas. Au niveau des unités, que faut-il prendre comme nombre de décimales ? Dans le dessin exemple le texte de la cotation est A 1.88 mais il est écrit qu'il faudrait copier A.1.88 Avec un POINT entre le A et la valeur numérique, c'est à prendre en compte ou non ? Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
yusukens82 Posté(e) le 30 juillet Auteur Posté(e) le 30 juillet en effet le "A" n'est pas un préfixe mais un texte il n'est pas nécessaire de l'inclure les préfixe / suffixe. après si il y a c'est mieux; pour le décimal. 2 chiffres suffira.
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Et le point entre le A et la valeur de cotation, faut-il le mettre ? Pardon pour les questions, mais la programmation exige une grande rigueur. Merci d'en tenir compte et de répondre aux questions. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
yusukens82 Posté(e) le 30 juillet Auteur Posté(e) le 30 juillet Je viens de remarquer que j'ai indiqué dans le fichier "A.188" alors que le but est juste de copier coller du texte soit "A 1.88" pardon pour la faute de frappe qui a du perturber le compréhension du problème
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @yusukens82 OK, j'ai ce qu'il faut pour avancer. Rigueur et contrôle… Pour éviter les questions sans fin Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
yusukens82 Posté(e) le 30 juillet Auteur Posté(e) le 30 juillet Donc à ta question, non il n'y pas de "point" entre le A et la cotation. en revanche et tu l'auras compris que si c'est une autre valeur que "A" faudra le copier également. exemple la cotation indique "hauteur = 1.88", le copier coller deja être également "hauteur = 1.88"
Luna Posté(e) le 30 juillet Posté(e) le 30 juillet Coucou, Bon, malgré la participation de @didier voici ma proposition : (defun c:COPYCOT (/ jsel name fuzz entlist rep dim xdt pos pre suf txt) (and (setq jsel (ssget "_+.:E:S" '((0 . "DIMENSION")))) (setq name (ssname jsel 0)) (setq fuzz (vla-get-PrimaryUnitsPrecision (vlax-ename->vla-object name))) (setq entlist (entget name '("ACAD"))) (setq rep (cdr (assoc 1 entlist))) (setq dim (cdr (assoc 42 entlist))) (setq xdt (cdadr (assoc -3 entlist))) (setq xdt (cdr (assoc 1000 (cdr xdt)))) (setq pos (vl-string-search "<>" xdt)) (setq pre (cond ((= pos 0) "") ((substr xdt 1 pos)))) (setq suf (cond ((= (setq pos (+ pos 2)) (strlen xdt)) "") ((substr xdt (1+ pos))))) (setq txt (strcat pre (rtos dim 2 fuzz) suf)) (setq pos (vl-string-search "<>" rep)) (setq txt (cond ( (= 2 (strlen rep)) txt) ( (= pos 0) (strcat txt (substr rep 2)) ) ( (= (+ pos 2) (strlen rep)) (strcat (substr rep 1 pos) txt) ) ( (strcat (substr rep 1 pos) txt (substr rep (+ pos 3)))) ) ) (setq jsel (ssget "_+.:E:S" '((0 . "MTEXT,TEXT")))) (setq name (ssname jsel 0)) (entmod (subst (cons 1 txt) (assoc 1 (entget name)) (entget name))) (princ "\nLe texte de cotation a été copié avec succès") ) (princ) ) Bisous, Luna
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @yusukens82 Doublé par @Luna mais je propose quand même ma réponse : ;| ;Demande de yusukens82 sur CadXP https://cadxp.com/topic/61589-copier-valeur-cotation/#comment-351277 Copie de la valeur d'une cotation "selcot" Dans une valeur de texte "seltex" Prise en compte de texte de remplacement, de préfixe et de suffixe de cotation Didier Aveline le 30 juillet 2024 |; (defun c:CopyCot ( / cotpre cotsuf dec selcot seltex val2 valcot valcotpre) (setq dec 2) (setq selcot (vlax-ename->vla-object (car(entsel "\nSélectionner la cotation :")))) (setq seltex (vlax-ename->vla-object (car (entsel "\nSélectionner le texte de destination :")))) (if (and (= (vla-get-ObjectName selcot) "AcDbRotatedDimension") (= (vla-get-ObjectName seltex) "AcDbText") ) (progn (setq valcot (vla-get-Measurement selcot)) (setq cotpre (vla-get-TextPrefix selcot)) (setq cotsuf (vla-get-TextSuffix selcot)) (setq valcotpre (vla-get-TextOverride selcot)) (setq val2 (substr valcotpre 1 (- (strlen valcotpre) 2))) (vla-put-textstring seltex (strcat val2 cotpre (rtos valcot 2 dec) cotsuf)) ) ) ) (prompt "\n Le nom de la commande est CopyCot") (princ) Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 30 juillet Posté(e) le 30 juillet Coucou @didier, Je remarque que je ne suis clairement pas une 'morning-person' (même à 11h ^^).. J'aime beaucoup l'utilisation des propriétés Visual LISP qui simplifie grandement la récupération des valeurs (préfixe et suffixe notamment ^^) J'avoue que je me suis grandement compliqué la vie ! Chapeau l'artiste 🙂 Petite remarque malgré tout, le texte de remplacement peut dans certains cas remplacer complètement la cotation (donc c'est un simple texte) et sinon, le "<>" peut se situer aussi bien à la fin, au début ou en milieu de chaîne de remplacement 😉 Bisous, Luna 1
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @Luna Effectivement, je n'y avais pas pensé à ce texte de remplacement qui pourrait être en position finale. Les demandes de programmes étant rarement correctement exprimées, j'ai cherché des options de préfixe/suffixe croyant que le A en question était un texte de remplacement. Quand j'ai trouvé comme interroger le texte de remplacement, j'ai fait l'impasse sur sa position. Amicalement 1 Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 30 juillet Posté(e) le 30 juillet il y a 14 minutes, Luna a dit : J'aime beaucoup l'utilisation des propriétés Visual LISP qui simplifie grandement la récupération des valeurs (préfixe et suffixe notamment ^^) Voir aussi dumpallproperties / getpropertyvalue / setpropertyvalue... 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yusukens82 Posté(e) le 30 juillet Auteur Posté(e) le 30 juillet Merci @Luna et @didier, vous êtes vraiment des champion(e)s. Dommage qu'il y a d'épreuve de Visual LISP au JO, on aurait eu des médailles avec vous 😉 la prochaine fois je vais essayer de mieux exprimer ma demande. Merci encore 1 1
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @yusukens82 la prochaine fois je vais essayer de mieux exprimer ma demande. Ça viendra avec le temps… Quand on programme pour soi-même très peu de questions n'ont pas de réponses. Quand on doit répondre à une question, il y a beaucoup d'inconnues si la question n'est pas parfaitement décortiquée. ------------------------------------------------------------ Merci pour les compliments, ça fait bien plaisir. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour @yusukens82 Voici une nouvelle version qui tient compte des possibilités de texte de remplacement en début OU en fin et même en début ET en fin. Par ailleurs, si un préfixe ou un suffixe ou encore les deux sont prévus dans le STYLE de cotation, ces valeurs sont insérées dans la copie. Merci de me tenir au courant. Amicalement . CadXP-Yusukens82-Copy-Cot-vers-Text-02.lsp 1 1 Éternel débutant... Mon site perso : Programmer dans AutoCAD
yusukens82 Posté(e) le 30 juillet Auteur Posté(e) le 30 juillet Ca marche encore mieux. Merci beaucoup Patrick. j'espère que tu profites quand même de tes vacances avec les petits
Luna Posté(e) le 30 juillet Posté(e) le 30 juillet il y a 2 minutes, yusukens82 a dit : Merci beaucoup Patrick. Attention, tu risques de te faire taper sur les doigts 😉 Bisous, Luna
didier Posté(e) le 30 juillet Posté(e) le 30 juillet Bonjour Merci à @Luna pour la détection d'erreur d'attribution. Je pense que ce sera corrigé, dans tous les cas, je ne m'offusque pas. Penser à remercier est déjà une bonne chose. ════════════════════════════════════════════════════════════ @yusukens82 Je comprends que ça fonctionne selon la demande, merci de vérifier tous les cas de figure, avec suffixe, avec préfixe, avec remplacement de texte avant, avec remplacement de texte après, sans rien du tout… J'ai testé, mais d'une machine à l'autre, on a quelquefois des surprises à cause de certaines variables. Amicalement 2 Éternel débutant... Mon site perso : Programmer dans AutoCAD
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