Aller au contenu

Hauteur objets


Messages recommandés

Posté(e)

Bonjour à tous et à toutes.

Joyeux Noël.

 

Je suis confronté de plusieurs fois à répéter la même manip plusieurs fois selon le nombre d'arbres ou de poteau que je compte dans mon dessin.

En efft, je dois écrire pour chaque arbre la hauteur de celui ci avec comme principe de mesurer la distance en sélectionnant le bloc point topo du bas de l'arbre et puis du haut et enfin avec un style de police Standard de taille 1, écrire la hauteur correspondante.

 

Quelqu'un aurait il une idée pour juste en sélectionnant les deux blocs points de l'arbre écrire la hauteur sous le forme "Hauteur arbre =xx.xxm env." avec xx.xx correspondant à la dénivelée entre les z insertions des deux blocs points topo ?

 

Merci par avance de votre aide et encore Joyeuses Fêtes.

John

Posté(e)

J'ai essayé de programmer mon premier lisp mais rien compris.

 

Pourquoi ai je l'erreur suivante erreur: structure incorrecte de la liste en entrée

Je n'ai pourtant que 3 varirables dans mon lisp

 

 (defun c:HARBRE ( / ptb pth dz)

(setvar "CLAYER" "TEXTE")
(setvar "LUPREC" 2)
(initget 8)
(setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: "))
(if (null ptb) (setq ptb (getvar "lastpoint")))
(cond
(ptb
(initget 41)
(setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: "))
(setq dz (caddr pth) - (caddr ptb))

(princ (strcat "\nHauteur arbre = : " (dz)))
(prin1)
)

 

Autre chose : Etant débutant en lisp, pour l'instant j'essaye d'afficher la différence de hauteur.

Pour l'insertion du texte, je ne trouve pas la commande.

 

Merci d'avance de votre aide.

John

Posté(e)

Salut,

 

C'est un bon début.

 

erreur: structure incorrecte de la liste en entrée

est un message d'erreur qui signale un mauvais appariement des parenthèses.

L'erreur vient de l'expression (cond ...) il manque 2 parenthèses fermantes.

Il est d'ailleurs inutile de tester la variable ptb, puisque tu lui attribue une valeur, juste au dessus.

 

D'autre part,

(setq dz (caddr pth) - (caddr ptb)) est équivalent à :

(setq dz (caddr pth))

(setq - (caddr ptb))

ce qui, en plus de ne pas retourner le résultat escompté, redéfinit la fonction -

En LISP la notation est dite "préfixée", c-a-d qu'une expression (appel de fonction) commence toujours par une fonction :

(setq dz (- (caddr pth) (caddr ptb))

 

Dernière chose, dz est une variable dont la valeur est un nombre réel, donc l'expression :

(princ (strcat "\nHauteur arbre = : " (dz))) retournera le message :

"erreur: fonction incorrecte"

Il faut convertir dz en une chaîne de caratères avec la fonction rtos qui permet aussi de fixer le nombre de décimales (donc inutile de changer la valeur de LUPREC).

 

Pour insérer un texte, tu peux utiliser la fonction command, en spécifiant les options ou en validant celles par défaut avec "" qui correspond à Entrer ou en utilisant pause qui laisse la main à l'utilisateur.

 

(defun c:HARBRE	(/ ptb pth dz txt)
 (setvar "CLAYER" "TEXTE")
 (initget 8)
 (setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: "))
 (if (null ptb)
   (setq ptb (getvar "lastpoint"))
 )
 (initget 41)
 (setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: "))
 (setq dz (- (caddr pth) (caddr ptb)))
 (setq txt (strcat "\nHauteur arbre = " (rtos dz 2 2)))
 (command "_text" pause "" "" txt)
 (prin1)
) 

 

PS : je te recommande fortement l'utilisation de l'éditeur Visual LISP ainsi que la lecture de ce sujet.

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

Posté(e)

C'est bon je commence à comprendre un petit peu mieux le lisp mais j'ai deux questions.

 

1-Comment faire pour insérer une série de texte aligner les uns en bas des autres sous forme de colonne ?

2-Comment tracer une polyligne entre deux points prédéfini ?

J'ai essayé d'insérer un espace, ca marche pas.

J'ai essayé de définir le point d'insertion du texte mais je ne connais pas l'ordre d'entrer des paramètres de la commande _text

 

 (defun c:HARBRE (/ ptb pth pti dz dz1 txt txt1)
(setvar "CLAYER" "TEXTE")
(setvar "TEXTSIZE" 5)
(setvar "TEXTSTYLE" "Standard")
(setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: "))
(if (null ptb)
(setq ptb (getvar "lastpoint"))
)
(setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: "))
(setq pti (getpoint ptb "\nSpécifiez le point d'insertion du texte: "))
(setq dz (- (caddr pth) (caddr ptb)))
(setq dz1 ((caddr ptb)))
(setq txt (strcat "\nHarbre = " (rtos dz 2 2)"m"))
(setq txt1 (strcat "\nZarbre = " (rtos dz1 2 2)"m"))
(command "_text" txt,txt1,pti)
(prin1)
) 

 

Merci par avance.

 

Posté(e)

 (command "_leader" ptb pti "" "" "txt")

 

De même avec la commande leader ca na marche pas;

L'aide Edituer de Lisp est bien mais elle comprend aussi la programmation VBA du coup c'est difficile pour trouver un exemple de code en lisp.

 

Ce je voudrais en fait c'est insérer une polyligne sous mon texte qui démarre de mon arbre et pouvoir ajouter du texte audessus comme le Zsol de l'arbre par exemple.

 

Merci par avance.

Posté(e)

J'ai trouvé pour les variables d'netré de la fonction.

Mon texte s'insére bien sur le point d'insertion souhaité mais maintenant j'ai le problème de trouver le bon justifier.

 

Puis d'autre part, trouver le moyen de placer le second texte décaler par rapport à l'ordre.

Le texte txt avec pour point d'insertion pti et le second avec pti+6 dans le sens des y.

 

Posté(e)

J'ai oublié de joindre le code

 

 (defun c:HARBRE (/ ptb pth pti dz txt txta)
(setvar "CLAYER" "TEXTE")
(setvar "TEXTSIZE" 5)
(setvar "TEXTSTYLE" "Standard")
(setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: "))
(if (null ptb)
(setq ptb (getvar "lastpoint"))
)
(setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: "))
(setq pti (getpoint ptb "\nSpécifiez le point d'insertion du texte: "))
(setq dz (- (caddr pth) (caddr ptb)))
(setq txt (strcat "\nHarbre = " (rtos dz 2 2)"m env."))
(setq txta (strcat "\nZarbre = " (rtos (caddr ptb) 2 2)"m env."))
(command "_text"  pti "5" "100" txt)
(command "_text"   [surligneur] (+ car pti 5)[/surligneur] "5" "100" txta)
[surligneur] (command "_pline" ptb pti 0,0 nil)[/surligneur]
(prin1)
)

 

En surligné les lignes qui me posent problème.

Le premier :pouvoir décaler le texte en haut en spécifiant les coordonnées du point d'insertion du texte txta de +6 en y par rapport à pti

Le second : continuer la polyligne à partir de pti de 63m vers la droite (j'ai mesuré la distance).

Posté(e)

Salut

 

1) en LISP un point est une liste de 3 nombres réels (x y z).

Si tu veux ajouter une valeur à la coordonnée Y, il faut refaire la liste :

 

(list (car pti) (+ (cadr pti) 5) (caddr pti))

 

2) (command "_pline" ptb pti 0,0 nil)

 

plusieurs choses :

- ptb (qui est un point topo si j'ai bien compris) déterminera l'altitude à laquelle sera créée la polyligne.

 

- 0,0 est considéré comme un symbole (en noir dans l'éditeur Visual LISP). La fonction command accepte les arguments point sous forme de chaîne "0,0" ou de liste '(0 0)

 

- nil (liste vide) est un argument non valide pour la fonction command. Comme dit plus haut, Entrer s'exprime avec une chaîne vide : "".

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

Posté(e)

Pour ce genre de manipulation il faudrait que AutoCAD MAP soit inclus dans AutoCAD. Car l'écriture ou l'hachurage automatique suivant des propriétés sont inclus dan MAP...

Et ce pour le même prix qu'une version AutoCAD.

 

A+

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é