Aller au contenu

Copier valeur cotation


yusukens82

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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"

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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

  • Like 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

  • Like 1
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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

  • Like 2
Lien vers le commentaire
Partager sur d’autres sites

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é