Aller au contenu

Modifier valeurs de plusieurs textes


jeanmi66

Messages recommandés

Salut,

 

je me demande si la routine de Giles "INCREMENT" peut faire ce que je cherche à faire:

 

J'ai un semis de points. Je fai un déplacement de tout ces pts d'un delta z quelquonque. Mais les textes de ces points qui représentaient l'altitudes de ces derniers, restent à cette ancienne altitudes.

 

N'y a-t-il donc pas moyen d'incrémenter ces textes ? Ou alors, il faudrait pouvoir "ré-immatriculer" chaque point d'un texte représentant la nouvelle altitude, qu'on pourrait calibrer en style, justification et hauteur !? Je sais même pas si c'est possible aussi !?

 

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Les routines de "Incrément" ne fonctionnent qu'avec des nombres entiers.

J'imagine que tes altitudes sont des nombres réels.

 

Si les textes de ces points sont des attributs de bloc, c'est plus facile à programmer, sinon il faut que les textes soient toujours à la même position par rapport au point.

 

Fais une recherche, il me semble que moi et d'autres avons fait des trucs dans ce sens (transformer des texte + point en bloc).

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

Lien vers le commentaire
Partager sur d’autres sites

Non, rien ne correspond. Je crois que sur le principe, il est plus simple de supprimer les textes qui portent les anciennes altitudes et recréer des textes suivant l'altitude du pt 3D. Je pense qu'en fait, il faudrait réutiliser en partie le LISP que m'a proposé BONUSCAD pour mettre l'altitude d'un pt 3D au texte juste à côté, au départ, c'était pour donner l'altitude d'un tampon...

 

;;; Copie la coordonnée Z d'un point sur 1 entité texte existante

(defun C:XZ (/ pt text1 elst1)

(and ;_ la routine s'arrête si une des expressions suivante retourne nil

;; choisir un point
(setq pt (getpoint "\nSpécifiez un point: "))

;; sélectionner le texte "Z"
(setq text1 (car (entsel "\nSélectionnez le texte pour la coordonnée Z: ")))

;; liste des données dxf de l'objet sélectionné
(setq elst1 (entget text1))

;; vérifier qu'il s'agit bien d'un texte (ou mtexte)
(wcmatch (cdr (assoc 0 elst1)) "*TEXT")

;; modifier la valeur du texte
(entmod (subst (cons 1 (rtos (caddr pt)))
(assoc 1 elst1)
elst1
)
)


)
(princ)
)

(princ "COPY COORD Z chargé. Entrer XZ pour lancer la commande.")
(princ)

 

En fait il faudrait un peu le même principe : faire une sélection des pts puis créer un texte décalé à une certaine position du point, et lui attribuer l'altitude.

 

Vous en pensez quoi ? C'est complexe ?

Lien vers le commentaire
Partager sur d’autres sites

Si les textes sont à l'altitude des points et si, de plus ils sont sur un calque spécifique, ça ne devrait pas poser trop de problème.

Déplacer les textes en même temps que les points, puis faire une sélection de tous les textes et en changer la valeur avec le Z de leurs points d'insertion.

 

Remplace "XXX" par le nom du calque

 

(defun c:test (/ n ss txt elst)
 ;; on sélectionne tous les textes de l'espace objet sur le calque "XXX"
 (setq n 0)
 (if
   (setq ss (ssget "_X" '((0 . "TEXT") (8 . "XXX") (410 . "Model"))))

    ;; on boucle sur tous les éléments du jeu de sélection
    (while (setq ent (ssname ss n))
      (setq elst (entget ent)		; liste dxf du texte
     n	  (1+ n)
      )
      (entmod (subst (cons 1 (rtos (cadddr (assoc 10 elst))))
	      (assoc 1 elst)
	      elst
       )
      )
    )
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Je me rends compte d'un truc aujourd'hui : j'utilise les menus BONUSCAD pour insérer mes semis de pts, et les textes sont à une élévation de 0. Est-il possible de modifier un lisp du groupe BONUSCAD (lequel ???) afin que les textes des altitudes s'insèrents à l'altitudes qu'ils représentents ? (Dans le but d'utiliser une routine que Giles m'a proposé)

 

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Si tu utilises bien la version en téléchargement sur cette page, il faut rechercher les expressions :

(entmake (list '(0 . "TEXT") ...))

il y en a deux, il faut remplacer dans les deux :

(list '10 (car pt) (cadr pt) '0.0) par (cons 10 pt)

et dans la seconde :

(list '11 (car pt) (cadr pt) '0.0) par (cons 11 pt)

Ça devrait fonctionner (pas testé).

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

Lien vers le commentaire
Partager sur d’autres sites

Non, doit y avoir un truc, le LISP ne se lance pas...

 

Commande: (if (not c:topo) (load "topo")) ; erreur: erreur de syntaxe
Commande: topo Commande inconnue "TOPO".  Appuyez sur F1 pour obtenir de l'aide.

 

j'espère avoir bien compris : il faut remplacer, par exemple pour la première expresion:

(list '10 (car pt) (cadr pt) '0.0)

la totalité par

(cons 10 pt)

et idem pour la seconde !?

 

Si c'est ça, alors ça fonctionne pas. :casstet:

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Je ne pense vraiment pas que l'erreur "; erreur: erreur de syntaxe" puisse venir du fait que tu aies seulement remplacé les expressions :

(list '10 (car pt) (cadr pt) '0.0) 

par

(cons 10 pt) 

 

Essaye à la ligne de commande :

(setq pt '(470.31 271.07 0.0))

Ce qui revient à attribuer à la variable pt un point d'altitude 0.0

 

puis essaye

(list '10 (car pt) (cadr pt) '0.0)

et

(cons 10 pt)

Tu auras le même résultat.

 

Mais si tu fais la même chose avec un point à une altitude 23.52 par exemple :

(setq pt '(470.31 271.07 23.52)) 

Les résultats ne différeront que par la prise en compte ou non de l'altitude :

(list '10 (car pt) (cadr pt) '0.0)

retourne (10 470.31 271.07 [surligneur]0.0[/surligneur])

Alors que

(cons 10 pt)

retourne (10 470.31 271.07 [surligneur]23.52[/surligneur])

 

La syntaxe est bien la même, mais le texte sera inséré à l'altitude de pt.

Refais les trois changements en prenant bien soin de ne rien modifier d'autre dans le code.

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

Lien vers le commentaire
Partager sur d’autres sites

Ha oui, 3 changements : il y a deux fois (cons 10 pt) et une fois (cons 11 pt).

 

Mais c'est bien celà qui créé le non-lancement de TOPO. Je n'ai touché à rien d'autre ! :exclam:

 

Et quand je charge le LISP:

 

Commande: (LOAD "C:/Program Files/AutoCAD 2004/BonusCAD_2002/topo.lsp") ; 
erreur: structure incorrecte de la liste en entrée

[Edité le 24/11/2008 par jeanmi66]

 

Il y a tjs une erreur quelquepart ! :casstet:

 

[Edité le 24/11/2008 par jeanmi66]

Lien vers le commentaire
Partager sur d’autres sites

Ha oui, 3 changements : il y a deux fois (cons 10 pt) et une fois (cons 11 pt).

 

Bonjour,

 

(gile) t'a bien conseillé, les modifications à faire sont exactes.

Si tu n'y arrives pas, recommence à partir du fichier original.

 

En fait il y a 3 changement si tu veux aussi que le numéro du point (s'il existe), qui est à gauche du point (code DXF10 et 11) soit écrit aussi à la même altitude que l'écriture du Z.

 

NB: J'ai essayé les changements et cela fonctionne, donc parenthèses mal appariées dans tes changements. Il faut bien faire attention aux parenthèses ;) c'est le B.A.BA du lisp

 

Tu vas y arriver en réessayant. :P

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é