Aller au contenu

modifier des valeurs affichées


Messages recommandés

Posté(e)

Bonjour à tous,

 

J'aimerais savoir s'il est possible de modifier des Z affichés dans un fichier de dessin, en enlevant une certaine valeur et ce pour tous ces Z. Par exemple, si j'enlève 0.26 à tous ces Z, pour un Z affiché "104.26" j'aimerais qu'il soit transformé en "104.00". J'aimerais éviter de les modifier un par un, existe t-il un moyen de faire cela ?

 

Merci d'avance pour vos réponses.

 

Posté(e)

Bonjour Didier,

 

En fait ce sont juste des textes, qui indiquent la valeur Z du point à côté. J'ai déplacé ces points en les sélectionnant et en les déplaçant avec "deplacer3d", puis en tapant "@0,0,0.26", et je dois maintenant corriger les textes.

 

Merci d'avance

Posté(e)

Super, mais ça peut attendre Didier, on est dimanche, tu as sûrement mieux à faire aujourd'hui, en tout cas un grand merci d'avance! Bon courage

 

@ +

 

Posté(e)

coucou

 

voilà, demandé c'est livré ...

 

ne te tracasse pas, je suis en train de faire du lisp

et tu m'as donné une bonne occase de récréation.

 

je t'ai fait çà :

 

c'est du vite fait dons il n'y a pas de contrôle d'entités

tu me dis si çà te convient et on développe.

 

(defun c:eric45()

(setq entpoint (car(entsel "\sélection du point...\n"))

enttexte (car(entsel "\sélection du texte...\n"))

valeurdep (getreal "\nValeur du déplacement en Z\nnégatif pour descendre\n")

point1 (cdr(assoc 10 (entget entpoint)))

)

 

(setq tempo1 (subst

(cons 10 (list (car point1)(cadr point1)(+ (caddr point1) valeurdep)))

(assoc 10 (entget entpoint))

(entget entpoint)

)

)

 

(entmod tempo1)

(entupd entpoint)

 

(setq tempo2 (subst

(cons 1 (rtos (caddr (cdr(assoc 10 (entget entpoint)))) 2 2))

(assoc 1 (entget enttexte))

(entget enttexte)

)

)

 

(entmod tempo2)

(entupd enttexte)

)

 

amicalement

 

 

Posté(e)

coucou Didier

 

J'ai essayé le lisp, mais cela ne marche pas, (ou j'ai dû faire une fausse manip?) J'ai enregistré ton listing sous un nom, j'ai chargé le programme, et taper "eric45" dans la ligne de commande. J'ai aussi essayé de faire un copier-coller du listing à l'invite de commandes, mais même résultat.. J'ai bien un petit carré au bout du curseur comme pour sélectionner un objet, aussi je sélectionne un des textes, je fais "entrée", mais rien...

 

Je dois sûrement mal m'y prendre, mais en tout cas merci de ton aide,

 

@ +

 

Eric

Posté(e)

Oups!

 

Bon et ben en fait c'était bien une fausse manip, j'ai basculé en mode "autocad classique" (j'étais en "dessin 2d et annotations"), et là tout marche nickel, mais je ne peux faire qu'un seul point à la fois, y a t-il un moyen de le faire en une seule fois? Pour info, le point et le texte sont sur le même calque, je ne peux sélectionner l'un ou l'autre qu'avec "sélection rapide".

 

Encore merci

 

Eric

Posté(e)

Hello

 

Voici une autre routine qui permet d'ajouter une valeur numerique reelle a un TEXT/MTEXT,

donc on peut aussi bien "ajouter que soustraire", il suffit de donner une valeur negative !

 

Attention elle ne traite que le debut numerique du contenu du texte !

 

Elle ne modifie pas les textes selectionnes mais elle ecrit de nouveaux textes !

 

Ce qui est legerement different de ta demande mais tres pratique

pour conserver les anciennes valeurs ! :)

 

Je ne sais plus qui a ecrit cette routine ... :casstet:

 

Le Decapode

 

 

;; Routine ADD_TXT.LSP
;; Creation de nouveaux textes depuis des textes NUMERIQUEs existants
;; et ajout/soustraction d'une valeur numerique = xx.xx / -yy.yy
;; soit sur un calque EXISTANT (Nouveau si necessaire)
;; soit sur le calque COURANT
;; Fonctionne en principe sur les TEXT & MTEXT de type numerique
;; Taper au clavier  ADD_TXT  - Version 1.2 = OK

(defun c:ADD_TXT (/ COEF N-VAL SEL X L LST-ENT)
(vl-load-com)
(setq sel nil)

(while (not sel)

(setq sel (ssget '((0 . "*TEXT")))))

(initget 1)
(setq coef (getreal "\n Valeur numerique a ajouter/soustraire : "))

(setq sauvelayer (getvar "Clayer"))
(setq L (getstring T "\n Nom du Calque EXISTANT pour creer les textes ou ENTREE pour calque COURANT : "))

   (if (equal L "") (setq L (getvar "Clayer")))
;; -- INUTILE -- Creation si necessaire du calque L
;;  (if (equal L "") (setq L (getvar "Clayer"))  (command "_-LAYER" "_M" L "") )

;; -- INUTILE -- because entake cree le calque si necessaire
;; (if (not (tblobjname "LAYER" L))
;; (vla-add (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) L)
;; )

(repeat (setq x (sslength sel))
(setq N-val (+ coef (atof (cdr (assoc 1 (entget (ssname sel (setq x (1- x))))))))
lst-ent (cdr (subst (cons 1 (rtos N-val))
(assoc 1 (entget (ssname sel x)))
(entget (ssname sel x))))
lst-ent (subst (cons 8 L)
(assoc 8 (entget (ssname sel x)))
lst-ent))
(entmake lst-ent)
)

;; -- INUTILE -- Retour sur le calque courant
;; (command "_-LAYER" "_M" sauvelayer "")

(princ)
)

 

 

 

[Edité le 23/11/2009 par lecrabe]

Autodesk Expert Elite Team

Posté(e)

coucou

 

bien sûr qu'on peut tout faire en une fois

amis il s'agit à chaque fois d'une routine "spécialisée"

 

car je n'ai pas moyen de savoir sit tu peux isoler

et donc traiter en même temps tous les textes

 

en imaginant que tous les textes d'un calque doivent être traités

il suffira de rajouter un filtre dans la sélection

 

mais j'ai fait point par point car je ne connais pas ton fichier

ni tes obligations

 

le lisp est interressant dans ce cas car il y aurait dix mille textes

que ce serait traité en quelques secondes...

 

je suis revenu au boulot mais si j'ai le temps je te corrige le code.

 

amicalement

 

[Edité le 23/11/2009 par didier]

Posté(e)

Coucou

 

voici donc, à partir de ma proposition initiale

un traitement de toutes les entités

 

à savoir : il te faut isoler pour faire deux captures, des points puis des textes

et désormais le texte ne sera plus à l'altitude du point lui correspondant

mais aura une nouvelle valeur qui sera l'originale plus ou moins la valeur de déplacement

 

ne sachant pas de quoi tu disposes comme fichier, fais-y attention.

 

(defun c:eric45()

(setq valeurdep (getreal "\nValeur du déplacement en Z\nnégatif pour descendre\n"))

(setq JeuPoints (ssget '((0 . "POINT")))

JeuTexte (ssget '((0 . "TEXT")))

n 0)

(repeat (sslength jeupoints)

(setq entpoint (ssname jeupoints n)

point1 (cdr(assoc 10 (entget entpoint)))

tempo1 (subst(cons 10 (list (car point1)(cadr point1)(+ (caddr point1) valeurdep)))(assoc 10 (entget entpoint))(entget entpoint)))

(entmod tempo1)

(entupd entpoint)

(setq n (1+ n))

)

 

(setq n 0)

(repeat (sslength JeuTexte)

(setq enttexte (ssname JeuTexte n)

valtexte2 (+ (atof(cdr(assoc 1 (entget enttexte))))valeurdep)

)

(setq tempo2(subst (cons 1 (rtos valtexte2 2 2))(assoc 1 (entget enttexte)) (entget enttexte)))

(entmod tempo2)

(entupd enttexte)

(setq n (1+ n))

)

)

 

amicalement

 

 

 

[Edité le 23/11/2009 par didier]

Posté(e)

Salut,

 

Désolé de répondre que maintenant, j'étais sur le terrain toute la journée, mais merci , je vais essayer de retour au bureau, et je ferais les essais sur une copie de ce fichier.

Petite question au passage, faut-il avoir des bases en programmation pour écrire du lisp? Existe t-il des cours, ou des livres (du style: le lisp pour les nuls)?

 

Merci encore,

 

Eric

Posté(e)

Petite question au passage, faut-il avoir des bases en programmation pour écrire du lisp?

Non, je dirais plutôt qu'à l'inverse, le LISP est un bon moyen d'aborder la programmation.

La syntaxe est simple et c'est un langage de très haut niveau.

Par contre, pour programmer un logiciel comme AutoCAD, il est impératif de (très) bien connaître le logiciel.

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

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é