chris_mtp Posté(e) le 26 décembre 2008 Posté(e) le 26 décembre 2008 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
chris_mtp Posté(e) le 27 décembre 2008 Auteur Posté(e) le 27 décembre 2008 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éeJe 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
(gile) Posté(e) le 27 décembre 2008 Posté(e) le 27 décembre 2008 Salut, C'est un bon début. erreur: structure incorrecte de la liste en entréeest 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
chris_mtp Posté(e) le 27 décembre 2008 Auteur Posté(e) le 27 décembre 2008 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.
chris_mtp Posté(e) le 28 décembre 2008 Auteur Posté(e) le 28 décembre 2008 (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.
chris_mtp Posté(e) le 28 décembre 2008 Auteur Posté(e) le 28 décembre 2008 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.
chris_mtp Posté(e) le 28 décembre 2008 Auteur Posté(e) le 28 décembre 2008 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 à ptiLe second : continuer la polyligne à partir de pti de 63m vers la droite (j'ai mesuré la distance).
(gile) Posté(e) le 28 décembre 2008 Posté(e) le 28 décembre 2008 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
chris_mtp Posté(e) le 28 décembre 2008 Auteur Posté(e) le 28 décembre 2008 Merci Gile pour ces infos.Ca marche.
fabcad Posté(e) le 28 décembre 2008 Posté(e) le 28 décembre 2008 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+
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